src/xml/sax/qxml.h
changeset 0 1918ee327afb
child 4 3b1da2848fc7
equal deleted inserted replaced
-1:000000000000 0:1918ee327afb
       
     1 /****************************************************************************
       
     2 **
       
     3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     4 ** All rights reserved.
       
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
       
     6 **
       
     7 ** This file is part of the QtXml module of the Qt Toolkit.
       
     8 **
       
     9 ** $QT_BEGIN_LICENSE:LGPL$
       
    10 ** No Commercial Usage
       
    11 ** This file contains pre-release code and may not be distributed.
       
    12 ** You may use this file in accordance with the terms and conditions
       
    13 ** contained in the Technology Preview License Agreement accompanying
       
    14 ** this package.
       
    15 **
       
    16 ** GNU Lesser General Public License Usage
       
    17 ** Alternatively, this file may be used under the terms of the GNU Lesser
       
    18 ** General Public License version 2.1 as published by the Free Software
       
    19 ** Foundation and appearing in the file LICENSE.LGPL included in the
       
    20 ** packaging of this file.  Please review the following information to
       
    21 ** ensure the GNU Lesser General Public License version 2.1 requirements
       
    22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
       
    23 **
       
    24 ** In addition, as a special exception, Nokia gives you certain additional
       
    25 ** rights.  These rights are described in the Nokia Qt LGPL Exception
       
    26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
       
    27 **
       
    28 ** If you have questions regarding the use of this file, please contact
       
    29 ** Nokia at qt-info@nokia.com.
       
    30 **
       
    31 **
       
    32 **
       
    33 **
       
    34 **
       
    35 **
       
    36 **
       
    37 **
       
    38 ** $QT_END_LICENSE$
       
    39 **
       
    40 ****************************************************************************/
       
    41 
       
    42 #ifndef QXML_H
       
    43 #define QXML_H
       
    44 
       
    45 #include <QtCore/qtextstream.h>
       
    46 #include <QtCore/qfile.h>
       
    47 #include <QtCore/qstring.h>
       
    48 #include <QtCore/qstringlist.h>
       
    49 #include <QtCore/qlist.h>
       
    50 #include <QtCore/qscopedpointer.h>
       
    51 
       
    52 QT_BEGIN_HEADER
       
    53 
       
    54 QT_BEGIN_NAMESPACE
       
    55 
       
    56 QT_MODULE(Xml)
       
    57 
       
    58 class QXmlNamespaceSupport;
       
    59 class QXmlAttributes;
       
    60 class QXmlContentHandler;
       
    61 class QXmlDefaultHandler;
       
    62 class QXmlDTDHandler;
       
    63 class QXmlEntityResolver;
       
    64 class QXmlErrorHandler;
       
    65 class QXmlLexicalHandler;
       
    66 class QXmlDeclHandler;
       
    67 class QXmlInputSource;
       
    68 class QXmlLocator;
       
    69 class QXmlNamespaceSupport;
       
    70 class QXmlParseException;
       
    71 
       
    72 class QXmlReader;
       
    73 class QXmlSimpleReader;
       
    74 
       
    75 class QXmlSimpleReaderPrivate;
       
    76 class QXmlNamespaceSupportPrivate;
       
    77 class QXmlAttributesPrivate;
       
    78 class QXmlInputSourcePrivate;
       
    79 class QXmlParseExceptionPrivate;
       
    80 class QXmlLocatorPrivate;
       
    81 class QXmlDefaultHandlerPrivate;
       
    82 
       
    83 
       
    84 //
       
    85 // SAX Namespace Support
       
    86 //
       
    87 
       
    88 class Q_XML_EXPORT QXmlNamespaceSupport
       
    89 {
       
    90 public:
       
    91     QXmlNamespaceSupport();
       
    92     ~QXmlNamespaceSupport();
       
    93 
       
    94     void setPrefix(const QString&, const QString&);
       
    95 
       
    96     QString prefix(const QString&) const;
       
    97     QString uri(const QString&) const;
       
    98     void splitName(const QString&, QString&, QString&) const;
       
    99     void processName(const QString&, bool, QString&, QString&) const;
       
   100     QStringList prefixes() const;
       
   101     QStringList prefixes(const QString&) const;
       
   102 
       
   103     void pushContext();
       
   104     void popContext();
       
   105     void reset();
       
   106 
       
   107 private:
       
   108     QXmlNamespaceSupportPrivate *d;
       
   109 
       
   110     friend class QXmlSimpleReaderPrivate;
       
   111     Q_DISABLE_COPY(QXmlNamespaceSupport)
       
   112 };
       
   113 
       
   114 
       
   115 //
       
   116 // SAX Attributes
       
   117 //
       
   118 
       
   119 class Q_XML_EXPORT QXmlAttributes
       
   120 {
       
   121 public:
       
   122     QXmlAttributes() {}
       
   123     virtual ~QXmlAttributes() {}
       
   124 
       
   125     int index(const QString& qName) const;
       
   126     int index(const QLatin1String& qName) const;
       
   127     int index(const QString& uri, const QString& localPart) const;
       
   128     int length() const;
       
   129     int count() const;
       
   130     QString localName(int index) const;
       
   131     QString qName(int index) const;
       
   132     QString uri(int index) const;
       
   133     QString type(int index) const;
       
   134     QString type(const QString& qName) const;
       
   135     QString type(const QString& uri, const QString& localName) const;
       
   136     QString value(int index) const;
       
   137     QString value(const QString& qName) const;
       
   138     QString value(const QLatin1String& qName) const;
       
   139     QString value(const QString& uri, const QString& localName) const;
       
   140 
       
   141     void clear();
       
   142     void append(const QString &qName, const QString &uri, const QString &localPart, const QString &value);
       
   143 
       
   144 private:
       
   145     struct Attribute {
       
   146         QString qname, uri, localname, value;
       
   147     };
       
   148     typedef QList<Attribute> AttributeList;
       
   149     AttributeList attList;
       
   150 
       
   151     QXmlAttributesPrivate *d;
       
   152 };
       
   153 
       
   154 //
       
   155 // SAX Input Source
       
   156 //
       
   157 
       
   158 class Q_XML_EXPORT QXmlInputSource
       
   159 {
       
   160 public:
       
   161     QXmlInputSource();
       
   162     QXmlInputSource(QIODevice *dev);
       
   163     virtual ~QXmlInputSource();
       
   164 
       
   165     virtual void setData(const QString& dat);
       
   166     virtual void setData(const QByteArray& dat);
       
   167     virtual void fetchData();
       
   168     virtual QString data() const;
       
   169     virtual QChar next();
       
   170     virtual void reset();
       
   171 
       
   172     static const ushort EndOfData;
       
   173     static const ushort EndOfDocument;
       
   174 
       
   175 #ifdef QT3_SUPPORT
       
   176     QT3_SUPPORT_CONSTRUCTOR QXmlInputSource(QFile& file);
       
   177     QT3_SUPPORT_CONSTRUCTOR QXmlInputSource(QTextStream& stream);
       
   178 #endif
       
   179 
       
   180 protected:
       
   181     virtual QString fromRawData(const QByteArray &data, bool beginning = false);
       
   182 
       
   183 private:
       
   184     void init();
       
   185     QXmlInputSourcePrivate *d;
       
   186 };
       
   187 
       
   188 //
       
   189 // SAX Exception Classes
       
   190 //
       
   191 
       
   192 class Q_XML_EXPORT QXmlParseException
       
   193 {
       
   194 public:
       
   195     explicit QXmlParseException(const QString &name = QString(), int c = -1, int l = -1,
       
   196                                 const QString &p = QString(), const QString &s = QString());
       
   197     QXmlParseException(const QXmlParseException &other);
       
   198     ~QXmlParseException();
       
   199 
       
   200     int columnNumber() const;
       
   201     int lineNumber() const;
       
   202     QString publicId() const;
       
   203     QString systemId() const;
       
   204     QString message() const;
       
   205 
       
   206 private:
       
   207     QScopedPointer<QXmlParseExceptionPrivate> d;
       
   208 };
       
   209 
       
   210 
       
   211 //
       
   212 // XML Reader
       
   213 //
       
   214 
       
   215 class Q_XML_EXPORT QXmlReader
       
   216 {
       
   217 public:
       
   218     virtual ~QXmlReader() {}
       
   219     virtual bool feature(const QString& name, bool *ok = 0) const = 0;
       
   220     virtual void setFeature(const QString& name, bool value) = 0;
       
   221     virtual bool hasFeature(const QString& name) const = 0;
       
   222     virtual void* property(const QString& name, bool *ok = 0) const = 0;
       
   223     virtual void setProperty(const QString& name, void* value) = 0;
       
   224     virtual bool hasProperty(const QString& name) const = 0;
       
   225     virtual void setEntityResolver(QXmlEntityResolver* handler) = 0;
       
   226     virtual QXmlEntityResolver* entityResolver() const = 0;
       
   227     virtual void setDTDHandler(QXmlDTDHandler* handler) = 0;
       
   228     virtual QXmlDTDHandler* DTDHandler() const = 0;
       
   229     virtual void setContentHandler(QXmlContentHandler* handler) = 0;
       
   230     virtual QXmlContentHandler* contentHandler() const = 0;
       
   231     virtual void setErrorHandler(QXmlErrorHandler* handler) = 0;
       
   232     virtual QXmlErrorHandler* errorHandler() const = 0;
       
   233     virtual void setLexicalHandler(QXmlLexicalHandler* handler) = 0;
       
   234     virtual QXmlLexicalHandler* lexicalHandler() const = 0;
       
   235     virtual void setDeclHandler(QXmlDeclHandler* handler) = 0;
       
   236     virtual QXmlDeclHandler* declHandler() const = 0;
       
   237     virtual bool parse(const QXmlInputSource& input) = 0;
       
   238     virtual bool parse(const QXmlInputSource* input) = 0;
       
   239 };
       
   240 
       
   241 class Q_XML_EXPORT QXmlSimpleReader : public QXmlReader
       
   242 {
       
   243 public:
       
   244     QXmlSimpleReader();
       
   245     virtual ~QXmlSimpleReader();
       
   246 
       
   247     bool feature(const QString& name, bool *ok = 0) const;
       
   248     void setFeature(const QString& name, bool value);
       
   249     bool hasFeature(const QString& name) const;
       
   250 
       
   251     void* property(const QString& name, bool *ok = 0) const;
       
   252     void setProperty(const QString& name, void* value);
       
   253     bool hasProperty(const QString& name) const;
       
   254 
       
   255     void setEntityResolver(QXmlEntityResolver* handler);
       
   256     QXmlEntityResolver* entityResolver() const;
       
   257     void setDTDHandler(QXmlDTDHandler* handler);
       
   258     QXmlDTDHandler* DTDHandler() const;
       
   259     void setContentHandler(QXmlContentHandler* handler);
       
   260     QXmlContentHandler* contentHandler() const;
       
   261     void setErrorHandler(QXmlErrorHandler* handler);
       
   262     QXmlErrorHandler* errorHandler() const;
       
   263     void setLexicalHandler(QXmlLexicalHandler* handler);
       
   264     QXmlLexicalHandler* lexicalHandler() const;
       
   265     void setDeclHandler(QXmlDeclHandler* handler);
       
   266     QXmlDeclHandler* declHandler() const;
       
   267 
       
   268     bool parse(const QXmlInputSource& input);
       
   269     bool parse(const QXmlInputSource* input);
       
   270     virtual bool parse(const QXmlInputSource* input, bool incremental);
       
   271     virtual bool parseContinue();
       
   272 
       
   273 private:
       
   274     Q_DISABLE_COPY(QXmlSimpleReader)
       
   275     Q_DECLARE_PRIVATE(QXmlSimpleReader)
       
   276     QScopedPointer<QXmlSimpleReaderPrivate> d_ptr;
       
   277 
       
   278     friend class QXmlSimpleReaderLocator;
       
   279 };
       
   280 
       
   281 //
       
   282 // SAX Locator
       
   283 //
       
   284 
       
   285 class Q_XML_EXPORT QXmlLocator
       
   286 {
       
   287 public:
       
   288     QXmlLocator();
       
   289     virtual ~QXmlLocator();
       
   290 
       
   291     virtual int columnNumber() const = 0;
       
   292     virtual int lineNumber() const = 0;
       
   293 //    QString getPublicId() const
       
   294 //    QString getSystemId() const
       
   295 };
       
   296 
       
   297 //
       
   298 // SAX handler classes
       
   299 //
       
   300 
       
   301 class Q_XML_EXPORT QXmlContentHandler
       
   302 {
       
   303 public:
       
   304     virtual ~QXmlContentHandler() {}
       
   305     virtual void setDocumentLocator(QXmlLocator* locator) = 0;
       
   306     virtual bool startDocument() = 0;
       
   307     virtual bool endDocument() = 0;
       
   308     virtual bool startPrefixMapping(const QString& prefix, const QString& uri) = 0;
       
   309     virtual bool endPrefixMapping(const QString& prefix) = 0;
       
   310     virtual bool startElement(const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts) = 0;
       
   311     virtual bool endElement(const QString& namespaceURI, const QString& localName, const QString& qName) = 0;
       
   312     virtual bool characters(const QString& ch) = 0;
       
   313     virtual bool ignorableWhitespace(const QString& ch) = 0;
       
   314     virtual bool processingInstruction(const QString& target, const QString& data) = 0;
       
   315     virtual bool skippedEntity(const QString& name) = 0;
       
   316     virtual QString errorString() const = 0;
       
   317 };
       
   318 
       
   319 class Q_XML_EXPORT QXmlErrorHandler
       
   320 {
       
   321 public:
       
   322     virtual ~QXmlErrorHandler() {}
       
   323     virtual bool warning(const QXmlParseException& exception) = 0;
       
   324     virtual bool error(const QXmlParseException& exception) = 0;
       
   325     virtual bool fatalError(const QXmlParseException& exception) = 0;
       
   326     virtual QString errorString() const = 0;
       
   327 };
       
   328 
       
   329 class Q_XML_EXPORT QXmlDTDHandler
       
   330 {
       
   331 public:
       
   332     virtual ~QXmlDTDHandler() {}
       
   333     virtual bool notationDecl(const QString& name, const QString& publicId, const QString& systemId) = 0;
       
   334     virtual bool unparsedEntityDecl(const QString& name, const QString& publicId, const QString& systemId, const QString& notationName) = 0;
       
   335     virtual QString errorString() const = 0;
       
   336 };
       
   337 
       
   338 class Q_XML_EXPORT QXmlEntityResolver
       
   339 {
       
   340 public:
       
   341     virtual ~QXmlEntityResolver() {}
       
   342     virtual bool resolveEntity(const QString& publicId, const QString& systemId, QXmlInputSource*& ret) = 0;
       
   343     virtual QString errorString() const = 0;
       
   344 };
       
   345 
       
   346 class Q_XML_EXPORT QXmlLexicalHandler
       
   347 {
       
   348 public:
       
   349     virtual ~QXmlLexicalHandler() {}
       
   350     virtual bool startDTD(const QString& name, const QString& publicId, const QString& systemId) = 0;
       
   351     virtual bool endDTD() = 0;
       
   352     virtual bool startEntity(const QString& name) = 0;
       
   353     virtual bool endEntity(const QString& name) = 0;
       
   354     virtual bool startCDATA() = 0;
       
   355     virtual bool endCDATA() = 0;
       
   356     virtual bool comment(const QString& ch) = 0;
       
   357     virtual QString errorString() const = 0;
       
   358 };
       
   359 
       
   360 class Q_XML_EXPORT QXmlDeclHandler
       
   361 {
       
   362 public:
       
   363     virtual ~QXmlDeclHandler() {}
       
   364     virtual bool attributeDecl(const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value) = 0;
       
   365     virtual bool internalEntityDecl(const QString& name, const QString& value) = 0;
       
   366     virtual bool externalEntityDecl(const QString& name, const QString& publicId, const QString& systemId) = 0;
       
   367     virtual QString errorString() const = 0;
       
   368     // ### Qt 5: Conform to SAX by adding elementDecl
       
   369 };
       
   370 
       
   371 
       
   372 class Q_XML_EXPORT QXmlDefaultHandler : public QXmlContentHandler, public QXmlErrorHandler, public QXmlDTDHandler, public QXmlEntityResolver, public QXmlLexicalHandler, public QXmlDeclHandler
       
   373 {
       
   374 public:
       
   375     QXmlDefaultHandler() { }
       
   376     virtual ~QXmlDefaultHandler() { }
       
   377 
       
   378     void setDocumentLocator(QXmlLocator* locator);
       
   379     bool startDocument();
       
   380     bool endDocument();
       
   381     bool startPrefixMapping(const QString& prefix, const QString& uri);
       
   382     bool endPrefixMapping(const QString& prefix);
       
   383     bool startElement(const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts);
       
   384     bool endElement(const QString& namespaceURI, const QString& localName, const QString& qName);
       
   385     bool characters(const QString& ch);
       
   386     bool ignorableWhitespace(const QString& ch);
       
   387     bool processingInstruction(const QString& target, const QString& data);
       
   388     bool skippedEntity(const QString& name);
       
   389 
       
   390     bool warning(const QXmlParseException& exception);
       
   391     bool error(const QXmlParseException& exception);
       
   392     bool fatalError(const QXmlParseException& exception);
       
   393 
       
   394     bool notationDecl(const QString& name, const QString& publicId, const QString& systemId);
       
   395     bool unparsedEntityDecl(const QString& name, const QString& publicId, const QString& systemId, const QString& notationName);
       
   396 
       
   397     bool resolveEntity(const QString& publicId, const QString& systemId, QXmlInputSource*& ret);
       
   398 
       
   399     bool startDTD(const QString& name, const QString& publicId, const QString& systemId);
       
   400     bool endDTD();
       
   401     bool startEntity(const QString& name);
       
   402     bool endEntity(const QString& name);
       
   403     bool startCDATA();
       
   404     bool endCDATA();
       
   405     bool comment(const QString& ch);
       
   406 
       
   407     bool attributeDecl(const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value);
       
   408     bool internalEntityDecl(const QString& name, const QString& value);
       
   409     bool externalEntityDecl(const QString& name, const QString& publicId, const QString& systemId);
       
   410 
       
   411     QString errorString() const;
       
   412 
       
   413 private:
       
   414     QXmlDefaultHandlerPrivate *d;
       
   415     Q_DISABLE_COPY(QXmlDefaultHandler)
       
   416 };
       
   417 
       
   418 // inlines
       
   419 
       
   420 inline int QXmlAttributes::count() const
       
   421 { return length(); }
       
   422 
       
   423 QT_END_NAMESPACE
       
   424 
       
   425 QT_END_HEADER
       
   426 
       
   427 #endif // QXML_H