123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- #include "fb2xml.h"
- #include <QtDebug>
- //---------------------------------------------------------------------------
- // FbXmlHandler::NodeHandler
- //---------------------------------------------------------------------------
- QString FbXmlHandler::NodeHandler::Value(const QXmlAttributes &attributes, const QString &name)
- {
- int count = attributes.count();
- for (int i = 0; i < count; i++ ) {
- if (attributes.localName(i).compare(name, Qt::CaseInsensitive) == 0) {
- return attributes.value(i);
- }
- }
- return QString();
- }
- bool FbXmlHandler::NodeHandler::doStart(const QString &name, const QXmlAttributes &attributes)
- {
- if (m_handler) return m_handler->doStart(name, attributes);
- m_handler = NewTag(name, attributes);
- if (m_handler) {
- if (m_handler->m_closed) {
- delete m_handler;
- m_handler = NULL;
- }
- return true;
- }
- m_handler = new NodeHandler(name);
- return true;
- }
- bool FbXmlHandler::NodeHandler::doText(const QString &text)
- {
- if (m_handler) m_handler->doText(text); else TxtTag(text);
- return true;
- }
- bool FbXmlHandler::NodeHandler::doEnd(const QString &name, bool & exists)
- {
- if (m_handler) {
- bool found = exists || name == m_name;
- m_handler->doEnd(name, found);
- if (m_handler->m_closed) { delete m_handler; m_handler = NULL; }
- if (found) { exists = true; return true; }
- }
- bool found = name == m_name;
- m_closed = found || exists;
- if (m_closed) EndTag(m_name);
- exists = found;
- return true;
- }
- //---------------------------------------------------------------------------
- // FbXmlHandler
- //---------------------------------------------------------------------------
- FbXmlHandler::FbXmlHandler()
- : QXmlDefaultHandler()
- , m_handler(0)
- {
- }
- FbXmlHandler::~FbXmlHandler()
- {
- if (m_handler) delete m_handler;
- }
- bool FbXmlHandler::startElement(const QString & namespaceURI, const QString & localName, const QString &qName, const QXmlAttributes &attributes)
- {
- Q_UNUSED(namespaceURI);
- Q_UNUSED(localName);
- const QString name = qName.toLower();
- if (m_handler) return m_handler->doStart(name, attributes);
- m_handler = CreateRoot(name, attributes);
- return m_handler;
- }
- bool FbXmlHandler::isWhiteSpace(const QString &str)
- {
- return str.simplified().isEmpty();
- }
- bool FbXmlHandler::characters(const QString &str)
- {
- QString s = str.simplified();
- if (s.isEmpty()) return true;
- if (isWhiteSpace(str.left(1))) s.prepend(" ");
- if (isWhiteSpace(str.right(1))) s.append(" ");
- return m_handler && m_handler->doText(s);
- }
- bool FbXmlHandler::endElement(const QString & namespaceURI, const QString & localName, const QString &qName)
- {
- Q_UNUSED(namespaceURI);
- Q_UNUSED(localName);
- bool found = false;
- return m_handler && m_handler->doEnd(qName.toLower(), found);
- }
- bool FbXmlHandler::error(const QXmlParseException& exception)
- {
- qCritical() << QObject::tr("Parse error at line %1, column %2: %3")
- .arg(exception.lineNumber())
- .arg(exception.columnNumber())
- .arg(exception.message().simplified());
- return false;
- }
- bool FbXmlHandler::warning(const QXmlParseException& exception)
- {
- qWarning() << QObject::tr("Parse error at line %1, column %2: %3")
- .arg(exception.lineNumber())
- .arg(exception.columnNumber())
- .arg(exception.message().simplified());
- return false;
- }
- bool FbXmlHandler::fatalError(const QXmlParseException &exception)
- {
- qCritical() << QObject::tr("Parse error at line %1, column %2: %3")
- .arg(exception.lineNumber())
- .arg(exception.columnNumber())
- .arg(exception.message().simplified());
- return false;
- }
- QString FbXmlHandler::errorString() const
- {
- return m_error;
- }
|