|
Packit |
1c1d7e |
/****************************************************************************
|
|
Packit |
1c1d7e |
**
|
|
Packit |
1c1d7e |
**
|
|
Packit |
1c1d7e |
** Definition of QXmlSimpleReader and related classes.
|
|
Packit |
1c1d7e |
**
|
|
Packit |
1c1d7e |
** Created : 000518
|
|
Packit |
1c1d7e |
**
|
|
Packit |
1c1d7e |
** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
|
|
Packit |
1c1d7e |
**
|
|
Packit |
1c1d7e |
** This file is part of the XML module of the Qt GUI Toolkit.
|
|
Packit |
1c1d7e |
**
|
|
Packit |
1c1d7e |
** This file may be distributed under the terms of the Q Public License
|
|
Packit |
1c1d7e |
** as defined by Trolltech AS of Norway and appearing in the file
|
|
Packit |
1c1d7e |
** LICENSE.QPL included in the packaging of this file.
|
|
Packit |
1c1d7e |
**
|
|
Packit |
1c1d7e |
** This file may be distributed and/or modified under the terms of the
|
|
Packit |
1c1d7e |
** GNU General Public License version 2 as published by the Free Software
|
|
Packit |
1c1d7e |
** Foundation and appearing in the file LICENSE.GPL included in the
|
|
Packit |
1c1d7e |
** packaging of this file.
|
|
Packit |
1c1d7e |
**
|
|
Packit |
1c1d7e |
** Licensees holding valid Qt Enterprise Edition licenses may use this
|
|
Packit |
1c1d7e |
** file in accordance with the Qt Commercial License Agreement provided
|
|
Packit |
1c1d7e |
** with the Software.
|
|
Packit |
1c1d7e |
**
|
|
Packit |
1c1d7e |
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
|
Packit |
1c1d7e |
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
|
Packit |
1c1d7e |
**
|
|
Packit |
1c1d7e |
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
|
|
Packit |
1c1d7e |
** information about Qt Commercial License Agreements.
|
|
Packit |
1c1d7e |
** See http://www.trolltech.com/qpl/ for QPL licensing information.
|
|
Packit |
1c1d7e |
** See http://www.trolltech.com/gpl/ for GPL licensing information.
|
|
Packit |
1c1d7e |
**
|
|
Packit |
1c1d7e |
** Contact info@trolltech.com if any conditions of this licensing are
|
|
Packit |
1c1d7e |
** not clear to you.
|
|
Packit |
1c1d7e |
**
|
|
Packit |
1c1d7e |
**********************************************************************/
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#ifndef QXML_H
|
|
Packit |
1c1d7e |
#define QXML_H
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include <qmodules.h>
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#if !defined(QT_MODULE_XML)
|
|
Packit |
1c1d7e |
#define QM_EXPORT
|
|
Packit |
1c1d7e |
#else
|
|
Packit |
1c1d7e |
#define QM_EXPORT Q_EXPORT
|
|
Packit |
1c1d7e |
#endif
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#ifndef QT_H
|
|
Packit |
1c1d7e |
#include <qtextstream.h>
|
|
Packit |
1c1d7e |
#include <qfile.h>
|
|
Packit |
1c1d7e |
#include <qstring.h>
|
|
Packit |
1c1d7e |
#include <qstringlist.h>
|
|
Packit |
1c1d7e |
#include <qvaluestack.h>
|
|
Packit |
1c1d7e |
#include <qmap.h>
|
|
Packit |
1c1d7e |
#endif // QT_H
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#ifndef QT_NO_XML
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class QXmlNamespaceSupport;
|
|
Packit |
1c1d7e |
class QXmlAttributes;
|
|
Packit |
1c1d7e |
class QXmlContentHandler;
|
|
Packit |
1c1d7e |
class QXmlDefaultHandler;
|
|
Packit |
1c1d7e |
class QXmlDTDHandler;
|
|
Packit |
1c1d7e |
class QXmlEntityResolver;
|
|
Packit |
1c1d7e |
class QXmlErrorHandler;
|
|
Packit |
1c1d7e |
class QXmlLexicalHandler;
|
|
Packit |
1c1d7e |
class QXmlDeclHandler;
|
|
Packit |
1c1d7e |
class QXmlInputSource;
|
|
Packit |
1c1d7e |
class QXmlLocator;
|
|
Packit |
1c1d7e |
class QXmlNamespaceSupport;
|
|
Packit |
1c1d7e |
class QXmlParseException;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class QXmlReader;
|
|
Packit |
1c1d7e |
class QXmlSimpleReader;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class QXmlSimpleReaderPrivate;
|
|
Packit |
1c1d7e |
class QXmlNamespaceSupportPrivate;
|
|
Packit |
1c1d7e |
class QXmlAttributesPrivate;
|
|
Packit |
1c1d7e |
class QXmlInputSourcePrivate;
|
|
Packit |
1c1d7e |
class QXmlParseExceptionPrivate;
|
|
Packit |
1c1d7e |
class QXmlLocatorPrivate;
|
|
Packit |
1c1d7e |
class QXmlDefaultHandlerPrivate;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//
|
|
Packit |
1c1d7e |
// SAX Namespace Support
|
|
Packit |
1c1d7e |
//
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#if defined(Q_TEMPLATEDLL)
|
|
Packit |
1c1d7e |
// MOC_SKIP_BEGIN
|
|
Packit |
1c1d7e |
template class QM_EXPORT QMap<QString, QString>;
|
|
Packit |
1c1d7e |
template class QM_EXPORT QValueStack<QMap<QString, QString> >;
|
|
Packit |
1c1d7e |
template class QM_EXPORT QValueStack<QString>;
|
|
Packit |
1c1d7e |
// MOC_SKIP_END
|
|
Packit |
1c1d7e |
#endif
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class QM_EXPORT QXmlNamespaceSupport
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
QXmlNamespaceSupport();
|
|
Packit |
1c1d7e |
~QXmlNamespaceSupport();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void setPrefix( const QString&, const QString& );
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QString prefix( const QString& ) const;
|
|
Packit |
1c1d7e |
QString uri( const QString& ) const;
|
|
Packit |
1c1d7e |
void splitName( const QString&, QString&, QString& ) const;
|
|
Packit |
1c1d7e |
void processName( const QString&, bool, QString&, QString& ) const;
|
|
Packit |
1c1d7e |
QStringList prefixes() const;
|
|
Packit |
1c1d7e |
QStringList prefixes( const QString& ) const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void pushContext();
|
|
Packit |
1c1d7e |
void popContext();
|
|
Packit |
1c1d7e |
void reset();
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
QValueStack<QMap<QString, QString> > nsStack;
|
|
Packit |
1c1d7e |
QMap<QString, QString> ns;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//QXmlNamespaceSupportPrivate *d;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//
|
|
Packit |
1c1d7e |
// SAX Attributes
|
|
Packit |
1c1d7e |
//
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class QM_EXPORT QXmlAttributes
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
QXmlAttributes() {}
|
|
Packit |
1c1d7e |
virtual ~QXmlAttributes() {}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
int index( const QString& qName ) const;
|
|
Packit |
1c1d7e |
int index( const QString& uri, const QString& localPart ) const;
|
|
Packit |
1c1d7e |
int length() const;
|
|
Packit |
1c1d7e |
QString localName( int index ) const;
|
|
Packit |
1c1d7e |
QString qName( int index ) const;
|
|
Packit |
1c1d7e |
QString uri( int index ) const;
|
|
Packit |
1c1d7e |
QString type( int index ) const;
|
|
Packit |
1c1d7e |
QString type( const QString& qName ) const;
|
|
Packit |
1c1d7e |
QString type( const QString& uri, const QString& localName ) const;
|
|
Packit |
1c1d7e |
QString value( int index ) const;
|
|
Packit |
1c1d7e |
QString value( const QString& qName ) const;
|
|
Packit |
1c1d7e |
QString value( const QString& uri, const QString& localName ) const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
QStringList qnameList;
|
|
Packit |
1c1d7e |
QStringList uriList;
|
|
Packit |
1c1d7e |
QStringList localnameList;
|
|
Packit |
1c1d7e |
QStringList valueList;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//QXmlAttributesPrivate *d;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
friend class QXmlSimpleReader;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//
|
|
Packit |
1c1d7e |
// SAX Input Source
|
|
Packit |
1c1d7e |
//
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class QM_EXPORT QXmlInputSource
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
QXmlInputSource();
|
|
Packit |
1c1d7e |
QXmlInputSource( QTextStream& stream );
|
|
Packit |
1c1d7e |
QXmlInputSource( QFile& file );
|
|
Packit |
1c1d7e |
virtual ~QXmlInputSource();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
virtual const QString& data() const;
|
|
Packit |
1c1d7e |
virtual void setData( const QString& d );
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
void readInput( QByteArray& rawData );
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QString input;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//QXmlInputSourcePrivate *d;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//
|
|
Packit |
1c1d7e |
// SAX Exception Classes
|
|
Packit |
1c1d7e |
//
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class QM_EXPORT QXmlParseException
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
QXmlParseException( const QString& name="", int c=-1, int l=-1, const QString& p="", const QString& s="" )
|
|
Packit |
1c1d7e |
: msg( name ), column( c ), line( l ), pub( p ), sys( s )
|
|
Packit |
1c1d7e |
{ }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
int columnNumber() const;
|
|
Packit |
1c1d7e |
int lineNumber() const;
|
|
Packit |
1c1d7e |
QString publicId() const;
|
|
Packit |
1c1d7e |
QString systemId() const;
|
|
Packit |
1c1d7e |
QString message() const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
QString msg;
|
|
Packit |
1c1d7e |
int column;
|
|
Packit |
1c1d7e |
int line;
|
|
Packit |
1c1d7e |
QString pub;
|
|
Packit |
1c1d7e |
QString sys;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//QXmlParseExceptionPrivate *d;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//
|
|
Packit |
1c1d7e |
// XML Reader
|
|
Packit |
1c1d7e |
//
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class QM_EXPORT QXmlReader
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
virtual ~QXmlReader() {}
|
|
Packit |
1c1d7e |
virtual bool feature( const QString& name, bool *ok = 0 ) const = 0;
|
|
Packit |
1c1d7e |
virtual void setFeature( const QString& name, bool value ) = 0;
|
|
Packit |
1c1d7e |
virtual bool hasFeature( const QString& name ) const = 0;
|
|
Packit |
1c1d7e |
virtual void* property( const QString& name, bool *ok = 0 ) const = 0;
|
|
Packit |
1c1d7e |
virtual void setProperty( const QString& name, void* value ) = 0;
|
|
Packit |
1c1d7e |
virtual bool hasProperty( const QString& name ) const = 0;
|
|
Packit |
1c1d7e |
virtual void setEntityResolver( QXmlEntityResolver* handler ) = 0;
|
|
Packit |
1c1d7e |
virtual QXmlEntityResolver* entityResolver() const = 0;
|
|
Packit |
1c1d7e |
virtual void setDTDHandler( QXmlDTDHandler* handler ) = 0;
|
|
Packit |
1c1d7e |
virtual QXmlDTDHandler* DTDHandler() const = 0;
|
|
Packit |
1c1d7e |
virtual void setContentHandler( QXmlContentHandler* handler ) = 0;
|
|
Packit |
1c1d7e |
virtual QXmlContentHandler* contentHandler() const = 0;
|
|
Packit |
1c1d7e |
virtual void setErrorHandler( QXmlErrorHandler* handler ) = 0;
|
|
Packit |
1c1d7e |
virtual QXmlErrorHandler* errorHandler() const = 0;
|
|
Packit |
1c1d7e |
virtual void setLexicalHandler( QXmlLexicalHandler* handler ) = 0;
|
|
Packit |
1c1d7e |
virtual QXmlLexicalHandler* lexicalHandler() const = 0;
|
|
Packit |
1c1d7e |
virtual void setDeclHandler( QXmlDeclHandler* handler ) = 0;
|
|
Packit |
1c1d7e |
virtual QXmlDeclHandler* declHandler() const = 0;
|
|
Packit |
1c1d7e |
virtual bool parse( const QXmlInputSource& input ) = 0;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class QM_EXPORT QXmlSimpleReader : public QXmlReader
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
QXmlSimpleReader();
|
|
Packit |
1c1d7e |
virtual ~QXmlSimpleReader();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool feature( const QString& name, bool *ok = 0 ) const;
|
|
Packit |
1c1d7e |
void setFeature( const QString& name, bool value );
|
|
Packit |
1c1d7e |
bool hasFeature( const QString& name ) const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void* property( const QString& name, bool *ok = 0 ) const;
|
|
Packit |
1c1d7e |
void setProperty( const QString& name, void* value );
|
|
Packit |
1c1d7e |
bool hasProperty( const QString& name ) const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void setEntityResolver( QXmlEntityResolver* handler );
|
|
Packit |
1c1d7e |
QXmlEntityResolver* entityResolver() const;
|
|
Packit |
1c1d7e |
void setDTDHandler( QXmlDTDHandler* handler );
|
|
Packit |
1c1d7e |
QXmlDTDHandler* DTDHandler() const;
|
|
Packit |
1c1d7e |
void setContentHandler( QXmlContentHandler* handler );
|
|
Packit |
1c1d7e |
QXmlContentHandler* contentHandler() const;
|
|
Packit |
1c1d7e |
void setErrorHandler( QXmlErrorHandler* handler );
|
|
Packit |
1c1d7e |
QXmlErrorHandler* errorHandler() const;
|
|
Packit |
1c1d7e |
void setLexicalHandler( QXmlLexicalHandler* handler );
|
|
Packit |
1c1d7e |
QXmlLexicalHandler* lexicalHandler() const;
|
|
Packit |
1c1d7e |
void setDeclHandler( QXmlDeclHandler* handler );
|
|
Packit |
1c1d7e |
QXmlDeclHandler* declHandler() const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool parse( const QXmlInputSource& input );
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
// variables
|
|
Packit |
1c1d7e |
QXmlContentHandler* contentHnd;
|
|
Packit |
1c1d7e |
QXmlErrorHandler* errorHnd;
|
|
Packit |
1c1d7e |
QXmlDTDHandler* dtdHnd;
|
|
Packit |
1c1d7e |
QXmlEntityResolver* entityRes;
|
|
Packit |
1c1d7e |
QXmlLexicalHandler* lexicalHnd;
|
|
Packit |
1c1d7e |
QXmlDeclHandler* declHnd;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QChar c; // the character at reading position
|
|
Packit |
1c1d7e |
int lineNr; // number of line
|
|
Packit |
1c1d7e |
int columnNr; // position in line
|
|
Packit |
1c1d7e |
int pos; // position in string
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
int namePos;
|
|
Packit |
1c1d7e |
QChar nameArray[256]; // only used for names
|
|
Packit |
1c1d7e |
QString nameValue; // only used for names
|
|
Packit |
1c1d7e |
int refPos;
|
|
Packit |
1c1d7e |
QChar refArray[256]; // only used for references
|
|
Packit |
1c1d7e |
QString refValue; // only used for references
|
|
Packit |
1c1d7e |
int stringPos;
|
|
Packit |
1c1d7e |
QChar stringArray[256]; // used for any other strings that are parsed
|
|
Packit |
1c1d7e |
QString stringValue; // used for any other strings that are parsed
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QString xml;
|
|
Packit |
1c1d7e |
int xmlLength;
|
|
Packit |
1c1d7e |
QString xmlRef; // used for parsing of entity references
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QValueStack<QString> tags;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QXmlSimpleReaderPrivate* d;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static const QChar QEOF;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// inlines
|
|
Packit |
1c1d7e |
virtual bool is_S( const QChar& );
|
|
Packit |
1c1d7e |
virtual bool is_Letter( const QChar& );
|
|
Packit |
1c1d7e |
virtual bool is_NameBeginning( const QChar& );
|
|
Packit |
1c1d7e |
virtual bool is_Digit( const QChar& );
|
|
Packit |
1c1d7e |
virtual bool is_CombiningChar( const QChar& );
|
|
Packit |
1c1d7e |
virtual bool is_Extender( const QChar& );
|
|
Packit |
1c1d7e |
virtual bool is_NameChar( const QChar& );
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QString& string();
|
|
Packit |
1c1d7e |
void stringClear();
|
|
Packit |
1c1d7e |
void stringAddC();
|
|
Packit |
1c1d7e |
void stringAddC(const QChar&);
|
|
Packit |
1c1d7e |
QString& name();
|
|
Packit |
1c1d7e |
void nameClear();
|
|
Packit |
1c1d7e |
void nameAddC();
|
|
Packit |
1c1d7e |
void nameAddC(const QChar&);
|
|
Packit |
1c1d7e |
QString& ref();
|
|
Packit |
1c1d7e |
void refClear();
|
|
Packit |
1c1d7e |
void refAddC();
|
|
Packit |
1c1d7e |
void refAddC(const QChar&);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// used by parseReference() and parsePEReference()
|
|
Packit |
1c1d7e |
enum EntityRecognitionContext { InContent, InAttributeValue, InEntityValue, InDTD };
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// private functions
|
|
Packit |
1c1d7e |
void eat_ws();
|
|
Packit |
1c1d7e |
void next_eat_ws();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void next();
|
|
Packit |
1c1d7e |
bool atEnd();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void init( const QXmlInputSource& i );
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool entityExist( const QString& ) const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool parseProlog();
|
|
Packit |
1c1d7e |
bool parseElement();
|
|
Packit |
1c1d7e |
bool parseElementEmptyTag( bool &t, QString &uri, QString &lname );
|
|
Packit |
1c1d7e |
bool parseElementETagBegin2( QString &uri, QString &lname );
|
|
Packit |
1c1d7e |
bool parseElementAttribute( QString &prefix, QString &uri, QString &lname );
|
|
Packit |
1c1d7e |
bool parseMisc();
|
|
Packit |
1c1d7e |
bool parseContent();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool parsePI(bool xmldecl=FALSE);
|
|
Packit |
1c1d7e |
bool parseDoctype();
|
|
Packit |
1c1d7e |
bool parseComment();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool parseName( bool useRef=FALSE );
|
|
Packit |
1c1d7e |
bool parseNmtoken();
|
|
Packit |
1c1d7e |
bool parseAttribute();
|
|
Packit |
1c1d7e |
bool parseReference( bool &charDataRead, EntityRecognitionContext context );
|
|
Packit |
1c1d7e |
bool processReference( bool &charDataRead, EntityRecognitionContext context );
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool parseExternalID( bool allowPublicID = FALSE );
|
|
Packit |
1c1d7e |
bool parsePEReference( EntityRecognitionContext context );
|
|
Packit |
1c1d7e |
bool parseMarkupdecl();
|
|
Packit |
1c1d7e |
bool parseAttlistDecl();
|
|
Packit |
1c1d7e |
bool parseAttType();
|
|
Packit |
1c1d7e |
bool parseAttValue();
|
|
Packit |
1c1d7e |
bool parseElementDecl();
|
|
Packit |
1c1d7e |
bool parseNotationDecl();
|
|
Packit |
1c1d7e |
bool parseChoiceSeq();
|
|
Packit |
1c1d7e |
bool parseEntityDecl();
|
|
Packit |
1c1d7e |
bool parseEntityValue();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool parseString( const QString& s );
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void reportParseError();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
friend class QXmlSimpleReaderPrivate;
|
|
Packit |
1c1d7e |
friend class QXmlLocator;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//
|
|
Packit |
1c1d7e |
// SAX Locator
|
|
Packit |
1c1d7e |
//
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class QM_EXPORT QXmlLocator
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
QXmlLocator( QXmlSimpleReader* parent )
|
|
Packit |
1c1d7e |
{ reader = parent; }
|
|
Packit |
1c1d7e |
~QXmlLocator()
|
|
Packit |
1c1d7e |
{ }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
int columnNumber();
|
|
Packit |
1c1d7e |
int lineNumber();
|
|
Packit |
1c1d7e |
// QString getPublicId()
|
|
Packit |
1c1d7e |
// QString getSystemId()
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
QXmlSimpleReader* reader;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//QXmlLocatorPrivate *d;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//
|
|
Packit |
1c1d7e |
// SAX handler classes
|
|
Packit |
1c1d7e |
//
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class QM_EXPORT QXmlContentHandler
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
virtual ~QXmlContentHandler() {}
|
|
Packit |
1c1d7e |
virtual void setDocumentLocator( QXmlLocator* locator ) = 0;
|
|
Packit |
1c1d7e |
virtual bool startDocument() = 0;
|
|
Packit |
1c1d7e |
virtual bool endDocument() = 0;
|
|
Packit |
1c1d7e |
virtual bool startPrefixMapping( const QString& prefix, const QString& uri ) = 0;
|
|
Packit |
1c1d7e |
virtual bool endPrefixMapping( const QString& prefix ) = 0;
|
|
Packit |
1c1d7e |
virtual bool startElement( const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts ) = 0;
|
|
Packit |
1c1d7e |
virtual bool endElement( const QString& namespaceURI, const QString& localName, const QString& qName ) = 0;
|
|
Packit |
1c1d7e |
virtual bool characters( const QString& ch ) = 0;
|
|
Packit |
1c1d7e |
virtual bool ignorableWhitespace( const QString& ch ) = 0;
|
|
Packit |
1c1d7e |
virtual bool processingInstruction( const QString& target, const QString& data ) = 0;
|
|
Packit |
1c1d7e |
virtual bool skippedEntity( const QString& name ) = 0;
|
|
Packit |
1c1d7e |
virtual QString errorString() = 0;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class QM_EXPORT QXmlErrorHandler
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
virtual ~QXmlErrorHandler() {}
|
|
Packit |
1c1d7e |
virtual bool warning( const QXmlParseException& exception ) = 0;
|
|
Packit |
1c1d7e |
virtual bool error( const QXmlParseException& exception ) = 0;
|
|
Packit |
1c1d7e |
virtual bool fatalError( const QXmlParseException& exception ) = 0;
|
|
Packit |
1c1d7e |
virtual QString errorString() = 0;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class QM_EXPORT QXmlDTDHandler
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
virtual ~QXmlDTDHandler() {}
|
|
Packit |
1c1d7e |
virtual bool notationDecl( const QString& name, const QString& publicId, const QString& systemId ) = 0;
|
|
Packit |
1c1d7e |
virtual bool unparsedEntityDecl( const QString& name, const QString& publicId, const QString& systemId, const QString& notationName ) = 0;
|
|
Packit |
1c1d7e |
virtual QString errorString() = 0;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class QM_EXPORT QXmlEntityResolver
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
virtual ~QXmlEntityResolver() {}
|
|
Packit |
1c1d7e |
virtual bool resolveEntity( const QString& publicId, const QString& systemId, QXmlInputSource* &ret ) = 0;
|
|
Packit |
1c1d7e |
virtual QString errorString() = 0;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class QM_EXPORT QXmlLexicalHandler
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
virtual ~QXmlLexicalHandler() {}
|
|
Packit |
1c1d7e |
virtual bool startDTD( const QString& name, const QString& publicId, const QString& systemId ) = 0;
|
|
Packit |
1c1d7e |
virtual bool endDTD() = 0;
|
|
Packit |
1c1d7e |
// virtual bool startEntity( const QString& name ) = 0;
|
|
Packit |
1c1d7e |
// virtual bool endEntity( const QString& name ) = 0;
|
|
Packit |
1c1d7e |
virtual bool startCDATA() = 0;
|
|
Packit |
1c1d7e |
virtual bool endCDATA() = 0;
|
|
Packit |
1c1d7e |
virtual bool comment( const QString& ch ) = 0;
|
|
Packit |
1c1d7e |
virtual QString errorString() = 0;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class QM_EXPORT QXmlDeclHandler
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
virtual ~QXmlDeclHandler() {}
|
|
Packit |
1c1d7e |
virtual bool attributeDecl( const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value ) = 0;
|
|
Packit |
1c1d7e |
virtual bool internalEntityDecl( const QString& name, const QString& value ) = 0;
|
|
Packit |
1c1d7e |
virtual bool externalEntityDecl( const QString& name, const QString& publicId, const QString& systemId ) = 0;
|
|
Packit |
1c1d7e |
virtual QString errorString() = 0;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class QM_EXPORT QXmlDefaultHandler : public QXmlContentHandler, public QXmlErrorHandler, public QXmlDTDHandler, public QXmlEntityResolver, public QXmlLexicalHandler, public QXmlDeclHandler
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
QXmlDefaultHandler() { }
|
|
Packit |
1c1d7e |
virtual ~QXmlDefaultHandler() { }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void setDocumentLocator( QXmlLocator* locator );
|
|
Packit |
1c1d7e |
bool startDocument();
|
|
Packit |
1c1d7e |
bool endDocument();
|
|
Packit |
1c1d7e |
bool startPrefixMapping( const QString& prefix, const QString& uri );
|
|
Packit |
1c1d7e |
bool endPrefixMapping( const QString& prefix );
|
|
Packit |
1c1d7e |
bool startElement( const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts );
|
|
Packit |
1c1d7e |
bool endElement( const QString& namespaceURI, const QString& localName, const QString& qName );
|
|
Packit |
1c1d7e |
bool characters( const QString& ch );
|
|
Packit |
1c1d7e |
bool ignorableWhitespace( const QString& ch );
|
|
Packit |
1c1d7e |
bool processingInstruction( const QString& target, const QString& data );
|
|
Packit |
1c1d7e |
bool skippedEntity( const QString& name );
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool warning( const QXmlParseException& exception );
|
|
Packit |
1c1d7e |
bool error( const QXmlParseException& exception );
|
|
Packit |
1c1d7e |
bool fatalError( const QXmlParseException& exception );
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool notationDecl( const QString& name, const QString& publicId, const QString& systemId );
|
|
Packit |
1c1d7e |
bool unparsedEntityDecl( const QString& name, const QString& publicId, const QString& systemId, const QString& notationName );
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool resolveEntity( const QString& publicId, const QString& systemId, QXmlInputSource* &ret );
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool startDTD( const QString& name, const QString& publicId, const QString& systemId );
|
|
Packit |
1c1d7e |
bool endDTD();
|
|
Packit |
1c1d7e |
// bool startEntity( const QString& name );
|
|
Packit |
1c1d7e |
// bool endEntity( const QString& name );
|
|
Packit |
1c1d7e |
bool startCDATA();
|
|
Packit |
1c1d7e |
bool endCDATA();
|
|
Packit |
1c1d7e |
bool comment( const QString& ch );
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool attributeDecl( const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value );
|
|
Packit |
1c1d7e |
bool internalEntityDecl( const QString& name, const QString& value );
|
|
Packit |
1c1d7e |
bool externalEntityDecl( const QString& name, const QString& publicId, const QString& systemId );
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QString errorString();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
//QXmlDefaultHandlerPrivate *d;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#ifdef _WS_QWS_
|
|
Packit |
1c1d7e |
#ifdef QT_XML_CPP
|
|
Packit |
1c1d7e |
#define inline
|
|
Packit |
1c1d7e |
#else
|
|
Packit |
1c1d7e |
#define QT_NO_XML_INLINE
|
|
Packit |
1c1d7e |
#endif
|
|
Packit |
1c1d7e |
#endif
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#ifndef QT_NO_XML_INLINE
|
|
Packit |
1c1d7e |
//
|
|
Packit |
1c1d7e |
// inlines
|
|
Packit |
1c1d7e |
//
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
inline bool QXmlSimpleReader::is_S(const QChar& ch)
|
|
Packit |
1c1d7e |
{ return ch==' ' || ch=='\t' || ch=='\n' || ch=='\r'; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
inline bool QXmlSimpleReader::is_Letter( const QChar& ch )
|
|
Packit |
1c1d7e |
{ return ch.isLetter(); }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
inline bool QXmlSimpleReader::is_NameBeginning( const QChar& ch )
|
|
Packit |
1c1d7e |
{ return ch=='_' || ch==':' || ch.isLetter(); }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
inline bool QXmlSimpleReader::is_Digit( const QChar& ch )
|
|
Packit |
1c1d7e |
{ return ch.isDigit(); }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
inline bool QXmlSimpleReader::is_CombiningChar( const QChar& )
|
|
Packit |
1c1d7e |
{ return FALSE; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
inline bool QXmlSimpleReader::is_Extender( const QChar& )
|
|
Packit |
1c1d7e |
{ return FALSE; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
inline bool QXmlSimpleReader::is_NameChar( const QChar& ch )
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return ch=='.' || ch=='-' || ch=='_' || ch==':' ||
|
|
Packit |
1c1d7e |
is_Letter(ch) || is_Digit(ch) ||
|
|
Packit |
1c1d7e |
is_CombiningChar(ch) || is_Extender(ch);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
inline void QXmlSimpleReader::next()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if ( !xmlRef.isEmpty() ) {
|
|
Packit |
1c1d7e |
c = xmlRef[0];
|
|
Packit |
1c1d7e |
xmlRef.remove( 0, 1 );
|
|
Packit |
1c1d7e |
} else {
|
|
Packit |
1c1d7e |
if ( c=='\n' || c=='\r' ) {
|
|
Packit |
1c1d7e |
lineNr++;
|
|
Packit |
1c1d7e |
columnNr = -1;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if ( pos >= xmlLength ) {
|
|
Packit |
1c1d7e |
c = QEOF;
|
|
Packit |
1c1d7e |
} else {
|
|
Packit |
1c1d7e |
c = xml[pos];
|
|
Packit |
1c1d7e |
columnNr++;
|
|
Packit |
1c1d7e |
pos++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
inline bool QXmlSimpleReader::atEnd()
|
|
Packit |
1c1d7e |
{ return c == QEOF; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
inline void QXmlSimpleReader::eat_ws()
|
|
Packit |
1c1d7e |
{ while ( !atEnd() && is_S(c) ) next(); }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
inline void QXmlSimpleReader::next_eat_ws()
|
|
Packit |
1c1d7e |
{ next(); eat_ws(); }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// use buffers instead of QString::operator+= when single characters are read
|
|
Packit |
1c1d7e |
inline QString& QXmlSimpleReader::string()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
stringValue += QString( stringArray, stringPos );
|
|
Packit |
1c1d7e |
stringPos = 0;
|
|
Packit |
1c1d7e |
return stringValue;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
inline QString& QXmlSimpleReader::name()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
nameValue += QString( nameArray, namePos );
|
|
Packit |
1c1d7e |
namePos = 0;
|
|
Packit |
1c1d7e |
return nameValue;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
inline QString& QXmlSimpleReader::ref()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
refValue += QString( refArray, refPos );
|
|
Packit |
1c1d7e |
refPos = 0;
|
|
Packit |
1c1d7e |
return refValue;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
inline void QXmlSimpleReader::stringClear()
|
|
Packit |
1c1d7e |
{ stringValue = ""; stringPos = 0; }
|
|
Packit |
1c1d7e |
inline void QXmlSimpleReader::nameClear()
|
|
Packit |
1c1d7e |
{ nameValue = ""; namePos = 0; }
|
|
Packit |
1c1d7e |
inline void QXmlSimpleReader::refClear()
|
|
Packit |
1c1d7e |
{ refValue = ""; refPos = 0; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
inline void QXmlSimpleReader::stringAddC()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if ( stringPos >= 256 ) {
|
|
Packit |
1c1d7e |
stringValue += QString( stringArray, stringPos );
|
|
Packit |
1c1d7e |
stringPos = 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
stringArray[stringPos++] = c;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
inline void QXmlSimpleReader::nameAddC()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if ( namePos >= 256 ) {
|
|
Packit |
1c1d7e |
nameValue += QString( nameArray, namePos );
|
|
Packit |
1c1d7e |
namePos = 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
nameArray[namePos++] = c;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
inline void QXmlSimpleReader::refAddC()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if ( refPos >= 256 ) {
|
|
Packit |
1c1d7e |
refValue += QString( refArray, refPos );
|
|
Packit |
1c1d7e |
refPos = 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
refArray[refPos++] = c;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
inline void QXmlSimpleReader::stringAddC(const QChar& ch)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if ( stringPos >= 256 ) {
|
|
Packit |
1c1d7e |
stringValue += QString( stringArray, stringPos );
|
|
Packit |
1c1d7e |
stringPos = 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
stringArray[stringPos++] = ch;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
inline void QXmlSimpleReader::nameAddC(const QChar& ch)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if ( namePos >= 256 ) {
|
|
Packit |
1c1d7e |
nameValue += QString( nameArray, namePos );
|
|
Packit |
1c1d7e |
namePos = 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
nameArray[namePos++] = ch;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
inline void QXmlSimpleReader::refAddC(const QChar& ch)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if ( refPos >= 256 ) {
|
|
Packit |
1c1d7e |
refValue += QString( refArray, refPos );
|
|
Packit |
1c1d7e |
refPos = 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
refArray[refPos++] = ch;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
#endif
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#ifdef _WS_QWS_
|
|
Packit |
1c1d7e |
#ifdef QT_XML_CPP
|
|
Packit |
1c1d7e |
#undef inline
|
|
Packit |
1c1d7e |
#endif
|
|
Packit |
1c1d7e |
#endif
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#endif //QT_NO_XML
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#endif
|