diff options
Diffstat (limited to 'src/xml/sax/qxml.h')
-rw-r--r-- | src/xml/sax/qxml.h | 425 |
1 files changed, 425 insertions, 0 deletions
diff --git a/src/xml/sax/qxml.h b/src/xml/sax/qxml.h new file mode 100644 index 0000000..e0165d3 --- /dev/null +++ b/src/xml/sax/qxml.h @@ -0,0 +1,425 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXml module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QXML_H +#define QXML_H + +#include <QtCore/qtextstream.h> +#include <QtCore/qfile.h> +#include <QtCore/qstring.h> +#include <QtCore/qstringlist.h> +#include <QtCore/qlist.h> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Xml) + +class QXmlNamespaceSupport; +class QXmlAttributes; +class QXmlContentHandler; +class QXmlDefaultHandler; +class QXmlDTDHandler; +class QXmlEntityResolver; +class QXmlErrorHandler; +class QXmlLexicalHandler; +class QXmlDeclHandler; +class QXmlInputSource; +class QXmlLocator; +class QXmlNamespaceSupport; +class QXmlParseException; + +class QXmlReader; +class QXmlSimpleReader; + +class QXmlSimpleReaderPrivate; +class QXmlNamespaceSupportPrivate; +class QXmlAttributesPrivate; +class QXmlInputSourcePrivate; +class QXmlParseExceptionPrivate; +class QXmlLocatorPrivate; +class QXmlDefaultHandlerPrivate; + + +// +// SAX Namespace Support +// + +class Q_XML_EXPORT QXmlNamespaceSupport +{ +public: + QXmlNamespaceSupport(); + ~QXmlNamespaceSupport(); + + void setPrefix(const QString&, const QString&); + + QString prefix(const QString&) const; + QString uri(const QString&) const; + void splitName(const QString&, QString&, QString&) const; + void processName(const QString&, bool, QString&, QString&) const; + QStringList prefixes() const; + QStringList prefixes(const QString&) const; + + void pushContext(); + void popContext(); + void reset(); + +private: + QXmlNamespaceSupportPrivate *d; + + friend class QXmlSimpleReaderPrivate; + Q_DISABLE_COPY(QXmlNamespaceSupport) +}; + + +// +// SAX Attributes +// + +class Q_XML_EXPORT QXmlAttributes +{ +public: + QXmlAttributes() {} + virtual ~QXmlAttributes() {} + + int index(const QString& qName) const; + int index(const QLatin1String& qName) const; + int index(const QString& uri, const QString& localPart) const; + int length() const; + int count() const; + QString localName(int index) const; + QString qName(int index) const; + QString uri(int index) const; + QString type(int index) const; + QString type(const QString& qName) const; + QString type(const QString& uri, const QString& localName) const; + QString value(int index) const; + QString value(const QString& qName) const; + QString value(const QLatin1String& qName) const; + QString value(const QString& uri, const QString& localName) const; + + void clear(); + void append(const QString &qName, const QString &uri, const QString &localPart, const QString &value); + +private: + struct Attribute { + QString qname, uri, localname, value; + }; + typedef QList<Attribute> AttributeList; + AttributeList attList; + + QXmlAttributesPrivate *d; +}; + +// +// SAX Input Source +// + +class Q_XML_EXPORT QXmlInputSource +{ +public: + QXmlInputSource(); + QXmlInputSource(QIODevice *dev); + virtual ~QXmlInputSource(); + + virtual void setData(const QString& dat); + virtual void setData(const QByteArray& dat); + virtual void fetchData(); + virtual QString data() const; + virtual QChar next(); + virtual void reset(); + + static const ushort EndOfData; + static const ushort EndOfDocument; + +#ifdef QT3_SUPPORT + QT3_SUPPORT_CONSTRUCTOR QXmlInputSource(QFile& file); + QT3_SUPPORT_CONSTRUCTOR QXmlInputSource(QTextStream& stream); +#endif + +protected: + virtual QString fromRawData(const QByteArray &data, bool beginning = false); + +private: + void init(); + QXmlInputSourcePrivate *d; +}; + +// +// SAX Exception Classes +// + +class Q_XML_EXPORT QXmlParseException +{ +public: + explicit QXmlParseException(const QString &name = QString(), int c = -1, int l = -1, + const QString &p = QString(), const QString &s = QString()); + ~QXmlParseException(); + + int columnNumber() const; + int lineNumber() const; + QString publicId() const; + QString systemId() const; + QString message() const; + +private: + QXmlParseExceptionPrivate *d; +}; + + +// +// XML Reader +// + +class Q_XML_EXPORT QXmlReader +{ +public: + virtual ~QXmlReader() {} + virtual bool feature(const QString& name, bool *ok = 0) const = 0; + virtual void setFeature(const QString& name, bool value) = 0; + virtual bool hasFeature(const QString& name) const = 0; + virtual void* property(const QString& name, bool *ok = 0) const = 0; + virtual void setProperty(const QString& name, void* value) = 0; + virtual bool hasProperty(const QString& name) const = 0; + virtual void setEntityResolver(QXmlEntityResolver* handler) = 0; + virtual QXmlEntityResolver* entityResolver() const = 0; + virtual void setDTDHandler(QXmlDTDHandler* handler) = 0; + virtual QXmlDTDHandler* DTDHandler() const = 0; + virtual void setContentHandler(QXmlContentHandler* handler) = 0; + virtual QXmlContentHandler* contentHandler() const = 0; + virtual void setErrorHandler(QXmlErrorHandler* handler) = 0; + virtual QXmlErrorHandler* errorHandler() const = 0; + virtual void setLexicalHandler(QXmlLexicalHandler* handler) = 0; + virtual QXmlLexicalHandler* lexicalHandler() const = 0; + virtual void setDeclHandler(QXmlDeclHandler* handler) = 0; + virtual QXmlDeclHandler* declHandler() const = 0; + virtual bool parse(const QXmlInputSource& input) = 0; + virtual bool parse(const QXmlInputSource* input) = 0; +}; + +class Q_XML_EXPORT QXmlSimpleReader : public QXmlReader +{ +public: + QXmlSimpleReader(); + virtual ~QXmlSimpleReader(); + + bool feature(const QString& name, bool *ok = 0) const; + void setFeature(const QString& name, bool value); + bool hasFeature(const QString& name) const; + + void* property(const QString& name, bool *ok = 0) const; + void setProperty(const QString& name, void* value); + bool hasProperty(const QString& name) const; + + void setEntityResolver(QXmlEntityResolver* handler); + QXmlEntityResolver* entityResolver() const; + void setDTDHandler(QXmlDTDHandler* handler); + QXmlDTDHandler* DTDHandler() const; + void setContentHandler(QXmlContentHandler* handler); + QXmlContentHandler* contentHandler() const; + void setErrorHandler(QXmlErrorHandler* handler); + QXmlErrorHandler* errorHandler() const; + void setLexicalHandler(QXmlLexicalHandler* handler); + QXmlLexicalHandler* lexicalHandler() const; + void setDeclHandler(QXmlDeclHandler* handler); + QXmlDeclHandler* declHandler() const; + + bool parse(const QXmlInputSource& input); + bool parse(const QXmlInputSource* input); + virtual bool parse(const QXmlInputSource* input, bool incremental); + virtual bool parseContinue(); + +private: + Q_DISABLE_COPY(QXmlSimpleReader) + Q_DECLARE_PRIVATE(QXmlSimpleReader) + QXmlSimpleReaderPrivate* d_ptr; + + friend class QXmlSimpleReaderLocator; +}; + +// +// SAX Locator +// + +class Q_XML_EXPORT QXmlLocator +{ +public: + QXmlLocator(); + virtual ~QXmlLocator(); + + virtual int columnNumber() const = 0; + virtual int lineNumber() const = 0; +// QString getPublicId() const +// QString getSystemId() const +}; + +// +// SAX handler classes +// + +class Q_XML_EXPORT QXmlContentHandler +{ +public: + virtual ~QXmlContentHandler() {} + virtual void setDocumentLocator(QXmlLocator* locator) = 0; + virtual bool startDocument() = 0; + virtual bool endDocument() = 0; + virtual bool startPrefixMapping(const QString& prefix, const QString& uri) = 0; + virtual bool endPrefixMapping(const QString& prefix) = 0; + virtual bool startElement(const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts) = 0; + virtual bool endElement(const QString& namespaceURI, const QString& localName, const QString& qName) = 0; + virtual bool characters(const QString& ch) = 0; + virtual bool ignorableWhitespace(const QString& ch) = 0; + virtual bool processingInstruction(const QString& target, const QString& data) = 0; + virtual bool skippedEntity(const QString& name) = 0; + virtual QString errorString() const = 0; +}; + +class Q_XML_EXPORT QXmlErrorHandler +{ +public: + virtual ~QXmlErrorHandler() {} + virtual bool warning(const QXmlParseException& exception) = 0; + virtual bool error(const QXmlParseException& exception) = 0; + virtual bool fatalError(const QXmlParseException& exception) = 0; + virtual QString errorString() const = 0; +}; + +class Q_XML_EXPORT QXmlDTDHandler +{ +public: + virtual ~QXmlDTDHandler() {} + virtual bool notationDecl(const QString& name, const QString& publicId, const QString& systemId) = 0; + virtual bool unparsedEntityDecl(const QString& name, const QString& publicId, const QString& systemId, const QString& notationName) = 0; + virtual QString errorString() const = 0; +}; + +class Q_XML_EXPORT QXmlEntityResolver +{ +public: + virtual ~QXmlEntityResolver() {} + virtual bool resolveEntity(const QString& publicId, const QString& systemId, QXmlInputSource*& ret) = 0; + virtual QString errorString() const = 0; +}; + +class Q_XML_EXPORT QXmlLexicalHandler +{ +public: + virtual ~QXmlLexicalHandler() {} + virtual bool startDTD(const QString& name, const QString& publicId, const QString& systemId) = 0; + virtual bool endDTD() = 0; + virtual bool startEntity(const QString& name) = 0; + virtual bool endEntity(const QString& name) = 0; + virtual bool startCDATA() = 0; + virtual bool endCDATA() = 0; + virtual bool comment(const QString& ch) = 0; + virtual QString errorString() const = 0; +}; + +class Q_XML_EXPORT QXmlDeclHandler +{ +public: + virtual ~QXmlDeclHandler() {} + virtual bool attributeDecl(const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value) = 0; + virtual bool internalEntityDecl(const QString& name, const QString& value) = 0; + virtual bool externalEntityDecl(const QString& name, const QString& publicId, const QString& systemId) = 0; + virtual QString errorString() const = 0; + // ### Qt 5: Conform to SAX by adding elementDecl +}; + + +class Q_XML_EXPORT QXmlDefaultHandler : public QXmlContentHandler, public QXmlErrorHandler, public QXmlDTDHandler, public QXmlEntityResolver, public QXmlLexicalHandler, public QXmlDeclHandler +{ +public: + QXmlDefaultHandler() { } + virtual ~QXmlDefaultHandler() { } + + void setDocumentLocator(QXmlLocator* locator); + bool startDocument(); + bool endDocument(); + bool startPrefixMapping(const QString& prefix, const QString& uri); + bool endPrefixMapping(const QString& prefix); + bool startElement(const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts); + bool endElement(const QString& namespaceURI, const QString& localName, const QString& qName); + bool characters(const QString& ch); + bool ignorableWhitespace(const QString& ch); + bool processingInstruction(const QString& target, const QString& data); + bool skippedEntity(const QString& name); + + bool warning(const QXmlParseException& exception); + bool error(const QXmlParseException& exception); + bool fatalError(const QXmlParseException& exception); + + bool notationDecl(const QString& name, const QString& publicId, const QString& systemId); + bool unparsedEntityDecl(const QString& name, const QString& publicId, const QString& systemId, const QString& notationName); + + bool resolveEntity(const QString& publicId, const QString& systemId, QXmlInputSource*& ret); + + bool startDTD(const QString& name, const QString& publicId, const QString& systemId); + bool endDTD(); + bool startEntity(const QString& name); + bool endEntity(const QString& name); + bool startCDATA(); + bool endCDATA(); + bool comment(const QString& ch); + + bool attributeDecl(const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value); + bool internalEntityDecl(const QString& name, const QString& value); + bool externalEntityDecl(const QString& name, const QString& publicId, const QString& systemId); + + QString errorString() const; + +private: + QXmlDefaultHandlerPrivate *d; + Q_DISABLE_COPY(QXmlDefaultHandler) +}; + +// inlines + +inline int QXmlAttributes::count() const +{ return length(); } + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QXML_H |