Orb/Doxygen/qtools/qxml.h
changeset 0 42188c7ea2d9
equal deleted inserted replaced
-1:000000000000 0:42188c7ea2d9
       
     1 /****************************************************************************
       
     2 ** 
       
     3 **
       
     4 ** Definition of QXmlSimpleReader and related classes.
       
     5 **
       
     6 ** Created : 000518
       
     7 **
       
     8 ** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
       
     9 **
       
    10 ** This file is part of the XML module of the Qt GUI Toolkit.
       
    11 **
       
    12 ** This file may be distributed under the terms of the Q Public License
       
    13 ** as defined by Trolltech AS of Norway and appearing in the file
       
    14 ** LICENSE.QPL included in the packaging of this file.
       
    15 **
       
    16 ** This file may be distributed and/or modified under the terms of the
       
    17 ** GNU General Public License version 2 as published by the Free Software
       
    18 ** Foundation and appearing in the file LICENSE.GPL included in the
       
    19 ** packaging of this file.
       
    20 **
       
    21 ** Licensees holding valid Qt Enterprise Edition licenses may use this
       
    22 ** file in accordance with the Qt Commercial License Agreement provided
       
    23 ** with the Software.
       
    24 **
       
    25 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
       
    26 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
       
    27 **
       
    28 ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
       
    29 **   information about Qt Commercial License Agreements.
       
    30 ** See http://www.trolltech.com/qpl/ for QPL licensing information.
       
    31 ** See http://www.trolltech.com/gpl/ for GPL licensing information.
       
    32 **
       
    33 ** Contact info@trolltech.com if any conditions of this licensing are
       
    34 ** not clear to you.
       
    35 **
       
    36 **********************************************************************/
       
    37 
       
    38 #ifndef QXML_H
       
    39 #define QXML_H
       
    40 
       
    41 #include <qmodules.h>
       
    42 
       
    43 #if !defined(QT_MODULE_XML)
       
    44 #define QM_EXPORT
       
    45 #else
       
    46 #define QM_EXPORT Q_EXPORT
       
    47 #endif
       
    48 
       
    49 #ifndef QT_H
       
    50 #include <qtextstream.h>
       
    51 #include <qfile.h>
       
    52 #include <qstring.h>
       
    53 #include <qstringlist.h>
       
    54 #include <qvaluestack.h>
       
    55 #include <qmap.h>
       
    56 #endif // QT_H
       
    57 
       
    58 #ifndef QT_NO_XML
       
    59 
       
    60 class QXmlNamespaceSupport;
       
    61 class QXmlAttributes;
       
    62 class QXmlContentHandler;
       
    63 class QXmlDefaultHandler;
       
    64 class QXmlDTDHandler;
       
    65 class QXmlEntityResolver;
       
    66 class QXmlErrorHandler;
       
    67 class QXmlLexicalHandler;
       
    68 class QXmlDeclHandler;
       
    69 class QXmlInputSource;
       
    70 class QXmlLocator;
       
    71 class QXmlNamespaceSupport;
       
    72 class QXmlParseException;
       
    73 
       
    74 class QXmlReader;
       
    75 class QXmlSimpleReader;
       
    76 
       
    77 class QXmlSimpleReaderPrivate;
       
    78 class QXmlNamespaceSupportPrivate;
       
    79 class QXmlAttributesPrivate;
       
    80 class QXmlInputSourcePrivate;
       
    81 class QXmlParseExceptionPrivate;
       
    82 class QXmlLocatorPrivate;
       
    83 class QXmlDefaultHandlerPrivate;
       
    84 
       
    85 
       
    86 //
       
    87 // SAX Namespace Support
       
    88 //
       
    89 
       
    90 #if defined(Q_TEMPLATEDLL)
       
    91 // MOC_SKIP_BEGIN
       
    92 template class QM_EXPORT QMap<QString, QString>;
       
    93 template class QM_EXPORT QValueStack<QMap<QString, QString> >;
       
    94 template class QM_EXPORT QValueStack<QString>;
       
    95 // MOC_SKIP_END
       
    96 #endif
       
    97 
       
    98 class QM_EXPORT QXmlNamespaceSupport
       
    99 {
       
   100 public:
       
   101     QXmlNamespaceSupport();
       
   102     ~QXmlNamespaceSupport();
       
   103 
       
   104     void setPrefix( const QString&, const QString& );
       
   105 
       
   106     QString prefix( const QString& ) const;
       
   107     QString uri( const QString& ) const;
       
   108     void splitName( const QString&, QString&, QString& ) const;
       
   109     void processName( const QString&, bool, QString&, QString& ) const;
       
   110     QStringList prefixes() const;
       
   111     QStringList prefixes( const QString& ) const;
       
   112 
       
   113     void pushContext();
       
   114     void popContext();
       
   115     void reset();
       
   116 private:
       
   117     QValueStack<QMap<QString, QString> > nsStack;
       
   118     QMap<QString, QString> ns;
       
   119 
       
   120     QXmlNamespaceSupportPrivate *d;
       
   121 };
       
   122 
       
   123 
       
   124 //
       
   125 // SAX Attributes
       
   126 //
       
   127 
       
   128 class QM_EXPORT QXmlAttributes
       
   129 {
       
   130 public:
       
   131     QXmlAttributes() {}
       
   132     virtual ~QXmlAttributes() {}
       
   133 
       
   134     int index( const QString& qName ) const;
       
   135     int index( const QString& uri, const QString& localPart ) const;
       
   136     int length() const;
       
   137     QString localName( int index ) const;
       
   138     QString qName( int index ) const;
       
   139     QString uri( int index ) const;
       
   140     QString type( int index ) const;
       
   141     QString type( const QString& qName ) const;
       
   142     QString type( const QString& uri, const QString& localName ) const;
       
   143     QString value( int index ) const;
       
   144     QString value( const QString& qName ) const;
       
   145     QString value( const QString& uri, const QString& localName ) const;
       
   146 
       
   147 private:
       
   148     QStringList qnameList;
       
   149     QStringList uriList;
       
   150     QStringList localnameList;
       
   151     QStringList valueList;
       
   152 
       
   153     QXmlAttributesPrivate *d;
       
   154 
       
   155     friend class QXmlSimpleReader;
       
   156 };
       
   157 
       
   158 //
       
   159 // SAX Input Source
       
   160 //
       
   161 
       
   162 class QM_EXPORT QXmlInputSource
       
   163 {
       
   164 public:
       
   165     QXmlInputSource();
       
   166     QXmlInputSource( QTextStream& stream );
       
   167     QXmlInputSource( QFile& file );
       
   168     virtual ~QXmlInputSource();
       
   169 
       
   170     virtual const QString& data() const;
       
   171     virtual void setData( const QString& d );
       
   172 
       
   173 private:
       
   174     void readInput( QByteArray& rawData );
       
   175 
       
   176     QString input;
       
   177 
       
   178     QXmlInputSourcePrivate *d;
       
   179 };
       
   180 
       
   181 //
       
   182 // SAX Exception Classes
       
   183 //
       
   184 
       
   185 class QM_EXPORT QXmlParseException
       
   186 {
       
   187 public:
       
   188     QXmlParseException( const QString& name="", int c=-1, int l=-1, const QString& p="", const QString& s="" )
       
   189 	: msg( name ), column( c ), line( l ), pub( p ), sys( s )
       
   190     { }
       
   191 
       
   192     int columnNumber() const;
       
   193     int lineNumber() const;
       
   194     QString publicId() const;
       
   195     QString systemId() const;
       
   196     QString message() const;
       
   197 
       
   198 private:
       
   199     QString msg;
       
   200     int column;
       
   201     int line;
       
   202     QString pub;
       
   203     QString sys;
       
   204 
       
   205     QXmlParseExceptionPrivate *d;
       
   206 };
       
   207 
       
   208 
       
   209 //
       
   210 // XML Reader
       
   211 //
       
   212 
       
   213 class QM_EXPORT QXmlReader
       
   214 {
       
   215 public:
       
   216     virtual ~QXmlReader() {}
       
   217     virtual bool feature( const QString& name, bool *ok = 0 ) const = 0;
       
   218     virtual void setFeature( const QString& name, bool value ) = 0;
       
   219     virtual bool hasFeature( const QString& name ) const = 0;
       
   220     virtual void* property( const QString& name, bool *ok = 0 ) const = 0;
       
   221     virtual void setProperty( const QString& name, void* value ) = 0;
       
   222     virtual bool hasProperty( const QString& name ) const = 0;
       
   223     virtual void setEntityResolver( QXmlEntityResolver* handler ) = 0;
       
   224     virtual QXmlEntityResolver* entityResolver() const = 0;
       
   225     virtual void setDTDHandler( QXmlDTDHandler* handler ) = 0;
       
   226     virtual QXmlDTDHandler* DTDHandler() const = 0;
       
   227     virtual void setContentHandler( QXmlContentHandler* handler ) = 0;
       
   228     virtual QXmlContentHandler* contentHandler() const = 0;
       
   229     virtual void setErrorHandler( QXmlErrorHandler* handler ) = 0;
       
   230     virtual QXmlErrorHandler* errorHandler() const = 0;
       
   231     virtual void setLexicalHandler( QXmlLexicalHandler* handler ) = 0;
       
   232     virtual QXmlLexicalHandler* lexicalHandler() const = 0;
       
   233     virtual void setDeclHandler( QXmlDeclHandler* handler ) = 0;
       
   234     virtual QXmlDeclHandler* declHandler() const = 0;
       
   235     virtual bool parse( const QXmlInputSource& input ) = 0;
       
   236 };
       
   237 
       
   238 class QM_EXPORT QXmlSimpleReader : public QXmlReader
       
   239 {
       
   240 public:
       
   241     QXmlSimpleReader();
       
   242     virtual ~QXmlSimpleReader();
       
   243 
       
   244     bool feature( const QString& name, bool *ok = 0 ) const;
       
   245     void setFeature( const QString& name, bool value );
       
   246     bool hasFeature( const QString& name ) const;
       
   247 
       
   248     void* property( const QString& name, bool *ok = 0 ) const;
       
   249     void setProperty( const QString& name, void* value );
       
   250     bool hasProperty( const QString& name ) const;
       
   251 
       
   252     void setEntityResolver( QXmlEntityResolver* handler );
       
   253     QXmlEntityResolver* entityResolver() const;
       
   254     void setDTDHandler( QXmlDTDHandler* handler );
       
   255     QXmlDTDHandler* DTDHandler() const;
       
   256     void setContentHandler( QXmlContentHandler* handler );
       
   257     QXmlContentHandler* contentHandler() const;
       
   258     void setErrorHandler( QXmlErrorHandler* handler );
       
   259     QXmlErrorHandler* errorHandler() const;
       
   260     void setLexicalHandler( QXmlLexicalHandler* handler );
       
   261     QXmlLexicalHandler* lexicalHandler() const;
       
   262     void setDeclHandler( QXmlDeclHandler* handler );
       
   263     QXmlDeclHandler* declHandler() const;
       
   264 
       
   265     bool parse( const QXmlInputSource& input );
       
   266 
       
   267 private:
       
   268     // variables
       
   269     QXmlContentHandler* contentHnd;
       
   270     QXmlErrorHandler*   errorHnd;
       
   271     QXmlDTDHandler*     dtdHnd;
       
   272     QXmlEntityResolver* entityRes;
       
   273     QXmlLexicalHandler* lexicalHnd;
       
   274     QXmlDeclHandler*    declHnd;
       
   275 
       
   276     QChar c; // the character at reading position
       
   277     int lineNr; // number of line
       
   278     int columnNr; // position in line
       
   279     int pos; // position in string
       
   280 
       
   281     int     namePos;
       
   282     QChar   nameArray[256]; // only used for names
       
   283     QString nameValue; // only used for names
       
   284     int     refPos;
       
   285     QChar   refArray[256]; // only used for references
       
   286     QString refValue; // only used for references
       
   287     int     stringPos;
       
   288     QChar   stringArray[256]; // used for any other strings that are parsed
       
   289     QString stringValue; // used for any other strings that are parsed
       
   290 
       
   291     QString xml;
       
   292     int xmlLength;
       
   293     QString xmlRef; // used for parsing of entity references
       
   294 
       
   295     QValueStack<QString> tags;
       
   296 
       
   297     QXmlSimpleReaderPrivate* d;
       
   298 
       
   299     static const QChar QEOF;
       
   300 
       
   301     // inlines
       
   302     virtual bool is_S( const QChar& );
       
   303     virtual bool is_Letter( const QChar& );
       
   304     virtual bool is_NameBeginning( const QChar& );
       
   305     virtual bool is_Digit( const QChar& );
       
   306     virtual bool is_CombiningChar( const QChar& );
       
   307     virtual bool is_Extender( const QChar& );
       
   308     virtual bool is_NameChar( const QChar& );
       
   309 
       
   310     QString& string();
       
   311     void stringClear();
       
   312     void stringAddC();
       
   313     void stringAddC(const QChar&);
       
   314     QString& name();
       
   315     void nameClear();
       
   316     void nameAddC();
       
   317     void nameAddC(const QChar&);
       
   318     QString& ref();
       
   319     void refClear();
       
   320     void refAddC();
       
   321     void refAddC(const QChar&);
       
   322 
       
   323     // used by parseReference() and parsePEReference()
       
   324     enum EntityRecognitionContext { InContent, InAttributeValue, InEntityValue, InDTD };
       
   325 
       
   326     // private functions
       
   327     void eat_ws();
       
   328     void next_eat_ws();
       
   329 
       
   330     void next();
       
   331     bool atEnd();
       
   332 
       
   333     void init( const QXmlInputSource& i );
       
   334 
       
   335     bool entityExist( const QString& ) const;
       
   336 
       
   337     bool parseProlog();
       
   338     bool parseElement();
       
   339     bool parseElementEmptyTag( bool &t, QString &uri, QString &lname );
       
   340     bool parseElementETagBegin2();
       
   341     bool parseElementAttribute( QString &prefix, QString &uri, QString &lname );
       
   342     bool parseMisc();
       
   343     bool parseContent();
       
   344 
       
   345     bool parsePI(bool xmldecl=FALSE);
       
   346     bool parseDoctype();
       
   347     bool parseComment();
       
   348 
       
   349     bool parseName( bool useRef=FALSE );
       
   350     bool parseNmtoken();
       
   351     bool parseAttribute();
       
   352     bool parseReference( bool &charDataRead, EntityRecognitionContext context );
       
   353     bool processReference( bool &charDataRead, EntityRecognitionContext context );
       
   354 
       
   355     bool parseExternalID( bool allowPublicID = FALSE );
       
   356     bool parsePEReference( EntityRecognitionContext context );
       
   357     bool parseMarkupdecl();
       
   358     bool parseAttlistDecl();
       
   359     bool parseAttType();
       
   360     bool parseAttValue();
       
   361     bool parseElementDecl();
       
   362     bool parseNotationDecl();
       
   363     bool parseChoiceSeq();
       
   364     bool parseEntityDecl();
       
   365     bool parseEntityValue();
       
   366 
       
   367     bool parseString( const QString& s );
       
   368 
       
   369     void reportParseError();
       
   370 
       
   371     friend class QXmlSimpleReaderPrivate;
       
   372     friend class QXmlLocator;
       
   373 };
       
   374 
       
   375 //
       
   376 // SAX Locator
       
   377 //
       
   378 
       
   379 class QM_EXPORT QXmlLocator
       
   380 {
       
   381 public:
       
   382     QXmlLocator( QXmlSimpleReader* parent )
       
   383     { reader = parent; }
       
   384     ~QXmlLocator()
       
   385     { }
       
   386 
       
   387     int columnNumber();
       
   388     int lineNumber();
       
   389 //    QString getPublicId()
       
   390 //    QString getSystemId()
       
   391 
       
   392 private:
       
   393     QXmlSimpleReader* reader;
       
   394 
       
   395     QXmlLocatorPrivate *d;
       
   396 };
       
   397 
       
   398 //
       
   399 // SAX handler classes
       
   400 //
       
   401 
       
   402 class QM_EXPORT QXmlContentHandler
       
   403 {
       
   404 public:
       
   405     virtual ~QXmlContentHandler() {}
       
   406     virtual void setDocumentLocator( QXmlLocator* locator ) = 0;
       
   407     virtual bool startDocument() = 0;
       
   408     virtual bool endDocument() = 0;
       
   409     virtual bool startPrefixMapping( const QString& prefix, const QString& uri ) = 0;
       
   410     virtual bool endPrefixMapping( const QString& prefix ) = 0;
       
   411     virtual bool startElement( const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts ) = 0;
       
   412     virtual bool endElement( const QString& namespaceURI, const QString& localName, const QString& qName ) = 0;
       
   413     virtual bool characters( const QString& ch ) = 0;
       
   414     virtual bool ignorableWhitespace( const QString& ch ) = 0;
       
   415     virtual bool processingInstruction( const QString& target, const QString& data ) = 0;
       
   416     virtual bool skippedEntity( const QString& name ) = 0;
       
   417     virtual QString errorString() = 0;
       
   418 };
       
   419 
       
   420 class QM_EXPORT QXmlErrorHandler
       
   421 {
       
   422 public:
       
   423     virtual ~QXmlErrorHandler() {}
       
   424     virtual bool warning( const QXmlParseException& exception ) = 0;
       
   425     virtual bool error( const QXmlParseException& exception ) = 0;
       
   426     virtual bool fatalError( const QXmlParseException& exception ) = 0;
       
   427     virtual QString errorString() = 0;
       
   428 };
       
   429 
       
   430 class QM_EXPORT QXmlDTDHandler
       
   431 {
       
   432 public:
       
   433     virtual ~QXmlDTDHandler() {}
       
   434     virtual bool notationDecl( const QString& name, const QString& publicId, const QString& systemId ) = 0;
       
   435     virtual bool unparsedEntityDecl( const QString& name, const QString& publicId, const QString& systemId, const QString& notationName ) = 0;
       
   436     virtual QString errorString() = 0;
       
   437 };
       
   438 
       
   439 class QM_EXPORT QXmlEntityResolver
       
   440 {
       
   441 public:
       
   442     virtual ~QXmlEntityResolver() {}
       
   443     virtual bool resolveEntity( const QString& publicId, const QString& systemId, QXmlInputSource* ret ) = 0;
       
   444     virtual QString errorString() = 0;
       
   445 };
       
   446 
       
   447 class QM_EXPORT QXmlLexicalHandler
       
   448 {
       
   449 public:
       
   450     virtual ~QXmlLexicalHandler() {}
       
   451     virtual bool startDTD( const QString& name, const QString& publicId, const QString& systemId ) = 0;
       
   452     virtual bool endDTD() = 0;
       
   453 //    virtual bool startEntity( const QString& name ) = 0;
       
   454 //    virtual bool endEntity( const QString& name ) = 0;
       
   455     virtual bool startCDATA() = 0;
       
   456     virtual bool endCDATA() = 0;
       
   457     virtual bool comment( const QString& ch ) = 0;
       
   458     virtual QString errorString() = 0;
       
   459 };
       
   460 
       
   461 class QM_EXPORT QXmlDeclHandler
       
   462 {
       
   463 public:
       
   464     virtual ~QXmlDeclHandler() {}
       
   465     virtual bool attributeDecl( const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value ) = 0;
       
   466     virtual bool internalEntityDecl( const QString& name, const QString& value ) = 0;
       
   467     virtual bool externalEntityDecl( const QString& name, const QString& publicId, const QString& systemId ) = 0;
       
   468     virtual QString errorString() = 0;
       
   469 };
       
   470 
       
   471 
       
   472 class QM_EXPORT QXmlDefaultHandler : public QXmlContentHandler, public QXmlErrorHandler, public QXmlDTDHandler, public QXmlEntityResolver, public QXmlLexicalHandler, public QXmlDeclHandler
       
   473 {
       
   474 public:
       
   475     QXmlDefaultHandler() { }
       
   476     virtual ~QXmlDefaultHandler() { }
       
   477 
       
   478     void setDocumentLocator( QXmlLocator* locator );
       
   479     bool startDocument();
       
   480     bool endDocument();
       
   481     bool startPrefixMapping( const QString& prefix, const QString& uri );
       
   482     bool endPrefixMapping( const QString& prefix );
       
   483     bool startElement( const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts );
       
   484     bool endElement( const QString& namespaceURI, const QString& localName, const QString& qName );
       
   485     bool characters( const QString& ch );
       
   486     bool ignorableWhitespace( const QString& ch );
       
   487     bool processingInstruction( const QString& target, const QString& data );
       
   488     bool skippedEntity( const QString& name );
       
   489 
       
   490     bool warning( const QXmlParseException& exception );
       
   491     bool error( const QXmlParseException& exception );
       
   492     bool fatalError( const QXmlParseException& exception );
       
   493 
       
   494     bool notationDecl( const QString& name, const QString& publicId, const QString& systemId );
       
   495     bool unparsedEntityDecl( const QString& name, const QString& publicId, const QString& systemId, const QString& notationName );
       
   496 
       
   497     bool resolveEntity( const QString& publicId, const QString& systemId, QXmlInputSource* ret );
       
   498 
       
   499     bool startDTD( const QString& name, const QString& publicId, const QString& systemId );
       
   500     bool endDTD();
       
   501 //    bool startEntity( const QString& name );
       
   502 //    bool endEntity( const QString& name );
       
   503     bool startCDATA();
       
   504     bool endCDATA();
       
   505     bool comment( const QString& ch );
       
   506 
       
   507     bool attributeDecl( const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value );
       
   508     bool internalEntityDecl( const QString& name, const QString& value );
       
   509     bool externalEntityDecl( const QString& name, const QString& publicId, const QString& systemId );
       
   510 
       
   511     QString errorString();
       
   512 
       
   513 private:
       
   514     QXmlDefaultHandlerPrivate *d;
       
   515 };
       
   516 
       
   517 #ifdef _WS_QWS_
       
   518 #ifdef QT_XML_CPP
       
   519 #define inline
       
   520 #else
       
   521 #define QT_NO_XML_INLINE
       
   522 #endif
       
   523 #endif
       
   524 
       
   525 #ifndef QT_NO_XML_INLINE
       
   526 //
       
   527 // inlines
       
   528 //
       
   529 
       
   530 inline bool QXmlSimpleReader::is_S(const QChar& ch)
       
   531 { return ch==' ' || ch=='\t' || ch=='\n' || ch=='\r'; }
       
   532 
       
   533 inline bool QXmlSimpleReader::is_Letter( const QChar& ch )
       
   534 { return ch.isLetter(); }
       
   535 
       
   536 inline bool QXmlSimpleReader::is_NameBeginning( const QChar& ch )
       
   537 { return ch=='_' || ch==':' || ch.isLetter(); }
       
   538 
       
   539 inline bool QXmlSimpleReader::is_Digit( const QChar& ch )
       
   540 { return ch.isDigit(); }
       
   541 
       
   542 inline bool QXmlSimpleReader::is_CombiningChar( const QChar& )
       
   543 { return FALSE; }
       
   544 
       
   545 inline bool QXmlSimpleReader::is_Extender( const QChar& )
       
   546 { return FALSE; }
       
   547 
       
   548 inline bool QXmlSimpleReader::is_NameChar( const QChar& ch )
       
   549 {
       
   550     return ch=='.' || ch=='-' || ch=='_' || ch==':' ||
       
   551 	is_Letter(ch) || is_Digit(ch) ||
       
   552 	is_CombiningChar(ch) || is_Extender(ch);
       
   553 }
       
   554 
       
   555 inline void QXmlSimpleReader::next()
       
   556 {
       
   557     if ( !xmlRef.isEmpty() ) {
       
   558 	c = xmlRef[0];
       
   559 	xmlRef.remove( 0, 1 );
       
   560     } else {
       
   561 	if ( c=='\n' || c=='\r' ) {
       
   562 	    lineNr++;
       
   563 	    columnNr = -1;
       
   564 	}
       
   565 	if ( pos >= xmlLength ) {
       
   566 	    c = QEOF;
       
   567 	} else {
       
   568 	    c = xml[pos];
       
   569 	    columnNr++;
       
   570 	    pos++;
       
   571 	}
       
   572     }
       
   573 }
       
   574 
       
   575 inline bool QXmlSimpleReader::atEnd()
       
   576 { return c == QEOF; }
       
   577 
       
   578 inline void QXmlSimpleReader::eat_ws()
       
   579 { while ( !atEnd() && is_S(c) ) next(); }
       
   580 
       
   581 inline void QXmlSimpleReader::next_eat_ws()
       
   582 { next(); eat_ws(); }
       
   583 
       
   584 
       
   585 // use buffers instead of QString::operator+= when single characters are read
       
   586 inline QString& QXmlSimpleReader::string()
       
   587 {
       
   588     stringValue += QString( stringArray, stringPos );
       
   589     stringPos = 0;
       
   590     return stringValue;
       
   591 }
       
   592 inline QString& QXmlSimpleReader::name()
       
   593 {
       
   594     nameValue += QString( nameArray, namePos );
       
   595     namePos = 0;
       
   596     return nameValue;
       
   597 }
       
   598 inline QString& QXmlSimpleReader::ref()
       
   599 {
       
   600     refValue += QString( refArray, refPos );
       
   601     refPos = 0;
       
   602     return refValue;
       
   603 }
       
   604 
       
   605 inline void QXmlSimpleReader::stringClear()
       
   606 { stringValue = ""; stringPos = 0; }
       
   607 inline void QXmlSimpleReader::nameClear()
       
   608 { nameValue = ""; namePos = 0; }
       
   609 inline void QXmlSimpleReader::refClear()
       
   610 { refValue = ""; refPos = 0; }
       
   611 
       
   612 inline void QXmlSimpleReader::stringAddC()
       
   613 {
       
   614     if ( stringPos >= 256 ) {
       
   615 	stringValue += QString( stringArray, stringPos );
       
   616 	stringPos = 0;
       
   617     }
       
   618     stringArray[stringPos++] = c;
       
   619 }
       
   620 inline void QXmlSimpleReader::nameAddC()
       
   621 {
       
   622     if ( namePos >= 256 ) {
       
   623 	nameValue += QString( nameArray, namePos );
       
   624 	namePos = 0;
       
   625     }
       
   626     nameArray[namePos++] = c;
       
   627 }
       
   628 inline void QXmlSimpleReader::refAddC()
       
   629 {
       
   630     if ( refPos >= 256 ) {
       
   631 	refValue += QString( refArray, refPos );
       
   632 	refPos = 0;
       
   633     }
       
   634     refArray[refPos++] = c;
       
   635 }
       
   636 
       
   637 inline void QXmlSimpleReader::stringAddC(const QChar& ch)
       
   638 {
       
   639     if ( stringPos >= 256 ) {
       
   640 	stringValue += QString( stringArray, stringPos );
       
   641 	stringPos = 0;
       
   642     }
       
   643     stringArray[stringPos++] = ch;
       
   644 }
       
   645 inline void QXmlSimpleReader::nameAddC(const QChar& ch)
       
   646 {
       
   647     if ( namePos >= 256 ) {
       
   648 	nameValue += QString( nameArray, namePos );
       
   649 	namePos = 0;
       
   650     }
       
   651     nameArray[namePos++] = ch;
       
   652 }
       
   653 inline void QXmlSimpleReader::refAddC(const QChar& ch)
       
   654 {
       
   655     if ( refPos >= 256 ) {
       
   656 	refValue += QString( refArray, refPos );
       
   657 	refPos = 0;
       
   658     }
       
   659     refArray[refPos++] = ch;
       
   660 }
       
   661 #endif
       
   662 
       
   663 #ifdef _WS_QWS_
       
   664 #ifdef QT_XML_CPP
       
   665 #undef inline
       
   666 #endif
       
   667 #endif
       
   668 
       
   669 #endif //QT_NO_XML
       
   670 
       
   671 #endif