123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417 |
- /****************************************************************************
- **
- ** Copyright (C) 2016 The Qt Company Ltd.
- ** Contact: https://www.qt.io/licensing/
- **
- ** This file is part of the QtXml module of the Qt Toolkit.
- **
- ** $QT_BEGIN_LICENSE:LGPL$
- ** Commercial License Usage
- ** Licensees holding valid commercial Qt licenses may use this file in
- ** accordance with the commercial license agreement provided with the
- ** Software or, alternatively, in accordance with the terms contained in
- ** a written agreement between you and The Qt Company. For licensing terms
- ** and conditions see https://www.qt.io/terms-conditions. For further
- ** information use the contact form at https://www.qt.io/contact-us.
- **
- ** GNU Lesser General Public License Usage
- ** Alternatively, this file may be used under the terms of the GNU Lesser
- ** General Public License version 3 as published by the Free Software
- ** Foundation and appearing in the file LICENSE.LGPL3 included in the
- ** packaging of this file. Please review the following information to
- ** ensure the GNU Lesser General Public License version 3 requirements
- ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
- **
- ** GNU General Public License Usage
- ** Alternatively, this file may be used under the terms of the GNU
- ** General Public License version 2.0 or (at your option) the GNU General
- ** Public license version 3 or any later version approved by the KDE Free
- ** Qt Foundation. The licenses are as published by the Free Software
- ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
- ** included in the packaging of this file. Please review the following
- ** information to ensure the GNU General Public License requirements will
- ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
- ** https://www.gnu.org/licenses/gpl-3.0.html.
- **
- ** $QT_END_LICENSE$
- **
- ****************************************************************************/
- #ifndef QXML_H
- #define QXML_H
- #include <QtXml/qtxmlglobal.h>
- #include <QtCore/qtextstream.h>
- #include <QtCore/qfile.h>
- #include <QtCore/qstring.h>
- #include <QtCore/qstringlist.h>
- #include <QtCore/qlist.h>
- #include <QtCore/qscopedpointer.h>
- QT_BEGIN_NAMESPACE
- 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(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(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();
- explicit 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;
- 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(const QXmlParseException &other);
- ~QXmlParseException();
- int columnNumber() const;
- int lineNumber() const;
- QString publicId() const;
- QString systemId() const;
- QString message() const;
- private:
- QScopedPointer<QXmlParseExceptionPrivate> d;
- };
- //
- // XML Reader
- //
- class Q_XML_EXPORT QXmlReader
- {
- public:
- virtual ~QXmlReader() {}
- virtual bool feature(const QString& name, bool *ok = Q_NULLPTR) 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 = Q_NULLPTR) 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 = Q_NULLPTR) const Q_DECL_OVERRIDE;
- void setFeature(const QString& name, bool value) Q_DECL_OVERRIDE;
- bool hasFeature(const QString& name) const Q_DECL_OVERRIDE;
- void* property(const QString& name, bool *ok = Q_NULLPTR) const Q_DECL_OVERRIDE;
- void setProperty(const QString& name, void* value) Q_DECL_OVERRIDE;
- bool hasProperty(const QString& name) const Q_DECL_OVERRIDE;
- void setEntityResolver(QXmlEntityResolver* handler) Q_DECL_OVERRIDE;
- QXmlEntityResolver* entityResolver() const Q_DECL_OVERRIDE;
- void setDTDHandler(QXmlDTDHandler* handler) Q_DECL_OVERRIDE;
- QXmlDTDHandler* DTDHandler() const Q_DECL_OVERRIDE;
- void setContentHandler(QXmlContentHandler* handler) Q_DECL_OVERRIDE;
- QXmlContentHandler* contentHandler() const Q_DECL_OVERRIDE;
- void setErrorHandler(QXmlErrorHandler* handler) Q_DECL_OVERRIDE;
- QXmlErrorHandler* errorHandler() const Q_DECL_OVERRIDE;
- void setLexicalHandler(QXmlLexicalHandler* handler) Q_DECL_OVERRIDE;
- QXmlLexicalHandler* lexicalHandler() const Q_DECL_OVERRIDE;
- void setDeclHandler(QXmlDeclHandler* handler) Q_DECL_OVERRIDE;
- QXmlDeclHandler* declHandler() const Q_DECL_OVERRIDE;
- bool parse(const QXmlInputSource& input) Q_DECL_OVERRIDE;
- bool parse(const QXmlInputSource* input) Q_DECL_OVERRIDE;
- virtual bool parse(const QXmlInputSource* input, bool incremental);
- virtual bool parseContinue();
- private:
- Q_DISABLE_COPY(QXmlSimpleReader)
- Q_DECLARE_PRIVATE(QXmlSimpleReader)
- QScopedPointer<QXmlSimpleReaderPrivate> d_ptr;
- friend class QXmlSimpleReaderLocator;
- friend class QDomHandler;
- };
- //
- // 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;
- // ### 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) Q_DECL_OVERRIDE;
- bool startDocument() Q_DECL_OVERRIDE;
- bool endDocument() Q_DECL_OVERRIDE;
- bool startPrefixMapping(const QString& prefix, const QString& uri) Q_DECL_OVERRIDE;
- bool endPrefixMapping(const QString& prefix) Q_DECL_OVERRIDE;
- bool startElement(const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts) Q_DECL_OVERRIDE;
- bool endElement(const QString& namespaceURI, const QString& localName, const QString& qName) Q_DECL_OVERRIDE;
- bool characters(const QString& ch) Q_DECL_OVERRIDE;
- bool ignorableWhitespace(const QString& ch) Q_DECL_OVERRIDE;
- bool processingInstruction(const QString& target, const QString& data) Q_DECL_OVERRIDE;
- bool skippedEntity(const QString& name) Q_DECL_OVERRIDE;
- bool warning(const QXmlParseException& exception) Q_DECL_OVERRIDE;
- bool error(const QXmlParseException& exception) Q_DECL_OVERRIDE;
- bool fatalError(const QXmlParseException& exception) Q_DECL_OVERRIDE;
- bool notationDecl(const QString& name, const QString& publicId, const QString& systemId) Q_DECL_OVERRIDE;
- bool unparsedEntityDecl(const QString& name, const QString& publicId, const QString& systemId, const QString& notationName) Q_DECL_OVERRIDE;
- bool resolveEntity(const QString& publicId, const QString& systemId, QXmlInputSource*& ret) Q_DECL_OVERRIDE;
- bool startDTD(const QString& name, const QString& publicId, const QString& systemId) Q_DECL_OVERRIDE;
- bool endDTD() Q_DECL_OVERRIDE;
- bool startEntity(const QString& name) Q_DECL_OVERRIDE;
- bool endEntity(const QString& name) Q_DECL_OVERRIDE;
- bool startCDATA() Q_DECL_OVERRIDE;
- bool endCDATA() Q_DECL_OVERRIDE;
- bool comment(const QString& ch) Q_DECL_OVERRIDE;
- bool attributeDecl(const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value) Q_DECL_OVERRIDE;
- bool internalEntityDecl(const QString& name, const QString& value) Q_DECL_OVERRIDE;
- bool externalEntityDecl(const QString& name, const QString& publicId, const QString& systemId) Q_DECL_OVERRIDE;
- QString errorString() const Q_DECL_OVERRIDE;
- private:
- QXmlDefaultHandlerPrivate *d;
- Q_DISABLE_COPY(QXmlDefaultHandler)
- };
- // inlines
- inline int QXmlAttributes::count() const
- { return length(); }
- QT_END_NAMESPACE
- #endif // QXML_H
|