summaryrefslogtreecommitdiffstats
path: root/tqtinterface/qt4/src/xml
diff options
context:
space:
mode:
authorMichele Calgaro <michele.calgaro@yahoo.it>2019-04-21 23:22:20 +0900
committerMichele Calgaro <michele.calgaro@yahoo.it>2019-04-21 23:22:20 +0900
commitdba036816b279bc1539a9f3894fbc414665d2bce (patch)
tree29e4bf00bafe515e7afdd02168d65a47a3f9fbc0 /tqtinterface/qt4/src/xml
parent6f1b4f0c7505a049d992a33f6e409b7c75732d4b (diff)
downloadexperimental-dba036816b279bc1539a9f3894fbc414665d2bce.tar.gz
experimental-dba036816b279bc1539a9f3894fbc414665d2bce.zip
Removed unnecessary and/or TDE-unrelated code.
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it> Signed-off-by: Slávek Banko <slavek.banko@axis.cz>
Diffstat (limited to 'tqtinterface/qt4/src/xml')
-rw-r--r--tqtinterface/qt4/src/xml/qt_xml.pri10
-rw-r--r--tqtinterface/qt4/src/xml/tqdom.cpp7092
-rw-r--r--tqtinterface/qt4/src/xml/tqdom.h678
-rw-r--r--tqtinterface/qt4/src/xml/tqsvgdevice.cpp1591
-rw-r--r--tqtinterface/qt4/src/xml/tqsvgdevice_p.h140
-rw-r--r--tqtinterface/qt4/src/xml/tqxml.cpp7635
-rw-r--r--tqtinterface/qt4/src/xml/tqxml.h531
7 files changed, 0 insertions, 17677 deletions
diff --git a/tqtinterface/qt4/src/xml/qt_xml.pri b/tqtinterface/qt4/src/xml/qt_xml.pri
deleted file mode 100644
index 8299f1a..0000000
--- a/tqtinterface/qt4/src/xml/qt_xml.pri
+++ /dev/null
@@ -1,10 +0,0 @@
-# Qt xml module
-
-xml {
- HEADERS += $$XML_H/tqxml.h $$XML_H/tqdom.h $$XML_CPP/tqsvgdevice_p.h
- SOURCES += $$XML_CPP/tqxml.cpp $$XML_CPP/tqdom.cpp $$XML_CPP/tqsvgdevice.cpp
- win32-borland {
- TQMAKE_CFLAGS_WARN_ON += -w-use
- TQMAKE_CXXFLAGS_WARN_ON += -w-use
- }
-}
diff --git a/tqtinterface/qt4/src/xml/tqdom.cpp b/tqtinterface/qt4/src/xml/tqdom.cpp
deleted file mode 100644
index ddc64de..0000000
--- a/tqtinterface/qt4/src/xml/tqdom.cpp
+++ /dev/null
@@ -1,7092 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQDomDocument and related classes.
-**
-** Created : 000518
-**
-** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
-**
-** This file is part of the xml module of the TQt GUI Toolkit.
-**
-** This file may be used under the terms of the GNU General
-** Public License versions 2.0 or 3.0 as published by the Free
-** Software Foundation and appearing in the files LICENSE.GPL2
-** and LICENSE.GPL3 included in the packaging of this file.
-** Alternatively you may (at your option) use any later version
-** of the GNU General Public License if such license has been
-** publicly approved by Trolltech ASA (or its successors, if any)
-** and the KDE Free TQt Foundation.
-**
-** Please review the following information to ensure GNU General
-** Public Licensing requirements will be met:
-** http://trolltech.com/products/qt/licenses/licensing/opensource/.
-** If you are unsure which license is appropriate for your use, please
-** review the following information:
-** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
-** or contact the sales department at sales@trolltech.com.
-**
-** This file may be used under the terms of the Q Public License as
-** defined by Trolltech ASA and appearing in the file LICENSE.TQPL
-** included in the packaging of this file. Licensees holding valid TQt
-** Commercial licenses may use this file in accordance with the TQt
-** Commercial License Agreement provided with the Software.
-**
-** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
-** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
-** herein.
-**
-**********************************************************************/
-
-#include "tqdom.h"
-
-#ifndef TQT_NO_DOM
-
-#include "tqxml.h"
-#include "tqptrlist.h"
-#include "tqdict.h"
-#include "tqtextstream.h"
-#include "tqtextcodec.h"
-#include "tqiodevice.h"
-#include "tqregexp.h"
-#include "tqbuffer.h"
-
-/*
- ### old todo comments -- I don't know if they still apply...
-
- If the document dies, remove all pointers to it from tqchildren
- which can not be deleted at this time.
-
- If a node dies and has direct tqchildren which can not be deleted,
- then remove the pointer to the parent.
-
- createElement and friends create double reference counts.
-*/
-
-/*
- Reference counting:
-
- Some simple rules:
- 1) If an intern object returns a pointer to another intern object
- then the reference count of the returned object is not increased.
- 2) If an extern object is created and gets a pointer to some intern
- object, then the extern object increases the intern objects reference count.
- 3) If an extern object is deleted, then it decreases the reference count
- on its associated intern object and deletes it if nobody else hold references
- on the intern object.
-*/
-
-
-/*
- Helper to split a qualified name in the prefix and local name.
-*/
-static void qt_split_namespace( TQString& prefix, TQString& name, const TQString& qName, bool hasURI )
-{
- int i = qName.find( ':' );
- if ( i == -1 ) {
- if ( hasURI )
- prefix = "";
- else
- prefix = TQString::null;
- name = qName;
- } else {
- prefix = qName.left( i );
- name = qName.mid( i + 1 );
- }
-}
-
-/*
- Counter for the TQDomNodeListPrivate timestamps.
-*/
-static volatile long qt_nodeListTime = 0;
-
-/**************************************************************
- *
- * Private class declerations
- *
- **************************************************************/
-
-class TQDomImplementationPrivate : public TQShared
-{
-public:
- TQDomImplementationPrivate();
- ~TQDomImplementationPrivate();
-
- TQDomImplementationPrivate* clone();
-
-};
-
-class TQDomNodePrivate : public TQShared
-{
-public:
- TQDomNodePrivate( TQDomDocumentPrivate*, TQDomNodePrivate* parent = 0 );
- TQDomNodePrivate( TQDomNodePrivate* n, bool deep );
- virtual ~TQDomNodePrivate();
-
- TQString nodeName() const { return name; }
- TQString nodeValue() const { return value; }
- virtual void setNodeValue( const TQString& v ) { value = v; }
-
- TQDomDocumentPrivate* ownerDocument();
- void setOwnerDocument( TQDomDocumentPrivate* doc );
-
- virtual TQDomNamedNodeMapPrivate* attributes();
- virtual bool hasAttributes() { return FALSE; }
- virtual TQDomNodePrivate* insertBefore( TQDomNodePrivate* newChild, TQDomNodePrivate* refChild );
- virtual TQDomNodePrivate* insertAfter( TQDomNodePrivate* newChild, TQDomNodePrivate* refChild );
- virtual TQDomNodePrivate* replaceChild( TQDomNodePrivate* newChild, TQDomNodePrivate* oldChild );
- virtual TQDomNodePrivate* removeChild( TQDomNodePrivate* oldChild );
- virtual TQDomNodePrivate* appendChild( TQDomNodePrivate* newChild );
-
- TQDomNodePrivate* namedItem( const TQString& name );
-
- virtual TQDomNodePrivate* cloneNode( bool deep = TRUE );
- virtual void normalize();
- virtual void clear();
-
- TQDomNodePrivate* parent() { return hasParent ? ownerNode : 0; }
- void setParent( TQDomNodePrivate *p ) { ownerNode = p; hasParent = TRUE; }
- void setNoParent() {
- ownerNode = hasParent ? (TQDomNodePrivate*)ownerDocument() : 0;
- hasParent = FALSE;
- }
-
- // Dynamic cast
- virtual bool isAttr() { return FALSE; }
- virtual bool isCDATASection() { return FALSE; }
- virtual bool isDocumentFragment() { return FALSE; }
- virtual bool isDocument() { return FALSE; }
- virtual bool isDocumentType() { return FALSE; }
- virtual bool isElement() { return FALSE; }
- virtual bool isEntityReference() { return FALSE; }
- virtual bool isText() { return FALSE; }
- virtual bool isEntity() { return FALSE; }
- virtual bool isNotation() { return FALSE; }
- virtual bool isProcessingInstruction() { return FALSE; }
- virtual bool isCharacterData() { return FALSE; }
- virtual bool isComment() { return FALSE; }
- virtual TQDomNode::NodeType nodeType() const { return TQDomNode::BaseNode; }
-
- virtual void save( TQTextStream&, int, int ) const;
-
- // Variables
- TQDomNodePrivate* prev;
- TQDomNodePrivate* next;
- TQDomNodePrivate* ownerNode; // either the node's parent or the node's owner document
- TQDomNodePrivate* first;
- TQDomNodePrivate* last;
-
- TQString name; // this is the local name if prefix != null
- TQString value;
- TQString prefix; // set this only for ElementNode and AttributeNode
- TQString namespaceURI; // set this only for ElementNode and AttributeNode
- bool createdWithDom1Interface;
- bool hasParent;
-};
-
-class TQDomNodeListPrivate : public TQShared
-{
-public:
- TQDomNodeListPrivate( TQDomNodePrivate* );
- TQDomNodeListPrivate( TQDomNodePrivate*, const TQString& );
- TQDomNodeListPrivate( TQDomNodePrivate*, const TQString&, const TQString& );
- virtual ~TQDomNodeListPrivate();
-
- virtual bool operator== ( const TQDomNodeListPrivate& ) const;
- virtual bool operator!= ( const TQDomNodeListPrivate& ) const;
-
- void createList();
- virtual TQDomNodePrivate* item( int index );
- virtual uint length() const;
-
- TQDomNodePrivate* node_impl;
- TQString tagname;
- TQString nsURI;
- TQPtrList<TQDomNodePrivate> list;
- long timestamp;
-};
-
-class TQDomNamedNodeMapPrivate : public TQShared
-{
-public:
- TQDomNamedNodeMapPrivate( TQDomNodePrivate* );
- ~TQDomNamedNodeMapPrivate();
-
- TQDomNodePrivate* namedItem( const TQString& name ) const;
- TQDomNodePrivate* namedItemNS( const TQString& nsURI, const TQString& localName ) const;
- TQDomNodePrivate* setNamedItem( TQDomNodePrivate* arg );
- TQDomNodePrivate* setNamedItemNS( TQDomNodePrivate* arg );
- TQDomNodePrivate* removeNamedItem( const TQString& name );
- TQDomNodePrivate* item( int index ) const;
- uint length() const;
- bool contains( const TQString& name ) const;
- bool containsNS( const TQString& nsURI, const TQString & localName ) const;
-
- /**
- * Remove all tqchildren from the map.
- */
- void clearMap();
- bool isReadOnly() { return readonly; }
- void setReadOnly( bool r ) { readonly = r; }
- bool isAppendToParent() { return appendToParent; }
- /**
- * If TRUE, then the node will redirect insert/remove calls
- * to its parent by calling TQDomNodePrivate::appendChild or removeChild.
- * In addition the map wont increase or decrease the reference count
- * of the nodes it contains.
- *
- * By default this value is FALSE and the map will handle reference counting
- * by itself.
- */
- void setAppendToParent( bool b ) { appendToParent = b; }
-
- /**
- * Creates a copy of the map. It is a deep copy
- * that means that all tqchildren are cloned.
- */
- TQDomNamedNodeMapPrivate* clone( TQDomNodePrivate* parent );
-
- // Variables
- TQDict<TQDomNodePrivate> map;
- TQDomNodePrivate* parent;
- bool readonly;
- bool appendToParent;
-};
-
-class TQDomDocumentTypePrivate : public TQDomNodePrivate
-{
-public:
- TQDomDocumentTypePrivate( TQDomDocumentPrivate*, TQDomNodePrivate* parent = 0 );
- TQDomDocumentTypePrivate( TQDomDocumentTypePrivate* n, bool deep );
- ~TQDomDocumentTypePrivate();
- void init();
-
- // Reimplemented from TQDomNodePrivate
- TQDomNodePrivate* cloneNode( bool deep = TRUE );
- TQDomNodePrivate* insertBefore( TQDomNodePrivate* newChild, TQDomNodePrivate* refChild );
- TQDomNodePrivate* insertAfter( TQDomNodePrivate* newChild, TQDomNodePrivate* refChild );
- TQDomNodePrivate* replaceChild( TQDomNodePrivate* newChild, TQDomNodePrivate* oldChild );
- TQDomNodePrivate* removeChild( TQDomNodePrivate* oldChild );
- TQDomNodePrivate* appendChild( TQDomNodePrivate* newChild );
-
- bool isDocumentType() { return TRUE; }
- TQDomNode::NodeType nodeType() const { return TQDomNode::DocumentTypeNode; }
-
- void save( TQTextStream& s, int, int ) const;
-
- // Variables
- TQDomNamedNodeMapPrivate* entities;
- TQDomNamedNodeMapPrivate* notations;
- TQString publicId;
- TQString systemId;
- TQString internalSubset;
-};
-
-class TQDomDocumentFragmentPrivate : public TQDomNodePrivate
-{
-public:
- TQDomDocumentFragmentPrivate( TQDomDocumentPrivate*, TQDomNodePrivate* parent = 0 );
- TQDomDocumentFragmentPrivate( TQDomNodePrivate* n, bool deep );
- ~TQDomDocumentFragmentPrivate();
-
- // Reimplemented from TQDomNodePrivate
- TQDomNodePrivate* cloneNode( bool deep = TRUE );
- bool isDocumentFragment() { return TRUE; }
- TQDomNode::NodeType nodeType() const { return TQDomNode::DocumentFragmentNode; }
-};
-
-class TQDomCharacterDataPrivate : public TQDomNodePrivate
-{
-public:
- TQDomCharacterDataPrivate( TQDomDocumentPrivate*, TQDomNodePrivate* parent, const TQString& data );
- TQDomCharacterDataPrivate( TQDomCharacterDataPrivate* n, bool deep );
- ~TQDomCharacterDataPrivate();
-
- uint dataLength() const;
- TQString substringData( unsigned long offset, unsigned long count ) const;
- void appendData( const TQString& arg );
- void insertData( unsigned long offset, const TQString& arg );
- void deleteData( unsigned long offset, unsigned long count );
- void replaceData( unsigned long offset, unsigned long count, const TQString& arg );
-
- // Reimplemented from TQDomNodePrivate
- bool isCharacterData() { return TRUE; }
- TQDomNode::NodeType nodeType() const { return TQDomNode::CharacterDataNode; }
- TQDomNodePrivate* cloneNode( bool deep = TRUE );
-
-};
-
-class TQDomTextPrivate : public TQDomCharacterDataPrivate
-{
-public:
- TQDomTextPrivate( TQDomDocumentPrivate*, TQDomNodePrivate* parent, const TQString& value );
- TQDomTextPrivate( TQDomTextPrivate* n, bool deep );
- ~TQDomTextPrivate();
-
- TQDomTextPrivate* splitText( int offset );
-
- // Reimplemented from TQDomNodePrivate
- TQDomNodePrivate* cloneNode( bool deep = TRUE );
- bool isText() { return TRUE; }
- TQDomNode::NodeType nodeType() const { return TQDomNode::TextNode; }
- void save( TQTextStream& s, int, int ) const;
-
-};
-
-class TQDomAttrPrivate : public TQDomNodePrivate
-{
-public:
- TQDomAttrPrivate( TQDomDocumentPrivate*, TQDomNodePrivate*, const TQString& name );
- TQDomAttrPrivate( TQDomDocumentPrivate*, TQDomNodePrivate*, const TQString& nsURI, const TQString& qName );
- TQDomAttrPrivate( TQDomAttrPrivate* n, bool deep );
- ~TQDomAttrPrivate();
-
- bool specified() const;
-
- // Reimplemented from TQDomNodePrivate
- void setNodeValue( const TQString& v );
- TQDomNodePrivate* cloneNode( bool deep = TRUE );
- bool isAttr() { return TRUE; }
- TQDomNode::NodeType nodeType() const { return TQDomNode::AttributeNode; }
- void save( TQTextStream& s, int, int ) const;
-
- // Variables
- bool m_specified;
-};
-
-class TQDomElementPrivate : public TQDomNodePrivate
-{
-public:
- TQDomElementPrivate( TQDomDocumentPrivate*, TQDomNodePrivate* parent, const TQString& name );
- TQDomElementPrivate( TQDomDocumentPrivate*, TQDomNodePrivate* parent, const TQString& nsURI, const TQString& qName );
- TQDomElementPrivate( TQDomElementPrivate* n, bool deep );
- ~TQDomElementPrivate();
-
- TQString attribute( const TQString& name, const TQString& defValue ) const;
- TQString attributeNS( const TQString& nsURI, const TQString& localName, const TQString& defValue ) const;
- void setAttribute( const TQString& name, const TQString& value );
- void setAttributeNS( const TQString& nsURI, const TQString& qName, const TQString& newValue );
- void removeAttribute( const TQString& name );
- TQDomAttrPrivate* attributeNode( const TQString& name);
- TQDomAttrPrivate* attributeNodeNS( const TQString& nsURI, const TQString& localName );
- TQDomAttrPrivate* setAttributeNode( TQDomAttrPrivate* newAttr );
- TQDomAttrPrivate* setAttributeNodeNS( TQDomAttrPrivate* newAttr );
- TQDomAttrPrivate* removeAttributeNode( TQDomAttrPrivate* oldAttr );
- bool hasAttribute( const TQString& name );
- bool hasAttributeNS( const TQString& nsURI, const TQString& localName );
-
- TQString text();
-
- // Reimplemented from TQDomNodePrivate
- TQDomNamedNodeMapPrivate* attributes() { return m_attr; }
- bool hasAttributes() { return ( m_attr->length() > 0 ); }
- bool isElement() { return TRUE; }
- TQDomNode::NodeType nodeType() const { return TQDomNode::ElementNode; }
- TQDomNodePrivate* cloneNode( bool deep = TRUE );
- void save( TQTextStream& s, int, int ) const;
-
- // Variables
- TQDomNamedNodeMapPrivate* m_attr;
-};
-
-
-class TQDomCommentPrivate : public TQDomCharacterDataPrivate
-{
-public:
- TQDomCommentPrivate( TQDomDocumentPrivate*, TQDomNodePrivate* parent, const TQString& value );
- TQDomCommentPrivate( TQDomCommentPrivate* n, bool deep );
- ~TQDomCommentPrivate();
-
- // Reimplemented from TQDomNodePrivate
- TQDomNodePrivate* cloneNode( bool deep = TRUE );
- bool isComment() { return TRUE; }
- TQDomNode::NodeType nodeType() const { return TQDomNode::CommentNode; }
- void save( TQTextStream& s, int, int ) const;
-
-};
-
-class TQDomCDATASectionPrivate : public TQDomTextPrivate
-{
-public:
- TQDomCDATASectionPrivate( TQDomDocumentPrivate*, TQDomNodePrivate* parent, const TQString& value );
- TQDomCDATASectionPrivate( TQDomCDATASectionPrivate* n, bool deep );
- ~TQDomCDATASectionPrivate();
-
- // Reimplemented from TQDomNodePrivate
- TQDomNodePrivate* cloneNode( bool deep = TRUE );
- bool isCDATASection() { return TRUE; }
- TQDomNode::NodeType nodeType() const { return TQDomNode::CDATASectionNode; }
- void save( TQTextStream& s, int, int ) const;
-
-};
-
-class TQDomNotationPrivate : public TQDomNodePrivate
-{
-public:
- TQDomNotationPrivate( TQDomDocumentPrivate*, TQDomNodePrivate* parent, const TQString& name,
- const TQString& pub, const TQString& sys );
- TQDomNotationPrivate( TQDomNotationPrivate* n, bool deep );
- ~TQDomNotationPrivate();
-
- // Reimplemented from TQDomNodePrivate
- TQDomNodePrivate* cloneNode( bool deep = TRUE );
- bool isNotation() { return TRUE; }
- TQDomNode::NodeType nodeType() const { return TQDomNode::NotationNode; }
- void save( TQTextStream& s, int, int ) const;
-
- // Variables
- TQString m_sys;
- TQString m_pub;
-};
-
-class TQDomEntityPrivate : public TQDomNodePrivate
-{
-public:
- TQDomEntityPrivate( TQDomDocumentPrivate*, TQDomNodePrivate* parent, const TQString& name,
- const TQString& pub, const TQString& sys, const TQString& notation );
- TQDomEntityPrivate( TQDomEntityPrivate* n, bool deep );
- ~TQDomEntityPrivate();
-
- // Reimplemented from TQDomNodePrivate
- TQDomNodePrivate* cloneNode( bool deep = TRUE );
- bool isEntity() { return TRUE; }
- TQDomNode::NodeType nodeType() const { return TQDomNode::EntityNode; }
- void save( TQTextStream& s, int, int ) const;
-
- // Variables
- TQString m_sys;
- TQString m_pub;
- TQString m_notationName;
-};
-
-class TQDomEntityReferencePrivate : public TQDomNodePrivate
-{
-public:
- TQDomEntityReferencePrivate( TQDomDocumentPrivate*, TQDomNodePrivate* parent, const TQString& name );
- TQDomEntityReferencePrivate( TQDomNodePrivate* n, bool deep );
- ~TQDomEntityReferencePrivate();
-
- // Reimplemented from TQDomNodePrivate
- TQDomNodePrivate* cloneNode( bool deep = TRUE );
- bool isEntityReference() { return TRUE; }
- TQDomNode::NodeType nodeType() const { return TQDomNode::EntityReferenceNode; }
- void save( TQTextStream& s, int, int ) const;
-};
-
-class TQDomProcessingInstructionPrivate : public TQDomNodePrivate
-{
-public:
- TQDomProcessingInstructionPrivate( TQDomDocumentPrivate*, TQDomNodePrivate* parent, const TQString& target,
- const TQString& data);
- TQDomProcessingInstructionPrivate( TQDomProcessingInstructionPrivate* n, bool deep );
- ~TQDomProcessingInstructionPrivate();
-
- // Reimplemented from TQDomNodePrivate
- TQDomNodePrivate* cloneNode( bool deep = TRUE );
- bool isProcessingInstruction() { return TRUE; }
- TQDomNode::NodeType nodeType() const { return TQDomNode::ProcessingInstructionNode; }
- void save( TQTextStream& s, int, int ) const;
-};
-
-class TQDomDocumentPrivate : public TQDomNodePrivate
-{
-public:
- TQDomDocumentPrivate();
- TQDomDocumentPrivate( const TQString& name );
- TQDomDocumentPrivate( TQDomDocumentTypePrivate* dt );
- TQDomDocumentPrivate( TQDomDocumentPrivate* n, bool deep );
- ~TQDomDocumentPrivate();
-
- bool setContent( TQXmlInputSource *source, bool namespaceProcessing, TQString *errorMsg, int *errorLine, int *errorColumn );
- bool setContent( TQXmlInputSource *source, TQXmlReader *reader, TQString *errorMsg, int *errorLine, int *errorColumn );
-
- // Attributes
- TQDomDocumentTypePrivate* doctype() { return type; };
- TQDomImplementationPrivate* implementation() { return impl; };
- TQDomElementPrivate* documentElement();
-
- // Factories
- TQDomElementPrivate* createElement( const TQString& tagName );
- TQDomElementPrivate* createElementNS( const TQString& nsURI, const TQString& qName );
- TQDomDocumentFragmentPrivate* createDocumentFragment();
- TQDomTextPrivate* createTextNode( const TQString& data );
- TQDomCommentPrivate* createComment( const TQString& data );
- TQDomCDATASectionPrivate* createCDATASection( const TQString& data );
- TQDomProcessingInstructionPrivate* createProcessingInstruction( const TQString& target, const TQString& data );
- TQDomAttrPrivate* createAttribute( const TQString& name );
- TQDomAttrPrivate* createAttributeNS( const TQString& nsURI, const TQString& qName );
- TQDomEntityReferencePrivate* createEntityReference( const TQString& name );
-
- TQDomNodePrivate* importNode( const TQDomNodePrivate* importedNode, bool deep );
-
- // Reimplemented from TQDomNodePrivate
- TQDomNodePrivate* cloneNode( bool deep = TRUE );
- bool isDocument() { return TRUE; }
- TQDomNode::NodeType nodeType() const { return TQDomNode::DocumentNode; }
- void clear();
- void save( TQTextStream&, int, int ) const;
-
- // Variables
- TQDomImplementationPrivate* impl;
- TQDomDocumentTypePrivate* type;
-};
-
-/**************************************************************
- *
- * TQDomHandler
- *
- **************************************************************/
-
-class TQDomHandler : public TQXmlDefaultHandler
-{
-public:
- TQDomHandler( TQDomDocumentPrivate* d, bool namespaceProcessing );
- ~TQDomHandler();
-
- // content handler
- bool endDocument();
- bool startElement( const TQString& nsURI, const TQString& localName, const TQString& qName, const TQXmlAttributes& atts );
- bool endElement( const TQString& nsURI, const TQString& localName, const TQString& qName );
- bool characters( const TQString& ch );
- bool processingInstruction( const TQString& target, const TQString& data );
- bool skippedEntity( const TQString& name );
-
- // error handler
- bool fatalError( const TQXmlParseException& exception );
-
- // lexical handler
- bool startCDATA();
- bool endCDATA();
- bool startEntity( const TQString & );
- bool endEntity( const TQString & );
- bool startDTD( const TQString& name, const TQString& publicId, const TQString& systemId );
- bool comment( const TQString& ch );
-
- // decl handler
- bool externalEntityDecl( const TQString &name, const TQString &publicId, const TQString &systemId ) ;
-
- // DTD handler
- bool notationDecl( const TQString & name, const TQString & publicId, const TQString & systemId );
- bool unparsedEntityDecl( const TQString &name, const TQString &publicId, const TQString &systemId, const TQString &notationName ) ;
-
- TQString errorMsg;
- int errorLine;
- int errorColumn;
-
-private:
- TQDomDocumentPrivate *doc;
- TQDomNodePrivate *node;
- TQString entityName;
- bool cdata;
- bool nsProcessing;
-};
-
-/**************************************************************
- *
- * TQDomImplementationPrivate
- *
- **************************************************************/
-
-TQDomImplementationPrivate::TQDomImplementationPrivate()
-{
-}
-
-TQDomImplementationPrivate::~TQDomImplementationPrivate()
-{
-}
-
-TQDomImplementationPrivate* TQDomImplementationPrivate::clone()
-{
- TQDomImplementationPrivate* p = new TQDomImplementationPrivate;
- // We are not interested in this node
- p->deref();
- return p;
-}
-
-/**************************************************************
- *
- * TQDomImplementation
- *
- **************************************************************/
-
-/*!
- \class TQDomImplementation tqdom.h
- \reentrant
- \brief The TQDomImplementation class provides information about the
- features of the DOM implementation.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- This class describes the features that are supported by the DOM
- implementation. Currently the XML subset of DOM Level 1 and DOM
- Level 2 Core are supported.
-
- Normally you will use the function TQDomDocument::implementation()
- to get the implementation object.
-
- You can create a new document type with createDocumentType() and a
- new document with createDocument().
-
- For further information about the Document Object Model see \link
- http://www.w3.org/TR/REC-DOM-Level-1/\endlink and \link
- http://www.w3.org/TR/DOM-Level-2-Core/\endlink. For a more general
- introduction of the DOM implementation see the TQDomDocument
- documentation.
-
- \sa hasFeature()
-*/
-
-/*!
- Constructs a TQDomImplementation object.
-*/
-TQDomImplementation::TQDomImplementation()
-{
- impl = 0;
-}
-
-/*!
- Constructs a copy of \a x.
-*/
-TQDomImplementation::TQDomImplementation( const TQDomImplementation& x )
-{
- impl = x.impl;
- if ( impl )
- impl->ref();
-}
-
-TQDomImplementation::TQDomImplementation( TQDomImplementationPrivate* p )
-{
- // We want to be co-owners, so increase the reference count
- impl = p;
- if (impl)
- impl->ref();
-}
-
-/*!
- Assigns \a x to this DOM implementation.
-*/
-TQDomImplementation& TQDomImplementation::operator= ( const TQDomImplementation& x )
-{
- if ( x.impl )
- x.impl->ref(); // avoid x=x
- if ( impl && impl->deref() )
- delete impl;
- impl = x.impl;
-
- return *this;
-}
-
-/*!
- Returns TRUE if \a x and this DOM implementation object were
- created from the same TQDomDocument; otherwise returns FALSE.
-*/
-bool TQDomImplementation::operator==( const TQDomImplementation& x ) const
-{
- return ( impl == x.impl );
-}
-
-/*!
- Returns TRUE if \a x and this DOM implementation object were
- created from different TQDomDocuments; otherwise returns FALSE.
-*/
-bool TQDomImplementation::operator!=( const TQDomImplementation& x ) const
-{
- return ( impl != x.impl );
-}
-
-/*!
- Destroys the object and frees its resources.
-*/
-TQDomImplementation::~TQDomImplementation()
-{
- if ( impl && impl->deref() )
- delete impl;
-}
-
-/*!
- The function returns TRUE if TQDom implements the requested \a
- version of a \a feature; otherwise returns FALSE.
-
- The currently supported features and their versions:
- \table
- \header \i Feature \i Version
- \row \i XML \i 1.0
- \endtable
-*/
-bool TQDomImplementation::hasFeature( const TQString& feature, const TQString& version )
-{
- if ( feature == "XML" ) {
- if ( version.isEmpty() || version == "1.0" ) {
- return TRUE;
- }
- }
- // ### add DOM level 2 features
- return FALSE;
-}
-
-/*!
- Creates a document type node for the name \a qName.
-
- \a publicId specifies the public identifier of the external
- subset. If you specify TQString::null as the \a publicId, this
- means that the document type has no public identifier.
-
- \a systemId specifies the system identifier of the external
- subset. If you specify TQString::null as the \a systemId, this
- means that the document type has no system identifier.
-
- Since you cannot have a public identifier without a system
- identifier, the public identifier is set to TQString::null if there
- is no system identifier.
-
- DOM level 2 does not support any other document type declaration
- features.
-
- The only way you can use a document type that was created this
- way, is in combination with the createDocument() function to
- create a TQDomDocument with this document type.
-
- \sa createDocument();
-*/
-TQDomDocumentType TQDomImplementation::createDocumentType( const TQString& qName, const TQString& publicId, const TQString& systemId )
-{
- TQDomDocumentTypePrivate *dt = new TQDomDocumentTypePrivate( 0 );
- dt->name = qName;
- if ( systemId.isNull() ) {
- dt->publicId = TQString::null;
- dt->systemId = TQString::null;
- } else {
- dt->publicId = publicId;
- dt->systemId = systemId;
- }
- return TQDomDocumentType( dt );
-}
-
-/*!
- Creates a DOM document with the document type \a doctype. This
- function also adds a root element node with the qualified name \a
- qName and the namespace URI \a nsURI.
-*/
-TQDomDocument TQDomImplementation::createDocument( const TQString& nsURI, const TQString& qName, const TQDomDocumentType& doctype )
-{
- TQDomDocument doc( doctype );
- TQDomElement root = doc.createElementNS( nsURI, qName );
- doc.appendChild( root );
- return doc;
-}
-
-/*!
- Returns FALSE if the object was created by
- TQDomDocument::implementation(); otherwise returns TRUE.
-*/
-bool TQDomImplementation::isNull()
-{
- return ( impl == 0 );
-}
-
-/**************************************************************
- *
- * TQDomNodeListPrivate
- *
- **************************************************************/
-
-TQDomNodeListPrivate::TQDomNodeListPrivate( TQDomNodePrivate* n_impl )
-{
- node_impl = n_impl;
- if ( node_impl )
- node_impl->ref();
- timestamp = -1;
-}
-
-TQDomNodeListPrivate::TQDomNodeListPrivate( TQDomNodePrivate* n_impl, const TQString& name )
-{
- node_impl = n_impl;
- if ( node_impl )
- node_impl->ref();
- tagname = name;
- timestamp = -1;
-}
-
-TQDomNodeListPrivate::TQDomNodeListPrivate( TQDomNodePrivate* n_impl, const TQString& _nsURI, const TQString& localName )
-{
- node_impl = n_impl;
- if ( node_impl )
- node_impl->ref();
- tagname = localName;
- nsURI = _nsURI;
- timestamp = -1;
-}
-
-TQDomNodeListPrivate::~TQDomNodeListPrivate()
-{
- if ( node_impl && node_impl->deref() )
- delete node_impl;
-}
-
-bool TQDomNodeListPrivate::operator== ( const TQDomNodeListPrivate& other ) const
-{
- return ( node_impl == other.node_impl ) && ( tagname == other.tagname ) ;
-}
-
-bool TQDomNodeListPrivate::operator!= ( const TQDomNodeListPrivate& other ) const
-{
- return ( node_impl != other.node_impl ) || ( tagname != other.tagname ) ;
-}
-
-void TQDomNodeListPrivate::createList()
-{
- if ( !node_impl )
- return;
- timestamp = qt_nodeListTime;
- TQDomNodePrivate* p = node_impl->first;
-
- list.clear();
- if ( tagname.isNull() ) {
- while ( p ) {
- list.append( p );
- p = p->next;
- }
- } else if ( nsURI.isNull() ) {
- while ( p && p != node_impl ) {
- if ( p->isElement() && p->nodeName() == tagname ) {
- list.append( p );
- }
- if ( p->first )
- p = p->first;
- else if ( p->next )
- p = p->next;
- else {
- p = p->parent();
- while ( p && p != node_impl && !p->next )
- p = p->parent();
- if ( p && p != node_impl )
- p = p->next;
- }
- }
- } else {
- while ( p && p != node_impl ) {
- if ( p->isElement() && p->name==tagname && p->namespaceURI==nsURI ) {
- list.append( p );
- }
- if ( p->first )
- p = p->first;
- else if ( p->next )
- p = p->next;
- else {
- p = p->parent();
- while ( p && p != node_impl && !p->next )
- p = p->parent();
- if ( p && p != node_impl )
- p = p->next;
- }
- }
- }
-}
-
-TQDomNodePrivate* TQDomNodeListPrivate::item( int index )
-{
- if ( !node_impl )
- return 0;
- if ( timestamp < qt_nodeListTime )
- createList();
- return list.at( index );
-}
-
-uint TQDomNodeListPrivate::length() const
-{
- if ( !node_impl )
- return 0;
- if ( timestamp < qt_nodeListTime ) {
- TQDomNodeListPrivate *that = (TQDomNodeListPrivate*)this;
- that->createList();
- }
- return list.count();
-}
-
-/**************************************************************
- *
- * TQDomNodeList
- *
- **************************************************************/
-
-/*!
- \class TQDomNodeList tqdom.h
- \reentrant
- \brief The TQDomNodeList class is a list of TQDomNode objects.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- Lists can be obtained by TQDomDocument::elementsByTagName() and
- TQDomNode::childNodes(). The Document Object Model (DOM) requires
- these lists to be "live": whenever you change the underlying
- document, the contents of the list will get updated.
-
- You can get a particular node from the list with item(). The
- number of items in the list is returned by count() (and by
- length()).
-
- For further information about the Document Object Model see \link
- http://www.w3.org/TR/REC-DOM-Level-1/\endlink and \link
- http://www.w3.org/TR/DOM-Level-2-Core/\endlink. For a more general
- introduction of the DOM implementation see the TQDomDocument
- documentation.
-
- \sa TQDomNode::childNodes() TQDomDocument::elementsByTagName()
-*/
-
-/*!
- Creates an empty node list.
-*/
-TQDomNodeList::TQDomNodeList()
-{
- impl = 0;
-}
-
-TQDomNodeList::TQDomNodeList( TQDomNodeListPrivate* p )
-{
- impl = p;
-}
-
-/*!
- Constructs a copy of \a n.
-*/
-TQDomNodeList::TQDomNodeList( const TQDomNodeList& n )
-{
- impl = n.impl;
- if ( impl )
- impl->ref();
-}
-
-/*!
- Assigns \a n to this node list.
-*/
-TQDomNodeList& TQDomNodeList::operator= ( const TQDomNodeList& n )
-{
- if ( n.impl )
- n.impl->ref();
- if ( impl && impl->deref() )
- delete impl;
- impl = n.impl;
-
- return *this;
-}
-
-/*!
- Returns TRUE if the node list \a n and this node list are equal;
- otherwise returns FALSE.
-*/
-bool TQDomNodeList::operator== ( const TQDomNodeList& n ) const
-{
- if ( impl == n.impl )
- return TRUE;
- if ( !impl || !n.impl )
- return FALSE;
- return (*impl == *n.impl);
-}
-
-/*!
- Returns TRUE the node list \a n and this node list are not equal;
- otherwise returns FALSE.
-*/
-bool TQDomNodeList::operator!= ( const TQDomNodeList& n ) const
-{
- return !operator==(n);
-}
-
-/*!
- Destroys the object and frees its resources.
-*/
-TQDomNodeList::~TQDomNodeList()
-{
- if ( impl && impl->deref() )
- delete impl;
-}
-
-/*!
- Returns the node at position \a index.
-
- If \a index is negative or if \a index >= length() then a null
- node is returned (i.e. a node for which TQDomNode::isNull() returns
- TRUE).
-
- \sa count()
-*/
-TQDomNode TQDomNodeList::item( int index ) const
-{
- if ( !impl )
- return TQDomNode();
-
- return TQDomNode( impl->item( index ) );
-}
-
-/*!
- Returns the number of nodes in the list.
-
- This function is the same as count().
-*/
-uint TQDomNodeList::length() const
-{
- if ( !impl )
- return 0;
- return impl->length();
-}
-
-/*!
- \fn uint TQDomNodeList::count() const
-
- Returns the number of nodes in the list.
-
- This function is the same as length().
-*/
-
-
-/**************************************************************
- *
- * TQDomNodePrivate
- *
- **************************************************************/
-
-inline void TQDomNodePrivate::setOwnerDocument( TQDomDocumentPrivate* doc )
-{
- ownerNode = doc;
- hasParent = FALSE;
-}
-
-TQDomNodePrivate::TQDomNodePrivate( TQDomDocumentPrivate* doc, TQDomNodePrivate *par )
-{
- if ( par )
- setParent( par );
- else
- setOwnerDocument( doc );
- prev = 0;
- next = 0;
- first = 0;
- last = 0;
- createdWithDom1Interface = TRUE;
-}
-
-TQDomNodePrivate::TQDomNodePrivate( TQDomNodePrivate* n, bool deep )
-{
- setOwnerDocument( n->ownerDocument() );
- prev = 0;
- next = 0;
- first = 0;
- last = 0;
-
- name = n->name;
- value = n->value;
- prefix = n->prefix;
- namespaceURI = n->namespaceURI;
- createdWithDom1Interface = n->createdWithDom1Interface;
-
- if ( !deep )
- return;
-
- for ( TQDomNodePrivate* x = n->first; x; x = x->next )
- appendChild( x->cloneNode( TRUE ) );
-}
-
-TQDomNodePrivate::~TQDomNodePrivate()
-{
- TQDomNodePrivate* p = first;
- TQDomNodePrivate* n;
-
- while ( p ) {
- n = p->next;
- if ( p->deref() )
- delete p;
- else
- p->setNoParent();
- p = n;
- }
-
- first = 0;
- last = 0;
-}
-
-void TQDomNodePrivate::clear()
-{
- TQDomNodePrivate* p = first;
- TQDomNodePrivate* n;
-
- while ( p ) {
- n = p->next;
- if ( p->deref() )
- delete p;
- p = n;
- }
-
- first = 0;
- last = 0;
-}
-
-TQDomNodePrivate* TQDomNodePrivate::namedItem( const TQString& n )
-{
- TQDomNodePrivate* p = first;
- while ( p ) {
- if ( p->nodeName() == n )
- return p;
- p = p->next;
- }
-
- return 0;
-}
-
-TQDomNamedNodeMapPrivate* TQDomNodePrivate::attributes()
-{
- return 0;
-}
-
-TQDomNodePrivate* TQDomNodePrivate::insertBefore( TQDomNodePrivate* newChild, TQDomNodePrivate* refChild )
-{
- // Error check
- if ( !newChild )
- return 0;
-
- // Error check
- if ( newChild == refChild )
- return 0;
-
- // Error check
- if ( refChild && refChild->parent() != this )
- return 0;
-
- // "mark lists as dirty"
- qt_nodeListTime++;
-
- // Special handling for inserting a fragment. We just insert
- // all elements of the fragment instead of the fragment itself.
- if ( newChild->isDocumentFragment() ) {
- // Fragment is empty ?
- if ( newChild->first == 0 )
- return newChild;
-
- // New parent
- TQDomNodePrivate* n = newChild->first;
- while ( n ) {
- n->setParent( this );
- n = n->next;
- }
-
- // Insert at the beginning ?
- if ( !refChild || refChild->prev == 0 ) {
- if ( first )
- first->prev = newChild->last;
- newChild->last->next = first;
- if ( !last )
- last = newChild->last;
- first = newChild->first;
- } else {
- // Insert in the middle
- newChild->last->next = refChild;
- newChild->first->prev = refChild->prev;
- refChild->prev->next = newChild->first;
- refChild->prev = newChild->last;
- }
-
- // No need to increase the reference since TQDomDocumentFragment
- // does not decrease the reference.
-
- // Remove the nodes from the fragment
- newChild->first = 0;
- newChild->last = 0;
- return newChild;
- }
-
- // No more errors can occur now, so we take
- // ownership of the node.
- newChild->ref();
-
- if ( newChild->parent() )
- newChild->parent()->removeChild( newChild );
-
- newChild->setParent( this );
-
- if ( !refChild ) {
- if ( first )
- first->prev = newChild;
- newChild->next = first;
- if ( !last )
- last = newChild;
- first = newChild;
- return newChild;
- }
-
- if ( refChild->prev == 0 ) {
- if ( first )
- first->prev = newChild;
- newChild->next = first;
- if ( !last )
- last = newChild;
- first = newChild;
- return newChild;
- }
-
- newChild->next = refChild;
- newChild->prev = refChild->prev;
- refChild->prev->next = newChild;
- refChild->prev = newChild;
-
- return newChild;
-}
-
-TQDomNodePrivate* TQDomNodePrivate::insertAfter( TQDomNodePrivate* newChild, TQDomNodePrivate* refChild )
-{
- // Error check
- if ( !newChild )
- return 0;
-
- // Error check
- if ( newChild == refChild )
- return 0;
-
- // Error check
- if ( refChild && refChild->parent() != this )
- return 0;
-
- // "mark lists as dirty"
- qt_nodeListTime++;
-
- // Special handling for inserting a fragment. We just insert
- // all elements of the fragment instead of the fragment itself.
- if ( newChild->isDocumentFragment() ) {
- // Fragment is empty ?
- if ( newChild->first == 0 )
- return newChild;
-
- // New parent
- TQDomNodePrivate* n = newChild->first;
- while ( n ) {
- n->setParent( this );
- n = n->next;
- }
-
- // Insert at the end
- if ( !refChild || refChild->next == 0 ) {
- if ( last )
- last->next = newChild->first;
- newChild->first->prev = last;
- if ( !first )
- first = newChild->first;
- last = newChild->last;
- } else { // Insert in the middle
- newChild->first->prev = refChild;
- newChild->last->next = refChild->next;
- refChild->next->prev = newChild->last;
- refChild->next = newChild->first;
- }
-
- // No need to increase the reference since TQDomDocumentFragment
- // does not decrease the reference.
-
- // Remove the nodes from the fragment
- newChild->first = 0;
- newChild->last = 0;
- return newChild;
- }
-
- // Release new node from its current parent
- if ( newChild->parent() )
- newChild->parent()->removeChild( newChild );
-
- // No more errors can occur now, so we take
- // ownership of the node
- newChild->ref();
-
- newChild->setParent( this );
-
- // Insert at the end
- if ( !refChild ) {
- if ( last )
- last->next = newChild;
- newChild->prev = last;
- if ( !first )
- first = newChild;
- last = newChild;
- return newChild;
- }
-
- if ( refChild->next == 0 ) {
- if ( last )
- last->next = newChild;
- newChild->prev = last;
- if ( !first )
- first = newChild;
- last = newChild;
- return newChild;
- }
-
- newChild->prev = refChild;
- newChild->next = refChild->next;
- refChild->next->prev = newChild;
- refChild->next = newChild;
-
- return newChild;
-}
-
-TQDomNodePrivate* TQDomNodePrivate::replaceChild( TQDomNodePrivate* newChild, TQDomNodePrivate* oldChild )
-{
- if ( oldChild->parent() != this )
- return 0;
- if ( !newChild || !oldChild )
- return 0;
- if ( newChild == oldChild )
- return 0;
-
- // mark lists as dirty
- qt_nodeListTime++;
-
- // Special handling for inserting a fragment. We just insert
- // all elements of the fragment instead of the fragment itself.
- if ( newChild->isDocumentFragment() ) {
- // Fragment is empty ?
- if ( newChild->first == 0 )
- return newChild;
-
- // New parent
- TQDomNodePrivate* n = newChild->first;
- while ( n ) {
- n->setParent( this );
- n = n->next;
- }
-
-
- if ( oldChild->next )
- oldChild->next->prev = newChild->last;
- if ( oldChild->prev )
- oldChild->prev->next = newChild->first;
-
- newChild->last->next = oldChild->next;
- newChild->first->prev = oldChild->prev;
-
- if ( first == oldChild )
- first = newChild->first;
- if ( last == oldChild )
- last = newChild->last;
-
- oldChild->setNoParent();
- oldChild->next = 0;
- oldChild->prev = 0;
-
- // No need to increase the reference since TQDomDocumentFragment
- // does not decrease the reference.
-
- // Remove the nodes from the fragment
- newChild->first = 0;
- newChild->last = 0;
-
- // We are no longer interested in the old node
- if ( oldChild ) oldChild->deref();
-
- return oldChild;
- }
-
- // No more errors can occur now, so we take
- // ownership of the node
- newChild->ref();
-
- // Release new node from its current parent
- if ( newChild->parent() )
- newChild->parent()->removeChild( newChild );
-
- newChild->setParent( this );
-
- if ( oldChild->next )
- oldChild->next->prev = newChild;
- if ( oldChild->prev )
- oldChild->prev->next = newChild;
-
- newChild->next = oldChild->next;
- newChild->prev = oldChild->prev;
-
- if ( first == oldChild )
- first = newChild;
- if ( last == oldChild )
- last = newChild;
-
- oldChild->setNoParent();
- oldChild->next = 0;
- oldChild->prev = 0;
-
- // We are no longer interested in the old node
- if ( oldChild ) oldChild->deref();
-
- return oldChild;
-}
-
-TQDomNodePrivate* TQDomNodePrivate::removeChild( TQDomNodePrivate* oldChild )
-{
- // Error check
- if ( oldChild->parent() != this )
- return 0;
-
- // "mark lists as dirty"
- qt_nodeListTime++;
-
- // Perhaps oldChild was just created with "createElement" or that. In this case
- // its parent is TQDomDocument but it is not part of the documents child list.
- if ( oldChild->next == 0 && oldChild->prev == 0 && first != oldChild )
- return 0;
-
- if ( oldChild->next )
- oldChild->next->prev = oldChild->prev;
- if ( oldChild->prev )
- oldChild->prev->next = oldChild->next;
-
- if ( last == oldChild )
- last = oldChild->prev;
- if ( first == oldChild )
- first = oldChild->next;
-
- oldChild->setNoParent();
- oldChild->next = 0;
- oldChild->prev = 0;
-
- // We are no longer interested in the old node
- if ( oldChild ) oldChild->deref();
-
- return oldChild;
-}
-
-TQDomNodePrivate* TQDomNodePrivate::appendChild( TQDomNodePrivate* newChild )
-{
- // No reference manipulation needed. Done in insertAfter.
- return insertAfter( newChild, 0 );
-}
-
-TQDomDocumentPrivate* TQDomNodePrivate::ownerDocument()
-{
- TQDomNodePrivate* p = this;
- while ( p && !p->isDocument() ) {
- if ( !p->hasParent )
- return (TQDomDocumentPrivate*)p->ownerNode;
- p = p->parent();
- }
-
- return (TQDomDocumentPrivate*)p;
-}
-
-TQDomNodePrivate* TQDomNodePrivate::cloneNode( bool deep )
-{
- TQDomNodePrivate* p = new TQDomNodePrivate( this, deep );
- // We are not interested in this node
- p->deref();
- return p;
-}
-
-static void qNormalizeNode( TQDomNodePrivate* n )
-{
- TQDomNodePrivate* p = n->first;
- TQDomTextPrivate* t = 0;
-
- while ( p ) {
- if ( p->isText() ) {
- if ( t ) {
- TQDomNodePrivate* tmp = p->next;
- t->appendData( p->nodeValue() );
- n->removeChild( p );
- p = tmp;
- } else {
- t = (TQDomTextPrivate*)p;
- p = p->next;
- }
- } else {
- p = p->next;
- t = 0;
- }
- }
-}
-void TQDomNodePrivate::normalize()
-{
- // ### This one has moved from TQDomElementPrivate to this position. It is
- // not tested.
- qNormalizeNode( this );
-}
-
-void TQDomNodePrivate::save( TQTextStream& s, int depth, int indent ) const
-{
- const TQDomNodePrivate* n = first;
- while ( n ) {
- n->save( s, depth, indent );
- n = n->next;
- }
-}
-
-/**************************************************************
- *
- * TQDomNode
- *
- **************************************************************/
-
-#define IMPL ((TQDomNodePrivate*)impl)
-
-/*!
- \class TQDomNode tqdom.h
- \reentrant
- \brief The TQDomNode class is the base class for all the nodes in a DOM tree.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- Many functions in the DOM return a TQDomNode.
-
- You can find out the type of a node using isAttr(),
- isCDATASection(), isDocumentFragment(), isDocument(),
- isDocumentType(), isElement(), isEntityReference(), isText(),
- isEntity(), isNotation(), isProcessingInstruction(),
- isCharacterData() and isComment().
-
- A TQDomNode can be converted into one of its subclasses using
- toAttr(), toCDATASection(), toDocumentFragment(), toDocument(),
- toDocumentType(), toElement(), toEntityReference(), toText(),
- toEntity(), toNotation(), toProcessingInstruction(),
- toCharacterData() or toComment(). You can convert a node to a null
- node with clear().
-
- Copies of the TQDomNode class share their data using explicit
- sharing. This means that modifying one node will change all
- copies. This is especially useful in combination with functions
- which return a TQDomNode, e.g. firstChild(). You can make an
- independent (deep) copy of the node with cloneNode().
-
- Nodes are inserted with insertBefore(), insertAfter() or
- appendChild(). You can replace one node with another using
- replaceChild() and remove a node with removeChild().
-
- To traverse nodes use firstChild() to get a node's first child (if
- any), and nextSibling() to traverse. TQDomNode also provides
- lastChild(), previousSibling() and parentNode(). To find the first
- child node with a particular node name use namedItem().
-
- To find out if a node has tqchildren use hasChildNodes() and to get
- a list of all of a node's tqchildren use childNodes().
-
- The node's name and value (the meaning of which varies depending
- on its type) is returned by nodeName() and nodeValue()
- respectively. The node's type is returned by nodeType(). The
- node's value can be set with setNodeValue().
-
- The document to which the node belongs is returned by
- ownerDocument().
-
- Adjacent TQDomText nodes can be merged into a single node with
- normalize().
-
- \l TQDomElement nodes have attributes which can be retrieved with
- attributes().
-
- TQDomElement and TQDomAttr nodes can have namespaces which can be
- retrieved with namespaceURI(). Their local name is retrieved with
- localName(), and their prefix with prefix(). The prefix can be set
- with setPrefix().
-
- You can write the XML representation of the node to a text stream
- with save().
-
- The following example looks for the first element in an XML document and
- prints the names of all the elements that are its direct tqchildren.
- \code
- TQDomDocument d;
- d.setContent( someXML );
- TQDomNode n = d.firstChild();
- while ( !n.isNull() ) {
- if ( n.isElement() ) {
- TQDomElement e = n.toElement();
- cout << "Element name: " << e.tagName() << endl;
- break;
- }
- n = n.nextSibling();
- }
- \endcode
-
- For further information about the Document Object Model see \link
- http://www.w3.org/TR/REC-DOM-Level-1/\endlink and \link
- http://www.w3.org/TR/DOM-Level-2-Core/\endlink. For a more general
- introduction of the DOM implementation see the TQDomDocument
- documentation.
-*/
-
-/*!
- Constructs a \link isNull() null\endlink node.
-*/
-TQDomNode::TQDomNode()
-{
- impl = 0;
-}
-
-/*!
- Constructs a copy of \a n.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomNode::TQDomNode( const TQDomNode& n )
-{
- impl = n.impl;
- if ( impl ) impl->ref();
-}
-
-/*! \internal
- Constructs a new node for the data \a n.
-*/
-TQDomNode::TQDomNode( TQDomNodePrivate* n )
-{
- impl = n;
- if ( impl ) impl->ref();
-}
-
-/*!
- Assigns a copy of \a n to this DOM node.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomNode& TQDomNode::operator= ( const TQDomNode& n )
-{
- if ( n.impl ) n.impl->ref();
- if ( impl && impl->deref() ) delete impl;
- impl = n.impl;
-
- return *this;
-}
-
-/*!
- Returns TRUE if \a n and this DOM node are equal; otherwise
- returns FALSE.
-*/
-bool TQDomNode::operator== ( const TQDomNode& n ) const
-{
- return ( impl == n.impl );
-}
-
-/*!
- Returns TRUE if \a n and this DOM node are not equal; otherwise
- returns FALSE.
-*/
-bool TQDomNode::operator!= ( const TQDomNode& n ) const
-{
- return ( impl != n.impl );
-}
-
-/*!
- Destroys the object and frees its resources.
-*/
-TQDomNode::~TQDomNode()
-{
- if ( impl && impl->deref() ) delete impl;
-}
-
-/*!
- Returns the name of the node.
-
- The meaning of the name depends on the subclass:
- \table
- \header \i Name \i Meaning
- \row \i TQDomAttr \i The name of the attribute
- \row \i TQDomCDATASection \i The string "#cdata-section"
- \row \i TQDomComment \i The string "#comment"
- \row \i TQDomDocument \i The string "#document"
- \row \i TQDomDocumentFragment \i The string "#document-fragment"
- \row \i TQDomDocumentType \i The name of the document type
- \row \i TQDomElement \i The tag name
- \row \i TQDomEntity \i The name of the entity
- \row \i TQDomEntityReference \i The name of the referenced entity
- \row \i TQDomNotation \i The name of the notation
- \row \i TQDomProcessingInstruction \i The target of the processing instruction
- \row \i TQDomText \i The string "#text"
- \endtable
-
- \sa nodeValue()
-*/
-TQString TQDomNode::nodeName() const
-{
- if ( !impl )
- return TQString::null;
-
- if ( !IMPL->prefix.isEmpty() )
- return IMPL->prefix + ":" + IMPL->name;
- return IMPL->name;
-}
-
-/*!
- Returns the value of the node.
-
- The meaning of the value depends on the subclass:
- \table
- \header \i Name \i Meaning
- \row \i TQDomAttr \i The attribute value
- \row \i TQDomCDATASection \i The content of the CDATA section
- \row \i TQDomComment \i The comment
- \row \i TQDomProcessingInstruction \i The data of the processing intruction
- \row \i TQDomText \i The text
- \endtable
-
- All the other subclasses do not have a node value and will return
- TQString::null.
-
- \sa setNodeValue() nodeName()
-*/
-TQString TQDomNode::nodeValue() const
-{
- if ( !impl )
- return TQString::null;
- return IMPL->value;
-}
-
-/*!
- Sets the node's value to \a v.
-
- \sa nodeValue()
-*/
-void TQDomNode::setNodeValue( const TQString& v )
-{
- if ( !impl )
- return;
- IMPL->setNodeValue( v );
-}
-
-/*!
- \enum TQDomNode::NodeType
-
- This enum defines the type of the node:
- \value ElementNode
- \value AttributeNode
- \value TextNode
- \value CDATASectionNode
- \value EntityReferenceNode
- \value EntityNode
- \value ProcessingInstructionNode
- \value CommentNode
- \value DocumentNode
- \value DocumentTypeNode
- \value DocumentFragmentNode
- \value NotationNode
- \value BaseNode A TQDomNode object, i.e. not a TQDomNode subclass.
- \value CharacterDataNode
-*/
-
-/*!
- Returns the type of the node.
-
- \sa toAttr(), toCDATASection(), toDocumentFragment(),
- toDocument() toDocumentType(), toElement(), toEntityReference(),
- toText(), toEntity() toNotation(), toProcessingInstruction(),
- toCharacterData(), toComment()
-*/
-TQDomNode::NodeType TQDomNode::nodeType() const
-{
- if ( !impl )
- return TQDomNode::BaseNode;
- return IMPL->nodeType();
-}
-
-/*!
- Returns the parent node. If this node has no parent, a null node
- is returned (i.e. a node for which isNull() returns TRUE).
-*/
-TQDomNode TQDomNode::parentNode() const
-{
- if ( !impl )
- return TQDomNode();
- return TQDomNode( IMPL->parent() );
-}
-
-/*!
- Returns a list of all direct child nodes.
-
- Most often you will call this function on a TQDomElement object.
-
- For example, if the XML document looks like this:
- \code
- <body>
- <h1>Heading</h1>
- <p>Hello <b>you</b></p>
- </body>
- \endcode
- Then the list of child nodes for the "body"-element will contain
- the node created by the &lt;h1&gt; tag and the node created by the
- &lt;p&gt; tag.
-
- The nodes in the list are not copied; so changing the nodes in the
- list will also change the tqchildren of this node.
-
- \sa firstChild() lastChild()
-*/
-TQDomNodeList TQDomNode::childNodes() const
-{
- if ( !impl )
- return TQDomNodeList();
- return TQDomNodeList( new TQDomNodeListPrivate( impl ) );
-}
-
-/*!
- Returns the first child of the node. If there is no child node, a
- \link isNull() null node\endlink is returned. Changing the
- returned node will also change the node in the document tree.
-
- \sa lastChild() childNodes()
-*/
-TQDomNode TQDomNode::firstChild() const
-{
- if ( !impl )
- return TQDomNode();
- return TQDomNode( IMPL->first );
-}
-
-/*!
- Returns the last child of the node. If there is no child node, a
- \link isNull() null node\endlink is returned. Changing the
- returned node will also change the node in the document tree.
-
- \sa firstChild() childNodes()
-*/
-TQDomNode TQDomNode::lastChild() const
-{
- if ( !impl )
- return TQDomNode();
- return TQDomNode( IMPL->last );
-}
-
-/*!
- Returns the previous sibling in the document tree. Changing the
- returned node will also change the node in the document tree.
-
- For example, if you have XML like this:
- \code
- <h1>Heading</h1>
- <p>The text...</p>
- <h2>Next heading</h2>
- \endcode
- and this TQDomNode represents the &lt;p&gt; tag, previousSibling()
- will return the node representing the &lt;h1&gt; tag.
-
- \sa nextSibling()
-*/
-TQDomNode TQDomNode::previousSibling() const
-{
- if ( !impl )
- return TQDomNode();
- return TQDomNode( IMPL->prev );
-}
-
-/*!
- Returns the next sibling in the document tree. Changing the
- returned node will also change the node in the document tree.
-
- If you have XML like this:
- \code
- <h1>Heading</h1>
- <p>The text...</p>
- <h2>Next heading</h2>
- \endcode
- and this TQDomNode represents the &lt;p&gt; tag, nextSibling() will
- return the node representing the &lt;h2&gt; tag.
-
- \sa previousSibling()
-*/
-TQDomNode TQDomNode::nextSibling() const
-{
- if ( !impl )
- return TQDomNode();
- return TQDomNode( IMPL->next );
-}
-
-/*!
- Returns a named node map of all attributes. Attributes are only
- provided for \l{TQDomElement}s.
-
- Changing the attributes in the map will also change the attributes
- of this TQDomNode.
-*/
-TQDomNamedNodeMap TQDomNode::attributes() const
-{
- if ( !impl )
- return TQDomNamedNodeMap();
-
- return TQDomNamedNodeMap( impl->attributes() );
-}
-
-/*!
- Returns the document to which this node belongs.
-*/
-TQDomDocument TQDomNode::ownerDocument() const
-{
- if ( !impl )
- return TQDomDocument();
- return TQDomDocument( IMPL->ownerDocument() );
-}
-
-/*!
- Creates a deep (not shallow) copy of the TQDomNode.
-
- If \a deep is TRUE, then the cloning is done recursively which
- means that all the node's tqchildren are deep copied too. If \a deep
- is FALSE only the node itself is copied and the copy will have no
- child nodes.
-*/
-TQDomNode TQDomNode::cloneNode( bool deep ) const
-{
- if ( !impl )
- return TQDomNode();
- return TQDomNode( IMPL->cloneNode( deep ) );
-}
-
-/*!
- Calling normalize() on an element converts all its tqchildren into a
- standard form. This means that adjacent TQDomText objects will be
- merged into a single text object (TQDomCDATASection nodes are not
- merged).
-*/
-void TQDomNode::normalize()
-{
- if ( !impl )
- return;
- IMPL->normalize();
-}
-
-/*!
- Returns TRUE if the DOM implementation implements the feature \a
- feature and this feature is supported by this node in the version
- \a version; otherwise returns FALSE.
-
- \sa TQDomImplementation::hasFeature()
-*/
-bool TQDomNode::isSupported( const TQString& feature, const TQString& version ) const
-{
- TQDomImplementation i;
- return i.hasFeature( feature, version );
-}
-
-/*!
- Returns the namespace URI of this node or TQString::null if the
- node has no namespace URI.
-
- Only nodes of type \link TQDomNode::NodeType ElementNode\endlink or
- \link TQDomNode::NodeType AttributeNode\endlink can have
- namespaces. A namespace URI must be specified at creation time and
- cannot be changed later.
-
- \sa prefix() localName() TQDomDocument::createElementNS()
- TQDomDocument::createAttributeNS()
-*/
-TQString TQDomNode::namespaceURI() const
-{
- if ( !impl )
- return TQString::null;
- return IMPL->namespaceURI;
-}
-
-/*!
- Returns the namespace prefix of the node or TQString::null if the
- node has no namespace prefix.
-
- Only nodes of type \link TQDomNode::NodeType ElementNode\endlink or
- \link TQDomNode::NodeType AttributeNode\endlink can have
- namespaces. A namespace prefix must be specified at creation time.
- If a node was created with a namespace prefix, you can change it
- later with setPrefix().
-
- If you create an element or attribute with
- TQDomDocument::createElement() or TQDomDocument::createAttribute(),
- the prefix will be TQString::null. If you use
- TQDomDocument::createElementNS() or
- TQDomDocument::createAttributeNS() instead, the prefix will not be
- TQString::null; but it might be an empty string if the name does
- not have a prefix.
-
- \sa setPrefix() localName() namespaceURI()
- TQDomDocument::createElementNS() TQDomDocument::createAttributeNS()
-*/
-TQString TQDomNode::prefix() const
-{
- if ( !impl )
- return TQString::null;
- return IMPL->prefix;
-}
-
-/*!
- If the node has a namespace prefix, this function changes the
- namespace prefix of the node to \a pre. Otherwise this function
- does nothing.
-
- Only nodes of type \link TQDomNode::NodeType ElementNode\endlink or
- \link TQDomNode::NodeType AttributeNode\endlink can have
- namespaces. A namespace prefix must have be specified at creation
- time; it is not possible to add a namespace prefix afterwards.
-
- \sa prefix() localName() namespaceURI()
- TQDomDocument::createElementNS() TQDomDocument::createAttributeNS()
-*/
-void TQDomNode::setPrefix( const TQString& pre )
-{
- if ( !impl || IMPL->prefix.isNull() )
- return;
- if ( isAttr() || isElement() )
- IMPL->prefix = pre;
-}
-
-/*!
- If the node uses namespaces, this function returns the local name
- of the node; otherwise it returns TQString::null.
-
- Only nodes of type \link TQDomNode::NodeType ElementNode\endlink or
- \link TQDomNode::NodeType AttributeNode\endlink can have
- namespaces. A namespace must have been specified at creation time;
- it is not possible to add a namespace afterwards.
-
- \sa prefix() namespaceURI() TQDomDocument::createElementNS()
- TQDomDocument::createAttributeNS()
-*/
-TQString TQDomNode::localName() const
-{
- if ( !impl || IMPL->createdWithDom1Interface )
- return TQString::null;
- return IMPL->name;
-}
-
-/*!
- Returns TRUE if the node has attributes; otherwise returns FALSE.
-
- \sa attributes()
-*/
-bool TQDomNode::hasAttributes() const
-{
- if ( !impl )
- return FALSE;
- return IMPL->hasAttributes();
-}
-
-/*!
- Inserts the node \a newChild before the child node \a refChild.
- \a refChild must be a direct child of this node. If \a refChild is
- \link isNull() null\endlink then \a newChild is inserted as the
- node's first child.
-
- If \a newChild is the child of another node, it is reparented to
- this node. If \a newChild is a child of this node, then its
- position in the list of tqchildren is changed.
-
- If \a newChild is a TQDomDocumentFragment, then the tqchildren of the
- fragment are removed from the fragment and inserted before \a
- refChild.
-
- Returns a new reference to \a newChild on success or a \link
- isNull() null node\endlink on failure.
-
- \sa insertAfter() replaceChild() removeChild() appendChild()
-*/
-TQDomNode TQDomNode::insertBefore( const TQDomNode& newChild, const TQDomNode& refChild )
-{
- if ( !impl ) {
- if (nodeType() == DocumentNode)
- impl = new TQDomDocumentPrivate;
- else
- return TQDomNode();
- }
- return TQDomNode( IMPL->insertBefore( newChild.impl, refChild.impl ) );
-}
-
-/*!
- Inserts the node \a newChild after the child node \a refChild. \a
- refChild must be a direct child of this node. If \a refChild is
- \link isNull() null\endlink then \a newChild is appended as this
- node's last child.
-
- If \a newChild is the child of another node, it is reparented to
- this node. If \a newChild is a child of this node, then its
- position in the list of tqchildren is changed.
-
- If \a newChild is a TQDomDocumentFragment, then the tqchildren of the
- fragment are removed from the fragment and inserted after \a
- refChild.
-
- Returns a new reference to \a newChild on success or a \link
- isNull() null node\endlink on failure.
-
- \sa insertBefore() replaceChild() removeChild() appendChild()
-*/
-TQDomNode TQDomNode::insertAfter( const TQDomNode& newChild, const TQDomNode& refChild )
-{
- if ( !impl ) {
- if (nodeType() == DocumentNode)
- impl = new TQDomDocumentPrivate;
- else
- return TQDomNode();
- }
- return TQDomNode( IMPL->insertAfter( newChild.impl, refChild.impl ) );
-}
-
-/*!
- Replaces \a oldChild with \a newChild. \a oldChild must be a
- direct child of this node.
-
- If \a newChild is the child of another node, it is reparented to
- this node. If \a newChild is a child of this node, then its
- position in the list of tqchildren is changed.
-
- If \a newChild is a TQDomDocumentFragment, then \a oldChild is
- replaced by all of the tqchildren of the fragment.
-
- Returns a new reference to \a oldChild on success or a \link
- isNull() null node\endlink an failure.
-
- \sa insertBefore() insertAfter() removeChild() appendChild()
-*/
-TQDomNode TQDomNode::replaceChild( const TQDomNode& newChild, const TQDomNode& oldChild )
-{
- if ( !impl ) {
- if (nodeType() == DocumentNode)
- impl = new TQDomDocumentPrivate;
- else
- return TQDomNode();
- }
- return TQDomNode( IMPL->replaceChild( newChild.impl, oldChild.impl ) );
-}
-
-/*!
- Removes \a oldChild from the list of tqchildren. \a oldChild must be
- a direct child of this node.
-
- Returns a new reference to \a oldChild on success or a \link
- isNull() null node\endlink on failure.
-
- \sa insertBefore() insertAfter() replaceChild() appendChild()
-*/
-TQDomNode TQDomNode::removeChild( const TQDomNode& oldChild )
-{
- if ( !impl )
- return TQDomNode();
-
- if ( oldChild.isNull() )
- return TQDomNode();
-
- return TQDomNode( IMPL->removeChild( oldChild.impl ) );
-}
-
-/*!
- Appends \a newChild as the node's last child.
-
- If \a newChild is the child of another node, it is reparented to
- this node. If \a newChild is a child of this node, then its
- position in the list of tqchildren is changed.
-
- If \a newChild is a TQDomDocumentFragment, then the tqchildren of the
- fragment are removed from the fragment and appended.
-
- Returns a new reference to \a newChild.
-
- \sa insertBefore() insertAfter() replaceChild() removeChild()
-*/
-TQDomNode TQDomNode::appendChild( const TQDomNode& newChild )
-{
- if ( !impl ) {
- if (nodeType() == DocumentNode)
- impl = new TQDomDocumentPrivate;
- else
- return TQDomNode();
- }
- return TQDomNode( IMPL->appendChild( newChild.impl ) );
-}
-
-/*!
- Returns TRUE if the node has one or more tqchildren; otherwise
- returns FALSE.
-*/
-bool TQDomNode::hasChildNodes() const
-{
- if ( !impl )
- return FALSE;
- return IMPL->first != 0;
-}
-
-/*!
- Returns TRUE if this node is null (i.e. if it has no type or
- contents); otherwise returns FALSE.
-*/
-bool TQDomNode::isNull() const
-{
- return ( impl == 0 );
-}
-
-/*!
- Converts the node into a null node; if it was not a null node
- before, its type and contents are deleted.
-
- \sa isNull()
-*/
-void TQDomNode::clear()
-{
- if ( impl && impl->deref() ) delete impl;
- impl = 0;
-}
-
-/*!
- Returns the first direct child node for which nodeName() equals \a
- name.
-
- If no such direct child exists, a \link isNull() null node\endlink
- is returned.
-
- \sa nodeName()
-*/
-TQDomNode TQDomNode::namedItem( const TQString& name ) const
-{
- if ( !impl )
- return TQDomNode();
- return TQDomNode( impl->namedItem( name ) );
-}
-
-/*!
- Writes the XML representation of the node and all its tqchildren to
- the stream \a str. This function uses \a indent as the amount of
- space to indent the node.
-*/
-void TQDomNode::save( TQTextStream& str, int indent ) const
-{
- if ( impl )
- IMPL->save( str, 1, indent );
-}
-
-/*!
- \relates TQDomNode
-
- Writes the XML representation of the node \a node and all its
- tqchildren to the stream \a str.
-*/
-TQTextStream& operator<<( TQTextStream& str, const TQDomNode& node )
-{
- node.save( str, 1 );
-
- return str;
-}
-
-/*!
- Returns TRUE if the node is an attribute; otherwise returns FALSE.
-
- If this function returns TRUE, it does not imply that this object
- is a TQDomAttribute; you can get the TQDomAttribute with
- toAttribute().
-
- \sa toAttr()
-*/
-bool TQDomNode::isAttr() const
-{
- if(impl)
- return impl->isAttr();
- return FALSE;
-}
-
-/*!
- Returns TRUE if the node is a CDATA section; otherwise returns
- FALSE.
-
- If this function returns TRUE, it does not imply that this object
- is a TQDomCDATASection; you can get the TQDomCDATASection with
- toCDATASection().
-
- \sa toCDATASection()
-*/
-bool TQDomNode::isCDATASection() const
-{
- if(impl)
- return impl->isCDATASection();
- return FALSE;
-}
-
-/*!
- Returns TRUE if the node is a document fragment; otherwise returns
- FALSE.
-
- If this function returns TRUE, it does not imply that this object
- is a TQDomDocumentFragment; you can get the TQDomDocumentFragment
- with toDocumentFragment().
-
- \sa toDocumentFragment()
-*/
-bool TQDomNode::isDocumentFragment() const
-{
- if(impl)
- return impl->isDocumentFragment();
- return FALSE;
-}
-
-/*!
- Returns TRUE if the node is a document; otherwise returns FALSE.
-
- If this function returns TRUE, it does not imply that this object
- is a TQDomDocument; you can get the TQDomDocument with toDocument().
-
- \sa toDocument()
-*/
-bool TQDomNode::isDocument() const
-{
- if(impl)
- return impl->isDocument();
- return FALSE;
-}
-
-/*!
- Returns TRUE if the node is a document type; otherwise returns
- FALSE.
-
- If this function returns TRUE, it does not imply that this object
- is a TQDomDocumentType; you can get the TQDomDocumentType with
- toDocumentType().
-
- \sa toDocumentType()
-*/
-bool TQDomNode::isDocumentType() const
-{
- if(impl)
- return impl->isDocumentType();
- return FALSE;
-}
-
-/*!
- Returns TRUE if the node is an element; otherwise returns FALSE.
-
- If this function returns TRUE, it does not imply that this object
- is a TQDomElement; you can get the TQDomElement with toElement().
-
- \sa toElement()
-*/
-bool TQDomNode::isElement() const
-{
- if(impl)
- return impl->isElement();
- return FALSE;
-}
-
-/*!
- Returns TRUE if the node is an entity reference; otherwise returns
- FALSE.
-
- If this function returns TRUE, it does not imply that this object
- is a TQDomEntityReference; you can get the TQDomEntityReference with
- toEntityReference().
-
- \sa toEntityReference()
-*/
-bool TQDomNode::isEntityReference() const
-{
- if(impl)
- return impl->isEntityReference();
- return FALSE;
-}
-
-/*!
- Returns TRUE if the node is a text node; otherwise returns FALSE.
-
- If this function returns TRUE, it does not imply that this object
- is a TQDomText; you can get the TQDomText with toText().
-
- \sa toText()
-*/
-bool TQDomNode::isText() const
-{
- if(impl)
- return impl->isText();
- return FALSE;
-}
-
-/*!
- Returns TRUE if the node is an entity; otherwise returns FALSE.
-
- If this function returns TRUE, it does not imply that this object
- is a TQDomEntity; you can get the TQDomEntity with toEntity().
-
- \sa toEntity()
-*/
-bool TQDomNode::isEntity() const
-{
- if(impl)
- return impl->isEntity();
- return FALSE;
-}
-
-/*!
- Returns TRUE if the node is a notation; otherwise returns FALSE.
-
- If this function returns TRUE, it does not imply that this object
- is a TQDomNotation; you can get the TQDomNotation with toNotation().
-
- \sa toNotation()
-*/
-bool TQDomNode::isNotation() const
-{
- if(impl)
- return impl->isNotation();
- return FALSE;
-}
-
-/*!
- Returns TRUE if the node is a processing instruction; otherwise
- returns FALSE.
-
- If this function returns TRUE, it does not imply that this object
- is a TQDomProcessingInstruction; you can get the
- TQProcessingInstruction with toProcessingInstruction().
-
- \sa toProcessingInstruction()
-*/
-bool TQDomNode::isProcessingInstruction() const
-{
- if(impl)
- return impl->isProcessingInstruction();
- return FALSE;
-}
-
-/*!
- Returns TRUE if the node is a character data node; otherwise
- returns FALSE.
-
- If this function returns TRUE, it does not imply that this object
- is a TQDomCharacterData; you can get the TQDomCharacterData with
- toCharacterData().
-
- \sa toCharacterData()
-*/
-bool TQDomNode::isCharacterData() const
-{
- if(impl)
- return impl->isCharacterData();
- return FALSE;
-}
-
-/*!
- Returns TRUE if the node is a comment; otherwise returns FALSE.
-
- If this function returns TRUE, it does not imply that this object
- is a TQDomComment; you can get the TQDomComment with toComment().
-
- \sa toComment()
-*/
-bool TQDomNode::isComment() const
-{
- if(impl)
- return impl->isComment();
- return FALSE;
-}
-
-#undef IMPL
-
-/**************************************************************
- *
- * TQDomNamedNodeMapPrivate
- *
- **************************************************************/
-
-TQDomNamedNodeMapPrivate::TQDomNamedNodeMapPrivate( TQDomNodePrivate* n )
-{
- readonly = FALSE;
- parent = n;
- appendToParent = FALSE;
-}
-
-TQDomNamedNodeMapPrivate::~TQDomNamedNodeMapPrivate()
-{
- clearMap();
-}
-
-TQDomNamedNodeMapPrivate* TQDomNamedNodeMapPrivate::clone( TQDomNodePrivate* p )
-{
- TQDomNamedNodeMapPrivate* m = new TQDomNamedNodeMapPrivate( p );
- m->readonly = readonly;
- m->appendToParent = appendToParent;
-
- TQDictIterator<TQDomNodePrivate> it ( map );
- for ( ; it.current(); ++it )
- m->setNamedItem( it.current()->cloneNode() );
-
- // we are no longer interested in ownership
- m->deref();
- return m;
-}
-
-void TQDomNamedNodeMapPrivate::clearMap()
-{
- // Dereference all of our tqchildren if we took references
- if ( !appendToParent ) {
- TQDictIterator<TQDomNodePrivate> it( map );
- for ( ; it.current(); ++it )
- if ( it.current()->deref() )
- delete it.current();
- }
-
- map.clear();
-}
-
-TQDomNodePrivate* TQDomNamedNodeMapPrivate::namedItem( const TQString& name ) const
-{
- TQDomNodePrivate* p = map[ name ];
- return p;
-}
-
-TQDomNodePrivate* TQDomNamedNodeMapPrivate::namedItemNS( const TQString& nsURI, const TQString& localName ) const
-{
- TQDictIterator<TQDomNodePrivate> it( map );
- TQDomNodePrivate *n = it.current();
- while ( n ) {
- if ( !n->prefix.isNull() ) {
- // node has a namespace
- if ( n->namespaceURI==nsURI && n->name==localName ) {
- return n;
- }
- }
- ++it;
- n = it.current();
- }
- return 0;
-}
-
-TQDomNodePrivate* TQDomNamedNodeMapPrivate::setNamedItem( TQDomNodePrivate* arg )
-{
- if ( readonly || !arg )
- return 0;
-
- if ( appendToParent )
- return parent->appendChild( arg );
-
- TQDomNodePrivate *n = map[ arg->nodeName() ];
- // We take a reference
- arg->ref();
- map.insert( arg->nodeName(), arg );
- return n;
-}
-
-TQDomNodePrivate* TQDomNamedNodeMapPrivate::setNamedItemNS( TQDomNodePrivate* arg )
-{
- if ( readonly || !arg )
- return 0;
-
- if ( appendToParent )
- return parent->appendChild( arg );
-
- if ( !arg->prefix.isNull() ) {
- // node has a namespace
- TQDomNodePrivate *n = namedItemNS( arg->namespaceURI, arg->name );
- // We take a reference
- arg->ref();
- map.insert( arg->nodeName(), arg );
- return n;
- } else {
- // ### check the following code if it is ok
- return setNamedItem( arg );
- }
-}
-
-TQDomNodePrivate* TQDomNamedNodeMapPrivate::removeNamedItem( const TQString& name )
-{
- if ( readonly )
- return 0;
-
- TQDomNodePrivate* p = namedItem( name );
- if ( p == 0 )
- return 0;
- if ( appendToParent )
- return parent->removeChild( p );
-
- map.remove( p->nodeName() );
- // We took a reference, so we have to free one here
- p->deref();
- return p;
-}
-
-TQDomNodePrivate* TQDomNamedNodeMapPrivate::item( int index ) const
-{
- if ( (uint)index >= length() )
- return 0;
-
- TQDictIterator<TQDomNodePrivate> it( map );
- for ( int i = 0; i < index; ++i, ++it )
- ;
- return it.current();
-}
-
-uint TQDomNamedNodeMapPrivate::length() const
-{
- return map.count();
-}
-
-bool TQDomNamedNodeMapPrivate::contains( const TQString& name ) const
-{
- return ( map[ name ] != 0 );
-}
-
-bool TQDomNamedNodeMapPrivate::containsNS( const TQString& nsURI, const TQString & localName ) const
-{
- return ( namedItemNS( nsURI, localName ) != 0 );
-}
-
-/**************************************************************
- *
- * TQDomNamedNodeMap
- *
- **************************************************************/
-
-#define IMPL ((TQDomNamedNodeMapPrivate*)impl)
-
-/*!
- \class TQDomNamedNodeMap tqdom.h
- \reentrant
- \brief The TQDomNamedNodeMap class contains a collection of nodes
- that can be accessed by name.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- Note that TQDomNamedNodeMap does not inherit from TQDomNodeList.
- TQDomNamedNodeMaps do not provide any specific node ordering.
- Although nodes in a TQDomNamedNodeMap may be accessed by an ordinal
- index, this is simply to allow a convenient enumeration of the
- contents of a TQDomNamedNodeMap, and does not imply that the DOM
- specifies an ordering of the nodes.
-
- The TQDomNamedNodeMap is used in three places:
- \list 1
- \i TQDomDocumentType::entities() returns a map of all entities
- described in the DTD.
- \i TQDomDocumentType::notations() returns a map of all notations
- described in the DTD.
- \i TQDomNode::attributes() returns a map of all attributes of an
- element.
- \endlist
-
- Items in the map are identified by the name which TQDomNode::name()
- returns. Nodes are retrieved using namedItem(), namedItemNS() or
- item(). New nodes are inserted with setNamedItem() or
- setNamedItemNS() and removed with removeNamedItem() or
- removeNamedItemNS(). Use contains() to see if an item with the
- given name is in the named node map. The number of items is
- returned by length().
-
- Terminology: in this class we use "item" and "node"
- interchangeably.
-*/
-
-/*!
- Constructs an empty named node map.
-*/
-TQDomNamedNodeMap::TQDomNamedNodeMap()
-{
- impl = 0;
-}
-
-/*!
- Constructs a copy of \a n.
-*/
-TQDomNamedNodeMap::TQDomNamedNodeMap( const TQDomNamedNodeMap& n )
-{
- impl = n.impl;
- if ( impl )
- impl->ref();
-}
-
-TQDomNamedNodeMap::TQDomNamedNodeMap( TQDomNamedNodeMapPrivate* n )
-{
- impl = n;
- if ( impl )
- impl->ref();
-}
-
-/*!
- Assigns \a n to this named node map.
-*/
-TQDomNamedNodeMap& TQDomNamedNodeMap::operator= ( const TQDomNamedNodeMap& n )
-{
- if ( impl && impl->deref() )
- delete impl;
- impl = n.impl;
- if ( impl )
- impl->ref();
-
- return *this;
-}
-
-/*!
- Returns TRUE if \a n and this named node map are equal; otherwise
- returns FALSE.
-*/
-bool TQDomNamedNodeMap::operator== ( const TQDomNamedNodeMap& n ) const
-{
- return ( impl == n.impl );
-}
-
-/*!
- Returns TRUE if \a n and this named node map are not equal;
- otherwise returns FALSE.
-*/
-bool TQDomNamedNodeMap::operator!= ( const TQDomNamedNodeMap& n ) const
-{
- return ( impl != n.impl );
-}
-
-/*!
- Destroys the object and frees its resources.
-*/
-TQDomNamedNodeMap::~TQDomNamedNodeMap()
-{
- if ( impl && impl->deref() )
- delete impl;
-}
-
-/*!
- Returns the node called \a name.
-
- If the named node map does not contain such a node, a \link
- TQDomNode::isNull() null node\endlink is returned. A node's name is
- the name returned by TQDomNode::nodeName().
-
- \sa setNamedItem() namedItemNS()
-*/
-TQDomNode TQDomNamedNodeMap::namedItem( const TQString& name ) const
-{
- if ( !impl )
- return TQDomNode();
- return TQDomNode( IMPL->namedItem( name ) );
-}
-
-/*!
- Inserts the node \a newNode into the named node map. The name used
- by the map is the node name of \a newNode as returned by
- TQDomNode::nodeName().
-
- If the new node replaces an existing node, i.e. the map contains a
- node with the same name, the replaced node is returned.
-
- \sa namedItem() removeNamedItem() setNamedItemNS()
-*/
-TQDomNode TQDomNamedNodeMap::setNamedItem( const TQDomNode& newNode )
-{
- if ( !impl )
- return TQDomNode();
- return TQDomNode( IMPL->setNamedItem( (TQDomNodePrivate*)newNode.impl ) );
-}
-
-/*!
- Removes the node called \a name from the map.
-
- The function returns the removed node or a \link
- TQDomNode::isNull() null node\endlink if the map did not contain a
- node called \a name.
-
- \sa setNamedItem() namedItem() removeNamedItemNS()
-*/
-TQDomNode TQDomNamedNodeMap::removeNamedItem( const TQString& name )
-{
- if ( !impl )
- return TQDomNode();
- return TQDomNode( IMPL->removeNamedItem( name ) );
-}
-
-/*!
- Retrieves the node at position \a index.
-
- This can be used to iterate over the map. Note that the nodes in
- the map are ordered arbitrarily.
-
- \sa length()
-*/
-TQDomNode TQDomNamedNodeMap::item( int index ) const
-{
- if ( !impl )
- return TQDomNode();
- return TQDomNode( IMPL->item( index ) );
-}
-
-/*!
- Returns the node associated with the local name \a localName and
- the namespace URI \a nsURI.
-
- If the map does not contain such a node, a \link
- TQDomNode::isNull() null node\endlink is returned.
-
- \sa setNamedItemNS() namedItem()
-*/
-TQDomNode TQDomNamedNodeMap::namedItemNS( const TQString& nsURI, const TQString& localName ) const
-{
- if ( !impl )
- return TQDomNode();
- return TQDomNode( IMPL->namedItemNS( nsURI, localName ) );
-}
-
-/*!
- Inserts the node \a newNode in the map. If a node with the same
- namespace URI and the same local name already exists in the map,
- it is replaced by \a newNode. If the new node replaces an existing
- node, the replaced node is returned.
-
- \sa namedItemNS() removeNamedItemNS() setNamedItem()
-*/
-TQDomNode TQDomNamedNodeMap::setNamedItemNS( const TQDomNode& newNode )
-{
- if ( !impl )
- return TQDomNode();
- return TQDomNode( IMPL->setNamedItemNS( (TQDomNodePrivate*)newNode.impl ) );
-}
-
-/*!
- Removes the node with the local name \a localName and the
- namespace URI \a nsURI from the map.
-
- The function returns the removed node or a \link
- TQDomNode::isNull() null node\endlink if the map did not contain a
- node with the local name \a localName and the namespace URI \a
- nsURI.
-
- \sa setNamedItemNS() namedItemNS() removeNamedItem()
-*/
-TQDomNode TQDomNamedNodeMap::removeNamedItemNS( const TQString& nsURI, const TQString& localName )
-{
- if ( !impl )
- return TQDomNode();
- TQDomNodePrivate *n = IMPL->namedItemNS( nsURI, localName );
- if ( !n )
- return TQDomNode();
- return TQDomNode( IMPL->removeNamedItem( n->name ) );
-}
-
-/*!
- Returns the number of nodes in the map.
-
- \sa item()
-*/
-uint TQDomNamedNodeMap::length() const
-{
- if ( !impl )
- return 0;
- return IMPL->length();
-}
-
-/*!
- \fn uint TQDomNamedNodeMap::count() const
-
- Returns the number of nodes in the map.
-
- This function is the same as length().
-*/
-
-/*!
- Returns TRUE if the map contains a node called \a name; otherwise
- returns FALSE.
-*/
-bool TQDomNamedNodeMap::contains( const TQString& name ) const
-{
- if ( !impl )
- return FALSE;
- return IMPL->contains( name );
-}
-
-#undef IMPL
-
-/**************************************************************
- *
- * TQDomDocumentTypePrivate
- *
- **************************************************************/
-
-TQDomDocumentTypePrivate::TQDomDocumentTypePrivate( TQDomDocumentPrivate* doc, TQDomNodePrivate* parent )
- : TQDomNodePrivate( doc, parent )
-{
- init();
-}
-
-TQDomDocumentTypePrivate::TQDomDocumentTypePrivate( TQDomDocumentTypePrivate* n, bool deep )
- : TQDomNodePrivate( n, deep )
-{
- init();
- // Refill the maps with our new tqchildren
- TQDomNodePrivate* p = first;
- while ( p ) {
- if ( p->isEntity() )
- // Dont use normal insert function since we would create infinite recursion
- entities->map.insert( p->nodeName(), p );
- if ( p->isNotation() )
- // Dont use normal insert function since we would create infinite recursion
- notations->map.insert( p->nodeName(), p );
- }
-}
-
-TQDomDocumentTypePrivate::~TQDomDocumentTypePrivate()
-{
- if ( entities->deref() )
- delete entities;
- if ( notations->deref() )
- delete notations;
-}
-
-void TQDomDocumentTypePrivate::init()
-{
- entities = new TQDomNamedNodeMapPrivate( this );
- notations = new TQDomNamedNodeMapPrivate( this );
- publicId = TQString::null;
- systemId = TQString::null;
- internalSubset = TQString::null;
-
- entities->setAppendToParent( TRUE );
- notations->setAppendToParent( TRUE );
-}
-
-TQDomNodePrivate* TQDomDocumentTypePrivate::cloneNode( bool deep)
-{
- TQDomNodePrivate* p = new TQDomDocumentTypePrivate( this, deep );
- // We are not interested in this node
- p->deref();
- return p;
-}
-
-TQDomNodePrivate* TQDomDocumentTypePrivate::insertBefore( TQDomNodePrivate* newChild, TQDomNodePrivate* refChild )
-{
- // Call the origianl implementation
- TQDomNodePrivate* p = TQDomNodePrivate::insertBefore( newChild, refChild );
- // Update the maps
- if ( p && p->isEntity() )
- entities->map.insert( p->nodeName(), p );
- else if ( p && p->isNotation() )
- notations->map.insert( p->nodeName(), p );
-
- return p;
-}
-
-TQDomNodePrivate* TQDomDocumentTypePrivate::insertAfter( TQDomNodePrivate* newChild, TQDomNodePrivate* refChild )
-{
- // Call the origianl implementation
- TQDomNodePrivate* p = TQDomNodePrivate::insertAfter( newChild, refChild );
- // Update the maps
- if ( p && p->isEntity() )
- entities->map.insert( p->nodeName(), p );
- else if ( p && p->isNotation() )
- notations->map.insert( p->nodeName(), p );
-
- return p;
-}
-
-TQDomNodePrivate* TQDomDocumentTypePrivate::replaceChild( TQDomNodePrivate* newChild, TQDomNodePrivate* oldChild )
-{
- // Call the origianl implementation
- TQDomNodePrivate* p = TQDomNodePrivate::replaceChild( newChild, oldChild );
- // Update the maps
- if ( p ) {
- if ( oldChild && oldChild->isEntity() )
- entities->map.remove( oldChild->nodeName() );
- else if ( oldChild && oldChild->isNotation() )
- notations->map.remove( oldChild->nodeName() );
-
- if ( p->isEntity() )
- entities->map.insert( p->nodeName(), p );
- else if ( p->isNotation() )
- notations->map.insert( p->nodeName(), p );
- }
-
- return p;
-}
-
-TQDomNodePrivate* TQDomDocumentTypePrivate::removeChild( TQDomNodePrivate* oldChild )
-{
- // Call the origianl implementation
- TQDomNodePrivate* p = TQDomNodePrivate::removeChild( oldChild );
- // Update the maps
- if ( p && p->isEntity() )
- entities->map.remove( p->nodeName() );
- else if ( p && p->isNotation() )
- notations->map.remove( p ->nodeName() );
-
- return p;
-}
-
-TQDomNodePrivate* TQDomDocumentTypePrivate::appendChild( TQDomNodePrivate* newChild )
-{
- return insertAfter( newChild, 0 );
-}
-
-void TQDomDocumentTypePrivate::save( TQTextStream& s, int, int indent ) const
-{
- if ( name.isEmpty() )
- return;
-
- s << "<!DOCTYPE " << name;
-
- if ( !publicId.isNull() ) {
- s << " PUBLIC \"" << publicId << "\"";
- if ( !systemId.isNull() )
- s << " \"" << systemId << "\"";
- } else if ( !systemId.isNull() ) {
- s << " SYSTEM \"" << systemId << "\"";
- }
-
- if ( entities->length()>0 || notations->length()>0 ) {
- s << " [ " << endl;
-
- TQDictIterator<TQDomNodePrivate> it2( notations->map );
- for ( ; it2.current(); ++it2 )
- it2.current()->save( s, 0, indent );
-
- TQDictIterator<TQDomNodePrivate> it( entities->map );
- for ( ; it.current(); ++it )
- it.current()->save( s, 0, indent );
-
- s << " ]";
- }
-
- s << ">" << endl;
-}
-
-/**************************************************************
- *
- * TQDomDocumentType
- *
- **************************************************************/
-
-#define IMPL ((TQDomDocumentTypePrivate*)impl)
-
-/*!
- \class TQDomDocumentType tqdom.h
- \reentrant
- \brief The TQDomDocumentType class is the representation of the DTD
- in the document tree.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- The TQDomDocumentType class allows read-only access to some of the
- data structures in the DTD: it can return a map of all entities()
- and notations(). In addition the function name() returns the name
- of the document type as specified in the &lt;!DOCTYPE name&gt;
- tag. This class also provides the publicId(), systemId() and
- internalSubset() functions.
-
- \sa TQDomDocument
-*/
-
-/*!
- Creates an empty TQDomDocumentType object.
-*/
-TQDomDocumentType::TQDomDocumentType() : TQDomNode()
-{
-}
-
-/*!
- Constructs a copy of \a n.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomDocumentType::TQDomDocumentType( const TQDomDocumentType& n )
- : TQDomNode( n )
-{
-}
-
-TQDomDocumentType::TQDomDocumentType( TQDomDocumentTypePrivate* n )
- : TQDomNode( n )
-{
-}
-
-/*!
- Assigns \a n to this document type.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomDocumentType& TQDomDocumentType::operator= ( const TQDomDocumentType& n )
-{
- return (TQDomDocumentType&) TQDomNode::operator=( n );
-}
-
-/*!
- Destroys the object and frees its resources.
-*/
-TQDomDocumentType::~TQDomDocumentType()
-{
-}
-
-/*!
- Returns the name of the document type as specified in the
- &lt;!DOCTYPE name&gt; tag.
-
- \sa nodeName()
-*/
-TQString TQDomDocumentType::name() const
-{
- if ( !impl )
- return TQString::null;
-
- return IMPL->nodeName();
-}
-
-/*!
- Returns a map of all entities described in the DTD.
-*/
-TQDomNamedNodeMap TQDomDocumentType::entities() const
-{
- if ( !impl )
- return TQDomNamedNodeMap();
- return TQDomNamedNodeMap( IMPL->entities );
-}
-
-/*!
- Returns a map of all notations described in the DTD.
-*/
-TQDomNamedNodeMap TQDomDocumentType::notations() const
-{
- if ( !impl )
- return TQDomNamedNodeMap();
- return TQDomNamedNodeMap( IMPL->notations );
-}
-
-/*!
- Returns the public identifier of the external DTD subset or
- TQString::null if there is no public identifier.
-
- \sa systemId() internalSubset() TQDomImplementation::createDocumentType()
-*/
-TQString TQDomDocumentType::publicId() const
-{
- if ( !impl )
- return TQString::null;
- return IMPL->publicId;
-}
-
-/*!
- Returns the system identifier of the external DTD subset or
- TQString::null if there is no system identifier.
-
- \sa publicId() internalSubset() TQDomImplementation::createDocumentType()
-*/
-TQString TQDomDocumentType::systemId() const
-{
- if ( !impl )
- return TQString::null;
- return IMPL->systemId;
-}
-
-/*!
- Returns the internal subset of the document type or TQString::null
- if there is no internal subset.
-
- \sa publicId() systemId()
-*/
-TQString TQDomDocumentType::internalSubset() const
-{
- if ( !impl )
- return TQString::null;
- return IMPL->internalSubset;
-}
-
-/*!
- Returns \c DocumentTypeNode.
-
- \sa isDocumentType() TQDomNode::toDocumentType()
-*/
-TQDomNode::NodeType TQDomDocumentType::nodeType() const
-{
- return DocumentTypeNode;
-}
-
-/*!
- This function overloads TQDomNode::isDocumentType().
-
- \sa nodeType() TQDomNode::toDocumentType()
-*/
-bool TQDomDocumentType::isDocumentType() const
-{
- return TRUE;
-}
-
-#undef IMPL
-
-/**************************************************************
- *
- * TQDomDocumentFragmentPrivate
- *
- **************************************************************/
-
-TQDomDocumentFragmentPrivate::TQDomDocumentFragmentPrivate( TQDomDocumentPrivate* doc, TQDomNodePrivate* parent )
- : TQDomNodePrivate( doc, parent )
-{
- name = "#document-fragment";
-}
-
-TQDomDocumentFragmentPrivate::TQDomDocumentFragmentPrivate( TQDomNodePrivate* n, bool deep )
- : TQDomNodePrivate( n, deep )
-{
-}
-
-TQDomDocumentFragmentPrivate::~TQDomDocumentFragmentPrivate()
-{
-}
-
-TQDomNodePrivate* TQDomDocumentFragmentPrivate::cloneNode( bool deep)
-{
- TQDomNodePrivate* p = new TQDomDocumentFragmentPrivate( this, deep );
- // We are not interested in this node
- p->deref();
- return p;
-}
-
-/**************************************************************
- *
- * TQDomDocumentFragment
- *
- **************************************************************/
-
-#define IMPL ((TQDomDocumentFragmentPrivate*)impl)
-
-/*!
- \class TQDomDocumentFragment tqdom.h
- \reentrant
- \brief The TQDomDocumentFragment class is a tree of TQDomNodes which is not usually a complete TQDomDocument.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- If you want to do complex tree operations it is useful to have a
- lightweight class to store nodes and their relations.
- TQDomDocumentFragment stores a subtree of a document which does not
- necessarily represent a well-formed XML document.
-
- TQDomDocumentFragment is also useful if you want to group several
- nodes in a list and insert them all together as tqchildren of some
- node. In these cases TQDomDocumentFragment can be used as a
- temporary container for this list of tqchildren.
-
- The most important feature of TQDomDocumentFragment is that it is
- treated in a special way by TQDomNode::insertAfter(),
- TQDomNode::insertBefore(), TQDomNode::replaceChild() and
- TQDomNode::appendChild(): instead of inserting the fragment itself, all
- the fragment's tqchildren are inserted.
-*/
-
-/*!
- Constructs an empty document fragment.
-*/
-TQDomDocumentFragment::TQDomDocumentFragment()
-{
-}
-
-TQDomDocumentFragment::TQDomDocumentFragment( TQDomDocumentFragmentPrivate* n )
- : TQDomNode( n )
-{
-}
-
-/*!
- Constructs a copy of \a x.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomDocumentFragment::TQDomDocumentFragment( const TQDomDocumentFragment& x )
- : TQDomNode( x )
-{
-}
-
-/*!
- Assigns \a x to this DOM document fragment.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomDocumentFragment& TQDomDocumentFragment::operator= ( const TQDomDocumentFragment& x )
-{
- return (TQDomDocumentFragment&) TQDomNode::operator=( x );
-}
-
-/*!
- Destroys the object and frees its resources.
-*/
-TQDomDocumentFragment::~TQDomDocumentFragment()
-{
-}
-
-/*!
- Returns \c DocumentFragment.
-
- \sa isDocumentFragment() TQDomNode::toDocumentFragment()
-*/
-TQDomNode::NodeType TQDomDocumentFragment::nodeType() const
-{
- return TQDomNode::DocumentFragmentNode;
-}
-
-/*!
- This function reimplements TQDomNode::isDocumentFragment().
-
- \sa nodeType() TQDomNode::toDocumentFragment()
-*/
-bool TQDomDocumentFragment::isDocumentFragment() const
-{
- return TRUE;
-}
-
-#undef IMPL
-
-/**************************************************************
- *
- * TQDomCharacterDataPrivate
- *
- **************************************************************/
-
-TQDomCharacterDataPrivate::TQDomCharacterDataPrivate( TQDomDocumentPrivate* d, TQDomNodePrivate* p,
- const TQString& data )
- : TQDomNodePrivate( d, p )
-{
- value = data;
-
- name = "#character-data";
-}
-
-TQDomCharacterDataPrivate::TQDomCharacterDataPrivate( TQDomCharacterDataPrivate* n, bool deep )
- : TQDomNodePrivate( n, deep )
-{
-}
-
-TQDomCharacterDataPrivate::~TQDomCharacterDataPrivate()
-{
-}
-
-TQDomNodePrivate* TQDomCharacterDataPrivate::cloneNode( bool deep )
-{
- TQDomNodePrivate* p = new TQDomCharacterDataPrivate( this, deep );
- // We are not interested in this node
- p->deref();
- return p;
-}
-
-uint TQDomCharacterDataPrivate::dataLength() const
-{
- return value.length();
-}
-
-TQString TQDomCharacterDataPrivate::substringData( unsigned long offset, unsigned long n ) const
-{
- return value.mid( offset, n );
-}
-
-void TQDomCharacterDataPrivate::insertData( unsigned long offset, const TQString& arg )
-{
- value.insert( offset, arg );
-}
-
-void TQDomCharacterDataPrivate::deleteData( unsigned long offset, unsigned long n )
-{
- value.remove( offset, n );
-}
-
-void TQDomCharacterDataPrivate::replaceData( unsigned long offset, unsigned long n, const TQString& arg )
-{
- value.replace( offset, n, arg );
-}
-
-void TQDomCharacterDataPrivate::appendData( const TQString& arg )
-{
- value += arg;
-}
-
-/**************************************************************
- *
- * TQDomCharacterData
- *
- **************************************************************/
-
-#define IMPL ((TQDomCharacterDataPrivate*)impl)
-
-/*!
- \class TQDomCharacterData tqdom.h
- \reentrant
- \brief The TQDomCharacterData class represents a generic string in the DOM.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- Character data as used in XML specifies a generic data string.
- More specialized versions of this class are TQDomText, TQDomComment
- and TQDomCDATASection.
-
- The data string is set with setData() and retrieved with data().
- You can retrieve a portion of the data string using
- substringData(). Extra data can be appended with appendData(), or
- inserted with insertData(). Portions of the data string can be
- deleted with deleteData() or replaced with replaceData(). The
- length of the data string is returned by length().
-
- The node type of the node containing this character data is
- returned by nodeType().
-
- \sa TQDomText TQDomComment TQDomCDATASection
-*/
-
-/*!
- Constructs an empty character data object.
-*/
-TQDomCharacterData::TQDomCharacterData()
-{
-}
-
-/*!
- Constructs a copy of \a x.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomCharacterData::TQDomCharacterData( const TQDomCharacterData& x )
- : TQDomNode( x )
-{
-}
-
-TQDomCharacterData::TQDomCharacterData( TQDomCharacterDataPrivate* n )
- : TQDomNode( n )
-{
-}
-
-/*!
- Assigns \a x to this character data.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomCharacterData& TQDomCharacterData::operator= ( const TQDomCharacterData& x )
-{
- return (TQDomCharacterData&) TQDomNode::operator=( x );
-}
-
-/*!
- Destroys the object and frees its resources.
-*/
-TQDomCharacterData::~TQDomCharacterData()
-{
-}
-
-/*!
- Returns the string stored in this object.
-
- If the node is a \link isNull() null node\endlink, it will return
- TQString::null.
-*/
-TQString TQDomCharacterData::data() const
-{
- if ( !impl )
- return TQString::null;
- return impl->nodeValue();
-}
-
-/*!
- Sets this object's string to \a v.
-*/
-void TQDomCharacterData::setData( const TQString& v )
-{
- if ( impl )
- impl->setNodeValue( v );
-}
-
-/*!
- Returns the length of the stored string.
-*/
-uint TQDomCharacterData::length() const
-{
- if ( impl )
- return IMPL->dataLength();
- return 0;
-}
-
-/*!
- Returns the substring of length \a count from position \a offset.
-*/
-TQString TQDomCharacterData::substringData( unsigned long offset, unsigned long count )
-{
- if ( !impl )
- return TQString::null;
- return IMPL->substringData( offset, count );
-}
-
-/*!
- Appends the string \a arg to the stored string.
-*/
-void TQDomCharacterData::appendData( const TQString& arg )
-{
- if ( impl )
- IMPL->appendData( arg );
-}
-
-/*!
- Inserts the string \a arg into the stored string at position \a offset.
-*/
-void TQDomCharacterData::insertData( unsigned long offset, const TQString& arg )
-{
- if ( impl )
- IMPL->insertData( offset, arg );
-}
-
-/*!
- Deletes a substring of length \a count from position \a offset.
-*/
-void TQDomCharacterData::deleteData( unsigned long offset, unsigned long count )
-{
- if ( impl )
- IMPL->deleteData( offset, count );
-}
-
-/*!
- Replaces the substring of length \a count starting at position \a
- offset with the string \a arg.
-*/
-void TQDomCharacterData::replaceData( unsigned long offset, unsigned long count, const TQString& arg )
-{
- if ( impl )
- IMPL->replaceData( offset, count, arg );
-}
-
-/*!
- Returns the type of node this object refers to (i.e. \c TextNode,
- \c CDATASectionNode, \c CommentNode or \c CharacterDataNode). For
- a \link isNull() null node\endlink \c CharacterDataNode is
- returned.
-*/
-TQDomNode::NodeType TQDomCharacterData::nodeType() const
-{
- if( !impl )
- return CharacterDataNode;
- return TQDomNode::nodeType();
-}
-
-/*!
- Returns TRUE.
-*/
-bool TQDomCharacterData::isCharacterData() const
-{
- return TRUE;
-}
-
-#undef IMPL
-
-/**************************************************************
- *
- * TQDomAttrPrivate
- *
- **************************************************************/
-
-TQDomAttrPrivate::TQDomAttrPrivate( TQDomDocumentPrivate* d, TQDomNodePrivate* parent, const TQString& name_ )
- : TQDomNodePrivate( d, parent )
-{
- name = name_;
- m_specified = FALSE;
-}
-
-TQDomAttrPrivate::TQDomAttrPrivate( TQDomDocumentPrivate* d, TQDomNodePrivate* p, const TQString& nsURI, const TQString& qName )
- : TQDomNodePrivate( d, p )
-{
- qt_split_namespace( prefix, name, qName, !nsURI.isNull() );
- namespaceURI = nsURI;
- createdWithDom1Interface = FALSE;
- m_specified = FALSE;
-}
-
-TQDomAttrPrivate::TQDomAttrPrivate( TQDomAttrPrivate* n, bool deep )
- : TQDomNodePrivate( n, deep )
-{
- m_specified = n->specified();
-}
-
-TQDomAttrPrivate::~TQDomAttrPrivate()
-{
-}
-
-void TQDomAttrPrivate::setNodeValue( const TQString& v )
-{
- value = v;
- TQDomTextPrivate *t = new TQDomTextPrivate( 0, this, v );
- // keep the refcount balanced: appendChild() does a ref() anyway.
- t->deref();
- if ( first ) {
- delete removeChild( first );
- }
- appendChild( t );
-}
-
-TQDomNodePrivate* TQDomAttrPrivate::cloneNode( bool deep )
-{
- TQDomNodePrivate* p = new TQDomAttrPrivate( this, deep );
- // We are not interested in this node
- p->deref();
- return p;
-}
-
-bool TQDomAttrPrivate::specified() const
-{
- return m_specified;
-}
-
-static bool isXmlChar(const TQChar &c)
-{
- // Characters in this range must be accepted by XML parsers.
- // Consequently characters outside of this range need to be escaped.
-
- ushort uc = c.tqunicode();
-
- return uc == 0x9
- || uc == 0xA
- || uc == 0xD
- || (0x20 <= uc && uc <= 0xD7FF)
- || (0xE000 <= uc && uc <= 0xFFFD);
-}
-
-/*
- Encode an attribute value upon saving.
-*/
-static TQString encodeAttr( const TQString& str )
-{
- TQString tmp( str );
- uint len = tmp.length();
- uint i = 0;
- while ( i < len ) {
- if ( tmp[(int)i] == '<' ) {
- tmp.replace( i, 1, "&lt;" );
- len += 3;
- i += 4;
- } else if ( tmp[(int)i] == '"' ) {
- tmp.replace( i, 1, "&quot;" );
- len += 5;
- i += 6;
- } else if ( tmp[(int)i] == '&' ) {
- tmp.replace( i, 1, "&amp;" );
- len += 4;
- i += 5;
- } else if ( tmp[(int)i] == '>' && i>=2 && tmp[(int)i-1]==']' && tmp[(int)i-2]==']' ) {
- tmp.replace( i, 1, "&gt;" );
- len += 3;
- i += 4;
- } else if (!isXmlChar(tmp[(int)i])) {
- TQString repl = "&#x" + TQString::number(tmp[(int)i].tqunicode(), 16) + ';';
- qWarning("TQDom: saving invalid character %s, the document will not be well-formed", repl.latin1());
- tmp.replace(i, 1, repl);
- len += repl.length() - 1;
- i += repl.length();
- } else {
- ++i;
- }
- }
-
- return tmp;
-}
-
-void TQDomAttrPrivate::save( TQTextStream& s, int, int ) const
-{
- if ( namespaceURI.isNull() ) {
- s << name << "=\"" << encodeAttr( value ) << "\"";
- } else {
- // ### optimize this (see comment of TQDomElementPrivate::save()
- s << prefix << ":" << name << "=\"" << encodeAttr( value ) << "\""
- << " xmlns:" << prefix << "=\"" << encodeAttr( namespaceURI ) << "\"";
- }
-}
-
-/**************************************************************
- *
- * TQDomAttr
- *
- **************************************************************/
-
-#define IMPL ((TQDomAttrPrivate*)impl)
-
-/*!
- \class TQDomAttr tqdom.h
- \reentrant
- \brief The TQDomAttr class represents one attribute of a TQDomElement.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- For example, the following piece of XML produces an element with
- no tqchildren, but two attributes:
-
- \code
- <link href="http://www.trolltech.com" color="red" />
- \endcode
-
- You can access the attributes of an element with code like this:
-
- \code
- TQDomElement e = //...
- //...
- TQDomAttr a = e.attributeNode( "href" );
- cout << a.value() << endl; // prints "http://www.trolltech.com"
- a.setValue( "http://doc.trolltech.com" ); // change the node's attribute
- TQDomAttr a2 = e.attributeNode( "href" );
- cout << a2.value() << endl; // prints "http://doc.trolltech.com"
- \endcode
-
- This example also shows that changing an attribute received from
- an element changes the attribute of the element. If you do not
- want to change the value of the element's attribute you must
- use cloneNode() to get an independent copy of the attribute.
-
- TQDomAttr can return the name() and value() of an attribute. An
- attribute's value is set with setValue(). If specified() returns
- TRUE the value was either set in the document or set with
- setValue(); otherwise the value hasn't been set. The node this
- attribute is attached to (if any) is returned by ownerElement().
-
- For further information about the Document Object Model see
- \link http://www.w3.org/TR/REC-DOM-Level-1/\endlink and
- \link http://www.w3.org/TR/DOM-Level-2-Core/\endlink.
- For a more general introduction of the DOM implementation see the
- TQDomDocument documentation.
-*/
-
-
-/*!
- Constructs an empty attribute.
-*/
-TQDomAttr::TQDomAttr()
-{
-}
-
-/*!
- Constructs a copy of \a x.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomAttr::TQDomAttr( const TQDomAttr& x )
- : TQDomNode( x )
-{
-}
-
-TQDomAttr::TQDomAttr( TQDomAttrPrivate* n )
- : TQDomNode( n )
-{
-}
-
-/*!
- Assigns \a x to this DOM attribute.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomAttr& TQDomAttr::operator= ( const TQDomAttr& x )
-{
- return (TQDomAttr&) TQDomNode::operator=( x );
-}
-
-/*!
- Destroys the object and frees its resources.
-*/
-TQDomAttr::~TQDomAttr()
-{
-}
-
-/*!
- Returns the attribute's name.
-*/
-TQString TQDomAttr::name() const
-{
- if ( !impl )
- return TQString::null;
- return impl->nodeName();
-}
-
-/*!
- Returns TRUE if the attribute has either been expicitly specified
- in the XML document or was set by the user with setValue().
- Returns FALSE if the value hasn't been specified or set.
-
- \sa setValue()
-*/
-bool TQDomAttr::specified() const
-{
- if ( !impl )
- return FALSE;
- return IMPL->specified();
-}
-
-/*!
- Returns the element node this attribute is attached to or a \link
- TQDomNode::isNull() null node\endlink if this attribute is not
- attached to any element.
-*/
-TQDomElement TQDomAttr::ownerElement() const
-{
- if ( !impl && !impl->parent()->isElement() )
- return TQDomElement();
- return TQDomElement( (TQDomElementPrivate*)(impl->parent()) );
-}
-
-/*!
- Returns the value of the attribute or TQString::null if the
- attribute has not been specified.
-
- \sa specified() setValue()
-*/
-TQString TQDomAttr::value() const
-{
- if ( !impl )
- return TQString::null;
- return impl->nodeValue();
-}
-
-/*!
- Sets the attribute's value to \a v.
-
- \sa value()
-*/
-void TQDomAttr::setValue( const TQString& v )
-{
- if ( !impl )
- return;
- impl->setNodeValue( v );
- IMPL->m_specified = TRUE;
-}
-
-/*!
- Returns \link TQDomNode::NodeType AttributeNode\endlink.
-*/
-TQDomNode::NodeType TQDomAttr::nodeType() const
-{
- return AttributeNode;
-}
-
-/*!
- Returns TRUE.
-*/
-bool TQDomAttr::isAttr() const
-{
- return TRUE;
-}
-
-#undef IMPL
-
-/**************************************************************
- *
- * TQDomElementPrivate
- *
- **************************************************************/
-
-TQDomElementPrivate::TQDomElementPrivate( TQDomDocumentPrivate* d, TQDomNodePrivate* p,
- const TQString& tagname )
- : TQDomNodePrivate( d, p )
-{
- name = tagname;
- m_attr = new TQDomNamedNodeMapPrivate( this );
-}
-
-TQDomElementPrivate::TQDomElementPrivate( TQDomDocumentPrivate* d, TQDomNodePrivate* p,
- const TQString& nsURI, const TQString& qName )
- : TQDomNodePrivate( d, p )
-{
- qt_split_namespace( prefix, name, qName, !nsURI.isNull() );
- namespaceURI = nsURI;
- createdWithDom1Interface = FALSE;
- m_attr = new TQDomNamedNodeMapPrivate( this );
-}
-
-TQDomElementPrivate::TQDomElementPrivate( TQDomElementPrivate* n, bool deep ) :
- TQDomNodePrivate( n, deep )
-{
- m_attr = n->m_attr->clone( this );
- // Reference is down to 0, so we set it to 1 here.
- m_attr->ref();
-}
-
-TQDomElementPrivate::~TQDomElementPrivate()
-{
- if ( m_attr->deref() )
- delete m_attr;
-}
-
-TQDomNodePrivate* TQDomElementPrivate::cloneNode( bool deep)
-{
- TQDomNodePrivate* p = new TQDomElementPrivate( this, deep );
- // We are not interested in this node
- p->deref();
- return p;
-}
-
-TQString TQDomElementPrivate::attribute( const TQString& name_, const TQString& defValue ) const
-{
- TQDomNodePrivate* n = m_attr->namedItem( name_ );
- if ( !n )
- return defValue;
-
- return n->nodeValue();
-}
-
-TQString TQDomElementPrivate::attributeNS( const TQString& nsURI, const TQString& localName, const TQString& defValue ) const
-{
- TQDomNodePrivate* n = m_attr->namedItemNS( nsURI, localName );
- if ( !n )
- return defValue;
-
- return n->nodeValue();
-}
-
-void TQDomElementPrivate::setAttribute( const TQString& aname, const TQString& newValue )
-{
- TQDomNodePrivate* n = m_attr->namedItem( aname );
- if ( !n ) {
- n = new TQDomAttrPrivate( ownerDocument(), this, aname );
- n->setNodeValue( newValue );
-
- // Referencing is done by the map, so we set the reference counter back
- // to 0 here. This is ok since we created the TQDomAttrPrivate.
- n->deref();
- m_attr->setNamedItem( n );
- } else {
- n->setNodeValue( newValue );
- }
-}
-
-void TQDomElementPrivate::setAttributeNS( const TQString& nsURI, const TQString& qName, const TQString& newValue )
-{
- TQString prefix, localName;
- qt_split_namespace( prefix, localName, qName, TRUE );
- TQDomNodePrivate* n = m_attr->namedItemNS( nsURI, localName );
- if ( !n ) {
- n = new TQDomAttrPrivate( ownerDocument(), this, nsURI, qName );
- n->setNodeValue( newValue );
-
- // Referencing is done by the map, so we set the reference counter back
- // to 0 here. This is ok since we created the TQDomAttrPrivate.
- n->deref();
- m_attr->setNamedItem( n );
- } else {
- n->setNodeValue( newValue );
- n->prefix = prefix;
- }
-}
-
-void TQDomElementPrivate::removeAttribute( const TQString& aname )
-{
- TQDomNodePrivate* p = m_attr->removeNamedItem( aname );
- if ( p && p->count == 0 )
- delete p;
-}
-
-TQDomAttrPrivate* TQDomElementPrivate::attributeNode( const TQString& aname )
-{
- return (TQDomAttrPrivate*)m_attr->namedItem( aname );
-}
-
-TQDomAttrPrivate* TQDomElementPrivate::attributeNodeNS( const TQString& nsURI, const TQString& localName )
-{
- return (TQDomAttrPrivate*)m_attr->namedItemNS( nsURI, localName );
-}
-
-TQDomAttrPrivate* TQDomElementPrivate::setAttributeNode( TQDomAttrPrivate* newAttr )
-{
- TQDomNodePrivate* n = m_attr->namedItem( newAttr->nodeName() );
-
- // Referencing is done by the maps
- m_attr->setNamedItem( newAttr );
-
- return (TQDomAttrPrivate*)n;
-}
-
-TQDomAttrPrivate* TQDomElementPrivate::setAttributeNodeNS( TQDomAttrPrivate* newAttr )
-{
- TQDomNodePrivate* n = 0;
- if ( !newAttr->prefix.isNull() )
- n = m_attr->namedItemNS( newAttr->namespaceURI, newAttr->name );
-
- // Referencing is done by the maps
- m_attr->setNamedItem( newAttr );
-
- return (TQDomAttrPrivate*)n;
-}
-
-TQDomAttrPrivate* TQDomElementPrivate::removeAttributeNode( TQDomAttrPrivate* oldAttr )
-{
- return (TQDomAttrPrivate*)m_attr->removeNamedItem( oldAttr->nodeName() );
-}
-
-bool TQDomElementPrivate::hasAttribute( const TQString& aname )
-{
- return m_attr->contains( aname );
-}
-
-bool TQDomElementPrivate::hasAttributeNS( const TQString& nsURI, const TQString& localName )
-{
- return m_attr->containsNS( nsURI, localName );
-}
-
-TQString TQDomElementPrivate::text()
-{
- TQString t( "" );
-
- TQDomNodePrivate* p = first;
- while ( p ) {
- if ( p->isText() || p->isCDATASection() )
- t += p->nodeValue();
- else if ( p->isElement() )
- t += ((TQDomElementPrivate*)p)->text();
- p = p->next;
- }
-
- return t;
-}
-
-void TQDomElementPrivate::save( TQTextStream& s, int depth, int indent ) const
-{
- if ( !( prev && prev->isText() ) )
- for ( int i = 0; i < depth*indent; ++i )
- s << " ";
-
- TQString qName( name );
- TQString nsDecl( "" );
- if ( !namespaceURI.isNull() ) {
- // ### optimize this, so that you only declare namespaces that are not
- // yet declared -- we loose default namespace mappings, so maybe we
- // should rather store the information that we get from
- // startPrefixMapping()/endPrefixMapping() and use them (you have to
- // take care if the DOM tree is modified, though)
- if ( prefix.isEmpty() ) {
- nsDecl = " xmlns";
- } else {
- qName = prefix + ":" + name;
- nsDecl = " xmlns:" + prefix;
- }
- nsDecl += "=\"" + encodeAttr( namespaceURI ) + "\"";
- }
- s << "<" << qName << nsDecl;
-
- if ( !m_attr->map.isEmpty() ) {
- s << " ";
- TQDictIterator<TQDomNodePrivate> it( m_attr->map );
- for ( ; it.current(); ++it ) {
- it.current()->save( s, 0, indent );
- s << " ";
- }
- }
-
- if ( last ) {
- // has child nodes
- if ( first->isText() )
- s << ">";
- else
- s << ">" << endl;
- TQDomNodePrivate::save( s, depth + 1, indent);
- if ( !last->isText() )
- for( int i = 0; i < depth*indent; ++i )
- s << " ";
-
- s << "</" << qName << ">";
- } else {
- s << "/>";
- }
- if ( !( next && next->isText() ) )
- s << endl;
-}
-
-/**************************************************************
- *
- * TQDomElement
- *
- **************************************************************/
-
-#define IMPL ((TQDomElementPrivate*)impl)
-
-/*!
- \class TQDomElement tqdom.h
- \reentrant
- \brief The TQDomElement class represents one element in the DOM tree.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- Elements have a tagName() and zero or more attributes associated
- with them. The tag name can be changed with setTagName().
-
- Element attributes are represented by TQDomAttr objects that can
- be queried using the attribute() and attributeNode() functions.
- You can set attributes with the setAttribute() and
- setAttributeNode() functions. Attributes can be removed with
- removeAttribute(). There are namespace-aware equivalents to these
- functions, i.e. setAttributeNS(), setAttributeNodeNS() and
- removeAttributeNS().
-
- If you want to access the text of a node use text(), e.g.
- \code
- TQDomElement e = //...
- //...
- TQString s = e.text()
- \endcode
- The text() function operates recursively to find the text (since
- not all elements contain text). If you want to find all the text
- in all of a node's tqchildren, iterate over the tqchildren looking for
- TQDomText nodes, e.g.
- \code
- TQString text;
- TQDomElement element = doc.documentElement();
- for( TQDomNode n = element.firstChild(); !n.isNull(); n = n.nextSibling() )
- {
- TQDomText t = n.toText();
- if ( !t.isNull() )
- text += t.data();
- }
- \endcode
- Note that we attempt to convert each node to a text node and use
- text() rather than using firstChild().toText().data() or
- n.toText().data() directly on the node, because the node may not
- be a text element.
-
- You can get a list of all the decendents of an element which have
- a specified tag name with elementsByTagName() or
- elementsByTagNameNS().
-
- For further information about the Document Object Model see
- \link http://www.w3.org/TR/REC-DOM-Level-1/\endlink and
- \link http://www.w3.org/TR/DOM-Level-2-Core/\endlink.
- For a more general introduction of the DOM implementation see the
- TQDomDocument documentation.
-*/
-
-/*!
- Constructs an empty element. Use the TQDomDocument::createElement()
- function to construct elements with content.
-*/
-TQDomElement::TQDomElement()
- : TQDomNode()
-{
-}
-
-/*!
- Constructs a copy of \a x.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomElement::TQDomElement( const TQDomElement& x )
- : TQDomNode( x )
-{
-}
-
-TQDomElement::TQDomElement( TQDomElementPrivate* n )
- : TQDomNode( n )
-{
-}
-
-/*!
- Assigns \a x to this DOM element.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomElement& TQDomElement::operator= ( const TQDomElement& x )
-{
- return (TQDomElement&) TQDomNode::operator=( x );
-}
-
-/*!
- Destroys the object and frees its resources.
-*/
-TQDomElement::~TQDomElement()
-{
-}
-
-/*!
- Returns \c ElementNode.
-*/
-TQDomNode::NodeType TQDomElement::nodeType() const
-{
- return ElementNode;
-}
-
-/*!
- Sets this element's tag name to \a name.
-
- \sa tagName()
-*/
-void TQDomElement::setTagName( const TQString& name )
-{
- if ( impl )
- impl->name = name;
-}
-
-/*!
- Returns the tag name of this element. For an XML element like this:
- \code
- <img src="myimg.png">
- \endcode
- the tagname would return "img".
-
- \sa setTagName()
-*/
-TQString TQDomElement::tagName() const
-{
- if ( !impl )
- return TQString::null;
- return impl->nodeName();
-}
-
-/*!
- Returns the attribute called \a name. If the attribute does not
- exist \a defValue is returned.
-
- \sa setAttribute() attributeNode() setAttributeNode() attributeNS()
-*/
-TQString TQDomElement::attribute( const TQString& name, const TQString& defValue ) const
-{
- if ( !impl )
- return defValue;
- return IMPL->attribute( name, defValue );
-}
-
-/*!
- Adds an attribute called \a name with value \a value. If an
- attribute with the same name exists, its value is replaced by \a
- value.
-
- \sa attribute() setAttributeNode() setAttributeNS()
-*/
-void TQDomElement::setAttribute( const TQString& name, const TQString& value )
-{
- if ( !impl )
- return;
- IMPL->setAttribute( name, value );
-}
-
-/*!
- \overload
-*/
-void TQDomElement::setAttribute( const TQString& name, int value )
-{
- // ### 4.0: inline
- setAttribute( name, long(value) );
-}
-
-/*!
- \overload
-*/
-void TQDomElement::setAttribute( const TQString& name, uint value )
-{
- // ### 4.0: inline
- setAttribute( name, ulong(value) );
-}
-
-/*!
- \overload
-*/
-void TQDomElement::setAttribute( const TQString& name, long value )
-{
- if ( !impl )
- return;
- TQString x;
- x.setNum( value );
- IMPL->setAttribute( name, x );
-}
-
-/*!
- \overload
-*/
-void TQDomElement::setAttribute( const TQString& name, ulong value )
-{
- if ( !impl )
- return;
- TQString x;
- x.setNum( value );
- IMPL->setAttribute( name, x );
-}
-
-/*!
- \overload
-*/
-void TQDomElement::setAttribute( const TQString& name, double value )
-{
- if ( !impl )
- return;
- TQString x;
- x.setNum( value );
- IMPL->setAttribute( name, x );
-}
-
-/*!
- Removes the attribute called name \a name from this element.
-
- \sa setAttribute() attribute() removeAttributeNS()
-*/
-void TQDomElement::removeAttribute( const TQString& name )
-{
- if ( !impl )
- return;
- IMPL->removeAttribute( name );
-}
-
-/*!
- Returns the TQDomAttr object that corresponds to the attribute
- called \a name. If no such attribute exists a \link
- TQDomNode::isNull() null attribute\endlink is returned.
-
- \sa setAttributeNode() attribute() setAttribute() attributeNodeNS()
-*/
-TQDomAttr TQDomElement::attributeNode( const TQString& name)
-{
- if ( !impl )
- return TQDomAttr();
- return TQDomAttr( IMPL->attributeNode( name ) );
-}
-
-/*!
- Adds the attribute \a newAttr to this element.
-
- If the element has another attribute that has the same name as \a
- newAttr, this function replaces that attribute and returns it;
- otherwise the function returns a \link TQDomNode::isNull() null
- attribute\endlink.
-
- \sa attributeNode() setAttribute() setAttributeNodeNS()
-*/
-TQDomAttr TQDomElement::setAttributeNode( const TQDomAttr& newAttr )
-{
- if ( !impl )
- return TQDomAttr();
- return TQDomAttr( IMPL->setAttributeNode( ((TQDomAttrPrivate*)newAttr.impl) ) );
-}
-
-/*!
- Removes the attribute \a oldAttr from the element and returns it.
-
- \sa attributeNode() setAttributeNode()
-*/
-TQDomAttr TQDomElement::removeAttributeNode( const TQDomAttr& oldAttr )
-{
- if ( !impl )
- return TQDomAttr(); // ### should this return oldAttr?
- return TQDomAttr( IMPL->removeAttributeNode( ((TQDomAttrPrivate*)oldAttr.impl) ) );
-}
-
-/*!
- Returns a TQDomNodeList containing all descendent elements of this
- element that are called \a tagname. The order they are in the node
- list is the order they are encountered in a preorder traversal of
- the element tree.
-
- \sa elementsByTagNameNS() TQDomDocument::elementsByTagName()
-*/
-TQDomNodeList TQDomElement::elementsByTagName( const TQString& tagname ) const
-{
- return TQDomNodeList( new TQDomNodeListPrivate( impl, tagname ) );
-}
-
-/*!
- Returns TRUE.
-*/
-bool TQDomElement::isElement() const
-{
- return TRUE;
-}
-
-/*!
- Returns a TQDomNamedNodeMap containing all this element's attributes.
-
- \sa attribute() setAttribute() attributeNode() setAttributeNode()
-*/
-TQDomNamedNodeMap TQDomElement::attributes() const
-{
- if ( !impl )
- return TQDomNamedNodeMap();
- return TQDomNamedNodeMap( IMPL->attributes() );
-}
-
-/*!
- Returns TRUE if this element has an attribute called \a name;
- otherwise returns FALSE.
-*/
-bool TQDomElement::hasAttribute( const TQString& name ) const
-{
- if ( !impl )
- return FALSE;
- return IMPL->hasAttribute( name );
-}
-
-/*!
- Returns the attribute with the local name \a localName and the
- namespace URI \a nsURI. If the attribute does not exist \a
- defValue is returned.
-
- \sa setAttributeNS() attributeNodeNS() setAttributeNodeNS() attribute()
-*/
-TQString TQDomElement::attributeNS( const TQString nsURI, const TQString& localName, const TQString& defValue ) const
-{
- if ( !impl )
- return defValue;
- return IMPL->attributeNS( nsURI, localName, defValue );
-}
-
-/*!
- Adds an attribute with the qualified name \a qName and the
- namespace URI \a nsURI with the value \a value. If an attribute
- with the same local name and namespace URI exists, its prefix is
- replaced by the prefix of \a qName and its value is repaced by \a
- value.
-
- Although \a qName is the qualified name, the local name is used to
- decide if an existing attribute's value should be replaced.
-
- \sa attributeNS() setAttributeNodeNS() setAttribute()
-*/
-void TQDomElement::setAttributeNS( const TQString nsURI, const TQString& qName, const TQString& value )
-{
- if ( !impl )
- return;
- IMPL->setAttributeNS( nsURI, qName, value );
-}
-
-/*!
- \overload
-*/
-void TQDomElement::setAttributeNS( const TQString nsURI, const TQString& qName, int value )
-{
- // ### 4.0: inline
- setAttributeNS( nsURI, qName, long(value) );
-}
-
-/*!
- \overload
-*/
-void TQDomElement::setAttributeNS( const TQString nsURI, const TQString& qName, uint value )
-{
- // ### 4.0: inline
- setAttributeNS( nsURI, qName, ulong(value) );
-}
-
-/*!
- \overload
-*/
-void TQDomElement::setAttributeNS( const TQString nsURI, const TQString& qName, long value )
-{
- if ( !impl )
- return;
- TQString x;
- x.setNum( value );
- IMPL->setAttributeNS( nsURI, qName, x );
-}
-
-/*!
- \overload
-*/
-void TQDomElement::setAttributeNS( const TQString nsURI, const TQString& qName, ulong value )
-{
- if ( !impl )
- return;
- TQString x;
- x.setNum( value );
- IMPL->setAttributeNS( nsURI, qName, x );
-}
-
-/*!
- \overload
-*/
-void TQDomElement::setAttributeNS( const TQString nsURI, const TQString& qName, double value )
-{
- if ( !impl )
- return;
- TQString x;
- x.setNum( value );
- IMPL->setAttributeNS( nsURI, qName, x );
-}
-
-/*!
- Removes the attribute with the local name \a localName and the
- namespace URI \a nsURI from this element.
-
- \sa setAttributeNS() attributeNS() removeAttribute()
-*/
-void TQDomElement::removeAttributeNS( const TQString& nsURI, const TQString& localName )
-{
- if ( !impl )
- return;
- TQDomNodePrivate *n = IMPL->attributeNodeNS( nsURI, localName );
- if ( !n )
- return;
- IMPL->removeAttribute( n->nodeName() );
-}
-
-/*!
- Returns the TQDomAttr object that corresponds to the attribute with
- the local name \a localName and the namespace URI \a nsURI. If no
- such attribute exists a \link TQDomNode::isNull() null
- attribute\endlink is returned.
-
- \sa setAttributeNode() attribute() setAttribute() attributeNodeNS()
-*/
-TQDomAttr TQDomElement::attributeNodeNS( const TQString& nsURI, const TQString& localName )
-{
- if ( !impl )
- return TQDomAttr();
- return TQDomAttr( IMPL->attributeNodeNS( nsURI, localName ) );
-}
-
-/*!
- Adds the attribute \a newAttr to this element.
-
- If the element has another attribute that has the same local name
- and namespace URI as \a newAttr, this function replaces that
- attribute and returns it; otherwise the function returns a \link
- TQDomNode::isNull() null attribute\endlink.
-
- \sa attributeNodeNS() setAttributeNS() setAttributeNode()
-*/
-TQDomAttr TQDomElement::setAttributeNodeNS( const TQDomAttr& newAttr )
-{
- if ( !impl )
- return TQDomAttr();
- return TQDomAttr( IMPL->setAttributeNodeNS( ((TQDomAttrPrivate*)newAttr.impl) ) );
-}
-
-/*!
- Returns a TQDomNodeList containing all the descendent elements of
- this element with the local name \a localName and the namespace
- URI \a nsURI. The order they are in the node list is the order
- they are encountered in a preorder traversal of the element tree.
-
- \sa elementsByTagName() TQDomDocument::elementsByTagNameNS()
-*/
-TQDomNodeList TQDomElement::elementsByTagNameNS( const TQString& nsURI, const TQString& localName ) const
-{
- return TQDomNodeList( new TQDomNodeListPrivate( impl, nsURI, localName ) );
-}
-
-/*!
- Returns TRUE if this element has an attribute with the local name
- \a localName and the namespace URI \a nsURI; otherwise returns
- FALSE.
-*/
-bool TQDomElement::hasAttributeNS( const TQString& nsURI, const TQString& localName ) const
-{
- if ( !impl )
- return FALSE;
- return IMPL->hasAttributeNS( nsURI, localName );
-}
-
-/*!
- Returns the element's text or TQString::null.
-
- Example:
- \code
- <h1>Hello <b>TQt</b> <![CDATA[<xml is cool>]]></h1>
- \endcode
-
- The function text() of the TQDomElement for the &lt;h1&gt; tag,
- will return "Hello TQt &lt;xml is cool&gt;".
-
- Comments are ignored by this function. It only evaluates TQDomText
- and TQDomCDATASection objects.
-*/
-TQString TQDomElement::text() const
-{
- if ( !impl )
- return TQString::null;
- return IMPL->text();
-}
-
-#undef IMPL
-
-/**************************************************************
- *
- * TQDomTextPrivate
- *
- **************************************************************/
-
-TQDomTextPrivate::TQDomTextPrivate( TQDomDocumentPrivate* d, TQDomNodePrivate* parent, const TQString& value )
- : TQDomCharacterDataPrivate( d, parent, value )
-{
- name = "#text";
-}
-
-TQDomTextPrivate::TQDomTextPrivate( TQDomTextPrivate* n, bool deep )
- : TQDomCharacterDataPrivate( n, deep )
-{
-}
-
-TQDomTextPrivate::~TQDomTextPrivate()
-{
-}
-
-TQDomNodePrivate* TQDomTextPrivate::cloneNode( bool deep)
-{
- TQDomNodePrivate* p = new TQDomTextPrivate( this, deep );
- // We are not interested in this node
- p->deref();
- return p;
-}
-
-TQDomTextPrivate* TQDomTextPrivate::splitText( int offset )
-{
- if ( !parent() ) {
- qWarning( "TQDomText::splitText The node has no parent. So I can not split" );
- return 0;
- }
-
- TQDomTextPrivate* t = new TQDomTextPrivate( ownerDocument(), 0, value.mid( offset ) );
- value.truncate( offset );
-
- parent()->insertAfter( t, this );
-
- return t;
-}
-
-void TQDomTextPrivate::save( TQTextStream& s, int, int ) const
-{
- s << encodeAttr( value );
-}
-
-/**************************************************************
- *
- * TQDomText
- *
- **************************************************************/
-
-#define IMPL ((TQDomTextPrivate*)impl)
-
-/*!
- \class TQDomText tqdom.h
- \reentrant
- \brief The TQDomText class represents text data in the parsed XML document.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- You can split the text in a TQDomText object over two TQDomText
- objecs with splitText().
-
- For further information about the Document Object Model see
- \link http://www.w3.org/TR/REC-DOM-Level-1/\endlink and
- \link http://www.w3.org/TR/DOM-Level-2-Core/\endlink.
- For a more general introduction of the DOM implementation see the
- TQDomDocument documentation.
-*/
-
-/*!
- Constructs an empty TQDomText object.
-
- To construct a TQDomText with content, use TQDomDocument::createTextNode().
-*/
-TQDomText::TQDomText()
- : TQDomCharacterData()
-{
-}
-
-/*!
- Constructs a copy of \a x.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomText::TQDomText( const TQDomText& x )
- : TQDomCharacterData( x )
-{
-}
-
-TQDomText::TQDomText( TQDomTextPrivate* n )
- : TQDomCharacterData( n )
-{
-}
-
-/*!
- Assigns \a x to this DOM text.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomText& TQDomText::operator= ( const TQDomText& x )
-{
- return (TQDomText&) TQDomNode::operator=( x );
-}
-
-/*!
- Destroys the object and frees its resources.
-*/
-TQDomText::~TQDomText()
-{
-}
-
-/*!
- Returns \c TextNode.
-*/
-TQDomNode::NodeType TQDomText::nodeType() const
-{
- return TextNode;
-}
-
-/*!
- Splits this DOM text object into two TQDomText objects. This object
- keeps its first \a offset characters and the second (newly
- created) object is inserted into the document tree after this
- object with the remaining characters.
-
- The function returns the newly created object.
-
- \sa TQDomNode::normalize()
-*/
-TQDomText TQDomText::splitText( int offset )
-{
- if ( !impl )
- return TQDomText();
- return TQDomText( IMPL->splitText( offset ) );
-}
-
-/*!
- Returns TRUE.
-*/
-bool TQDomText::isText() const
-{
- return TRUE;
-}
-
-#undef IMPL
-
-/**************************************************************
- *
- * TQDomCommentPrivate
- *
- **************************************************************/
-
-TQDomCommentPrivate::TQDomCommentPrivate( TQDomDocumentPrivate* d, TQDomNodePrivate* parent, const TQString& value )
- : TQDomCharacterDataPrivate( d, parent, value )
-{
- name = "#comment";
-}
-
-TQDomCommentPrivate::TQDomCommentPrivate( TQDomCommentPrivate* n, bool deep )
- : TQDomCharacterDataPrivate( n, deep )
-{
-}
-
-TQDomCommentPrivate::~TQDomCommentPrivate()
-{
-}
-
-TQDomNodePrivate* TQDomCommentPrivate::cloneNode( bool deep)
-{
- TQDomNodePrivate* p = new TQDomCommentPrivate( this, deep );
- // We are not interested in this node
- p->deref();
- return p;
-}
-
-void TQDomCommentPrivate::save( TQTextStream& s, int, int ) const
-{
- s << "<!--" << value << "-->";
-}
-
-/**************************************************************
- *
- * TQDomComment
- *
- **************************************************************/
-
-#define IMPL ((TQDomCommentPrivate*)impl)
-
-/*!
- \class TQDomComment tqdom.h
- \reentrant
- \brief The TQDomComment class represents an XML comment.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- A comment in the parsed XML such as this:
- \code
- <!-- this is a comment -->
- \endcode
- is represented by TQDomComment objects in the parsed Dom tree.
-
- For further information about the Document Object Model see
- \link http://www.w3.org/TR/REC-DOM-Level-1/\endlink and
- \link http://www.w3.org/TR/DOM-Level-2-Core/\endlink.
- For a more general introduction of the DOM implementation see the
- TQDomDocument documentation.
-*/
-
-/*!
- Constructs an empty comment. To construct a comment with content,
- use the TQDomDocument::createComment() function.
-*/
-TQDomComment::TQDomComment()
- : TQDomCharacterData()
-{
-}
-
-/*!
- Constructs a copy of \a x.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomComment::TQDomComment( const TQDomComment& x )
- : TQDomCharacterData( x )
-{
-}
-
-TQDomComment::TQDomComment( TQDomCommentPrivate* n )
- : TQDomCharacterData( n )
-{
-}
-
-/*!
- Assigns \a x to this DOM comment.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomComment& TQDomComment::operator= ( const TQDomComment& x )
-{
- return (TQDomComment&) TQDomNode::operator=( x );
-}
-
-/*!
- Destroys the object and frees its resources.
-*/
-TQDomComment::~TQDomComment()
-{
-}
-
-/*!
- Returns \c CommentNode.
-*/
-TQDomNode::NodeType TQDomComment::nodeType() const
-{
- return CommentNode;
-}
-
-/*!
- Returns TRUE.
-*/
-bool TQDomComment::isComment() const
-{
- return TRUE;
-}
-
-#undef IMPL
-
-/**************************************************************
- *
- * TQDomCDATASectionPrivate
- *
- **************************************************************/
-
-TQDomCDATASectionPrivate::TQDomCDATASectionPrivate( TQDomDocumentPrivate* d, TQDomNodePrivate* parent,
- const TQString& value )
- : TQDomTextPrivate( d, parent, value )
-{
- name = "#cdata-section";
-}
-
-TQDomCDATASectionPrivate::TQDomCDATASectionPrivate( TQDomCDATASectionPrivate* n, bool deep )
- : TQDomTextPrivate( n, deep )
-{
-}
-
-TQDomCDATASectionPrivate::~TQDomCDATASectionPrivate()
-{
-}
-
-TQDomNodePrivate* TQDomCDATASectionPrivate::cloneNode( bool deep)
-{
- TQDomNodePrivate* p = new TQDomCDATASectionPrivate( this, deep );
- // We are not interested in this node
- p->deref();
- return p;
-}
-
-void TQDomCDATASectionPrivate::save( TQTextStream& s, int, int ) const
-{
- // ### How do we escape "]]>" ?
- // "]]>" is not allowed; so there should be none in value anyway
- s << "<![CDATA[" << value << "]]>";
-}
-
-/**************************************************************
- *
- * TQDomCDATASection
- *
- **************************************************************/
-
-#define IMPL ((TQDomCDATASectionPrivate*)impl)
-
-/*!
- \class TQDomCDATASection tqdom.h
- \reentrant
- \brief The TQDomCDATASection class represents an XML CDATA section.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- CDATA sections are used to escape blocks of text containing
- characters that would otherwise be regarded as markup. The only
- delimiter that is recognized in a CDATA section is the "]]&gt;"
- string that terminates the CDATA section. CDATA sections cannot be
- nested. Their primary purpose is for including material such as
- XML fragments, without needing to escape all the delimiters.
-
- Adjacent TQDomCDATASection nodes are not merged by the
- TQDomNode::normalize() function.
-
- For further information about the Document Object Model see
- \link http://www.w3.org/TR/REC-DOM-Level-1/\endlink and
- \link http://www.w3.org/TR/DOM-Level-2-Core/\endlink.
- For a more general introduction of the DOM implementation see the
- TQDomDocument documentation.
-*/
-
-/*!
- Constructs an empty CDATA section. To create a CDATA section with
- content, use the TQDomDocument::createCDATASection() function.
-*/
-TQDomCDATASection::TQDomCDATASection()
- : TQDomText()
-{
-}
-
-/*!
- Constructs a copy of \a x.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomCDATASection::TQDomCDATASection( const TQDomCDATASection& x )
- : TQDomText( x )
-{
-}
-
-TQDomCDATASection::TQDomCDATASection( TQDomCDATASectionPrivate* n )
- : TQDomText( n )
-{
-}
-
-/*!
- Assigns \a x to this CDATA section.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomCDATASection& TQDomCDATASection::operator= ( const TQDomCDATASection& x )
-{
- return (TQDomCDATASection&) TQDomNode::operator=( x );
-}
-
-/*!
- Destroys the object and frees its resources.
-*/
-TQDomCDATASection::~TQDomCDATASection()
-{
-}
-
-/*!
- Returns \c CDATASection.
-*/
-TQDomNode::NodeType TQDomCDATASection::nodeType() const
-{
- return CDATASectionNode;
-}
-
-/*!
- Returns TRUE.
-*/
-bool TQDomCDATASection::isCDATASection() const
-{
- return TRUE;
-}
-
-#undef IMPL
-
-/**************************************************************
- *
- * TQDomNotationPrivate
- *
- **************************************************************/
-
-TQDomNotationPrivate::TQDomNotationPrivate( TQDomDocumentPrivate* d, TQDomNodePrivate* parent,
- const TQString& aname,
- const TQString& pub, const TQString& sys )
- : TQDomNodePrivate( d, parent )
-{
- name = aname;
- m_pub = pub;
- m_sys = sys;
-}
-
-TQDomNotationPrivate::TQDomNotationPrivate( TQDomNotationPrivate* n, bool deep )
- : TQDomNodePrivate( n, deep )
-{
- m_sys = n->m_sys;
- m_pub = n->m_pub;
-}
-
-TQDomNotationPrivate::~TQDomNotationPrivate()
-{
-}
-
-TQDomNodePrivate* TQDomNotationPrivate::cloneNode( bool deep)
-{
- TQDomNodePrivate* p = new TQDomNotationPrivate( this, deep );
- // We are not interested in this node
- p->deref();
- return p;
-}
-
-void TQDomNotationPrivate::save( TQTextStream& s, int, int ) const
-{
- s << "<!NOTATION " << name << " ";
- if ( !m_pub.isNull() ) {
- s << "PUBLIC \"" << m_pub << "\"";
- if ( !m_sys.isNull() )
- s << " \"" << m_sys << "\"";
- } else {
- s << "SYSTEM \"" << m_sys << "\"";
- }
- s << ">" << endl;
-}
-
-/**************************************************************
- *
- * TQDomNotation
- *
- **************************************************************/
-
-#define IMPL ((TQDomNotationPrivate*)impl)
-
-/*!
- \class TQDomNotation tqdom.h
- \reentrant
- \brief The TQDomNotation class represents an XML notation.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- A notation either declares, by name, the format of an unparsed
- entity (see section 4.7 of the XML 1.0 specification), or is used
- for formal declaration of processing instruction targets (see
- section 2.6 of the XML 1.0 specification).
-
- DOM does not support editing notation nodes; they are therefore
- read-only.
-
- A notation node does not have any parent.
-
- You can retrieve the publicId() and systemId() from a notation
- node.
-
- For further information about the Document Object Model see
- \link http://www.w3.org/TR/REC-DOM-Level-1/\endlink and
- \link http://www.w3.org/TR/DOM-Level-2-Core/\endlink.
- For a more general introduction of the DOM implementation see the
- TQDomDocument documentation.
-*/
-
-
-/*!
- Constructor.
-*/
-TQDomNotation::TQDomNotation()
- : TQDomNode()
-{
-}
-
-/*!
- Constructs a copy of \a x.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomNotation::TQDomNotation( const TQDomNotation& x )
- : TQDomNode( x )
-{
-}
-
-TQDomNotation::TQDomNotation( TQDomNotationPrivate* n )
- : TQDomNode( n )
-{
-}
-
-/*!
- Assigns \a x to this DOM notation.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomNotation& TQDomNotation::operator= ( const TQDomNotation& x )
-{
- return (TQDomNotation&) TQDomNode::operator=( x );
-}
-
-/*!
- Destroys the object and frees its resources.
-*/
-TQDomNotation::~TQDomNotation()
-{
-}
-
-/*!
- Returns \c NotationNode.
-*/
-TQDomNode::NodeType TQDomNotation::nodeType() const
-{
- return NotationNode;
-}
-
-/*!
- Returns the public identifier of this notation.
-*/
-TQString TQDomNotation::publicId() const
-{
- if ( !impl )
- return TQString::null;
- return IMPL->m_pub;
-}
-
-/*!
- Returns the system identifier of this notation.
-*/
-TQString TQDomNotation::systemId() const
-{
- if ( !impl )
- return TQString::null;
- return IMPL->m_sys;
-}
-
-/*!
- Returns TRUE.
-*/
-bool TQDomNotation::isNotation() const
-{
- return TRUE;
-}
-
-#undef IMPL
-
-/**************************************************************
- *
- * TQDomEntityPrivate
- *
- **************************************************************/
-
-TQDomEntityPrivate::TQDomEntityPrivate( TQDomDocumentPrivate* d, TQDomNodePrivate* parent,
- const TQString& aname,
- const TQString& pub, const TQString& sys, const TQString& notation )
- : TQDomNodePrivate( d, parent )
-{
- name = aname;
- m_pub = pub;
- m_sys = sys;
- m_notationName = notation;
-}
-
-TQDomEntityPrivate::TQDomEntityPrivate( TQDomEntityPrivate* n, bool deep )
- : TQDomNodePrivate( n, deep )
-{
- m_sys = n->m_sys;
- m_pub = n->m_pub;
- m_notationName = n->m_notationName;
-}
-
-TQDomEntityPrivate::~TQDomEntityPrivate()
-{
-}
-
-TQDomNodePrivate* TQDomEntityPrivate::cloneNode( bool deep)
-{
- TQDomNodePrivate* p = new TQDomEntityPrivate( this, deep );
- // We are not interested in this node
- p->deref();
- return p;
-}
-
-/*
- Encode an entity value upon saving.
-*/
-static TQCString encodeEntity( const TQCString& str )
-{
- TQCString tmp( str );
- uint len = tmp.length();
- uint i = 0;
- const char* d = tmp.data();
- while ( i < len ) {
- if ( d[i] == '%' ){
- tmp.replace( i, 1, "&#60;" );
- d = tmp.data();
- len += 4;
- i += 5;
- }
- else if ( d[i] == '"' ) {
- tmp.replace( i, 1, "&#34;" );
- d = tmp.data();
- len += 4;
- i += 5;
- } else if ( d[i] == '&' && i + 1 < len && d[i+1] == '#' ) {
- // Dont encode &lt; or &quot; or &custom;.
- // Only encode character references
- tmp.replace( i, 1, "&#38;" );
- d = tmp.data();
- len += 4;
- i += 5;
- } else {
- ++i;
- }
- }
-
- return tmp;
-}
-
-void TQDomEntityPrivate::save( TQTextStream& s, int, int ) const
-{
- if ( m_sys.isNull() && m_pub.isNull() ) {
- s << "<!ENTITY " << name << " \"" << encodeEntity( value.utf8() ) << "\">" << endl;
- } else {
- s << "<!ENTITY " << name << " ";
- if ( m_pub.isNull() ) {
- s << "SYSTEM \"" << m_sys << "\"";
- } else {
- s << "PUBLIC \"" << m_pub << "\" \"" << m_sys << "\"";
- }
- if (! m_notationName.isNull() ) {
- s << " NDATA " << m_notationName;
- }
- s << ">" << endl;
- }
-}
-
-/**************************************************************
- *
- * TQDomEntity
- *
- **************************************************************/
-
-#define IMPL ((TQDomEntityPrivate*)impl)
-
-/*!
- \class TQDomEntity tqdom.h
- \reentrant
- \brief The TQDomEntity class represents an XML entity.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- This class represents an entity in an XML document, either parsed
- or unparsed. Note that this models the entity itself not the
- entity declaration.
-
- DOM does not support editing entity nodes; if a user wants to make
- changes to the contents of an entity, every related
- TQDomEntityReference node must be replaced in the DOM tree by a
- clone of the entity's contents, and then the desired changes must
- be made to each of the clones instead. All the descendents of an
- entity node are read-only.
-
- An entity node does not have any parent.
-
- You can access the entity's publicId(), systemId() and
- notationName() when available.
-
- For further information about the Document Object Model see
- \link http://www.w3.org/TR/REC-DOM-Level-1/\endlink and
- \link http://www.w3.org/TR/DOM-Level-2-Core/\endlink.
- For a more general introduction of the DOM implementation see the
- TQDomDocument documentation.
-*/
-
-
-/*!
- Constructs an empty entity.
-*/
-TQDomEntity::TQDomEntity()
- : TQDomNode()
-{
-}
-
-
-/*!
- Constructs a copy of \a x.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomEntity::TQDomEntity( const TQDomEntity& x )
- : TQDomNode( x )
-{
-}
-
-TQDomEntity::TQDomEntity( TQDomEntityPrivate* n )
- : TQDomNode( n )
-{
-}
-
-/*!
- Assigns \a x to this DOM entity.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomEntity& TQDomEntity::operator= ( const TQDomEntity& x )
-{
- return (TQDomEntity&) TQDomNode::operator=( x );
-}
-
-/*!
- Destroys the object and frees its resources.
-*/
-TQDomEntity::~TQDomEntity()
-{
-}
-
-/*!
- Returns \c EntityNode.
-*/
-TQDomNode::NodeType TQDomEntity::nodeType() const
-{
- return EntityNode;
-}
-
-/*!
- Returns the public identifier associated with this entity. If the
- public identifier was not specified TQString::null is returned.
-*/
-TQString TQDomEntity::publicId() const
-{
- if ( !impl )
- return TQString::null;
- return IMPL->m_pub;
-}
-
-/*!
- Returns the system identifier associated with this entity. If the
- system identifier was not specified TQString::null is returned.
-*/
-TQString TQDomEntity::systemId() const
-{
- if ( !impl )
- return TQString::null;
- return IMPL->m_sys;
-}
-
-/*!
- For unparsed entities this function returns the name of the
- notation for the entity. For parsed entities this function returns
- TQString::null.
-*/
-TQString TQDomEntity::notationName() const
-{
- if ( !impl )
- return TQString::null;
- return IMPL->m_notationName;
-}
-
-/*!
- Returns TRUE.
-*/
-bool TQDomEntity::isEntity() const
-{
- return TRUE;
-}
-
-#undef IMPL
-
-/**************************************************************
- *
- * TQDomEntityReferencePrivate
- *
- **************************************************************/
-
-TQDomEntityReferencePrivate::TQDomEntityReferencePrivate( TQDomDocumentPrivate* d, TQDomNodePrivate* parent, const TQString& aname )
- : TQDomNodePrivate( d, parent )
-{
- name = aname;
-}
-
-TQDomEntityReferencePrivate::TQDomEntityReferencePrivate( TQDomNodePrivate* n, bool deep )
- : TQDomNodePrivate( n, deep )
-{
-}
-
-TQDomEntityReferencePrivate::~TQDomEntityReferencePrivate()
-{
-}
-
-TQDomNodePrivate* TQDomEntityReferencePrivate::cloneNode( bool deep)
-{
- TQDomNodePrivate* p = new TQDomEntityReferencePrivate( this, deep );
- // We are not interested in this node
- p->deref();
- return p;
-}
-
-void TQDomEntityReferencePrivate::save( TQTextStream& s, int, int ) const
-{
- s << "&" << name << ";";
-}
-
-/**************************************************************
- *
- * TQDomEntityReference
- *
- **************************************************************/
-
-#define IMPL ((TQDomEntityReferencePrivate*)impl)
-
-/*!
- \class TQDomEntityReference tqdom.h
- \reentrant
- \brief The TQDomEntityReference class represents an XML entity reference.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- A TQDomEntityReference object may be inserted into the DOM tree
- when an entity reference is in the source document, or when the
- user wishes to insert an entity reference.
-
- Note that character references and references to predefined
- entities are expanded by the XML processor so that characters are
- represented by their Unicode equivalent rather than by an entity
- reference.
-
- Moreover, the XML processor may completely expand references to
- entities while building the DOM tree, instead of providing
- TQDomEntityReference objects.
-
- If it does provide such objects, then for a given entity reference
- node, it may be that there is no entity node representing the
- referenced entity; but if such an entity exists, then the child
- list of the entity reference node is the same as that of the
- entity node. As with the entity node, all descendents of the
- entity reference are read-only.
-
- For further information about the Document Object Model see
- \link http://www.w3.org/TR/REC-DOM-Level-1/\endlink and
- \link http://www.w3.org/TR/DOM-Level-2-Core/\endlink.
- For a more general introduction of the DOM implementation see the
- TQDomDocument documentation.
-*/
-
-/*!
- Constructs an empty entity reference. Use
- TQDomDocument::createEntityReference() to create a entity reference
- with content.
-*/
-TQDomEntityReference::TQDomEntityReference()
- : TQDomNode()
-{
-}
-
-/*!
- Constructs a copy of \a x.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomEntityReference::TQDomEntityReference( const TQDomEntityReference& x )
- : TQDomNode( x )
-{
-}
-
-TQDomEntityReference::TQDomEntityReference( TQDomEntityReferencePrivate* n )
- : TQDomNode( n )
-{
-}
-
-/*!
- Assigns \a x to this entity reference.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomEntityReference& TQDomEntityReference::operator= ( const TQDomEntityReference& x )
-{
- return (TQDomEntityReference&) TQDomNode::operator=( x );
-}
-
-/*!
- Destroys the object and frees its resources.
-*/
-TQDomEntityReference::~TQDomEntityReference()
-{
-}
-
-/*!
- Returns \c EntityReference.
-*/
-TQDomNode::NodeType TQDomEntityReference::nodeType() const
-{
- return EntityReferenceNode;
-}
-
-/*!
- Returns TRUE.
-*/
-bool TQDomEntityReference::isEntityReference() const
-{
- return TRUE;
-}
-
-#undef IMPL
-
-/**************************************************************
- *
- * TQDomProcessingInstructionPrivate
- *
- **************************************************************/
-
-TQDomProcessingInstructionPrivate::TQDomProcessingInstructionPrivate( TQDomDocumentPrivate* d,
- TQDomNodePrivate* parent, const TQString& target, const TQString& data )
- : TQDomNodePrivate( d, parent )
-{
- name = target;
- value = data;
-}
-
-TQDomProcessingInstructionPrivate::TQDomProcessingInstructionPrivate( TQDomProcessingInstructionPrivate* n, bool deep )
- : TQDomNodePrivate( n, deep )
-{
-}
-
-TQDomProcessingInstructionPrivate::~TQDomProcessingInstructionPrivate()
-{
-}
-
-TQDomNodePrivate* TQDomProcessingInstructionPrivate::cloneNode( bool deep)
-{
- TQDomNodePrivate* p = new TQDomProcessingInstructionPrivate( this, deep );
- // We are not interested in this node
- p->deref();
- return p;
-}
-
-void TQDomProcessingInstructionPrivate::save( TQTextStream& s, int, int ) const
-{
- s << "<?" << name << " " << value << "?>" << endl;
-}
-
-/**************************************************************
- *
- * TQDomProcessingInstruction
- *
- **************************************************************/
-
-#define IMPL ((TQDomProcessingInstructionPrivate*)impl)
-
-/*!
- \class TQDomProcessingInstruction tqdom.h
- \reentrant
- \brief The TQDomProcessingInstruction class represents an XML processing
- instruction.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- Processing instructions are used in XML to keep processor-specific
- information in the text of the document.
-
- The content of the processing instruction is retrieved with data()
- and set with setData(). The processing instruction's target is
- retrieved with target().
-
- For further information about the Document Object Model see
- \link http://www.w3.org/TR/REC-DOM-Level-1/\endlink and
- \link http://www.w3.org/TR/DOM-Level-2-Core/\endlink.
- For a more general introduction of the DOM implementation see the
- TQDomDocument documentation.
-*/
-
-/*!
- Constructs an empty processing instruction. Use
- TQDomDocument::createProcessingInstruction() to create a processing
- instruction with content.
-*/
-TQDomProcessingInstruction::TQDomProcessingInstruction()
- : TQDomNode()
-{
-}
-
-/*!
- Constructs a copy of \a x.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomProcessingInstruction::TQDomProcessingInstruction( const TQDomProcessingInstruction& x )
- : TQDomNode( x )
-{
-}
-
-TQDomProcessingInstruction::TQDomProcessingInstruction( TQDomProcessingInstructionPrivate* n )
- : TQDomNode( n )
-{
-}
-
-/*!
- Assigns \a x to this processing instruction.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomProcessingInstruction& TQDomProcessingInstruction::operator= ( const TQDomProcessingInstruction& x )
-{
- return (TQDomProcessingInstruction&) TQDomNode::operator=( x );
-}
-
-/*!
- Destroys the object and frees its resources.
-*/
-TQDomProcessingInstruction::~TQDomProcessingInstruction()
-{
-}
-
-/*!
- Returns \c ProcessingInstructionNode.
-*/
-TQDomNode::NodeType TQDomProcessingInstruction::nodeType() const
-{
- return ProcessingInstructionNode;
-}
-
-/*!
- Returns the target of this processing instruction.
-
- \sa data()
-*/
-TQString TQDomProcessingInstruction::target() const
-{
- if ( !impl )
- return TQString::null;
- return impl->nodeName();
-}
-
-/*!
- Returns the content of this processing instruction.
-
- \sa setData() target()
-*/
-TQString TQDomProcessingInstruction::data() const
-{
- if ( !impl )
- return TQString::null;
- return impl->nodeValue();
-}
-
-/*!
- Sets the data contained in the processing instruction to \a d.
-
- \sa data()
-*/
-void TQDomProcessingInstruction::setData( const TQString& d )
-{
- if ( !impl )
- return;
- impl->setNodeValue( d );
-}
-
-/*!
- Returns TRUE.
-*/
-bool TQDomProcessingInstruction::isProcessingInstruction() const
-{
- return TRUE;
-}
-
-#undef IMPL
-
-/**************************************************************
- *
- * TQDomDocumentPrivate
- *
- **************************************************************/
-
-TQDomDocumentPrivate::TQDomDocumentPrivate()
- : TQDomNodePrivate( 0 )
-{
- impl = new TQDomImplementationPrivate();
- type = new TQDomDocumentTypePrivate( this, this );
-
- name = "#document";
-}
-
-TQDomDocumentPrivate::TQDomDocumentPrivate( const TQString& aname )
- : TQDomNodePrivate( 0 )
-{
- impl = new TQDomImplementationPrivate();
- type = new TQDomDocumentTypePrivate( this, this );
- type->name = aname;
-
- name = "#document";
-}
-
-TQDomDocumentPrivate::TQDomDocumentPrivate( TQDomDocumentTypePrivate* dt )
- : TQDomNodePrivate( 0 )
-{
- impl = new TQDomImplementationPrivate();
- if ( dt != 0 ) {
- type = dt;
- type->ref();
- } else {
- type = new TQDomDocumentTypePrivate( this, this );
- }
-
- name = "#document";
-}
-
-TQDomDocumentPrivate::TQDomDocumentPrivate( TQDomDocumentPrivate* n, bool deep )
- : TQDomNodePrivate( n, deep )
-{
- impl = n->impl->clone();
- // Reference count is down to 0, so we set it to 1 here.
- impl->ref();
- type = (TQDomDocumentTypePrivate*)n->type->cloneNode();
- type->setParent( this );
- // Reference count is down to 0, so we set it to 1 here.
- type->ref();
-}
-
-TQDomDocumentPrivate::~TQDomDocumentPrivate()
-{
- if ( impl->deref() ) delete impl;
- if ( type->deref() ) delete type;
-}
-
-void TQDomDocumentPrivate::clear()
-{
- if ( impl->deref() ) delete impl;
- if ( type->deref() ) delete type;
- impl = 0;
- type = 0;
- TQDomNodePrivate::clear();
-}
-
-bool TQDomDocumentPrivate::setContent( TQXmlInputSource *source, bool namespaceProcessing, TQString *errorMsg, int *errorLine, int *errorColumn )
-{
- TQXmlSimpleReader reader;
- if ( namespaceProcessing ) {
- reader.setFeature( "http://xml.org/sax/features/namespaces", TRUE );
- reader.setFeature( "http://xml.org/sax/features/namespace-prefixes", FALSE );
- } else {
- reader.setFeature( "http://xml.org/sax/features/namespaces", FALSE );
- reader.setFeature( "http://xml.org/sax/features/namespace-prefixes", TRUE );
- }
- reader.setFeature( "http://trolltech.com/xml/features/report-whitespace-only-CharData", FALSE );
- reader.setUndefEntityInAttrHack( TRUE );
-
- return setContent( source, &reader, errorMsg, errorLine, errorColumn );
-}
-
-bool TQDomDocumentPrivate::setContent( TQXmlInputSource *source, TQXmlReader *reader, TQString *errorMsg, int *errorLine, int *errorColumn )
-{
- clear();
- impl = new TQDomImplementationPrivate;
- type = new TQDomDocumentTypePrivate( this, this );
-
- bool namespaceProcessing = reader->feature( "http://xml.org/sax/features/namespaces" )
- && !reader->feature( "http://xml.org/sax/features/namespace-prefixes" );
-
- TQDomHandler hnd( this, namespaceProcessing );
- reader->setContentHandler( &hnd );
- reader->setErrorHandler( &hnd );
- reader->setLexicalHandler( &hnd );
- reader->setDeclHandler( &hnd );
- reader->setDTDHandler( &hnd );
-
- if ( !reader->parse( source ) ) {
- if ( errorMsg )
- *errorMsg = hnd.errorMsg;
- if ( errorLine )
- *errorLine = hnd.errorLine;
- if ( errorColumn )
- *errorColumn = hnd.errorColumn;
- return FALSE;
- }
-
- return TRUE;
-}
-
-TQDomNodePrivate* TQDomDocumentPrivate::cloneNode( bool deep)
-{
- TQDomNodePrivate* p = new TQDomDocumentPrivate( this, deep );
- // We are not interested in this node
- p->deref();
- return p;
-}
-
-TQDomElementPrivate* TQDomDocumentPrivate::documentElement()
-{
- TQDomNodePrivate* p = first;
- while ( p && !p->isElement() )
- p = p->next;
-
- return (TQDomElementPrivate*)p;
-}
-
-TQDomElementPrivate* TQDomDocumentPrivate::createElement( const TQString& tagName )
-{
- TQDomElementPrivate* e = new TQDomElementPrivate( this, 0, tagName );
- e->deref();
- return e;
-}
-
-TQDomElementPrivate* TQDomDocumentPrivate::createElementNS( const TQString& nsURI, const TQString& qName )
-{
- TQDomElementPrivate* e = new TQDomElementPrivate( this, 0, nsURI, qName );
- e->deref();
- return e;
-}
-
-TQDomDocumentFragmentPrivate* TQDomDocumentPrivate::createDocumentFragment()
-{
- TQDomDocumentFragmentPrivate* f = new TQDomDocumentFragmentPrivate( this, (TQDomNodePrivate*)0 );
- f->deref();
- return f;
-}
-
-TQDomTextPrivate* TQDomDocumentPrivate::createTextNode( const TQString& data )
-{
- TQDomTextPrivate* t = new TQDomTextPrivate( this, 0, data );
- t->deref();
- return t;
-}
-
-TQDomCommentPrivate* TQDomDocumentPrivate::createComment( const TQString& data )
-{
- TQDomCommentPrivate* c = new TQDomCommentPrivate( this, 0, data );
- c->deref();
- return c;
-}
-
-TQDomCDATASectionPrivate* TQDomDocumentPrivate::createCDATASection( const TQString& data )
-{
- TQDomCDATASectionPrivate* c = new TQDomCDATASectionPrivate( this, 0, data );
- c->deref();
- return c;
-}
-
-TQDomProcessingInstructionPrivate* TQDomDocumentPrivate::createProcessingInstruction( const TQString& target, const TQString& data )
-{
- TQDomProcessingInstructionPrivate* p = new TQDomProcessingInstructionPrivate( this, 0, target, data );
- p->deref();
- return p;
-}
-
-TQDomAttrPrivate* TQDomDocumentPrivate::createAttribute( const TQString& aname )
-{
- TQDomAttrPrivate* a = new TQDomAttrPrivate( this, 0, aname );
- a->deref();
- return a;
-}
-
-TQDomAttrPrivate* TQDomDocumentPrivate::createAttributeNS( const TQString& nsURI, const TQString& qName )
-{
- TQDomAttrPrivate* a = new TQDomAttrPrivate( this, 0, nsURI, qName );
- a->deref();
- return a;
-}
-
-TQDomEntityReferencePrivate* TQDomDocumentPrivate::createEntityReference( const TQString& aname )
-{
- TQDomEntityReferencePrivate* e = new TQDomEntityReferencePrivate( this, 0, aname );
- e->deref();
- return e;
-}
-
-TQDomNodePrivate* TQDomDocumentPrivate::importNode( const TQDomNodePrivate* importedNode, bool deep )
-{
- TQDomNodePrivate *node = 0;
- switch ( importedNode->nodeType() ) {
- case TQDomNode::AttributeNode:
- node = new TQDomAttrPrivate( (TQDomAttrPrivate*)importedNode, TRUE );
- break;
- case TQDomNode::DocumentFragmentNode:
- node = new TQDomDocumentFragmentPrivate( (TQDomDocumentFragmentPrivate*)importedNode, deep );
- break;
- case TQDomNode::ElementNode:
- node = new TQDomElementPrivate( (TQDomElementPrivate*)importedNode, deep );
- break;
- case TQDomNode::EntityNode:
- node = new TQDomEntityPrivate( (TQDomEntityPrivate*)importedNode, deep );
- break;
- case TQDomNode::EntityReferenceNode:
- node = new TQDomEntityReferencePrivate( (TQDomEntityReferencePrivate*)importedNode, FALSE );
- break;
- case TQDomNode::NotationNode:
- node = new TQDomNotationPrivate( (TQDomNotationPrivate*)importedNode, deep );
- break;
- case TQDomNode::ProcessingInstructionNode:
- node = new TQDomProcessingInstructionPrivate( (TQDomProcessingInstructionPrivate*)importedNode, deep );
- break;
- case TQDomNode::TextNode:
- node = new TQDomTextPrivate( (TQDomTextPrivate*)importedNode, deep );
- break;
- case TQDomNode::CDATASectionNode:
- node = new TQDomCDATASectionPrivate( (TQDomCDATASectionPrivate*)importedNode, deep );
- break;
- case TQDomNode::CommentNode:
- node = new TQDomCommentPrivate( (TQDomCommentPrivate*)importedNode, deep );
- break;
- default:
- break;
- }
- if ( node ) {
- node->setOwnerDocument( this );
- // The TQDomNode constructor increases the refcount, so deref() first to
- // keep refcount balanced.
- node->deref();
- }
- return node;
-}
-
-void TQDomDocumentPrivate::save( TQTextStream& s, int, int indent ) const
-{
- bool doc = FALSE;
-
- TQDomNodePrivate* n = first;
- if ( n && n->isProcessingInstruction() && n->nodeName()=="xml" ) {
- // we have an XML declaration
- TQString data = n->nodeValue();
- TQRegExp encoding( TQString::tqfromLatin1("encoding\\s*=\\s*((\"([^\"]*)\")|('([^']*)'))") );
- encoding.search( data );
- TQString enc = encoding.cap(3);
- if ( enc.isEmpty() ) {
- enc = encoding.cap(5);
- }
- if ( enc.isEmpty() ) {
- s.setEncoding( TQTextStream::UnicodeUTF8 );
- } else {
- s.setCodec( TQTextCodec::codecForName( enc ) );
- }
- } else {
- s.setEncoding( TQTextStream::UnicodeUTF8 );
- }
- while ( n ) {
- if ( !doc && !(n->isProcessingInstruction()&&n->nodeName()=="xml") ) {
- // save doctype after XML declaration
- type->save( s, 0, indent );
- doc = TRUE;
- }
- n->save( s, 0, indent );
- n = n->next;
- }
-}
-
-/**************************************************************
- *
- * TQDomDocument
- *
- **************************************************************/
-
-#define IMPL ((TQDomDocumentPrivate*)impl)
-
-/*!
- \class TQDomDocument tqdom.h
- \reentrant
- \brief The TQDomDocument class represents an XML document.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- The TQDomDocument class represents the entire XML document.
- Conceptually, it is the root of the document tree, and provides
- the primary access to the document's data.
-
- Since elements, text nodes, comments, processing instructions,
- etc., cannot exist outside the context of a document, the document
- class also contains the factory functions needed to create these
- objects. The node objects created have an ownerDocument() function
- which associates them with the document within whose context they
- were created. The DOM classes that will be used most often are
- TQDomNode, TQDomDocument, TQDomElement and TQDomText.
-
- The parsed XML is represented internally by a tree of objects that
- can be accessed using the various TQDom classes. All TQDom classes
- only \e reference objects in the internal tree. The internal
- objects in the DOM tree will get deleted once the last TQDom
- object referencing them and the TQDomDocument itself are deleted.
-
- Creation of elements, text nodes, etc. is done using the various
- factory functions provided in this class. Using the default
- constructors of the TQDom classes will only result in empty
- objects that cannot be manipulated or inserted into the Document.
-
- The TQDomDocument class has several functions for creating document
- data, for example, createElement(), createTextNode(),
- createComment(), createCDATASection(),
- createProcessingInstruction(), createAttribute() and
- createEntityReference(). Some of these functions have versions
- that support namespaces, i.e. createElementNS() and
- createAttributeNS(). The createDocumentFragment() function is used
- to hold parts of the document; this is useful for manipulating for
- complex documents.
-
- The entire content of the document is set with setContent(). This
- function parses the string it is passed as an XML document and
- creates the DOM tree that represents the document. The root
- element is available using documentElement(). The textual
- representation of the document can be obtained using toString().
-
- It is possible to insert a node from another document into the
- document using importNode().
-
- You can obtain a list of all the elements that have a particular
- tag with elementsByTagName() or with elementsByTagNameNS().
-
- The TQDom classes are typically used as follows:
- \code
- TQDomDocument doc( "mydocument" );
- TQFile file( "mydocument.xml" );
- if ( !file.open( IO_ReadOnly ) )
- return;
- if ( !doc.setContent( &file ) ) {
- file.close();
- return;
- }
- file.close();
-
- // print out the element names of all elements that are direct tqchildren
- // of the outermost element.
- TQDomElement docElem = doc.documentElement();
-
- TQDomNode n = docElem.firstChild();
- while( !n.isNull() ) {
- TQDomElement e = n.toElement(); // try to convert the node to an element.
- if( !e.isNull() ) {
- cout << e.tagName() << endl; // the node really is an element.
- }
- n = n.nextSibling();
- }
-
- // Here we append a new element to the end of the document
- TQDomElement elem = doc.createElement( "img" );
- elem.setAttribute( "src", "myimage.png" );
- docElem.appendChild( elem );
- \endcode
-
- Once \c doc and \c elem go out of scope, the whole internal tree
- representing the XML document is deleted.
-
- To create a document using DOM use code like this:
- \code
- TQDomDocument doc( "MyML" );
- TQDomElement root = doc.createElement( "MyML" );
- doc.appendChild( root );
-
- TQDomElement tag = doc.createElement( "Greeting" );
- root.appendChild( tag );
-
- TQDomText t = doc.createTextNode( "Hello World" );
- tag.appendChild( t );
-
- TQString xml = doc.toString();
- \endcode
-
- For further information about the Document Object Model see
- \link http://www.w3.org/TR/REC-DOM-Level-1/\endlink and
- \link http://www.w3.org/TR/DOM-Level-2-Core/\endlink.
- For a more general introduction of the DOM implementation see the
- TQDomDocument documentation.
-*/
-
-
-/*!
- Constructs an empty document.
-*/
-TQDomDocument::TQDomDocument()
-{
- impl = 0;
-}
-
-/*!
- Creates a document and sets the name of the document type to \a
- name.
-*/
-TQDomDocument::TQDomDocument( const TQString& name )
-{
- // We take over ownership
- impl = new TQDomDocumentPrivate( name );
-}
-
-/*!
- Creates a document with the document type \a doctype.
-
- \sa TQDomImplementation::createDocumentType()
-*/
-TQDomDocument::TQDomDocument( const TQDomDocumentType& doctype )
-{
- impl = new TQDomDocumentPrivate( (TQDomDocumentTypePrivate*)(doctype.impl) );
-}
-
-/*!
- Constructs a copy of \a x.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomDocument::TQDomDocument( const TQDomDocument& x )
- : TQDomNode( x )
-{
-}
-
-TQDomDocument::TQDomDocument( TQDomDocumentPrivate* x )
- : TQDomNode( x )
-{
-}
-
-/*!
- Assigns \a x to this DOM document.
-
- The data of the copy is shared (shallow copy): modifying one node
- will also change the other. If you want to make a deep copy, use
- cloneNode().
-*/
-TQDomDocument& TQDomDocument::operator= ( const TQDomDocument& x )
-{
- return (TQDomDocument&) TQDomNode::operator=( x );
-}
-
-/*!
- Destroys the object and frees its resources.
-*/
-TQDomDocument::~TQDomDocument()
-{
-}
-
-/*!
- \overload
-
- This function reads the XML document from the string \a text.
- Since \a text is already a Unicode string, no encoding detection
- is done.
-*/
-bool TQDomDocument::setContent( const TQString& text, bool namespaceProcessing, TQString *errorMsg, int *errorLine, int *errorColumn )
-{
- if ( !impl )
- impl = new TQDomDocumentPrivate;
- TQXmlInputSource source;
- source.setData( text );
- return IMPL->setContent( &source, namespaceProcessing, errorMsg, errorLine, errorColumn );
-}
-
-/*!
- This function parses the XML document from the byte array \a
- buffer and sets it as the content of the document. It tries to
- detect the encoding of the document as required by the XML
- specification.
-
- If \a namespaceProcessing is TRUE, the parser recognizes
- namespaces in the XML file and sets the prefix name, local name
- and namespace URI to appropriate values. If \a namespaceProcessing
- is FALSE, the parser does no namespace processing when it reads
- the XML file.
-
- If a parse error occurs, the function returns FALSE; otherwise it
- returns TRUE. If a parse error occurs and \a errorMsg, \a
- errorLine and \a errorColumn are not 0, the error message is
- placed in \a *errorMsg, the line number \a *errorLine and the
- column number in \a *errorColumn.
-
- If \a namespaceProcessing is TRUE, the function TQDomNode::prefix()
- returns a string for all elements and attributes. It returns an
- empty string if the element or attribute has no prefix.
-
- If \a namespaceProcessing is FALSE, the functions
- TQDomNode::prefix(), TQDomNode::localName() and
- TQDomNode::namespaceURI() return TQString::null.
-
- \sa TQDomNode::namespaceURI() TQDomNode::localName()
- TQDomNode::prefix() TQString::isNull() TQString::isEmpty()
-*/
-bool TQDomDocument::setContent( const TQByteArray& buffer, bool namespaceProcessing, TQString *errorMsg, int *errorLine, int *errorColumn )
-{
- if ( !impl )
- impl = new TQDomDocumentPrivate;
- TQBuffer buf( buffer );
- TQXmlInputSource source( TQT_TQIODEVICE(&buf) );
- return IMPL->setContent( &source, namespaceProcessing, errorMsg, errorLine, errorColumn );
-}
-
-/*!
- \overload
-
- This function reads the XML document from the C string \a buffer.
-
- \warning This function does not try to detect the encoding:
- instead it assumes that the C string is UTF-8 encoded.
-*/
-bool TQDomDocument::setContent( const TQCString& buffer, bool namespaceProcessing, TQString *errorMsg, int *errorLine, int *errorColumn )
-{
- return setContent( TQString::fromUtf8( buffer, buffer.length() ), namespaceProcessing, errorMsg, errorLine, errorColumn );
-}
-
-/*!
- \overload
-
- This function reads the XML document from the IO tqdevice \a dev.
-*/
-bool TQDomDocument::setContent( QIODevice* dev, bool namespaceProcessing, TQString *errorMsg, int *errorLine, int *errorColumn )
-{
- if ( !impl )
- impl = new TQDomDocumentPrivate;
- TQXmlInputSource source( TQT_TQIODEVICE(dev) );
- return IMPL->setContent( &source, namespaceProcessing, errorMsg, errorLine, errorColumn );
-}
-
-/*!
- \overload
-
- This function reads the XML document from the string \a text.
- Since \a text is already a Unicode string, no encoding detection
- is performed.
-
- No namespace processing is performed either.
-*/
-bool TQDomDocument::setContent( const TQString& text, TQString *errorMsg, int *errorLine, int *errorColumn )
-{
- return setContent( text, FALSE, errorMsg, errorLine, errorColumn );
-}
-
-/*!
- \overload
-
- This function reads the XML document from the byte array \a
- buffer.
-
- No namespace processing is performed.
-*/
-bool TQDomDocument::setContent( const TQByteArray& buffer, TQString *errorMsg, int *errorLine, int *errorColumn )
-{
- return setContent( buffer, FALSE, errorMsg, errorLine, errorColumn );
-}
-
-/*!
- \overload
-
- This function reads the XML document from the C string \a buffer.
-
- No namespace processing is performed.
-
- \warning This function does not try to detect the encoding:
- instead it assumes that the C string is UTF-8 encoded.
-*/
-bool TQDomDocument::setContent( const TQCString& buffer, TQString *errorMsg, int *errorLine, int *errorColumn )
-{
- return setContent( buffer, FALSE, errorMsg, errorLine, errorColumn );
-}
-
-/*!
- \overload
-
- This function reads the XML document from the IO tqdevice \a dev.
-
- No namespace processing is performed.
-*/
-bool TQDomDocument::setContent( QIODevice* dev, TQString *errorMsg, int *errorLine, int *errorColumn )
-{
- return setContent( dev, FALSE, errorMsg, errorLine, errorColumn );
-}
-
-/*!
- \overload
-
- This function reads the XML document from the TQXmlInputSource \a source and
- parses it with the TQXmlReader \a reader.
-
- This function doesn't change the features of the \a reader. If you want to
- use certain features for parsing you can use this function to set up the
- reader appropriate.
-
- \sa TQXmlSimpleReader
-*/
-bool TQDomDocument::setContent( TQXmlInputSource *source, TQXmlReader *reader, TQString *errorMsg, int *errorLine, int *errorColumn )
-{
- if ( !impl )
- impl = new TQDomDocumentPrivate;
- return IMPL->setContent( source, reader, errorMsg, errorLine, errorColumn );
-}
-
-/*!
- Converts the parsed document back to its textual representation.
-
- \sa toCString()
-*/
-TQString TQDomDocument::toString() const
-{
- TQString str;
- TQTextStream s( str, IO_WriteOnly );
- save( s, 1 );
-
- return str;
-}
-
-/*!
- \overload
-
- This function uses \a indent as the amount of space to indent
- subelements.
-*/
-TQString TQDomDocument::toString( int indent ) const
-{
- TQString str;
- TQTextStream s( str, IO_WriteOnly );
- save( s, indent );
-
- return str;
-}
-
-/*!
- Converts the parsed document back to its textual representation
- and returns a TQCString for that is encoded in UTF-8.
-
- \sa toString()
-*/
-TQCString TQDomDocument::toCString() const
-{
- // ### if there is an encoding specified in the xml declaration, this
- // encoding declaration should be changed to utf8
- return toString().utf8();
-}
-
-/*!
- \overload
-
- This function uses \a indent as the amount of space to indent
- subelements.
-*/
-TQCString TQDomDocument::toCString( int indent ) const
-{
- // ### if there is an encoding specified in the xml declaration, this
- // encoding declaration should be changed to utf8
- return toString( indent ).utf8();
-}
-
-
-/*!
- Returns the document type of this document.
-*/
-TQDomDocumentType TQDomDocument::doctype() const
-{
- if ( !impl )
- return TQDomDocumentType();
- return TQDomDocumentType( IMPL->doctype() );
-}
-
-/*!
- Returns a TQDomImplementation object.
-*/
-TQDomImplementation TQDomDocument::implementation() const
-{
- if ( !impl )
- return TQDomImplementation();
- return TQDomImplementation( IMPL->implementation() );
-}
-
-/*!
- Returns the root element of the document.
-*/
-TQDomElement TQDomDocument::documentElement() const
-{
- if ( !impl )
- return TQDomElement();
- return TQDomElement( IMPL->documentElement() );
-}
-
-/*!
- Creates a new element called \a tagName that can be inserted into
- the DOM tree, e.g. using TQDomNode::appendChild().
-
- \sa createElementNS() TQDomNode::appendChild() TQDomNode::insertBefore()
- TQDomNode::insertAfter()
-*/
-TQDomElement TQDomDocument::createElement( const TQString& tagName )
-{
- if ( !impl )
- impl = new TQDomDocumentPrivate;
- return TQDomElement( IMPL->createElement( tagName ) );
-}
-
-/*!
- Creates a new document fragment, that can be used to hold parts of
- the document, e.g. when doing complex manipulations of the
- document tree.
-*/
-TQDomDocumentFragment TQDomDocument::createDocumentFragment()
-{
- if ( !impl )
- impl = new TQDomDocumentPrivate;
- return TQDomDocumentFragment( IMPL->createDocumentFragment() );
-}
-
-/*!
- Creates a text node for the string \a value that can be inserted
- into the document tree, e.g. using TQDomNode::appendChild().
-
- \warning All characters within an XML document must be in the range:
-
- #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
-
- This rule also applies to characters encoded as character entities and
- characters in CDATA sections. If you use this function to insert
- characters outside of this range, the document will not be well-formed.
-
- If you want to store binary data in an XML document you must either use
- your own scheme to escape illegal characters, or you must store it in
- an external unparsed entity.
-
- \sa TQDomNode::appendChild() TQDomNode::insertBefore() TQDomNode::insertAfter()
-*/
-TQDomText TQDomDocument::createTextNode( const TQString& value )
-{
- if ( !impl )
- impl = new TQDomDocumentPrivate;
- return TQDomText( IMPL->createTextNode( value ) );
-}
-
-/*!
- Creates a new comment for the string \a value that can be inserted
- into the document, e.g. using TQDomNode::appendChild().
-
- \sa TQDomNode::appendChild() TQDomNode::insertBefore() TQDomNode::insertAfter()
-*/
-TQDomComment TQDomDocument::createComment( const TQString& value )
-{
- if ( !impl )
- impl = new TQDomDocumentPrivate;
- return TQDomComment( IMPL->createComment( value ) );
-}
-
-/*!
- Creates a new CDATA section for the string \a value that can be
- inserted into the document, e.g. using TQDomNode::appendChild().
-
- \sa TQDomNode::appendChild() TQDomNode::insertBefore() TQDomNode::insertAfter()
-*/
-TQDomCDATASection TQDomDocument::createCDATASection( const TQString& value )
-{
- if ( !impl )
- impl = new TQDomDocumentPrivate;
- return TQDomCDATASection( IMPL->createCDATASection( value ) );
-}
-
-/*!
- Creates a new processing instruction that can be inserted into the
- document, e.g. using TQDomNode::appendChild(). This function sets
- the target for the processing instruction to \a target and the
- data to \a data.
-
- \sa TQDomNode::appendChild() TQDomNode::insertBefore() TQDomNode::insertAfter()
-*/
-TQDomProcessingInstruction TQDomDocument::createProcessingInstruction( const TQString& target,
- const TQString& data )
-{
- if ( !impl )
- impl = new TQDomDocumentPrivate;
- return TQDomProcessingInstruction( IMPL->createProcessingInstruction( target, data ) );
-}
-
-
-/*!
- Creates a new attribute called \a name that can be inserted into
- an element, e.g. using TQDomElement::setAttributeNode().
-
- \sa createAttributeNS()
-*/
-TQDomAttr TQDomDocument::createAttribute( const TQString& name )
-{
- if ( !impl )
- impl = new TQDomDocumentPrivate;
- return TQDomAttr( IMPL->createAttribute( name ) );
-}
-
-/*!
- Creates a new entity reference called \a name that can be inserted
- into the document, e.g. using TQDomNode::appendChild().
-
- \sa TQDomNode::appendChild() TQDomNode::insertBefore() TQDomNode::insertAfter()
-*/
-TQDomEntityReference TQDomDocument::createEntityReference( const TQString& name )
-{
- if ( !impl )
- impl = new TQDomDocumentPrivate;
- return TQDomEntityReference( IMPL->createEntityReference( name ) );
-}
-
-/*!
- Returns a TQDomNodeList, that contains all the elements in the
- document with the name \a tagname. The order of the node list is
- the order they are encountered in a preorder traversal of the
- element tree.
-
- \sa elementsByTagNameNS() TQDomElement::elementsByTagName()
-*/
-TQDomNodeList TQDomDocument::elementsByTagName( const TQString& tagname ) const
-{
- return TQDomNodeList( new TQDomNodeListPrivate( impl, tagname ) );
-}
-
-/*!
- Imports the node \a importedNode from another document to this
- document. \a importedNode remains in the original document; this
- function creates a copy that can be used within this document.
-
- This function returns the imported node that belongs to this
- document. The returned node has no parent. It is not possible to
- import TQDomDocument and TQDomDocumentType nodes. In those cases
- this function returns a \link TQDomNode::isNull() null node\endlink.
-
- If \a deep is TRUE, this function imports not only the node \a
- importedNode but its whole subtree; if it is FALSE, only the \a
- importedNode is imported. The argument \a deep has no effect on
- TQDomAttr and TQDomEntityReference nodes, since the descendents of
- TQDomAttr nodes are always imported and those of
- TQDomEntityReference nodes are never imported.
-
- The behavior of this function is slightly different depending on
- the node types:
- \table
- \header \i Node Type \i Behaviour
- \row \i TQDomAttr
- \i The owner element is set to 0 and the specified flag is
- set to TRUE in the generated attribute. The whole subtree
- of \a importedNode is always imported for attribute nodes:
- \a deep has no effect.
- \row \i TQDomDocument
- \i Document nodes cannot be imported.
- \row \i TQDomDocumentFragment
- \i If \a deep is TRUE, this function imports the whole
- document fragment; otherwise it only generates an empty
- document fragment.
- \row \i TQDomDocumentType
- \i Document type nodes cannot be imported.
- \row \i TQDomElement
- \i Attributes for which TQDomAttr::specified() is TRUE are
- also imported, other attributes are not imported. If \a
- deep is TRUE, this function also imports the subtree of \a
- importedNode; otherwise it imports only the element node
- (and some attributes, see above).
- \row \i TQDomEntity
- \i Entity nodes can be imported, but at the moment there is
- no way to use them since the document type is read-only in
- DOM level 2.
- \row \i TQDomEntityReference
- \i Descendents of entity reference nodes are never imported:
- \a deep has no effect.
- \row \i TQDomNotation
- \i Notation nodes can be imported, but at the moment there is
- no way to use them since the document type is read-only in
- DOM level 2.
- \row \i TQDomProcessingInstruction
- \i The target and value of the processing instruction is
- copied to the new node.
- \row \i TQDomText
- \i The text is copied to the new node.
- \row \i TQDomCDATASection
- \i The text is copied to the new node.
- \row \i TQDomComment
- \i The text is copied to the new node.
- \endtable
-
- \sa TQDomElement::setAttribute() TQDomNode::insertBefore()
- TQDomNode::insertAfter() TQDomNode::replaceChild() TQDomNode::removeChild()
- TQDomNode::appendChild()
-*/
-TQDomNode TQDomDocument::importNode( const TQDomNode& importedNode, bool deep )
-{
- if ( !impl )
- impl = new TQDomDocumentPrivate;
- return TQDomNode( IMPL->importNode( importedNode.impl, deep ) );
-}
-
-/*!
- Creates a new element with namespace support that can be inserted
- into the DOM tree. The name of the element is \a qName and the
- namespace URI is \a nsURI. This function also sets
- TQDomNode::prefix() and TQDomNode::localName() to appropriate values
- (depending on \a qName).
-
- \sa createElement()
-*/
-TQDomElement TQDomDocument::createElementNS( const TQString& nsURI, const TQString& qName )
-{
- if ( !impl )
- impl = new TQDomDocumentPrivate;
- return TQDomElement( IMPL->createElementNS( nsURI, qName ) );
-}
-
-/*!
- Creates a new attribute with namespace support that can be
- inserted into an element. The name of the attribute is \a qName
- and the namespace URI is \a nsURI. This function also sets
- TQDomNode::prefix() and TQDomNode::localName() to appropriate values
- (depending on \a qName).
-
- \sa createAttribute()
-*/
-TQDomAttr TQDomDocument::createAttributeNS( const TQString& nsURI, const TQString& qName )
-{
- if ( !impl )
- impl = new TQDomDocumentPrivate;
- return TQDomAttr( IMPL->createAttributeNS( nsURI, qName ) );
-}
-
-/*!
- Returns a TQDomNodeList that contains all the elements in the
- document with the local name \a localName and a namespace URI of
- \a nsURI. The order of the node list is the order they are
- encountered in a preorder traversal of the element tree.
-
- \sa elementsByTagName() TQDomElement::elementsByTagNameNS()
-*/
-TQDomNodeList TQDomDocument::elementsByTagNameNS( const TQString& nsURI, const TQString& localName )
-{
- return TQDomNodeList( new TQDomNodeListPrivate( impl, nsURI, localName ) );
-}
-
-/*!
- Returns the element whose ID is equal to \a elementId. If no
- element with the ID was found, this function returns a \link
- TQDomNode::isNull() null element\endlink.
-
- Since the TQDomClasses do not know which attributes are element
- IDs, this function returns always a \link TQDomNode::isNull() null
- element\endlink. This may change in a future version.
-*/
-TQDomElement TQDomDocument::elementById( const TQString& /*elementId*/ )
-{
- return TQDomElement();
-}
-
-/*!
- Returns \c DocumentNode.
-*/
-TQDomNode::NodeType TQDomDocument::nodeType() const
-{
- return DocumentNode;
-}
-
-/*!
- Returns TRUE.
-*/
-bool TQDomDocument::isDocument() const
-{
- return TRUE;
-}
-
-
-#undef IMPL
-
-/**************************************************************
- *
- * Node casting functions
- *
- **************************************************************/
-
-/*!
- Converts a TQDomNode into a TQDomAttr. If the node is not an
- attribute, the returned object will be \link TQDomNode::isNull()
- null\endlink.
-
- \sa isAttr()
-*/
-TQDomAttr TQDomNode::toAttr()
-{
- if ( impl && impl->isAttr() )
- return TQDomAttr( ((TQDomAttrPrivate*)impl) );
- return TQDomAttr();
-}
-
-/*!
- Converts a TQDomNode into a TQDomCDATASection. If the node is not a
- CDATA section, the returned object will be \link
- TQDomNode::isNull() null\endlink.
-
- \sa isCDATASection()
-*/
-TQDomCDATASection TQDomNode::toCDATASection()
-{
- if ( impl && impl->isCDATASection() )
- return TQDomCDATASection( ((TQDomCDATASectionPrivate*)impl) );
- return TQDomCDATASection();
-}
-
-/*!
- Converts a TQDomNode into a TQDomDocumentFragment. If the node is
- not a document fragment the returned object will be \link
- TQDomNode::isNull() null\endlink.
-
- \sa isDocumentFragment()
-*/
-TQDomDocumentFragment TQDomNode::toDocumentFragment()
-{
- if ( impl && impl->isDocumentFragment() )
- return TQDomDocumentFragment( ((TQDomDocumentFragmentPrivate*)impl) );
- return TQDomDocumentFragment();
-}
-
-/*!
- Converts a TQDomNode into a TQDomDocument. If the node is not a
- document the returned object will be \link TQDomNode::isNull()
- null\endlink.
-
- \sa isDocument()
-*/
-TQDomDocument TQDomNode::toDocument()
-{
- if ( impl && impl->isDocument() )
- return TQDomDocument( ((TQDomDocumentPrivate*)impl) );
- return TQDomDocument();
-}
-
-/*!
- Converts a TQDomNode into a TQDomDocumentType. If the node is not a
- document type the returned object will be \link TQDomNode::isNull()
- null\endlink.
-
- \sa isDocumentType()
-*/
-TQDomDocumentType TQDomNode::toDocumentType()
-{
- if ( impl && impl->isDocumentType() )
- return TQDomDocumentType( ((TQDomDocumentTypePrivate*)impl) );
- return TQDomDocumentType();
-}
-
-/*!
- Converts a TQDomNode into a TQDomElement. If the node is not an
- element the returned object will be \link TQDomNode::isNull()
- null\endlink.
-
- \sa isElement()
-*/
-TQDomElement TQDomNode::toElement()
-{
- if ( impl && impl->isElement() )
- return TQDomElement( ((TQDomElementPrivate*)impl) );
- return TQDomElement();
-}
-
-/*!
- Converts a TQDomNode into a TQDomEntityReference. If the node is not
- an entity reference, the returned object will be \link
- TQDomNode::isNull() null\endlink.
-
- \sa isEntityReference()
-*/
-TQDomEntityReference TQDomNode::toEntityReference()
-{
- if ( impl && impl->isEntityReference() )
- return TQDomEntityReference( ((TQDomEntityReferencePrivate*)impl) );
- return TQDomEntityReference();
-}
-
-/*!
- Converts a TQDomNode into a TQDomText. If the node is not a text,
- the returned object will be \link TQDomNode::isNull() null\endlink.
-
- \sa isText()
-*/
-TQDomText TQDomNode::toText()
-{
- if ( impl && impl->isText() )
- return TQDomText( ((TQDomTextPrivate*)impl) );
- return TQDomText();
-}
-
-/*!
- Converts a TQDomNode into a TQDomEntity. If the node is not an
- entity the returned object will be \link TQDomNode::isNull()
- null\endlink.
-
- \sa isEntity()
-*/
-TQDomEntity TQDomNode::toEntity()
-{
- if ( impl && impl->isEntity() )
- return TQDomEntity( ((TQDomEntityPrivate*)impl) );
- return TQDomEntity();
-}
-
-/*!
- Converts a TQDomNode into a TQDomNotation. If the node is not a
- notation the returned object will be \link TQDomNode::isNull()
- null\endlink.
-
- \sa isNotation()
-*/
-TQDomNotation TQDomNode::toNotation()
-{
- if ( impl && impl->isNotation() )
- return TQDomNotation( ((TQDomNotationPrivate*)impl) );
- return TQDomNotation();
-}
-
-/*!
- Converts a TQDomNode into a TQDomProcessingInstruction. If the node
- is not a processing instruction the returned object will be \link
- TQDomNode::isNull() null\endlink.
-
- \sa isProcessingInstruction()
-*/
-TQDomProcessingInstruction TQDomNode::toProcessingInstruction()
-{
- if ( impl && impl->isProcessingInstruction() )
- return TQDomProcessingInstruction( ((TQDomProcessingInstructionPrivate*)impl) );
- return TQDomProcessingInstruction();
-}
-
-/*!
- Converts a TQDomNode into a TQDomCharacterData. If the node is not a
- character data node the returned object will be \link
- TQDomNode::isNull() null\endlink.
-
- \sa isCharacterData()
-*/
-TQDomCharacterData TQDomNode::toCharacterData()
-{
- if ( impl && impl->isCharacterData() )
- return TQDomCharacterData( ((TQDomCharacterDataPrivate*)impl) );
- return TQDomCharacterData();
-}
-
-/*!
- Converts a TQDomNode into a TQDomComment. If the node is not a
- comment the returned object will be \link TQDomNode::isNull()
- null\endlink.
-
- \sa isComment()
-*/
-TQDomComment TQDomNode::toComment()
-{
- if ( impl && impl->isComment() )
- return TQDomComment( ((TQDomCommentPrivate*)impl) );
- return TQDomComment();
-}
-
-/**************************************************************
- *
- * TQDomHandler
- *
- **************************************************************/
-
-TQDomHandler::TQDomHandler( TQDomDocumentPrivate* adoc, bool namespaceProcessing )
-{
- doc = adoc;
- node = doc;
- cdata = FALSE;
- nsProcessing = namespaceProcessing;
-}
-
-TQDomHandler::~TQDomHandler()
-{
-}
-
-bool TQDomHandler::endDocument()
-{
- // ### is this really necessary? (rms)
- if ( node != doc )
- return FALSE;
- return TRUE;
-}
-
-bool TQDomHandler::startDTD( const TQString& name, const TQString& publicId, const TQString& systemId )
-{
- doc->doctype()->name = name;
- doc->doctype()->publicId = publicId;
- doc->doctype()->systemId = systemId;
- return TRUE;
-}
-
-bool TQDomHandler::startElement( const TQString& nsURI, const TQString&, const TQString& qName, const TQXmlAttributes& atts )
-{
- // tag name
- TQDomNodePrivate* n;
- if ( nsProcessing ) {
- n = doc->createElementNS( nsURI, qName );
- } else {
- n = doc->createElement( qName );
- }
- node->appendChild( n );
- node = n;
-
- // attributes
- for ( int i=0; i<atts.length(); i++ )
- {
- if ( nsProcessing ) {
- ((TQDomElementPrivate*)node)->setAttributeNS( atts.uri(i), atts.qName(i), atts.value(i) );
- } else {
- ((TQDomElementPrivate*)node)->setAttribute( atts.qName(i), atts.value(i) );
- }
- }
-
- return TRUE;
-}
-
-bool TQDomHandler::endElement( const TQString&, const TQString&, const TQString& )
-{
- if ( node == doc )
- return FALSE;
- node = node->parent();
-
- return TRUE;
-}
-
-bool TQDomHandler::characters( const TQString& ch )
-{
- // No text as child of some document
- if ( node == doc )
- return FALSE;
-
- if ( cdata ) {
- node->appendChild( doc->createCDATASection( ch ) );
- } else if ( !entityName.isEmpty() ) {
- TQDomEntityPrivate* e = new TQDomEntityPrivate( doc, 0, entityName,
- TQString::null, TQString::null, TQString::null );
- e->value = ch;
- doc->doctype()->appendChild( e );
- node->appendChild( doc->createEntityReference( entityName ) );
- } else {
- node->appendChild( doc->createTextNode( ch ) );
- }
-
- return TRUE;
-}
-
-bool TQDomHandler::processingInstruction( const TQString& target, const TQString& data )
-{
- node->appendChild( doc->createProcessingInstruction( target, data ) );
- return TRUE;
-}
-
-bool TQDomHandler::skippedEntity( const TQString& name )
-{
- node->appendChild( doc->createEntityReference( name ) );
- return TRUE;
-}
-
-bool TQDomHandler::fatalError( const TQXmlParseException& exception )
-{
- errorMsg = exception.message();
- errorLine = exception.lineNumber();
- errorColumn = exception.columnNumber();
- return TQXmlDefaultHandler::fatalError( exception );
-}
-
-bool TQDomHandler::startCDATA()
-{
- cdata = TRUE;
- return TRUE;
-}
-
-bool TQDomHandler::endCDATA()
-{
- cdata = FALSE;
- return TRUE;
-}
-
-bool TQDomHandler::startEntity( const TQString &name )
-{
- entityName = name;
- return TRUE;
-}
-
-bool TQDomHandler::endEntity( const TQString & )
-{
- entityName = TQString::null;
- return TRUE;
-}
-
-bool TQDomHandler::comment( const TQString& ch )
-{
- node->appendChild( doc->createComment( ch ) );
- return TRUE;
-}
-
-bool TQDomHandler::unparsedEntityDecl( const TQString &name, const TQString &publicId, const TQString &systemId, const TQString &notationName )
-{
- TQDomEntityPrivate* e = new TQDomEntityPrivate( doc, 0, name,
- publicId, systemId, notationName );
- doc->doctype()->appendChild( e );
- return TRUE;
-}
-
-bool TQDomHandler::externalEntityDecl( const TQString &name, const TQString &publicId, const TQString &systemId )
-{
- return unparsedEntityDecl( name, publicId, systemId, TQString::null );
-}
-
-bool TQDomHandler::notationDecl( const TQString & name, const TQString & publicId, const TQString & systemId )
-{
- TQDomNotationPrivate* n = new TQDomNotationPrivate( doc, 0, name, publicId, systemId );
- doc->doctype()->appendChild( n );
- return TRUE;
-}
-
-#endif //TQT_NO_DOM
diff --git a/tqtinterface/qt4/src/xml/tqdom.h b/tqtinterface/qt4/src/xml/tqdom.h
deleted file mode 100644
index f73a823..0000000
--- a/tqtinterface/qt4/src/xml/tqdom.h
+++ /dev/null
@@ -1,678 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQDomDocument and related classes.
-**
-** Created : 000518
-**
-** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
-**
-** This file is part of the xml module of the TQt GUI Toolkit.
-**
-** This file may be used under the terms of the GNU General
-** Public License versions 2.0 or 3.0 as published by the Free
-** Software Foundation and appearing in the files LICENSE.GPL2
-** and LICENSE.GPL3 included in the packaging of this file.
-** Alternatively you may (at your option) use any later version
-** of the GNU General Public License if such license has been
-** publicly approved by Trolltech ASA (or its successors, if any)
-** and the KDE Free TQt Foundation.
-**
-** Please review the following information to ensure GNU General
-** Public Licensing requirements will be met:
-** http://trolltech.com/products/qt/licenses/licensing/opensource/.
-** If you are unsure which license is appropriate for your use, please
-** review the following information:
-** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
-** or contact the sales department at sales@trolltech.com.
-**
-** This file may be used under the terms of the Q Public License as
-** defined by Trolltech ASA and appearing in the file LICENSE.TQPL
-** included in the packaging of this file. Licensees holding valid TQt
-** Commercial licenses may use this file in accordance with the TQt
-** Commercial License Agreement provided with the Software.
-**
-** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
-** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
-** herein.
-**
-**********************************************************************/
-
-#ifndef TQDOM_H
-#define TQDOM_H
-
-#ifndef TQT_H
-#include "tqstring.h"
-#endif // TQT_H
-
-#if !defined(TQT_MODULE_XML) || defined( TQT_LICENSE_PROFESSIONAL ) || defined( TQT_INTERNAL_XML )
-#define TQM_EXPORT_DOM
-#else
-#define TQM_EXPORT_DOM TQ_EXPORT
-#endif
-
-#ifndef TQT_NO_DOM
-
-class QIODevice;
-class TQIODevice;
-class TQTextStream;
-
-class TQXmlInputSource;
-class TQXmlReader;
-
-class TQDomDocumentPrivate;
-class TQDomDocumentTypePrivate;
-class TQDomDocumentFragmentPrivate;
-class TQDomNodePrivate;
-class TQDomNodeListPrivate;
-class TQDomImplementationPrivate;
-class TQDomElementPrivate;
-class TQDomNotationPrivate;
-class TQDomEntityPrivate;
-class TQDomEntityReferencePrivate;
-class TQDomProcessingInstructionPrivate;
-class TQDomAttrPrivate;
-class TQDomCharacterDataPrivate;
-class TQDomTextPrivate;
-class TQDomCommentPrivate;
-class TQDomCDATASectionPrivate;
-class TQDomNamedNodeMapPrivate;
-class TQDomImplementationPrivate;
-
-class TQDomNodeList;
-class TQDomElement;
-class TQDomText;
-class TQDomComment;
-class TQDomCDATASection;
-class TQDomProcessingInstruction;
-class TQDomAttr;
-class TQDomEntityReference;
-class TQDomDocument;
-class TQDomNamedNodeMap;
-class TQDomDocument;
-class TQDomDocumentFragment;
-class TQDomDocumentType;
-class TQDomImplementation;
-class TQDomNode;
-class TQDomEntity;
-class TQDomNotation;
-class TQDomCharacterData;
-
-class TQM_EXPORT_DOM TQDomImplementation
-{
-public:
- TQDomImplementation();
- TQDomImplementation( const TQDomImplementation& );
- virtual ~TQDomImplementation();
- TQDomImplementation& operator= ( const TQDomImplementation& );
- bool operator== ( const TQDomImplementation& ) const;
- bool operator!= ( const TQDomImplementation& ) const;
-
- // functions
- virtual bool hasFeature( const TQString& feature, const TQString& version );
- virtual TQDomDocumentType createDocumentType( const TQString& qName, const TQString& publicId, const TQString& systemId );
- virtual TQDomDocument createDocument( const TQString& nsURI, const TQString& qName, const TQDomDocumentType& doctype );
-
- // TQt extension
- bool isNull();
-
-private:
- TQDomImplementationPrivate* impl;
- TQDomImplementation( TQDomImplementationPrivate* );
-
- friend class TQDomDocument;
-};
-
-class TQM_EXPORT_DOM TQDomNode
-{
-public:
- enum NodeType {
- ElementNode = 1,
- AttributeNode = 2,
- TextNode = 3,
- CDATASectionNode = 4,
- EntityReferenceNode = 5,
- EntityNode = 6,
- ProcessingInstructionNode = 7,
- CommentNode = 8,
- DocumentNode = 9,
- DocumentTypeNode = 10,
- DocumentFragmentNode = 11,
- NotationNode = 12,
- BaseNode = 21,// this is not in the standard
- CharacterDataNode = 22 // this is not in the standard
- };
-
- TQDomNode();
- TQDomNode( const TQDomNode& );
- TQDomNode& operator= ( const TQDomNode& );
- bool operator== ( const TQDomNode& ) const;
- bool operator!= ( const TQDomNode& ) const;
- virtual ~TQDomNode();
-
- // DOM functions
- virtual TQDomNode insertBefore( const TQDomNode& newChild, const TQDomNode& refChild );
- virtual TQDomNode insertAfter( const TQDomNode& newChild, const TQDomNode& refChild );
- virtual TQDomNode replaceChild( const TQDomNode& newChild, const TQDomNode& oldChild );
- virtual TQDomNode removeChild( const TQDomNode& oldChild );
- virtual TQDomNode appendChild( const TQDomNode& newChild );
- virtual bool hasChildNodes() const;
- virtual TQDomNode cloneNode( bool deep = TRUE ) const;
- virtual void normalize();
- virtual bool isSupported( const TQString& feature, const TQString& version ) const;
-
- // DOM read only attributes
- virtual TQString nodeName() const;
- virtual TQDomNode::NodeType nodeType() const;
- virtual TQDomNode parentNode() const;
- virtual TQDomNodeList childNodes() const;
- virtual TQDomNode firstChild() const;
- virtual TQDomNode lastChild() const;
- virtual TQDomNode previousSibling() const;
- virtual TQDomNode nextSibling() const;
- virtual TQDomNamedNodeMap attributes() const;
- virtual TQDomDocument ownerDocument() const;
- virtual TQString namespaceURI() const;
- virtual TQString localName() const;
- virtual bool hasAttributes() const;
-
- // DOM attributes
- virtual TQString nodeValue() const;
- virtual void setNodeValue( const TQString& );
- virtual TQString prefix() const;
- virtual void setPrefix( const TQString& pre );
-
- // TQt extensions
- virtual bool isAttr() const;
- virtual bool isCDATASection() const;
- virtual bool isDocumentFragment() const;
- virtual bool isDocument() const;
- virtual bool isDocumentType() const;
- virtual bool isElement() const;
- virtual bool isEntityReference() const;
- virtual bool isText() const;
- virtual bool isEntity() const;
- virtual bool isNotation() const;
- virtual bool isProcessingInstruction() const;
- virtual bool isCharacterData() const;
- virtual bool isComment() const;
-
- /**
- * Shortcut to avoid dealing with TQDomNodeList
- * all the time.
- */
- TQDomNode namedItem( const TQString& name ) const;
-
- bool isNull() const;
- void clear();
-
- TQDomAttr toAttr();
- TQDomCDATASection toCDATASection();
- TQDomDocumentFragment toDocumentFragment();
- TQDomDocument toDocument();
- TQDomDocumentType toDocumentType();
- TQDomElement toElement();
- TQDomEntityReference toEntityReference();
- TQDomText toText();
- TQDomEntity toEntity();
- TQDomNotation toNotation();
- TQDomProcessingInstruction toProcessingInstruction();
- TQDomCharacterData toCharacterData();
- TQDomComment toComment();
-
- void save( TQTextStream&, int ) const;
-
-protected:
- TQDomNodePrivate* impl;
- TQDomNode( TQDomNodePrivate* );
-
-private:
- friend class TQDomDocument;
- friend class TQDomDocumentType;
- friend class TQDomNodeList;
- friend class TQDomNamedNodeMap;
-};
-
-class TQM_EXPORT_DOM TQDomNodeList
-{
-public:
- TQDomNodeList();
- TQDomNodeList( const TQDomNodeList& );
- TQDomNodeList& operator= ( const TQDomNodeList& );
- bool operator== ( const TQDomNodeList& ) const;
- bool operator!= ( const TQDomNodeList& ) const;
- virtual ~TQDomNodeList();
-
- // DOM functions
- virtual TQDomNode item( int index ) const;
-
- // DOM read only attributes
- virtual uint length() const;
- uint count() const { return length(); } // TQt API consitancy
-
-private:
- TQDomNodeListPrivate* impl;
- TQDomNodeList( TQDomNodeListPrivate* );
-
- friend class TQDomNode;
- friend class TQDomElement;
- friend class TQDomDocument;
-};
-
-class TQM_EXPORT_DOM TQDomDocumentType : public TQDomNode
-{
-public:
- TQDomDocumentType();
- TQDomDocumentType( const TQDomDocumentType& x );
- TQDomDocumentType& operator= ( const TQDomDocumentType& );
- ~TQDomDocumentType();
-
- // DOM read only attributes
- virtual TQString name() const;
- virtual TQDomNamedNodeMap entities() const;
- virtual TQDomNamedNodeMap notations() const;
- virtual TQString publicId() const;
- virtual TQString systemId() const;
- virtual TQString internalSubset() const;
-
- // Reimplemented from TQDomNode
- TQDomNode::NodeType nodeType() const;
- bool isDocumentType() const;
-
-private:
- TQDomDocumentType( TQDomDocumentTypePrivate* );
-
- friend class TQDomImplementation;
- friend class TQDomDocument;
- friend class TQDomNode;
-};
-
-class TQM_EXPORT_DOM TQDomDocument : public TQDomNode
-{
-public:
- TQDomDocument();
- TQ_EXPLICIT TQDomDocument( const TQString& name );
- TQ_EXPLICIT TQDomDocument( const TQDomDocumentType& doctype );
- TQDomDocument( const TQDomDocument& x );
- TQDomDocument& operator= ( const TQDomDocument& );
- ~TQDomDocument();
-
- // DOM functions
- TQDomElement createElement( const TQString& tagName );
- TQDomDocumentFragment createDocumentFragment();
- TQDomText createTextNode( const TQString& data );
- TQDomComment createComment( const TQString& data );
- TQDomCDATASection createCDATASection( const TQString& data );
- TQDomProcessingInstruction createProcessingInstruction( const TQString& target, const TQString& data );
- TQDomAttr createAttribute( const TQString& name );
- TQDomEntityReference createEntityReference( const TQString& name );
- TQDomNodeList elementsByTagName( const TQString& tagname ) const;
- TQDomNode importNode( const TQDomNode& importedNode, bool deep );
- TQDomElement createElementNS( const TQString& nsURI, const TQString& qName );
- TQDomAttr createAttributeNS( const TQString& nsURI, const TQString& qName );
- TQDomNodeList elementsByTagNameNS( const TQString& nsURI, const TQString& localName );
- TQDomElement elementById( const TQString& elementId );
-
- // DOM read only attributes
- TQDomDocumentType doctype() const;
- TQDomImplementation implementation() const;
- TQDomElement documentElement() const;
-
- // TQt extensions
- bool setContent( const TQCString& text, bool namespaceProcessing, TQString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
- bool setContent( const TQByteArray& text, bool namespaceProcessing, TQString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
- bool setContent( const TQString& text, bool namespaceProcessing, TQString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
- bool setContent( QIODevice* dev, bool namespaceProcessing, TQString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
- bool setContent( const TQCString& text, TQString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
- bool setContent( const TQByteArray& text, TQString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
- bool setContent( const TQString& text, TQString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
- bool setContent( QIODevice* dev, TQString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
-
- bool setContent( TQXmlInputSource *source, TQXmlReader *reader, TQString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
-
- // Reimplemented from TQDomNode
- TQDomNode::NodeType nodeType() const;
- bool isDocument() const;
-
- // TQt extensions
- TQString toString() const; // ### TQt 4: merge the two overloads
- TQString toString( int ) const;
- TQCString toCString() const; // ### TQt 4: merge the two overloads
- TQCString toCString( int ) const;
-
-private:
- TQDomDocument( TQDomDocumentPrivate* );
-
- friend class TQDomNode;
-};
-
-class TQM_EXPORT_DOM TQDomNamedNodeMap
-{
-public:
- TQDomNamedNodeMap();
- TQDomNamedNodeMap( const TQDomNamedNodeMap& );
- TQDomNamedNodeMap& operator= ( const TQDomNamedNodeMap& );
- bool operator== ( const TQDomNamedNodeMap& ) const;
- bool operator!= ( const TQDomNamedNodeMap& ) const;
- ~TQDomNamedNodeMap();
-
- // DOM functions
- TQDomNode namedItem( const TQString& name ) const;
- TQDomNode setNamedItem( const TQDomNode& newNode );
- TQDomNode removeNamedItem( const TQString& name );
- TQDomNode item( int index ) const;
- TQDomNode namedItemNS( const TQString& nsURI, const TQString& localName ) const;
- TQDomNode setNamedItemNS( const TQDomNode& newNode );
- TQDomNode removeNamedItemNS( const TQString& nsURI, const TQString& localName );
-
- // DOM read only attributes
- uint length() const;
- uint count() const { return length(); } // TQt API consitancy
-
- // TQt extension
- bool contains( const TQString& name ) const;
-
-private:
- TQDomNamedNodeMapPrivate* impl;
- TQDomNamedNodeMap( TQDomNamedNodeMapPrivate* );
-
- friend class TQDomNode;
- friend class TQDomDocumentType;
- friend class TQDomElement;
-};
-
-class TQM_EXPORT_DOM TQDomDocumentFragment : public TQDomNode
-{
-public:
- TQDomDocumentFragment();
- TQDomDocumentFragment( const TQDomDocumentFragment& x );
- TQDomDocumentFragment& operator= ( const TQDomDocumentFragment& );
- ~TQDomDocumentFragment();
-
- // Reimplemented from TQDomNode
- TQDomNode::NodeType nodeType() const;
- bool isDocumentFragment() const;
-
-private:
- TQDomDocumentFragment( TQDomDocumentFragmentPrivate* );
-
- friend class TQDomDocument;
- friend class TQDomNode;
-};
-
-class TQM_EXPORT_DOM TQDomCharacterData : public TQDomNode
-{
-public:
- TQDomCharacterData();
- TQDomCharacterData( const TQDomCharacterData& x );
- TQDomCharacterData& operator= ( const TQDomCharacterData& );
- ~TQDomCharacterData();
-
- // DOM functions
- virtual TQString substringData( unsigned long offset, unsigned long count );
- virtual void appendData( const TQString& arg );
- virtual void insertData( unsigned long offset, const TQString& arg );
- virtual void deleteData( unsigned long offset, unsigned long count );
- virtual void replaceData( unsigned long offset, unsigned long count, const TQString& arg );
-
- // DOM read only attributes
- virtual uint length() const;
-
- // DOM attributes
- virtual TQString data() const;
- virtual void setData( const TQString& );
-
- // Reimplemented from TQDomNode
- TQDomNode::NodeType nodeType() const;
- bool isCharacterData() const;
-
-private:
- TQDomCharacterData( TQDomCharacterDataPrivate* );
-
- friend class TQDomDocument;
- friend class TQDomText;
- friend class TQDomComment;
- friend class TQDomNode;
-};
-
-class TQM_EXPORT_DOM TQDomAttr : public TQDomNode
-{
-public:
- TQDomAttr();
- TQDomAttr( const TQDomAttr& x );
- TQDomAttr& operator= ( const TQDomAttr& );
- ~TQDomAttr();
-
- // DOM read only attributes
- virtual TQString name() const;
- virtual bool specified() const;
- virtual TQDomElement ownerElement() const;
-
- // DOM attributes
- virtual TQString value() const;
- virtual void setValue( const TQString& );
-
- // Reimplemented from TQDomNode
- TQDomNode::NodeType nodeType() const;
- bool isAttr() const;
-
-private:
- TQDomAttr( TQDomAttrPrivate* );
-
- friend class TQDomDocument;
- friend class TQDomElement;
- friend class TQDomNode;
-};
-
-class TQM_EXPORT_DOM TQDomElement : public TQDomNode
-{
-public:
- TQDomElement();
- TQDomElement( const TQDomElement& x );
- TQDomElement& operator= ( const TQDomElement& );
- ~TQDomElement();
-
- // DOM functions
- TQString attribute( const TQString& name, const TQString& defValue = TQString::null ) const;
- void setAttribute( const TQString& name, const TQString& value );
- void setAttribute( const TQString& name, int value );
- void setAttribute( const TQString& name, uint value );
- void setAttribute( const TQString& name, long value );
- void setAttribute( const TQString& name, ulong value );
- void setAttribute( const TQString& name, double value );
- void removeAttribute( const TQString& name );
- TQDomAttr attributeNode( const TQString& name);
- TQDomAttr setAttributeNode( const TQDomAttr& newAttr );
- TQDomAttr removeAttributeNode( const TQDomAttr& oldAttr );
- virtual TQDomNodeList elementsByTagName( const TQString& tagname ) const;
- bool hasAttribute( const TQString& name ) const;
-
- TQString attributeNS( const TQString nsURI, const TQString& localName, const TQString& defValue ) const;
- void setAttributeNS( const TQString nsURI, const TQString& qName, const TQString& value );
- void setAttributeNS( const TQString nsURI, const TQString& qName, int value );
- void setAttributeNS( const TQString nsURI, const TQString& qName, uint value );
- void setAttributeNS( const TQString nsURI, const TQString& qName, long value );
- void setAttributeNS( const TQString nsURI, const TQString& qName, ulong value );
- void setAttributeNS( const TQString nsURI, const TQString& qName, double value );
- void removeAttributeNS( const TQString& nsURI, const TQString& localName );
- TQDomAttr attributeNodeNS( const TQString& nsURI, const TQString& localName );
- TQDomAttr setAttributeNodeNS( const TQDomAttr& newAttr );
- virtual TQDomNodeList elementsByTagNameNS( const TQString& nsURI, const TQString& localName ) const;
- bool hasAttributeNS( const TQString& nsURI, const TQString& localName ) const;
-
- // DOM read only attributes
- TQString tagName() const;
- void setTagName( const TQString& name ); // TQt extension
-
- // Reimplemented from TQDomNode
- TQDomNamedNodeMap attributes() const;
- TQDomNode::NodeType nodeType() const;
- bool isElement() const;
-
- TQString text() const;
-
-private:
- TQDomElement( TQDomElementPrivate* );
-
- friend class TQDomDocument;
- friend class TQDomNode;
- friend class TQDomAttr;
-};
-
-class TQM_EXPORT_DOM TQDomText : public TQDomCharacterData
-{
-public:
- TQDomText();
- TQDomText( const TQDomText& x );
- TQDomText& operator= ( const TQDomText& );
- ~TQDomText();
-
- // DOM functions
- TQDomText splitText( int offset );
-
- // Reimplemented from TQDomNode
- TQDomNode::NodeType nodeType() const;
- bool isText() const;
-
-private:
- TQDomText( TQDomTextPrivate* );
-
- friend class TQDomCDATASection;
- friend class TQDomDocument;
- friend class TQDomNode;
-};
-
-class TQM_EXPORT_DOM TQDomComment : public TQDomCharacterData
-{
-public:
- TQDomComment();
- TQDomComment( const TQDomComment& x );
- TQDomComment& operator= ( const TQDomComment& );
- ~TQDomComment();
-
- // Reimplemented from TQDomNode
- TQDomNode::NodeType nodeType() const;
- bool isComment() const;
-
-private:
- TQDomComment( TQDomCommentPrivate* );
-
- friend class TQDomDocument;
- friend class TQDomNode;
-};
-
-class TQM_EXPORT_DOM TQDomCDATASection : public TQDomText
-{
-public:
- TQDomCDATASection();
- TQDomCDATASection( const TQDomCDATASection& x );
- TQDomCDATASection& operator= ( const TQDomCDATASection& );
- ~TQDomCDATASection();
-
- // Reimplemented from TQDomNode
- TQDomNode::NodeType nodeType() const;
- bool isCDATASection() const;
-
-private:
- TQDomCDATASection( TQDomCDATASectionPrivate* );
-
- friend class TQDomDocument;
- friend class TQDomNode;
-};
-
-class TQM_EXPORT_DOM TQDomNotation : public TQDomNode
-{
-public:
- TQDomNotation();
- TQDomNotation( const TQDomNotation& x );
- TQDomNotation& operator= ( const TQDomNotation& );
- ~TQDomNotation();
-
- // DOM read only attributes
- TQString publicId() const;
- TQString systemId() const;
-
- // Reimplemented from TQDomNode
- TQDomNode::NodeType nodeType() const;
- bool isNotation() const;
-
-private:
- TQDomNotation( TQDomNotationPrivate* );
-
- friend class TQDomDocument;
- friend class TQDomNode;
-};
-
-class TQM_EXPORT_DOM TQDomEntity : public TQDomNode
-{
-public:
- TQDomEntity();
- TQDomEntity( const TQDomEntity& x );
- TQDomEntity& operator= ( const TQDomEntity& );
- ~TQDomEntity();
-
- // DOM read only attributes
- virtual TQString publicId() const;
- virtual TQString systemId() const;
- virtual TQString notationName() const;
-
- // Reimplemented from TQDomNode
- TQDomNode::NodeType nodeType() const;
- bool isEntity() const;
-
-private:
- TQDomEntity( TQDomEntityPrivate* );
-
- friend class TQDomNode;
-};
-
-class TQM_EXPORT_DOM TQDomEntityReference : public TQDomNode
-{
-public:
- TQDomEntityReference();
- TQDomEntityReference( const TQDomEntityReference& x );
- TQDomEntityReference& operator= ( const TQDomEntityReference& );
- ~TQDomEntityReference();
-
- // Reimplemented from TQDomNode
- TQDomNode::NodeType nodeType() const;
- bool isEntityReference() const;
-
-private:
- TQDomEntityReference( TQDomEntityReferencePrivate* );
-
- friend class TQDomDocument;
- friend class TQDomNode;
-};
-
-class TQM_EXPORT_DOM TQDomProcessingInstruction : public TQDomNode
-{
-public:
- TQDomProcessingInstruction();
- TQDomProcessingInstruction( const TQDomProcessingInstruction& x );
- TQDomProcessingInstruction& operator= ( const TQDomProcessingInstruction& );
- ~TQDomProcessingInstruction();
-
- // DOM read only attributes
- virtual TQString target() const;
-
- // DOM attributes
- virtual TQString data() const;
- virtual void setData( const TQString& d );
-
- // Reimplemented from TQDomNode
- TQDomNode::NodeType nodeType() const;
- bool isProcessingInstruction() const;
-
-private:
- TQDomProcessingInstruction( TQDomProcessingInstructionPrivate* );
-
- friend class TQDomDocument;
- friend class TQDomNode;
-};
-
-
-TQM_EXPORT_DOM TQTextStream& operator<<( TQTextStream&, const TQDomNode& );
-
-#endif //TQT_NO_DOM
-#endif // TQDOM_H
diff --git a/tqtinterface/qt4/src/xml/tqsvgdevice.cpp b/tqtinterface/qt4/src/xml/tqsvgdevice.cpp
deleted file mode 100644
index 78200aa..0000000
--- a/tqtinterface/qt4/src/xml/tqsvgdevice.cpp
+++ /dev/null
@@ -1,1591 +0,0 @@
-/****************************************************************************
-**
-** Implementation of the TQSvgDevice class
-**
-** Copyright (C) 2000-2008 Trolltech ASA. All rights reserved.
-**
-** This file is part of the xml module of the TQt GUI Toolkit.
-**
-** This file may be used under the terms of the GNU General
-** Public License versions 2.0 or 3.0 as published by the Free
-** Software Foundation and appearing in the files LICENSE.GPL2
-** and LICENSE.GPL3 included in the packaging of this file.
-** Alternatively you may (at your option) use any later version
-** of the GNU General Public License if such license has been
-** publicly approved by Trolltech ASA (or its successors, if any)
-** and the KDE Free TQt Foundation.
-**
-** Please review the following information to ensure GNU General
-** Public Licensing requirements will be met:
-** http://trolltech.com/products/qt/licenses/licensing/opensource/.
-** If you are unsure which license is appropriate for your use, please
-** review the following information:
-** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
-** or contact the sales department at sales@trolltech.com.
-**
-** This file may be used under the terms of the Q Public License as
-** defined by Trolltech ASA and appearing in the file LICENSE.TQPL
-** included in the packaging of this file. Licensees holding valid TQt
-** Commercial licenses may use this file in accordance with the TQt
-** Commercial License Agreement provided with the Software.
-**
-** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
-** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
-** herein.
-**
-*****************************************************************************/
-
-#include <private/tqsvgdevice_p.h>
-
-#ifndef TQT_NO_SVG
-
-#include "tqpainter.h"
-#include "tqpaintdevicemetrics.h"
-#include "tqfile.h"
-#include "tqmap.h"
-#include "tqregexp.h"
-#include "tqvaluelist.h"
-#include "tqtextstream.h"
-#include "tqimage.h"
-#include "tqpixmap.h"
-
-#include <math.h>
-
-const double deg2rad = 0.017453292519943295769; // pi/180
-const char piData[] = "version=\"1.0\" standalone=\"no\"";
-const char publicId[] = "-//W3C//DTD SVG 20001102//EN";
-const char systemId[] = "http://www.w3.org/TR/2000/CR-SVG-20001102/DTD/svg-20001102.dtd";
-
-struct TQM_EXPORT_SVG ImgElement {
- TQDomElement element;
- TQImage image;
- TQ_DUMMY_COMPARISON_OPERATOR( ImgElement )
-};
-
-struct TQM_EXPORT_SVG PixElement {
- TQDomElement element;
- TQPixmap pixmap;
- TQ_DUMMY_COMPARISON_OPERATOR( PixElement )
-};
-
-struct TQSvgDeviceState {
- int textx, texty; // current text position
- int textalign; // text tqalignment
- TQ_DUMMY_COMPARISON_OPERATOR( TQSvgDeviceState )
-};
-
-typedef TQValueList<ImgElement> ImageList;
-typedef TQValueList<PixElement> PixmapList;
-typedef TQValueList<TQSvgDeviceState> StateList;
-
-class TQSvgDevicePrivate {
-public:
- ImageList images;
- PixmapList pixmaps;
- StateList stack;
- int currentClip;
-
- uint justRestored : 1;
-
- TQMap<TQString, TQRegion> clipPathTable;
-};
-
-enum ElementType {
- InvalidElement = 0,
- AnchorElement,
- CircleElement,
- ClipElement,
- CommentElement,
- DescElement,
- EllipseElement,
- GroupElement,
- ImageElement,
- LineElement,
- PolylineElement,
- PolygonElement,
- PathElement,
- RectElement,
- SvgElement,
- TextElement,
- TitleElement,
- TSpanElement
-};
-
-typedef TQMap<TQString,ElementType> TQSvgTypeMap;
-static TQSvgTypeMap *qSvgTypeMap=0; // element types
-static TQMap<TQString,TQString> *qSvgColMap=0; // recognized color keyword names
-
-/*!
- \class TQSvgDevice qsvgdevice.h
- \brief The TQSvgDevice class provides a paint tqdevice for SVG vector graphics.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \ingroup xml-tools
- \module XML
- \internal
-
- SVG is an XML vector graphics format. This class supports the
- loading and saving of SVG files with load() and save(), and the
- rendering of an SVG onto a TQPainter using play(). Use toString()
- to put the SVG into a string.
-
- \sa TQPaintDevice TQPainter
-*/
-
-/*!
- Creates a TQSvgDevice object.
-*/
-
-TQSvgDevice::TQSvgDevice()
- : TQPaintDevice( TQInternal::ExternalDevice ),
- pt( 0 )
-{
- d = new TQSvgDevicePrivate;
- d->currentClip = 0;
- d->justRestored = FALSE;
-}
-
-/*!
- Destroys the TQSvgDevice object and frees the resources it used.
-*/
-
-TQSvgDevice::~TQSvgDevice()
-{
- delete qSvgTypeMap; qSvgTypeMap = 0; // static
- delete qSvgColMap; qSvgColMap = 0;
- delete d;
-}
-
-/*!
- Loads and parses a SVG from \a dev into the tqdevice. Returns TRUE
- on success (i.e. loaded and parsed without error); otherwise
- returns FALSE.
-*/
-
-bool TQSvgDevice::load( TQIODevice *dev )
-{
- return doc.setContent( dev );
-}
-
-/*!
- Renders (replays) the SVG on the \a painter and returns TRUE if
- successful (i.e. it is a valid SVG); otherwise returns FALSE.
-*/
-
-bool TQSvgDevice::play( TQPainter *painter )
-{
- if ( !painter ) {
-#if defined(TQT_CHECK_RANGE)
- TQ_ASSERT( painter );
-#endif
- return FALSE;
- }
- pt = painter;
- pt->setPen( TQt::NoPen ); // SVG default pen and brush
- pt->setBrush( TQt::black );
- if ( doc.isNull() ) {
- qWarning( "TQSvgDevice::play: No SVG data set." );
- return FALSE;
- }
-
- TQDomNode svg = doc.namedItem( "svg" );
- if ( svg.isNull() || !svg.isElement() ) {
- qWarning( "TQSvgDevice::play: Couldn't find any svg element." );
- return FALSE;
- }
-
- // force transform to be activated in case our sequences
- // are replayed later with a transformed painter
- painter->setWorldXForm( TRUE );
-
- TQDomNamedNodeMap attr = svg.attributes();
- int x = lenToInt( attr, "x" );
- int y = lenToInt( attr, "y" );
- brect.setX( x );
- brect.setY( y );
- TQString wstr = attr.contains( "width" )
- ? attr.namedItem( "width" ).nodeValue() : TQString( "100%" );
- TQString hstr = attr.contains( "height" )
- ? attr.namedItem( "height" ).nodeValue() : TQString( "100%" );
- double width = parseLen( wstr, 0, TRUE );
- double height = parseLen( hstr, 0, FALSE );
- // SVG doesn't respect x and y. But we want a proper bounding rect.
- brect.setWidth( int(width) - x );
- brect.setHeight( int(height) - y );
- painter->setClipRect( brect, TQPainter::CoordPainter );
-
- if ( attr.contains( "viewBox" ) ) {
- TQRegExp re( TQString::tqfromLatin1("\\s*(\\S+)\\s*,?\\s*(\\S+)\\s*,?"
- "\\s*(\\S+)\\s*,?\\s*(\\S+)\\s*") );
- if ( re.search( attr.namedItem( "viewBox" ).nodeValue() ) < 0 ) {
- qWarning( "TQSvgDevice::play: Invalid viewBox attribute.");
- return FALSE;
- } else {
- double x = re.cap( 1 ).toDouble();
- double y = re.cap( 2 ).toDouble();
- double w = re.cap( 3 ).toDouble();
- double h = re.cap( 4 ).toDouble();
- if ( w < 0 || h < 0 ) {
- qWarning( "TQSvgDevice::play: Invalid viewBox dimension.");
- return FALSE;
- } else if ( w == 0 || h == 0 ) {
- return TRUE;
- }
- painter->scale( width/w, height/h );
- painter->translate( -x, -y );
- }
- }
-
- const struct ElementTable {
- const char *name;
- ElementType type;
- } etab[] = {
- { "a", AnchorElement },
- { "#comment", CommentElement },
- { "circle", CircleElement },
- { "clipPath", ClipElement },
- { "desc", DescElement },
- { "ellipse", EllipseElement },
- { "g", GroupElement },
- { "image", ImageElement },
- { "line", LineElement },
- { "polyline", PolylineElement },
- { "polygon", PolygonElement },
- { "path", PathElement },
- { "rect", RectElement },
- { "svg", SvgElement },
- { "text", TextElement },
- { "tspan", TSpanElement },
- { "title", TitleElement },
- { 0, InvalidElement }
- };
- // initialize only once
- if ( !qSvgTypeMap ) {
- qSvgTypeMap = new TQSvgTypeMap;
- const ElementTable *t = etab;
- while ( t->name ) {
- qSvgTypeMap->insert( t->name, t->type );
- t++;
- }
- }
-
- // initial state
- TQSvgDeviceState st;
- st.textx = st.texty = 0;
- st.textalign = TQt::AlignLeft;
- d->stack.append(st);
- curr = &d->stack.last();
- // 'play' all elements recursively starting with 'svg' as root
- bool b = play( svg );
- d->stack.remove( d->stack.begin() );
- return b;
-}
-
-/*!
- Returns the SVG as a single string of XML.
-*/
-TQString TQSvgDevice::toString() const
-{
- if ( doc.isNull() )
- return TQString();
-
- return doc.toString();
-}
-
-/*!
- Saves the SVG to \a fileName.
-*/
-
-bool TQSvgDevice::save( const TQString &fileName )
-{
- // guess svg id from fileName
- TQString svgName = fileName.endsWith( ".svg" ) ?
- TQT_TQSTRING(fileName.left( fileName.length()-4 )) : fileName;
-
- // now we have the info about name and dimensions available
- TQDomElement root = doc.documentElement();
- root.setAttribute( "id", svgName );
- // the standard doesn't take respect x and y. But we want a
- // proper bounding rect. We make width and height bigger when
- // writing out and subtract x and y when reading in.
- root.setAttribute( "x", brect.x() );
- root.setAttribute( "y", brect.y() );
- root.setAttribute( "width", brect.width() + brect.x() );
- root.setAttribute( "height", brect.height() + brect.y() );
-
- // ... and know how to name any image files to be written out
- int icount = 0;
- ImageList::Iterator iit = d->images.begin();
- for ( ; iit != d->images.end(); ++iit ) {
- TQString href = TQString( "%1_%2.png" ).arg( svgName ).arg( icount );
- (*iit).image.save( href, "PNG" );
- (*iit).element.setAttribute( "xlink:href", href );
- icount++;
- }
- PixmapList::Iterator pit = d->pixmaps.begin();
- for ( ; pit != d->pixmaps.end(); ++pit ) {
- TQString href = TQString( "%1_%2.png" ).arg( svgName ).arg( icount );
- (*pit).pixmap.save( href, "PNG" );
- (*pit).element.setAttribute( "xlink:href", href );
- icount++;
- }
-
- TQFile f( fileName );
- if ( !f.open ( IO_WriteOnly ) )
- return FALSE;
- TQTextStream s( &f );
- s.setEncoding( TQTextStream::UnicodeUTF8 );
- s << doc;
-
- return TRUE;
-}
-
-/*!
- \overload
-
- \a dev is the tqdevice to use for saving.
-*/
-
-bool TQSvgDevice::save( TQIODevice *dev )
-{
-#if defined(CHECK_RANGE)
- if ( !d->images.isEmpty() || !d->pixmaps.isEmpty() )
- qWarning( "TQSvgDevice::save: skipping external images" );
-#endif
-
- TQTextStream s( dev );
- s.setEncoding( TQTextStream::UnicodeUTF8 );
- s << doc;
-
- return TRUE;
-}
-
-/*!
- \fn TQRect TQSvgDevice::boundingRect() const
-
- Returns the bounding rectangle of the SVG.
-*/
-
-/*!
- Sets the bounding rectangle of the SVG to rectangle \a r.
-*/
-
-void TQSvgDevice::setBoundingRect( const TQRect &r )
-{
- brect = r;
-}
-
-/*!
- Internal implementation of the virtual TQPaintDevice::metric()
- function.
-
- \warning Use the TQPaintDeviceMetrics class instead.
-
- A TQSvgDevice has the following hard coded values: dpi=72,
- numcolors=16777216 and depth=24. \a m is the metric to get.
-*/
-
-int TQSvgDevice::metric( int m ) const
-{
- int val;
- switch ( m ) {
- case TQPaintDeviceMetrics::PdmWidth:
- val = brect.width();
- break;
- case TQPaintDeviceMetrics::PdmHeight:
- val = brect.height();
- break;
- case TQPaintDeviceMetrics::PdmWidthMM:
- val = int(25.4/72.0*brect.width());
- break;
- case TQPaintDeviceMetrics::PdmHeightMM:
- val = int(25.4/72.0*brect.height());
- break;
- case TQPaintDeviceMetrics::PdmDpiX:
- val = 72;
- break;
- case TQPaintDeviceMetrics::PdmDpiY:
- val = 72;
- break;
- case TQPaintDeviceMetrics::PdmNumColors:
- val = 16777216;
- break;
- case TQPaintDeviceMetrics::PdmDepth:
- val = 24;
- break;
- default:
- val = 0;
-#if defined(TQT_CHECK_RANGE)
- qWarning( "TQSvgDevice::metric: Invalid metric command" );
-#endif
- }
- return val;
-}
-
-/*!
- \internal
-
- Records painter commands and stores them in the TQDomDocument doc.
-*/
-
-bool TQSvgDevice::cmd ( int c, TQPainter *painter, TQPDevCmdParam *p )
-{
- pt = painter;
-
- if ( c == PdcBegin ) {
- TQDomImplementation domImpl;
- TQDomDocumentType docType = domImpl.createDocumentType( "svg",
- publicId,
- systemId );
- doc = domImpl.createDocument( "http://www.w3.org/2000/svg",
- "svg", docType );
- doc.insertBefore( doc.createProcessingInstruction( "xml", piData ),
- doc.firstChild() );
- current = doc.documentElement();
- d->images.clear();
- d->pixmaps.clear();
- dirtyTransform = dirtyStyle = FALSE; // ###
- return TRUE;
- } else if ( c == PdcEnd ) {
- return TRUE;
- }
-
- TQDomElement e;
- TQString str;
- TQRect rect;
- TQPointArray a;
- int i, width, height, x, y;
- switch ( c ) {
- case PdcNOP:
- break;
- case PdcMoveTo:
- curPt = *p[0].point;
- break;
- case PdcLineTo:
- e = doc.createElement( "line" );
- e.setAttribute( "x1", curPt.x() );
- e.setAttribute( "y1", curPt.y() );
- e.setAttribute( "x2", p[0].point->x() );
- e.setAttribute( "y2", p[0].point->y() );
- break;
- case PdcDrawPoint:
- case PdcDrawLine:
- e = doc.createElement( "line" );
- e.setAttribute( "x1", p[0].point->x() );
- e.setAttribute( "y1", p[0].point->y() );
- i = ( c == PdcDrawLine ) ? 1 : 0;
- e.setAttribute( "x2", p[i].point->x() );
- e.setAttribute( "y2", p[i].point->y() );
- break;
- case PdcDrawRect:
- case PdcDrawRoundRect:
- e = doc.createElement( "rect" );
- x = p[0].rect->x();
- y = p[0].rect->y();
- width = p[0].rect->width();
- height = p[0].rect->height();
- if ( width < 0 ) {
- width = -width;
- x -= width - 1;
- }
- if ( height < 0 ) {
- height = -height;
- y -= height - 1;
- }
- e.setAttribute( "x", x );
- e.setAttribute( "y", y );
- e.setAttribute( "width", width );
- e.setAttribute( "height", height );
- if ( c == PdcDrawRoundRect ) {
- e.setAttribute( "rx", (p[1].ival*p[0].rect->width())/200 );
- e.setAttribute( "ry", (p[2].ival*p[0].rect->height())/200 );
- }
- break;
- case PdcDrawEllipse:
- rect = *p[0].rect;
- if ( rect.width() == rect.height() ) {
- e = doc.createElement( "circle" );
- double cx = rect.x() + (rect.width() / 2.0);
- double cy = rect.y() + (rect.height() / 2.0);
- e.setAttribute( "cx", cx );
- e.setAttribute( "cy", cy );
- e.setAttribute( "r", cx - rect.x() );
- } else {
- e = doc.createElement( "ellipse" );
- double cx = rect.x() + (rect.width() / 2.0);
- double cy = rect.y() + (rect.height() / 2.0);
- e.setAttribute( "cx", cx );
- e.setAttribute( "cy", cy );
- e.setAttribute( "rx", cx - rect.x() );
- e.setAttribute( "ry", cy - rect.y() );
- }
- break;
- case PdcDrawArc:
- case PdcDrawPie:
- case PdcDrawChord: {
- rect = *p[0].rect;
- double a = (double)p[1].ival / 16.0 * deg2rad;
- double al = (double)p[2].ival / 16.0 * deg2rad;
- double rx = rect.width() / 2.0;
- double ry = rect.height() / 2.0;
- double x0 = (double)rect.x() + rx;
- double y0 = (double)rect.y() + ry;
- double x1 = x0 + rx*cos(a);
- double y1 = y0 - ry*sin(a);
- double x2 = x0 + rx*cos(a+al);
- double y2 = y0 - ry*sin(a+al);
- int large = TQABS( al ) > ( 180.0 * deg2rad ) ? 1 : 0;
- int sweep = al < 0.0 ? 1 : 0;
- if ( c == PdcDrawPie )
- str = TQString( "M %1 %2 L %3 %4 " ).arg( x0 ).arg( y0 )
- .arg( x1 ).arg( y1 );
- else
- str = TQString( "M %1 %2 " ).arg( x1 ).arg( y1 );
- str += TQString( "A %1 %2 %3 %4 %5 %6 %7" )
- .arg( rx ).arg( ry ).arg( a/deg2rad ). arg( large ).arg( sweep )
- .arg( x2 ).arg( y2 );
- if ( c != PdcDrawArc )
- str += "z";
- e = doc.createElement( "path" );
- e.setAttribute( "d", str );
- }
- break;
- case PdcDrawLineSegments:
- {
- a = *p[0].ptarr;
- uint end = a.size() / 2;
- for (uint i = 0; i < end; i++) {
- e = doc.createElement( "line" );
- e.setAttribute( "x1", a[int(2*i)].x() );
- e.setAttribute( "y1", a[int(2*i)].y() );
- e.setAttribute( "x2", a[int(2*i+1)].x() );
- e.setAttribute( "y2", a[int(2*i+1)].y() );
- if ( i < end - 1 ) // The last one will be done at the end
- appendChild( e, c );
- }
- }
- break;
- case PdcDrawPolyline:
- case PdcDrawPolygon:
- {
- a = *p[0].ptarr;
- e = doc.createElement( ( c == PdcDrawPolyline ) ?
- "polyline" : "polygon" );
- for (uint i = 0; i < a.size(); i++) {
- TQString tmp;
- tmp.sprintf( "%d %d ", a[ (int)i ].x(), a[ (int)i ].y() );
- str += tmp;
- }
- e.setAttribute( "points", str.stripWhiteSpace() );
- }
- break;
-#ifndef TQT_NO_BEZIER
- case PdcDrawCubicBezier:
- a = *p[0].ptarr;
- e = doc.createElement( "path" );
- str.sprintf( "M %d %d C %d %d %d %d %d %d", a[0].x(), a[0].y(),
- a[1].x(), a[1].y(), a[2].x(), a[2].y(),
- a[3].x(), a[3].y() );
- e.setAttribute( "d", str );
- break;
-#endif
- case PdcDrawText2:
- e = doc.createElement( "text" );
- if ( p[0].point->x() )
- e.setAttribute( "x", p[0].point->x() );
- if ( p[0].point->y() )
- e.setAttribute( "y", p[0].point->y() );
- e.appendChild( doc.createTextNode( *p[1].str ) );
- break;
- case PdcDrawText2Formatted: {
- e = doc.createElement( "text" );
- const TQRect *r = p[0].rect;
- int tf = p[1].ival;
- int x, y;
- // horizontal text tqalignment
- if ( ( tf & TQt::AlignHCenter ) != 0 ) {
- x = r->x() + r->width() / 2;
- e.setAttribute( "text-anchor", "middle" );
- } else if ( ( tf & TQt::AlignRight ) != 0 ) {
- x = r->right();
- e.setAttribute( "text-anchor", "end" );
- } else {
- x = r->x();
- }
- // vertical text tqalignment
- if ( ( tf & TQt::AlignVCenter ) != 0 )
- y = r->y() + ( r->height() + painter->fontMetrics().ascent() ) / 2;
- else if ( ( tf & TQt::AlignBottom ) != 0 )
- y = r->bottom();
- else
- y = r->y() + painter->fontMetrics().ascent();
- if ( x )
- e.setAttribute( "x", x );
- if ( y )
- e.setAttribute( "y", y );
- e.appendChild( doc.createTextNode( *p[2].str ) );
- }
- break;
- case PdcDrawPixmap:
- case PdcDrawImage:
- e = doc.createElement( "image" );
- e.setAttribute( "x", p[0].rect->x() );
- e.setAttribute( "y", p[0].rect->y() );
- e.setAttribute( "width", p[0].rect->width() );
- e.setAttribute( "height", p[0].rect->height() );
- if ( c == PdcDrawImage ) {
- ImgElement ie;
- ie.element = e;
- ie.image = *p[1].image;
- d->images.append( ie );
- } else {
- PixElement pe;
- pe.element = e;
- pe.pixmap = *p[1].pixmap;
- d->pixmaps.append( pe );
- }
- // saving to disk and setting the xlink:href attribute will be
- // done later in save() once we now the svg document name.
- break;
- case PdcSave:
- e = doc.createElement( "g" );
- break;
- case PdcRestore:
- current = current.parentNode();
- dirtyTransform = !pt->tqworldMatrix().isIdentity();
- d->justRestored = TRUE;
- // ### reset dirty flags
- break;
- case PdcSetBkColor:
- case PdcSetBkMode:
- case PdcSetROP:
- case PdcSetBrushOrigin:
- case PdcSetFont:
- case PdcSetPen:
- case PdcSetBrush:
- dirtyStyle = TRUE;
- break;
- case PdcSetTabStops:
- // ###
- break;
- case PdcSetTabArray:
- // ###
- break;
- case PdcSetVXform:
- case PdcSetWindow:
- case PdcSetViewport:
- case PdcSetWXform:
- case PdcSetWMatrix:
- case PdcSaveWMatrix:
- case PdcRestoreWMatrix:
- dirtyTransform = TRUE;
- break;
- case PdcSetClip:
- // ###
- break;
- case PdcSetClipRegion:
- {
- // We skip the clip after restore, since restoring the clip is done automatically by
- // the viewer as part of the tree structure. It doesn't hurt to write the region
- // out, but it doubles the number of clipregions defined in the final svg.
- if (d->justRestored) {
- d->justRestored = FALSE;
- return TRUE;
- }
-
- TQMemArray<TQRect> rects = p[0].rgn->tqrects();
- if (rects.count() == 0)
- return TRUE;
- d->currentClip++;
- e = doc.createElement( "clipPath" );
- e.setAttribute( "id", TQString("clip%1").arg(d->currentClip) );
- for (int i=0; i<(int)rects.count(); ++i) {
- TQDomElement ce = doc.createElement("rect");
- ce.setAttribute( "x", rects.at(i).x() );
- ce.setAttribute( "y", rects.at(i).y() );
- ce.setAttribute( "width", rects.at(i).width() );
- ce.setAttribute( "height", rects.at(i).height() );
- e.appendChild(ce);
- }
- break;
- }
- default:
-#if defined(CHECK_RANGE)
- qWarning( "TQSVGDevice::cmd: Invalid command %d", c );
-#endif
- break;
- }
-
- appendChild( e, c );
-
- return TRUE;
-}
-
-/*!
- \internal
-
- Appends the child and applys any style and transformation.
-
-*/
-
-void TQSvgDevice::appendChild( TQDomElement &e, int c )
-{
- if ( !e.isNull() ) {
- current.appendChild( e );
- if ( c == PdcSave )
- current = e;
- // ### optimize application of attributes utilizing <g>
- if ( c == PdcSetClipRegion ) {
- TQDomElement ne;
- ne = doc.createElement( "g" );
- ne.setAttribute( "style", TQString("clip-path:url(#clip%1)").arg(d->currentClip) );
- current.appendChild( ne );
- current = ne;
- } else {
- if ( dirtyStyle ) // only reset when entering
- applyStyle( &e, c ); // or leaving a <g> tag
- if ( dirtyTransform && e.tagName() != "g" ) {
- // same as above but not for <g> tags
- applyTransform( &e );
- if ( c == PdcSave )
- dirtyTransform = FALSE;
- }
- }
- }
-}
-
-
-/*!
- \internal
-
- Push the current drawing attributes on a stack.
-
- \sa restoreAttributes()
-*/
-
-void TQSvgDevice::saveAttributes()
-{
- pt->save();
- // copy old state
- TQSvgDeviceState st( *curr );
- d->stack.append( st );
- curr = &d->stack.last();
-}
-
-/*!
- \internal
-
- Pop the current drawing attributes off the stack.
-
- \sa saveAttributes()
-*/
-
-void TQSvgDevice::restoreAttributes()
-{
- pt->restore();
- TQ_ASSERT( d->stack.count() > 1 );
- d->stack.remove( d->stack.fromLast() );
- curr = &d->stack.last();
-}
-
-/*!
- \internal
-
- Evaluate \a node, drawing on \a p. Allows recursive calls.
-*/
-
-bool TQSvgDevice::play( const TQDomNode &node )
-{
- saveAttributes();
-
- ElementType t = (*qSvgTypeMap)[ node.nodeName() ];
-
- if ( t == LineElement && pt->pen().style() == TQt::NoPen ) {
- TQPen p = pt->pen();
- p.tqsetStyle( TQt::SolidLine );
- pt->setPen( p );
- }
- TQDomNamedNodeMap attr = node.attributes();
- if ( attr.contains( "style" ) )
- setStyle( attr.namedItem( "style" ).nodeValue() );
- // ### might have to exclude more elements from transform
- if ( t != SvgElement && attr.contains( "transform" ) )
- setTransform( attr.namedItem( "transform" ).nodeValue() );
- uint i = attr.length();
- if ( i > 0 ) {
- TQPen pen = pt->pen();
- TQFont font = pt->font();
- while ( i-- ) {
- TQDomNode n = attr.item( i );
- TQString a = n.nodeName();
- TQString val = n.nodeValue().lower().stripWhiteSpace();
- setStyleProperty( a, val, &pen, &font, &curr->textalign );
- }
- pt->setPen( pen );
- pt->setFont( font );
- }
-
- int x1, y1, x2, y2, rx, ry, w, h;
- double cx1, cy1, crx, cry;
- switch ( t ) {
- case CommentElement:
- // ignore
- break;
- case RectElement:
- rx = ry = 0;
- x1 = lenToInt( attr, "x" );
- y1 = lenToInt( attr, "y" );
- w = lenToInt( attr, "width" );
- h = lenToInt( attr, "height" );
- if ( w == 0 || h == 0 ) // prevent div by zero below
- break;
- x2 = (int)attr.contains( "rx" ); // tiny abuse of x2 and y2
- y2 = (int)attr.contains( "ry" );
- if ( x2 )
- rx = lenToInt( attr, "rx" );
- if ( y2 )
- ry = lenToInt( attr, "ry" );
- if ( x2 && !y2 )
- ry = rx;
- else if ( !x2 && y2 )
- rx = ry;
- rx = int(200.0*double(rx)/double(w));
- ry = int(200.0*double(ry)/double(h));
- pt->drawRoundRect( x1, y1, w, h, rx, ry );
- break;
- case CircleElement:
- cx1 = lenToDouble( attr, "cx" ) + 0.5;
- cy1 = lenToDouble( attr, "cy" ) + 0.5;
- crx = lenToDouble( attr, "r" );
- pt->drawEllipse( (int)(cx1-crx), (int)(cy1-crx), (int)(2*crx), (int)(2*crx) );
- break;
- case EllipseElement:
- cx1 = lenToDouble( attr, "cx" ) + 0.5;
- cy1 = lenToDouble( attr, "cy" ) + 0.5;
- crx = lenToDouble( attr, "rx" );
- cry = lenToDouble( attr, "ry" );
- pt->drawEllipse( (int)(cx1-crx), (int)(cy1-cry), (int)(2*crx), (int)(2*cry) );
- break;
- case LineElement:
- {
- x1 = lenToInt( attr, "x1" );
- x2 = lenToInt( attr, "x2" );
- y1 = lenToInt( attr, "y1" );
- y2 = lenToInt( attr, "y2" );
- TQPen p = pt->pen();
- w = p.width();
- p.setWidth( (unsigned int)(w * (TQABS(pt->tqworldMatrix().m11()) + TQABS(pt->tqworldMatrix().m22())) / 2) );
- pt->setPen( p );
- pt->drawLine( x1, y1, x2, y2 );
- p.setWidth( w );
- pt->setPen( p );
- }
- break;
- case PolylineElement:
- case PolygonElement:
- {
- TQString pts = attr.namedItem( "points" ).nodeValue();
- pts = pts.simplifyWhiteSpace();
- TQStringList sl = TQStringList::split( TQRegExp( TQString::tqfromLatin1("[ ,]") ), pts );
- TQPointArray ptarr( (uint)sl.count() / 2);
- for ( int i = 0; i < (int)sl.count() / 2; i++ ) {
- double dx = sl[2*i].toDouble();
- double dy = sl[2*i+1].toDouble();
- ptarr.setPoint( i, int(dx), int(dy) );
- }
- if ( t == PolylineElement ) {
- if ( pt->brush().style() != TQt::NoBrush ) {
- TQPen pn = pt->pen();
- pt->setPen( TQt::NoPen );
- pt->drawPolygon( ptarr );
- pt->setPen( pn );
- }
- pt->drawPolyline( ptarr ); // ### closes when filled. bug ?
- } else {
- pt->drawPolygon( ptarr );
- }
- }
- break;
- case SvgElement:
- case GroupElement:
- case AnchorElement:
- {
- TQDomNode child = node.firstChild();
- while ( !child.isNull() ) {
- play( child );
- child = child.nextSibling();
- }
- }
- break;
- case PathElement:
- drawPath( attr.namedItem( "d" ).nodeValue() );
- break;
- case TSpanElement:
- case TextElement:
- {
- if ( attr.contains( "x" ) )
- curr->textx = lenToInt( attr, "x" );
- if ( attr.contains( "y" ) )
- curr->texty = lenToInt( attr, "y" );
- if ( t == TSpanElement ) {
- curr->textx += lenToInt( attr, "dx" );
- curr->texty += lenToInt( attr, "dy" );
- }
- // backup old colors
- TQPen pn = pt->pen();
- TQColor pcolor = pn.color();
- TQColor bcolor = pt->brush().color();
- TQDomNode c = node.firstChild();
- while ( !c.isNull() ) {
- if ( c.isText() ) {
- // we have pen and brush reversed for text drawing
- pn.setColor( bcolor );
- pt->setPen( pn );
- TQString text = c.toText().nodeValue();
- text = text.simplifyWhiteSpace(); // ### 'preserve'
- w = pt->fontMetrics().width( text );
- if ( curr->textalign == TQt::AlignHCenter )
- curr->textx -= w / 2;
- else if ( curr->textalign == TQt::AlignRight )
- curr->textx -= w;
- pt->drawText( curr->textx, curr->texty, text );
- // restore pen
- pn.setColor( pcolor );
- pt->setPen( pn );
- curr->textx += w;
- } else if ( c.isElement() &&
- c.toElement().tagName() == "tspan" ) {
- play( c );
-
- }
- c = c.nextSibling();
- }
- if ( t == TSpanElement ) {
- // move current text position in parent text element
- StateList::Iterator it = --d->stack.fromLast();
- (*it).textx = curr->textx;
- (*it).texty = curr->texty;
- }
- }
- break;
- case ImageElement:
- {
- x1 = lenToInt( attr, "x" );
- y1 = lenToInt( attr, "y" );
- w = lenToInt( attr, "width" );
- h = lenToInt( attr, "height" );
- TQString href = attr.namedItem( "xlink:href" ).nodeValue();
- // ### catch references to embedded .svg files
- TQPixmap pix;
- if ( !pix.load( href ) ) {
- qWarning( "TQSvgDevice::play: Couldn't load image %s", href.latin1() );
- break;
- }
- pt->drawPixmap( TQRect( x1, y1, w, h ), pix );
- }
- break;
- case DescElement:
- case TitleElement:
- // ignored for now
- break;
- case ClipElement:
- {
- TQDomNode child = node.firstChild();
- TQRegion region;
- while (!child.isNull()) {
- TQDomNamedNodeMap tqchildAttr = child.attributes();
- if ( child.nodeName() == "rect" ) {
- TQRect r;
- r.setX(lenToInt( tqchildAttr, "x" ));
- r.setY(lenToInt( tqchildAttr, "y" ));
- r.setWidth(lenToInt( tqchildAttr, "width" ));
- r.setHeight(lenToInt( tqchildAttr, "height" ));
- region |= r;
- } else if ( child.nodeName() == "ellipse" ) {
- TQRect r;
- int x = lenToInt( tqchildAttr, "cx" );
- int y = lenToInt( tqchildAttr, "cy" );
- int width = lenToInt( tqchildAttr, "rx" );
- int height = lenToInt( tqchildAttr, "ry" );
- r.setX( x - width );
- r.setY( y - height );
- r.setWidth( width * 2 );
- r.setHeight( height * 2 );
- TQRegion rgn( r, TQRegion::Ellipse );
- region |= rgn;
- }
- child = child.nextSibling();
- }
- // Store the region in a named map so that it can be used when the
- // group node is entered.
- TQString idString = attr.namedItem("id").nodeValue();
- if (!idString.isEmpty())
- d->clipPathTable[idString] = region;
- break;
- }
- case InvalidElement:
- qWarning( "TQSvgDevice::play: unknown element type %s",
- node.nodeName().latin1() );
- break;
- };
-
- restoreAttributes();
-
- return TRUE;
-}
-
-/*!
- \internal
-
- Parses a CSS2-compatible color specification. Either a keyword or
- a numerical RGB specification like #ff00ff or rgb(255,0,50%).
-*/
-
-TQColor TQSvgDevice::parseColor( const TQString &col )
-{
- static const struct ColorTable {
- const char *name;
- const char *rgb;
- } coltab[] = {
- { "black", "#000000" },
- { "silver", "#c0c0c0" },
- { "gray", "#808080" },
- { "white", "#ffffff" },
- { "maroon", "#800000" },
- { "red", "#ff0000" },
- { "purple", "#800080" },
- { "fuchsia", "#ff00ff" },
- { "green", "#008000" },
- { "lime", "#00ff00" },
- { "olive", "#808000" },
- { "yellow", "#ffff00" },
- { "navy", "#000080" },
- { "blue", "#0000ff" },
- { "teal", "#008080" },
- { "aqua", "#00ffff" },
- // ### the latest spec has more
- { 0, 0 }
- };
-
- // initialize color map on first use
- if ( !qSvgColMap ) {
- qSvgColMap = new TQMap<TQString, TQString>;
- const struct ColorTable *t = coltab;
- while ( t->name ) {
- qSvgColMap->insert( t->name, t->rgb );
- t++;
- }
- }
-
- // a keyword ?
- if ( qSvgColMap->contains ( col ) )
- return TQColor( (*qSvgColMap)[ col ] );
- // in rgb(r,g,b) form ?
- TQString c = col;
- c.replace( TQRegExp( TQString::tqfromLatin1("\\s*") ), "" );
- TQRegExp reg( TQString::tqfromLatin1("^rgb\\((\\d+)(%?),(\\d+)(%?),(\\d+)(%?)\\)$") );
- if ( reg.search( c ) >= 0 ) {
- int comp[3];
- for ( int i = 0; i < 3; i++ ) {
- comp[ i ] = reg.cap( 2*i+1 ).toInt();
- if ( !reg.cap( 2*i+2 ).isEmpty() ) // percentage ?
- comp[ i ] = int((double(255*comp[ i ])/100.0));
- }
- return TQColor( comp[ 0 ], comp[ 1 ], comp[ 2 ] );
- }
-
- // check for predefined TQt color objects, #RRGGBB and #RGB
- return TQColor( col );
-}
-
-/*!
- \internal
-
- Parse a <length> datatype consisting of a number followed by an
- optional unit specifier. Can be used for type <coordinate> as
- well. For relative units the value of \a horiz will determine
- whether the horizontal or vertical dimension will be used.
-*/
-
-double TQSvgDevice::parseLen( const TQString &str, bool *ok, bool horiz ) const
-{
- TQRegExp reg( TQString::tqfromLatin1("([+-]?\\d*\\.*\\d*[Ee]?[+-]?\\d*)(em|ex|px|%|pt|pc|cm|mm|in|)$") );
- if ( reg.search( str ) == -1 ) {
- qWarning( "TQSvgDevice::parseLen: couldn't parse %s ", str.latin1() );
- if ( ok )
- *ok = FALSE;
- return 0.0;
- }
-
- double dbl = reg.cap( 1 ).toDouble();
- TQString u = reg.cap( 2 );
- if ( !u.isEmpty() && u != "px" ) {
- TQPaintDeviceMetrics m( pt->tqdevice() );
- if ( u == "em" ) {
- TQFontInfo fi( pt->font() );
- dbl *= fi.pixelSize();
- } else if ( u == "ex" ) {
- TQFontInfo fi( pt->font() );
- dbl *= 0.5 * fi.pixelSize();
- } else if ( u == "%" )
- dbl *= (horiz ? pt->window().width() : pt->window().height())/100.0;
- else if ( u == "cm" )
- dbl *= m.logicalDpiX() / 2.54;
- else if ( u == "mm" )
- dbl *= m.logicalDpiX() / 25.4;
- else if ( u == "in" )
- dbl *= m.logicalDpiX();
- else if ( u == "pt" )
- dbl *= m.logicalDpiX() / 72.0;
- else if ( u == "pc" )
- dbl *= m.logicalDpiX() / 6.0;
- else
- qWarning( "TQSvgDevice::parseLen: Unknown unit %s", u.latin1() );
- }
- if ( ok )
- *ok = TRUE;
- return dbl;
-}
-
-/*!
- \internal
-
- Returns the length specified in attribute \a attr in \a map. If
- the specified attribute doesn't exist or can't be parsed \a def is
- returned.
-*/
-
-int TQSvgDevice::lenToInt( const TQDomNamedNodeMap &map, const TQString &attr,
- int def ) const
-{
- if ( map.contains( attr ) ) {
- bool ok;
- double dbl = parseLen( map.namedItem( attr ).nodeValue(), &ok );
- if ( ok )
- return tqRound( dbl );
- }
- return def;
-}
-
-double TQSvgDevice::lenToDouble( const TQDomNamedNodeMap &map, const TQString &attr,
- int def ) const
-{
- if ( map.contains( attr ) ) {
- bool ok;
- double d = parseLen( map.namedItem( attr ).nodeValue(), &ok );
- if ( ok )
- return d;
- }
- return def;
-}
-
-void TQSvgDevice::setStyleProperty( const TQString &prop, const TQString &val,
- TQPen *pen, TQFont *font, int *talign )
-{
- if ( prop == "stroke" ) {
- if ( val == "none" ) {
- pen->tqsetStyle( TQt::NoPen );
- } else {
- pen->setColor( parseColor( val ));
- if ( pen->style() == TQt::NoPen )
- pen->tqsetStyle( TQt::SolidLine );
- if ( pen->width() == 0 )
- pen->setWidth( 1 );
- }
- } else if ( prop == "stroke-width" ) {
- double w = parseLen( val );
- if ( w > 0.0001 )
- pen->setWidth( int(w) );
- else
- pen->tqsetStyle( TQt::NoPen );
- } else if ( prop == "stroke-linecap" ) {
- if ( val == "butt" )
- pen->tqsetCapStyle( TQt::FlatCap );
- else if ( val == "round" )
- pen->tqsetCapStyle( TQt::RoundCap );
- else if ( val == "square" )
- pen->tqsetCapStyle( TQt::SquareCap );
- } else if ( prop == "stroke-linejoin" ) {
- if ( val == "miter" )
- pen->tqsetJoinStyle( TQt::MiterJoin );
- else if ( val == "round" )
- pen->tqsetJoinStyle( TQt::RoundJoin );
- else if ( val == "bevel" )
- pen->tqsetJoinStyle( TQt::BevelJoin );
- } else if ( prop == "stroke-dasharray" ) {
- if ( val == "18,6" )
- pen->tqsetStyle( TQt::DashLine );
- else if ( val == "3" )
- pen->tqsetStyle( TQt::DotLine );
- else if ( val == "9,6,3,6" )
- pen->tqsetStyle( TQt::DashDotLine );
- else if ( val == "9,3,3" )
- pen->tqsetStyle( TQt::DashDotDotLine );
- else
- pen->tqsetStyle( TQt::DotLine );
- } else if ( prop == "fill" ) {
- if ( val == "none" )
- pt->setBrush( TQt::NoBrush );
- else
- pt->setBrush( parseColor( val ) );
- } else if ( prop == "font-size" ) {
- font->setPointSizeFloat( float(parseLen( val )) );
- } else if ( prop == "font-family" ) {
- font->setFamily( val );
- } else if ( prop == "font-style" ) {
- if ( val == "normal" )
- font->setItalic( FALSE );
- else if ( val == "italic" )
- font->setItalic( TRUE );
- else
- qWarning( "TQSvgDevice::setStyleProperty: unhandled "
- "font-style: %s", val.latin1() );
- } else if ( prop == "font-weight" ) {
- int w = font->weight();
- // no exact equivalents so we have to "round" a little bit
- if ( val == "100" || val == "200" )
- w = TQFont::Light;
- if ( val == "300" || val == "400" || val == "normal" )
- w = TQFont::Normal;
- else if ( val == "500" || val == "600" )
- w = TQFont::DemiBold;
- else if ( val == "700" || val == "bold" || val == "800" )
- w = TQFont::Bold;
- else if ( val == "900" )
- w = TQFont::Black;
- font->setWeight( w );
- } else if ( prop == "text-anchor" ) {
- if ( val == "middle" )
- *talign = TQt::AlignHCenter;
- else if ( val == "end" )
- *talign = TQt::AlignRight;
- else
- *talign = TQt::AlignLeft;
- } else if ( prop == "clip-path" ) {
- if (val.startsWith("url(#")) {
- TQString clipName = val.mid(5, val.length() - 6);
- if (!clipName.isEmpty()) {
- TQRegion clipRegion = d->clipPathTable[clipName];
- if (!clipRegion.isEmpty())
- pt->setClipRegion(pt->clipRegion() & clipRegion, TQPainter::CoordPainter);
- }
- }
- }
-}
-
-void TQSvgDevice::setStyle( const TQString &s )
-{
- TQStringList rules = TQStringList::split( TQChar(';'), s );
-
- TQPen pen = pt->pen();
- TQFont font = pt->font();
-
- TQStringList::ConstIterator it = rules.begin();
- for ( ; it != rules.end(); it++ ) {
- int col = (*it).find( ':' );
- if ( col > 0 ) {
- TQString prop = TQT_TQSTRING((*it).left( col )).simplifyWhiteSpace();
- TQString val = (*it).right( (*it).length() - col - 1 );
- val = val.lower().stripWhiteSpace();
- setStyleProperty( prop, val, &pen, &font, &curr->textalign );
- }
- }
-
- pt->setPen( pen );
- pt->setFont( font );
-}
-
-void TQSvgDevice::setTransform( const TQString &tr )
-{
- TQString t = tr.simplifyWhiteSpace();
-
- TQRegExp reg( TQString::tqfromLatin1("\\s*([\\w]+)\\s*\\(([^\\(]*)\\)") );
- int index = 0;
- while ( (index = reg.search(t, index)) >= 0 ) {
- TQString command = reg.cap( 1 );
- TQString params = reg.cap( 2 );
- TQStringList plist = TQStringList::split( TQRegExp(TQString::tqfromLatin1("[,\\s]")), params );
- if ( command == "translate" ) {
- double tx = 0, ty = 0;
- tx = plist[0].toDouble();
- if ( plist.count() >= 2 )
- ty = plist[1].toDouble();
- pt->translate( tx, ty );
- } else if ( command == "rotate" ) {
- pt->rotate( plist[0].toDouble() );
- } else if ( command == "scale" ) {
- double sx, sy;
- sx = sy = plist[0].toDouble();
- if ( plist.count() >= 2 )
- sy = plist[1].toDouble();
- pt->scale( sx, sy );
- } else if ( command == "matrix" && plist.count() >= 6 ) {
- double m[ 6 ];
- for (int i = 0; i < 6; i++)
- m[ i ] = plist[ i ].toDouble();
- TQWMatrix wm( m[ 0 ], m[ 1 ], m[ 2 ],
- m[ 3 ], m[ 4 ], m[ 5 ] );
- pt->setWorldMatrix( wm, TRUE );
- } else if ( command == "skewX" ) {
- pt->shear( 0.0, tan( plist[0].toDouble() * deg2rad ) );
- } else if ( command == "skewY" ) {
- pt->shear( tan( plist[0].toDouble() * deg2rad ), 0.0 );
- }
-
- // move on to next command
- index += reg.matchedLength();
- }
-}
-
-void TQSvgDevice::drawPath( const TQString &data )
-{
- double x0 = 0, y0 = 0; // starting point
- double x = 0, y = 0; // current point
- double controlX = 0, controlY = 0; // last control point for curves
- TQPointArray path( 500 ); // resulting path
- TQValueList<int> subIndex; // start indices for subpaths
- TQPointArray quad( 4 ), bezier; // for curve calculations
- int pcount = 0; // current point array index
- uint idx = 0; // current data position
- int mode = 0, lastMode = 0; // parser state
- bool relative = FALSE; // e.g. 'h' vs. 'H'
- TQString commands( "MZLHVCSTQTA" ); // recognized commands
- int cmdArgs[] = { 2, 0, 2, 1, 1, 6, 4, 4, 2, 7 }; // no of arguments
- TQRegExp reg( TQString::tqfromLatin1("\\s*,?\\s*([+-]?\\d*\\.?\\d*)") ); // floating point
-
- subIndex.append( 0 );
- // detect next command
- while ( idx < data.length() ) {
- TQChar ch = data[ (int)idx++ ];
- if ( ch.isSpace() )
- continue;
- TQChar chUp = ch.upper();
- int cmd = commands.find( chUp );
- if ( cmd >= 0 ) {
- // switch to new command mode
- mode = cmd;
- relative = ( ch != chUp ); // e.g. 'm' instead of 'M'
- } else {
- if ( mode && !ch.isLetter() ) {
- cmd = mode; // continue in previous mode
- idx--;
- } else {
- qWarning( "TQSvgDevice::drawPath: Unknown command" );
- return;
- }
- }
-
- // read in the required number of arguments
- const int maxArgs = 7;
- double arg[ maxArgs ];
- int numArgs = cmdArgs[ cmd ];
- for ( int i = 0; i < numArgs; i++ ) {
- int pos = reg.search( data, idx );
- if ( pos == -1 ) {
- qWarning( "TQSvgDevice::drawPath: Error parsing arguments" );
- return;
- }
- arg[ i ] = reg.cap( 1 ).toDouble();
- idx = pos + reg.matchedLength();
- };
-
- // process command
- double offsetX = relative ? x : 0; // correction offsets
- double offsetY = relative ? y : 0; // for relative commands
- switch ( mode ) {
- case 0: // 'M' move to
- if ( x != x0 || y != y0 )
- path.setPoint( pcount++, int(x0), int(y0) );
- x = x0 = arg[ 0 ] + offsetX;
- y = y0 = arg[ 1 ] + offsetY;
- subIndex.append( pcount );
- path.setPoint( pcount++, int(x0), int(y0) );
- mode = 2; // -> 'L'
- break;
- case 1: // 'Z' close path
- path.setPoint( pcount++, int(x0), int(y0) );
- x = x0;
- y = y0;
- mode = 0;
- break;
- case 2: // 'L' line to
- x = arg[ 0 ] + offsetX;
- y = arg[ 1 ] + offsetY;
- path.setPoint( pcount++, int(x), int(y) );
- break;
- case 3: // 'H' horizontal line
- x = arg[ 0 ] + offsetX;
- path.setPoint( pcount++, int(x), int(y) );
- break;
- case 4: // 'V' vertical line
- y = arg[ 0 ] + offsetY;
- path.setPoint( pcount++, int(x), int(y) );
- break;
-#ifndef TQT_NO_BEZIER
- case 5: // 'C' cubic bezier curveto
- case 6: // 'S' smooth shorthand
- case 7: // 'Q' quadratic bezier curves
- case 8: { // 'T' smooth shorthand
- quad.setPoint( 0, int(x), int(y) );
- // if possible, reflect last control point if smooth shorthand
- if ( mode == 6 || mode == 8 ) { // smooth 'S' and 'T'
- bool cont = mode == lastMode ||
- (mode == 6 && lastMode == 5) || // 'S' and 'C'
- (mode == 8 && lastMode == 7); // 'T' and 'Q'
- x = cont ? 2*x-controlX : x;
- y = cont ? 2*y-controlY : y;
- quad.setPoint( 1, int(x), int(y) );
- quad.setPoint( 2, int(x), int(y) );
- }
- for ( int j = 0; j < numArgs/2; j++ ) {
- x = arg[ 2*j ] + offsetX;
- y = arg[ 2*j+1 ] + offsetY;
- quad.setPoint( j+4-numArgs/2, int(x), int(y) );
- }
- // remember last control point for next shorthand
- controlX = quad[ 2 ].x();
- controlY = quad[ 2 ].y();
- // transform quadratic into cubic Bezier
- if ( mode == 7 || mode == 8 ) { // cubic 'Q' and 'T'
- int x31 = quad[0].x()+int(2.0*(quad[2].x()-quad[0].x())/3.0);
- int y31 = quad[0].y()+int(2.0*(quad[2].y()-quad[0].y())/3.0);
- int x32 = quad[2].x()+int(2.0*(quad[3].x()-quad[2].x())/3.0);
- int y32 = quad[2].y()+int(2.0*(quad[3].y()-quad[2].y())/3.0);
- quad.setPoint( 1, x31, y31 );
- quad.setPoint( 2, x32, y32 );
- }
- // calculate points on curve
- bezier = quad.cubicBezier();
- // reserve more space if needed
- if ( bezier.size() > path.size() - pcount )
- path.resize( path.size() - pcount + bezier.size() );
- // copy
- for ( int k = 0; k < (int)bezier.size(); k ++ )
- path.setPoint( pcount++, bezier[ k ] );
- break;
- }
-#endif // TQT_NO_BEZIER
- case 9: // 'A' elliptical arc curve
- // ### just a straight line
- x = arg[ 5 ] + offsetX;
- y = arg[ 6 ] + offsetY;
- path.setPoint( pcount++, int(x), int(y) );
- break;
- };
- lastMode = mode;
- // array almost full ? expand for next loop
- if ( pcount >= (int)path.size() - 4 )
- path.resize( 2 * path.size() );
- }
-
- subIndex.append( pcount ); // dummy marking the end
- if ( pt->brush().style() != TQt::NoBrush ) {
- // fill the area without stroke first
- if ( x != x0 || y != y0 )
- path.setPoint( pcount++, int(x0), int(y0) );
- TQPen pen = pt->pen();
- pt->setPen( TQt::NoPen );
- pt->tqdrawPolygon( path, FALSE, 0, pcount );
- pt->setPen( pen );
- }
- // draw each subpath stroke seperately
- TQValueListConstIterator<int> it = subIndex.begin();
- int start = 0;
- while ( it != subIndex.fromLast() ) {
- int next = *++it;
- // ### always joins ends if first and last point coincide.
- // ### 'Z' can't have the desired effect
- pt->tqdrawPolyline( path, start, next-start );
- start = next;
- }
-}
-
-void TQSvgDevice::applyStyle( TQDomElement *e, int c ) const
-{
- // ### do not write every attribute each time
- TQColor pcol = pt->pen().color();
- TQColor bcol = pt->brush().color();
- TQString s;
- if ( c == PdcDrawText2 || c == PdcDrawText2Formatted ) {
- // TQPainter has a reversed understanding of pen/stroke vs.
- // brush/fill for text
- s += TQString( "fill:rgb(%1,%2,%3);" )
- .arg( pcol.red() ).arg( pcol.green() ).arg( pcol.blue() );
- s += TQString( "stroke-width:0;" );
- TQFont f = pt->font();
- TQFontInfo fi( f );
- s += TQString( "font-size:%1;" ).arg( fi.pointSize() );
- s += TQString( "font-style:%1;" )
- .arg( f.italic() ? "italic" : "normal" );
- // not a very scientific distribution
- TQString fw;
- if ( f.weight() <= TQFont::Light )
- fw = "100";
- else if ( f.weight() <= TQFont::Normal )
- fw = "400";
- else if ( f.weight() <= TQFont::DemiBold )
- fw = "600";
- else if ( f.weight() <= TQFont::Bold )
- fw = "700";
- else if ( f.weight() <= TQFont::Black )
- fw = "800";
- else
- fw = "900";
- s += TQString( "font-weight:%1;" ).arg( fw );
- s += TQString( "font-family:%1;" ).arg( f.family() );
- } else {
- s += TQString( "stroke:rgb(%1,%2,%3);" )
- .arg( pcol.red() ).arg( pcol.green() ).arg( pcol.blue() );
- double pw = pt->pen().width();
- if ( pw == 0 && pt->pen().style() != TQt::NoPen )
- pw = 0.9;
- if ( c == PdcDrawLine )
- pw /= (TQABS(pt->tqworldMatrix().m11()) + TQABS(pt->tqworldMatrix().m22())) / 2.0;
- s += TQString( "stroke-width:%1;" ).arg( pw );
- if ( pt->pen().style() == TQt::DashLine )
- s+= TQString( "stroke-dasharray:18,6;" );
- else if ( pt->pen().style() == TQt::DotLine )
- s+= TQString( "stroke-dasharray:3;" );
- else if ( pt->pen().style() == TQt::DashDotLine )
- s+= TQString( "stroke-dasharray:9,6,3,6;" );
- else if ( pt->pen().style() == TQt::DashDotDotLine )
- s+= TQString( "stroke-dasharray:9,3,3;" );
- if ( pt->brush().style() == TQt::NoBrush || c == PdcDrawPolyline ||
- c == PdcDrawCubicBezier )
- s += "fill:none;"; // TQt polylines use no brush, neither do Beziers
- else
- s += TQString( "fill:rgb(%1,%2,%3);" )
- .arg( bcol.red() ).arg( bcol.green() ).arg( bcol.blue() );
- }
- e->setAttribute( "style", s );
-}
-
-void TQSvgDevice::applyTransform( TQDomElement *e ) const
-{
- TQWMatrix m = pt->tqworldMatrix();
-
- TQString s;
- bool rot = ( m.m11() != 1.0 || m.m12() != 0.0 ||
- m.m21() != 0.0 || m.m22() != 1.0 );
- if ( !rot && ( m.dx() != 0.0 || m.dy() != 0.0 ) )
- s = TQString( "translate(%1,%2)" ).arg( m.dx() ).arg( m.dy() );
- else if ( rot ) {
- if ( m.m12() == 0.0 && m.m21() == 0.0 &&
- m.dx() == 0.0 && m.dy() == 0.0 )
- s = TQString( "scale(%1,%2)" ).arg( m.m11() ).arg( m.m22() );
- else
- s = TQString( "matrix(%1,%2,%3,%4,%5,%6)" )
- .arg( m.m11() ).arg( m.m12() )
- .arg( m.m21() ).arg( m.m22() )
- .arg( m.dx() ).arg( m.dy() );
- }
- else
- return;
-
- e->setAttribute( "transform", s );
-}
-
-#endif // TQT_NO_SVG
diff --git a/tqtinterface/qt4/src/xml/tqsvgdevice_p.h b/tqtinterface/qt4/src/xml/tqsvgdevice_p.h
deleted file mode 100644
index 5a4b838..0000000
--- a/tqtinterface/qt4/src/xml/tqsvgdevice_p.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/****************************************************************************
-**
-** Definition of the TQSvgDevice class
-**
-** Created : 001024
-**
-** Copyright (C) 2000-2008 Trolltech ASA. All rights reserved.
-**
-** This file is part of the xml module of the TQt GUI Toolkit.
-**
-** This file may be used under the terms of the GNU General
-** Public License versions 2.0 or 3.0 as published by the Free
-** Software Foundation and appearing in the files LICENSE.GPL2
-** and LICENSE.GPL3 included in the packaging of this file.
-** Alternatively you may (at your option) use any later version
-** of the GNU General Public License if such license has been
-** publicly approved by Trolltech ASA (or its successors, if any)
-** and the KDE Free TQt Foundation.
-**
-** Please review the following information to ensure GNU General
-** Public Licensing requirements will be met:
-** http://trolltech.com/products/qt/licenses/licensing/opensource/.
-** If you are unsure which license is appropriate for your use, please
-** review the following information:
-** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
-** or contact the sales department at sales@trolltech.com.
-**
-** This file may be used under the terms of the Q Public License as
-** defined by Trolltech ASA and appearing in the file LICENSE.TQPL
-** included in the packaging of this file. Licensees holding valid TQt
-** Commercial licenses may use this file in accordance with the TQt
-** Commercial License Agreement provided with the Software.
-**
-** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
-** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
-** herein.
-**
-*****************************************************************************/
-
-#ifndef TQSVGDEVICE_P_H
-#define TQSVGDEVICE_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the TQt API. It exists for the convenience
-// of the TQPicture class. This header file may change from
-// version to version without notice, or even be removed.
-//
-// We mean it.
-//
-//
-
-#ifndef TQT_H
-#include "tqpaintdevice.h"
-#include "tqrect.h"
-#include "tqdom.h"
-#endif // TQT_H
-
-#if !defined(TQT_MODULE_XML) || defined( TQT_LICENSE_PROFESSIONAL ) || defined( TQT_INTERNAL_XML )
-#define TQM_EXPORT_SVG
-#else
-#define TQM_EXPORT_SVG TQ_EXPORT
-#endif
-
-#ifndef TQT_NO_SVG
-
-class TQPainter;
-class TQDomNode;
-class TQDomNamedNodeMap;
-struct TQSvgDeviceState;
-class TQSvgDevicePrivate;
-
-class TQM_EXPORT_SVG TQSvgDevice : public TQPaintDevice
-{
-public:
- TQSvgDevice();
- ~TQSvgDevice();
-
- bool play( TQPainter *p );
-
- TQString toString() const;
-
- bool load( TQIODevice *dev );
- bool save( TQIODevice *dev );
- bool save( const TQString &fileName );
-
- TQRect boundingRect() const;
- void setBoundingRect( const TQRect &r );
-
-protected:
- virtual bool cmd ( int, TQPainter*, TQPDevCmdParam* );
- virtual int metric( int ) const;
-
-private:
- // reading
- bool play( const TQDomNode &node );
- void saveAttributes();
- void restoreAttributes();
- TQColor parseColor( const TQString &col );
- double parseLen( const TQString &str, bool *ok=0, bool horiz=TRUE ) const;
- int lenToInt( const TQDomNamedNodeMap &map, const TQString &attr,
- int def=0 ) const;
- double lenToDouble( const TQDomNamedNodeMap &map, const TQString &attr,
- int def=0 ) const;
- void setStyleProperty( const TQString &prop, const TQString &val,
- TQPen *pen, TQFont *font, int *talign );
- void setStyle( const TQString &s );
- void setTransform( const TQString &tr );
- void drawPath( const TQString &data );
-
- // writing
- void appendChild( TQDomElement &e, int c );
- void applyStyle( TQDomElement *e, int c ) const;
- void applyTransform( TQDomElement *e ) const;
-
- // reading
- TQRect brect; // bounding rectangle
- TQDomDocument doc; // document tree
- TQDomNode current;
- TQPoint curPt;
- TQSvgDeviceState *curr;
- TQPainter *pt; // used by play() et al
-
- // writing
- bool dirtyTransform, dirtyStyle;
-
- TQSvgDevicePrivate *d;
-};
-
-inline TQRect TQSvgDevice::boundingRect() const
-{
- return brect;
-}
-
-#endif // TQT_NO_SVG
-
-#endif // TQSVGDEVICE_P_H
diff --git a/tqtinterface/qt4/src/xml/tqxml.cpp b/tqtinterface/qt4/src/xml/tqxml.cpp
deleted file mode 100644
index 8f4a4e3..0000000
--- a/tqtinterface/qt4/src/xml/tqxml.cpp
+++ /dev/null
@@ -1,7635 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQXmlSimpleReader and related classes.
-**
-** Created : 000518
-**
-** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
-**
-** This file is part of the xml module of the TQt GUI Toolkit.
-**
-** This file may be used under the terms of the GNU General
-** Public License versions 2.0 or 3.0 as published by the Free
-** Software Foundation and appearing in the files LICENSE.GPL2
-** and LICENSE.GPL3 included in the packaging of this file.
-** Alternatively you may (at your option) use any later version
-** of the GNU General Public License if such license has been
-** publicly approved by Trolltech ASA (or its successors, if any)
-** and the KDE Free TQt Foundation.
-**
-** Please review the following information to ensure GNU General
-** Public Licensing requirements will be met:
-** http://trolltech.com/products/qt/licenses/licensing/opensource/.
-** If you are unsure which license is appropriate for your use, please
-** review the following information:
-** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
-** or contact the sales department at sales@trolltech.com.
-**
-** This file may be used under the terms of the Q Public License as
-** defined by Trolltech ASA and appearing in the file LICENSE.TQPL
-** included in the packaging of this file. Licensees holding valid TQt
-** Commercial licenses may use this file in accordance with the TQt
-** Commercial License Agreement provided with the Software.
-**
-** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
-** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
-** herein.
-**
-**********************************************************************/
-
-#include "tqxml.h"
-#include "tqtextcodec.h"
-#include "tqbuffer.h"
-#include "tqregexp.h"
-#include "tqptrstack.h"
-#include "tqmap.h"
-#include "tqvaluestack.h"
-
-// needed for TQT_TRANSLATE_NOOP:
-#include "tqobject.h"
-
-#ifndef TQT_NO_XML
-
-//#define TQT_TQXML_DEBUG
-
-// Error strings for the XML reader
-#define XMLERR_OK TQT_TRANSLATE_NOOP( "TQXml", "no error occurred" )
-#define XMLERR_ERRORBYCONSUMER TQT_TRANSLATE_NOOP( "TQXml", "error triggered by consumer" )
-#define XMLERR_UNEXPECTEDEOF TQT_TRANSLATE_NOOP( "TQXml", "unexpected end of file" )
-#define XMLERR_MORETHANONEDOCTYPE TQT_TRANSLATE_NOOP( "TQXml", "more than one document type definition" )
-#define XMLERR_ERRORPARSINGELEMENT TQT_TRANSLATE_NOOP( "TQXml", "error occurred while parsing element" )
-#define XMLERR_TAGMISMATCH TQT_TRANSLATE_NOOP( "TQXml", "tag mismatch" )
-#define XMLERR_ERRORPARSINGCONTENT TQT_TRANSLATE_NOOP( "TQXml", "error occurred while parsing content" )
-#define XMLERR_UNEXPECTEDCHARACTER TQT_TRANSLATE_NOOP( "TQXml", "unexpected character" )
-#define XMLERR_INVALIDNAMEFORPI TQT_TRANSLATE_NOOP( "TQXml", "invalid name for processing instruction" )
-#define XMLERR_VERSIONEXPECTED TQT_TRANSLATE_NOOP( "TQXml", "version expected while reading the XML declaration" )
-#define XMLERR_WRONGVALUEFORSDECL TQT_TRANSLATE_NOOP( "TQXml", "wrong value for standalone declaration" )
-#define XMLERR_EDECLORSDDECLEXPECTED TQT_TRANSLATE_NOOP( "TQXml", "encoding declaration or standalone declaration expected while reading the XML declaration" )
-#define XMLERR_SDDECLEXPECTED TQT_TRANSLATE_NOOP( "TQXml", "standalone declaration expected while reading the XML declaration" )
-#define XMLERR_ERRORPARSINGDOCTYPE TQT_TRANSLATE_NOOP( "TQXml", "error occurred while parsing document type definition" )
-#define XMLERR_LETTEREXPECTED TQT_TRANSLATE_NOOP( "TQXml", "letter is expected" )
-#define XMLERR_ERRORPARSINGCOMMENT TQT_TRANSLATE_NOOP( "TQXml", "error occurred while parsing comment" )
-#define XMLERR_ERRORPARSINGREFERENCE TQT_TRANSLATE_NOOP( "TQXml", "error occurred while parsing reference" )
-#define XMLERR_INTERNALGENERALENTITYINDTD TQT_TRANSLATE_NOOP( "TQXml", "internal general entity reference not allowed in DTD" )
-#define XMLERR_EXTERNALGENERALENTITYINAV TQT_TRANSLATE_NOOP( "TQXml", "external parsed general entity reference not allowed in attribute value" )
-#define XMLERR_EXTERNALGENERALENTITYINDTD TQT_TRANSLATE_NOOP( "TQXml", "external parsed general entity reference not allowed in DTD" )
-#define XMLERR_UNPARSEDENTITYREFERENCE TQT_TRANSLATE_NOOP( "TQXml", "unparsed entity reference in wrong context" )
-#define XMLERR_RECURSIVEENTITIES TQT_TRANSLATE_NOOP( "TQXml", "recursive entities" )
-#define XMLERR_ERRORINTEXTDECL TQT_TRANSLATE_NOOP( "TQXml", "error in the text declaration of an external entity" )
-
-// the constants for the lookup table
-static const signed char cltWS = 0; // white space
-static const signed char cltPer = 1; // %
-static const signed char cltAmp = 2; // &
-static const signed char cltGt = 3; // >
-static const signed char cltLt = 4; // <
-static const signed char cltSlash = 5; // /
-static const signed char cltQm = 6; // ?
-static const signed char cltEm = 7; // !
-static const signed char cltDash = 8; // -
-static const signed char cltCB = 9; // ]
-static const signed char cltOB = 10; // [
-static const signed char cltEq = 11; // =
-static const signed char cltDq = 12; // "
-static const signed char cltSq = 13; // '
-static const signed char cltUnknown = 14;
-
-// character lookup table
-static const signed char charLookupTable[256]={
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x00 - 0x07
- cltUnknown, // 0x08
- cltWS, // 0x09 \t
- cltWS, // 0x0A \n
- cltUnknown, // 0x0B
- cltUnknown, // 0x0C
- cltWS, // 0x0D \r
- cltUnknown, // 0x0E
- cltUnknown, // 0x0F
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x17 - 0x16
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x18 - 0x1F
- cltWS, // 0x20 Space
- cltEm, // 0x21 !
- cltDq, // 0x22 "
- cltUnknown, // 0x23
- cltUnknown, // 0x24
- cltPer, // 0x25 %
- cltAmp, // 0x26 &
- cltSq, // 0x27 '
- cltUnknown, // 0x28
- cltUnknown, // 0x29
- cltUnknown, // 0x2A
- cltUnknown, // 0x2B
- cltUnknown, // 0x2C
- cltDash, // 0x2D -
- cltUnknown, // 0x2E
- cltSlash, // 0x2F /
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x30 - 0x37
- cltUnknown, // 0x38
- cltUnknown, // 0x39
- cltUnknown, // 0x3A
- cltUnknown, // 0x3B
- cltLt, // 0x3C <
- cltEq, // 0x3D =
- cltGt, // 0x3E >
- cltQm, // 0x3F ?
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x40 - 0x47
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x48 - 0x4F
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x50 - 0x57
- cltUnknown, // 0x58
- cltUnknown, // 0x59
- cltUnknown, // 0x5A
- cltOB, // 0x5B [
- cltUnknown, // 0x5C
- cltCB, // 0x5D ]
- cltUnknown, // 0x5E
- cltUnknown, // 0x5F
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x60 - 0x67
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x68 - 0x6F
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x70 - 0x77
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x78 - 0x7F
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x80 - 0x87
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x88 - 0x8F
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x90 - 0x97
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x98 - 0x9F
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xA0 - 0xA7
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xA8 - 0xAF
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xB0 - 0xB7
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xB8 - 0xBF
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xC0 - 0xC7
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xC8 - 0xCF
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xD0 - 0xD7
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xD8 - 0xDF
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xE0 - 0xE7
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xE8 - 0xEF
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xF0 - 0xF7
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown // 0xF8 - 0xFF
-};
-
-
-//
-// local helper functions
-//
-
-/*
- This function strips the TextDecl [77] ("<?xml ...?>") from the string \a
- str. The stripped version is stored in \a str. If this function finds an
- invalid TextDecl, it returns FALSE, otherwise TRUE.
-
- This function is used for external entities since those can include an
- TextDecl that must be stripped before inserting the entity.
-*/
-static bool stripTextDecl( TQString& str )
-{
- TQString textDeclStart( "<?xml" );
- if ( str.startsWith( textDeclStart ) ) {
- TQRegExp textDecl(TQString::tqfromLatin1(
- "^<\\?xml\\s+"
- "(version\\s*=\\s*((['\"])[-a-zA-Z0-9_.:]+\\3))?"
- "\\s*"
- "(encoding\\s*=\\s*((['\"])[A-Za-z][-a-zA-Z0-9_.]*\\6))?"
- "\\s*\\?>"
- ));
- TQString strTmp = str.replace( textDecl, "" );
- if ( strTmp.length() != str.length() )
- return FALSE; // external entity has wrong TextDecl
- str = strTmp;
- }
- return TRUE;
-}
-
-
-class TQXmlAttributesPrivate
-{
-};
-class TQXmlInputSourcePrivate
-{
-};
-class TQXmlParseExceptionPrivate
-{
-};
-class TQXmlLocatorPrivate
-{
-};
-class TQXmlDefaultHandlerPrivate
-{
-};
-
-/*!
- \class TQXmlParseException tqxml.h
- \reentrant
- \brief The TQXmlParseException class is used to report errors with
- the TQXmlErrorHandler interface.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- The XML subsystem constructs an instance of this class when it
- detects an error. You can retrieve the place where the error
- occurred using systemId(), publicId(), lineNumber() and
- columnNumber(), along with the error message().
-
- \sa TQXmlErrorHandler TQXmlReader
-*/
-
-/*!
- \fn TQXmlParseException::TQXmlParseException( const TQString& name, int c, int l, const TQString& p, const TQString& s )
-
- Constructs a parse exception with the error string \a name for
- column \a c and line \a l for the public identifier \a p and the
- system identifier \a s.
-*/
-
-/*!
- Returns the error message.
-*/
-TQString TQXmlParseException::message() const
-{
- return msg;
-}
-/*!
- Returns the column number where the error occurred.
-*/
-int TQXmlParseException::columnNumber() const
-{
- return column;
-}
-/*!
- Returns the line number where the error occurred.
-*/
-int TQXmlParseException::lineNumber() const
-{
- return line;
-}
-/*!
- Returns the public identifier where the error occurred.
-*/
-TQString TQXmlParseException::publicId() const
-{
- return pub;
-}
-/*!
- Returns the system identifier where the error occurred.
-*/
-TQString TQXmlParseException::systemId() const
-{
- return sys;
-}
-
-
-/*!
- \class TQXmlLocator tqxml.h
- \reentrant
- \brief The TQXmlLocator class provides the XML handler classes with
- information about the parsing position within a file.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- The reader reports a TQXmlLocator to the content handler before it
- starts to parse the document. This is done with the
- TQXmlContentHandler::setDocumentLocator() function. The handler
- classes can now use this locator to get the position (lineNumber()
- and columnNumber()) that the reader has reached.
-*/
-
-/*!
- Constructor.
-*/
-TQXmlLocator::TQXmlLocator()
-{
-}
-
-/*!
- Destructor.
-*/
-TQXmlLocator::~TQXmlLocator()
-{
-}
-
-/*!
- \fn int TQXmlLocator::columnNumber()
-
- Returns the column number (starting at 1) or -1 if there is no
- column number available.
-*/
-
-/*!
- \fn int TQXmlLocator::lineNumber()
-
- Returns the line number (starting at 1) or -1 if there is no line
- number available.
-*/
-
-class TQXmlSimpleReaderLocator : public TQXmlLocator
-{
-public:
- TQXmlSimpleReaderLocator( TQXmlSimpleReader* parent )
- {
- reader = parent;
- }
- ~TQXmlSimpleReaderLocator()
- {
- }
-
- int columnNumber()
- {
- return ( reader->columnNr == -1 ? -1 : reader->columnNr + 1 );
- }
- int lineNumber()
- {
- return ( reader->lineNr == -1 ? -1 : reader->lineNr + 1 );
- }
-// TQString getPublicId()
-// TQString getSystemId()
-
-private:
- TQXmlSimpleReader *reader;
-};
-
-/*********************************************
- *
- * TQXmlNamespaceSupport
- *
- *********************************************/
-
-typedef TQMap<TQString, TQString> NamespaceMap;
-
-class TQXmlNamespaceSupportPrivate
-{
-public:
- TQXmlNamespaceSupportPrivate()
- {
- ns.insert( "xml", "http://www.w3.org/XML/1998/namespace" ); // the XML namespace
- }
-
- ~TQXmlNamespaceSupportPrivate()
- {
- }
-
- TQValueStack<NamespaceMap> nsStack;
- NamespaceMap ns;
-};
-
-/*!
- \class TQXmlNamespaceSupport tqxml.h
- \reentrant
- \brief The TQXmlNamespaceSupport class is a helper class for XML
- readers which want to include namespace support.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- You can set the prefix for the current namespace with setPrefix(),
- and get the list of current prefixes (or those for a given URI)
- with prefixes(). The namespace URI is available from uri(). Use
- pushContext() to start a new namespace context, and popContext()
- to return to the previous namespace context. Use splitName() or
- processName() to split a name into its prefix and local name.
-
- See also the \link xml.html#sax2Namespaces namespace description\endlink.
-*/
-
-/*!
- Constructs a TQXmlNamespaceSupport.
-*/
-TQXmlNamespaceSupport::TQXmlNamespaceSupport()
-{
- d = new TQXmlNamespaceSupportPrivate;
-}
-
-/*!
- Destroys a TQXmlNamespaceSupport.
-*/
-TQXmlNamespaceSupport::~TQXmlNamespaceSupport()
-{
- delete d;
-}
-
-/*!
- This function declares a prefix \a pre in the current namespace
- context to be the namespace URI \a uri. The prefix remains in
- force until this context is popped, unless it is shadowed in a
- descendant context.
-
- Note that there is an asymmetry in this library. prefix() does not
- return the default "" prefix, even if you have declared one; to
- check for a default prefix, you must look it up explicitly using
- uri(). This asymmetry exists to make it easier to look up prefixes
- for attribute names, where the default prefix is not allowed.
-*/
-void TQXmlNamespaceSupport::setPrefix( const TQString& pre, const TQString& uri )
-{
- if( pre.isNull() ) {
- d->ns.insert( "", uri );
- } else {
- d->ns.insert( pre, uri );
- }
-}
-
-/*!
- Returns one of the prefixes mapped to the namespace URI \a uri.
-
- If more than one prefix is currently mapped to the same URI, this
- function makes an arbitrary selection; if you want all of the
- prefixes, use prefixes() instead.
-
- Note: to check for a default prefix, use the uri() function with
- an argument of "".
-*/
-TQString TQXmlNamespaceSupport::prefix( const TQString& uri ) const
-{
- NamespaceMap::const_iterator itc, it = d->ns.constBegin();
- while ( (itc=it) != d->ns.constEnd() ) {
- ++it;
- if ( itc.data() == uri && !itc.key().isEmpty() )
- return itc.key();
- }
- return "";
-}
-
-/*!
- Looks up the prefix \a prefix in the current context and returns
- the currently-mapped namespace URI. Use the empty string ("") for
- the default namespace.
-*/
-TQString TQXmlNamespaceSupport::uri( const TQString& prefix ) const
-{
- return d->ns[prefix];
-}
-
-/*!
- Splits the name \a qname at the ':' and returns the prefix in \a
- prefix and the local name in \a localname.
-
- \sa processName()
-*/
-void TQXmlNamespaceSupport::splitName( const TQString& qname,
- TQString& prefix, TQString& localname ) const
-{
- int pos = qname.find(':');
- if (pos == -1)
- pos = qname.length();
-
- prefix = qname.left( pos );
- localname = qname.mid( pos+1 );
-}
-
-/*!
- Processes a raw XML 1.0 name in the current context by removing
- the prefix and looking it up among the prefixes currently
- declared.
-
- \a qname is the raw XML 1.0 name to be processed. \a isAttribute
- is TRUE if the name is an attribute name.
-
- This function stores the namespace URI in \a nsuri (which will be
- set to TQString::null if the raw name has an undeclared prefix),
- and stores the local name (without prefix) in \a localname (which
- will be set to TQString::null if no namespace is in use).
-
- Note that attribute names are processed differently than element
- names: an unprefixed element name gets the default namespace (if
- any), while an unprefixed element name does not.
-*/
-void TQXmlNamespaceSupport::processName( const TQString& qname,
- bool isAttribute,
- TQString& nsuri, TQString& localname ) const
-{
- int len = qname.length();
- const TQChar *data = qname.tqunicode();
- for (int pos = 0; pos < len; ++pos) {
- if (data[pos].tqunicode() == ':') {
- nsuri = uri(qname.left(pos));
- localname = qname.mid(pos + 1);
- return;
- }
- }
- // there was no ':'
- nsuri = TQString::null;
- // attributes don't take default namespace
- if (!isAttribute && !d->ns.isEmpty()) {
- /*
- We want to access d->ns.value(""), but as an optimization
- we use the fact that "" compares less than any other
- string, so it's either first in the map or not there.
- */
- NamespaceMap::const_iterator first = d->ns.constBegin();
- if (first.key().isEmpty())
- nsuri = first.data(); // get default namespace
- }
- localname = qname;
-}
-
-/*!
- Returns a list of all the prefixes currently declared.
-
- If there is a default prefix, this function does not return it in
- the list; check for the default prefix using uri() with an
- argument of "".
-
- Note that if you want to iterate over the list, you should iterate
- over a copy, e.g.
- \code
- TQStringList list = myXmlNamespaceSupport.prefixes();
- TQStringList::iterator it = list.begin();
- while ( it != list.end() ) {
- myProcessing( *it );
- ++it;
- }
- \endcode
-*/
-TQStringList TQXmlNamespaceSupport::prefixes() const
-{
- TQStringList list;
-
- NamespaceMap::const_iterator itc, it = d->ns.constBegin();
- while ( (itc=it) != d->ns.constEnd() ) {
- ++it;
- if ( !itc.key().isEmpty() )
- list.append( itc.key() );
- }
- return list;
-}
-
-/*!
- \overload
-
- Returns a list of all prefixes currently declared for the
- namespace URI \a uri.
-
- The "xml:" prefix is included. If you only want one prefix that is
- mapped to the namespace URI, and you don't care which one you get,
- use the prefix() function instead.
-
- Note: the empty (default) prefix is never included in this list;
- to check for the presence of a default namespace, use uri() with
- an argument of "".
-
- Note that if you want to iterate over the list, you should iterate
- over a copy, e.g.
- \code
- TQStringList list = myXmlNamespaceSupport.prefixes( "" );
- TQStringList::Iterator it = list.begin();
- while( it != list.end() ) {
- myProcessing( *it );
- ++it;
- }
- \endcode
-*/
-TQStringList TQXmlNamespaceSupport::prefixes( const TQString& uri ) const
-{
- TQStringList list;
-
- NamespaceMap::const_iterator itc, it = d->ns.constBegin();
- while ( (itc=it) != d->ns.constEnd() ) {
- ++it;
- if ( itc.data() == uri && !itc.key().isEmpty() )
- list.append( itc.key() );
- }
- return list;
-}
-
-/*!
- Starts a new namespace context.
-
- Normally, you should push a new context at the beginning of each
- XML element: the new context automatically inherits the
- declarations of its parent context, and it also keeps track of
- which declarations were made within this context.
-
- \sa popContext()
-*/
-void TQXmlNamespaceSupport::pushContext()
-{
- d->nsStack.push(d->ns);
-}
-
-/*!
- Reverts to the previous namespace context.
-
- Normally, you should pop the context at the end of each XML
- element. After popping the context, all namespace prefix mappings
- that were previously in force are restored.
-
- \sa pushContext()
-*/
-void TQXmlNamespaceSupport::popContext()
-{
- d->ns.clear();
- if( !d->nsStack.isEmpty() )
- d->ns = d->nsStack.pop();
-}
-
-/*!
- Resets this namespace support object ready for reuse.
-*/
-void TQXmlNamespaceSupport::reset()
-{
- delete d;
- d = new TQXmlNamespaceSupportPrivate;
-}
-
-
-
-/*********************************************
- *
- * TQXmlAttributes
- *
- *********************************************/
-
-/*!
- \class TQXmlAttributes tqxml.h
- \reentrant
- \brief The TQXmlAttributes class provides XML attributes.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- If attributes are reported by TQXmlContentHandler::startElement()
- this class is used to pass the attribute values.
-
- Use index() to locate the position of an attribute in the list,
- count() to retrieve the number of attributes, and clear() to
- remove the attributes. New attributes can be added with append().
- Use type() to get an attribute's type and value() to get its
- value. The attribute's name is available from localName() or
- qName(), and its namespace URI from uri().
-
-*/
-
-/*!
- \fn TQXmlAttributes::TQXmlAttributes()
-
- Constructs an empty attribute list.
-*/
-
-/*!
- \fn TQXmlAttributes::~TQXmlAttributes()
-
- Destroys the attributes object.
-*/
-
-/*!
- Looks up the index of an attribute by the qualified name \a qName.
-
- Returns the index of the attribute or -1 if it wasn't found.
-
- See also the \link xml.html#sax2Namespaces namespace description\endlink.
-*/
-int TQXmlAttributes::index( const TQString& qName ) const
-{
- return qnameList.findIndex( qName );
-}
-
-/*!
- \overload
-
- Looks up the index of an attribute by a namespace name.
-
- \a uri specifies the namespace URI, or an empty string if the name
- has no namespace URI. \a localPart specifies the attribute's local
- name.
-
- Returns the index of the attribute, or -1 if it wasn't found.
-
- See also the \link xml.html#sax2Namespaces namespace description\endlink.
-*/
-int TQXmlAttributes::index( const TQString& uri, const TQString& localPart ) const
-{
- TQString uriTmp;
- if ( uri.isEmpty() )
- uriTmp = TQString::null;
- else
- uriTmp = uri;
- uint count = (uint)uriList.count(); // ### size_t/int cast
- for ( uint i=0; i<count; i++ ) {
- if ( uriList[i] == uriTmp && localnameList[i] == localPart )
- return i;
- }
- return -1;
-}
-
-/*!
- Returns the number of attributes in the list.
-
- \sa count()
-*/
-int TQXmlAttributes::length() const
-{
- return (int)valueList.count();
-}
-
-/*!
- \fn int TQXmlAttributes::count() const
-
- Returns the number of attributes in the list. This function is
- equivalent to length().
-*/
-
-/*!
- Looks up an attribute's local name for the attribute at position
- \a index. If no namespace processing is done, the local name is
- TQString::null.
-
- See also the \link xml.html#sax2Namespaces namespace description\endlink.
-*/
-TQString TQXmlAttributes::localName( int index ) const
-{
- return localnameList[index];
-}
-
-/*!
- Looks up an attribute's XML 1.0 qualified name for the attribute
- at position \a index.
-
- See also the \link xml.html#sax2Namespaces namespace description\endlink.
-*/
-TQString TQXmlAttributes::qName( int index ) const
-{
- return qnameList[index];
-}
-
-/*!
- Looks up an attribute's namespace URI for the attribute at
- position \a index. If no namespace processing is done or if the
- attribute has no namespace, the namespace URI is TQString::null.
-
- See also the \link xml.html#sax2Namespaces namespace description\endlink.
-*/
-TQString TQXmlAttributes::uri( int index ) const
-{
- return uriList[index];
-}
-
-/*!
- Looks up an attribute's type for the attribute at position \a
- index.
-
- Currently only "CDATA" is returned.
-*/
-TQString TQXmlAttributes::type( int ) const
-{
- return "CDATA";
-}
-
-/*!
- \overload
-
- Looks up an attribute's type for the qualified name \a qName.
-
- Currently only "CDATA" is returned.
-*/
-TQString TQXmlAttributes::type( const TQString& ) const
-{
- return "CDATA";
-}
-
-/*!
- \overload
-
- Looks up an attribute's type by namespace name.
-
- \a uri specifies the namespace URI and \a localName specifies the
- local name. If the name has no namespace URI, use an empty string
- for \a uri.
-
- Currently only "CDATA" is returned.
-*/
-TQString TQXmlAttributes::type( const TQString&, const TQString& ) const
-{
- return "CDATA";
-}
-
-/*!
- Looks up an attribute's value for the attribute at position \a
- index.
-*/
-TQString TQXmlAttributes::value( int index ) const
-{
- return valueList[index];
-}
-
-/*!
- \overload
-
- Looks up an attribute's value for the qualified name \a qName.
-
- See also the \link xml.html#sax2Namespaces namespace description\endlink.
-*/
-TQString TQXmlAttributes::value( const TQString& qName ) const
-{
- int i = index( qName );
- if ( i == -1 )
- return TQString::null;
- return valueList[ i ];
-}
-
-/*!
- \overload
-
- Looks up an attribute's value by namespace name.
-
- \a uri specifies the namespace URI, or an empty string if the name
- has no namespace URI. \a localName specifies the attribute's local
- name.
-
- See also the \link xml.html#sax2Namespaces namespace description\endlink.
-*/
-TQString TQXmlAttributes::value( const TQString& uri, const TQString& localName ) const
-{
- int i = index( uri, localName );
- if ( i == -1 )
- return TQString::null;
- return valueList[ i ];
-}
-
-/*!
- Clears the list of attributes.
-
- \sa append()
-*/
-void TQXmlAttributes::clear()
-{
- qnameList.clear();
- uriList.clear();
- localnameList.clear();
- valueList.clear();
-}
-
-/*!
- Appends a new attribute entry to the list of attributes. The
- qualified name of the attribute is \a qName, the namespace URI is
- \a uri and the local name is \a localPart. The value of the
- attribute is \a value.
-
- \sa qName() uri() localName() value()
-*/
-void TQXmlAttributes::append( const TQString &qName, const TQString &uri, const TQString &localPart, const TQString &value )
-{
- qnameList.append( qName );
- uriList.append( uri );
- localnameList.append( localPart);
- valueList.append( value );
-}
-
-
-/*********************************************
- *
- * TQXmlInputSource
- *
- *********************************************/
-
-/*!
- \class TQXmlInputSource tqxml.h
- \reentrant
- \brief The TQXmlInputSource class provides the input data for the
- TQXmlReader subclasses.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- All subclasses of TQXmlReader read the input XML document from this
- class.
-
- This class recognizes the encoding of the data by reading the
- encoding declaration in the XML file if it finds one, and reading
- the data using the corresponding encoding. If it does not find an
- encoding declaration, then it assumes that the data is either in
- UTF-8 or UTF-16, depending on whether it can find a byte-order
- mark.
-
- There are two ways to populate the input source with data: you can
- construct it with a TQIODevice* so that the input source reads the
- data from that tqdevice. Or you can set the data explicitly with one
- of the setData() functions.
-
- Usually you either construct a TQXmlInputSource that works on a
- TQIODevice* or you construct an empty TQXmlInputSource and set the
- data with setData(). There are only rare occasions where you would
- want to mix both methods.
-
- The TQXmlReader subclasses use the next() function to read the
- input character by character. If you want to start from the
- beginning again, use reset().
-
- The functions data() and fetchData() are useful if you want to do
- something with the data other than parsing, e.g. displaying the
- raw XML file. The benefit of using the TQXmlInputClass in such
- cases is that it tries to use the correct encoding.
-
- \sa TQXmlReader TQXmlSimpleReader
-*/
-
-// the following two are guaranteed not to be a character
-const TQChar TQXmlInputSource::EndOfData = TQChar((ushort)0xfffe);
-const TQChar TQXmlInputSource::EndOfDocument = TQChar((ushort)0xffff);
-
-/*
- Common part of the constructors.
-*/
-void TQXmlInputSource::init()
-{
- inputDevice = 0;
- inputStream = 0;
-
- setData( TQString::null );
- encMapper = 0;
-}
-
-/*!
- Constructs an input source which contains no data.
-
- \sa setData()
-*/
-TQXmlInputSource::TQXmlInputSource()
-{
- init();
-}
-
-/*!
- Constructs an input source and gets the data from tqdevice \a dev.
- If \a dev is not open, it is opened in read-only mode. If \a dev
- is 0 or it is not possible to read from the tqdevice, the input
- source will contain no data.
-
- \sa setData() fetchData() TQIODevice
-*/
-TQXmlInputSource::TQXmlInputSource( TQIODevice *dev )
-{
- init();
- inputDevice = dev;
- fetchData();
-}
-
-/*! \obsolete
- Constructs an input source and gets the data from the text stream \a stream.
-*/
-TQXmlInputSource::TQXmlInputSource( TQTextStream& stream )
-{
- init();
- inputStream = &stream;
- fetchData();
-}
-
-/*! \obsolete
- Constructs an input source and gets the data from the file \a file. If the
- file cannot be read the input source is empty.
-*/
-TQXmlInputSource::TQXmlInputSource( TQFile& file )
-{
- init();
- inputDevice = TQT_TQIODEVICE(&file);
- fetchData();
-}
-
-/*!
- Destructor.
-*/
-TQXmlInputSource::~TQXmlInputSource()
-{
- delete encMapper;
-}
-
-/*!
- Returns the next character of the input source. If this function
- reaches the end of available data, it returns
- TQXmlInputSource::EndOfData. If you call next() after that, it
- tries to fetch more data by calling fetchData(). If the
- fetchData() call results in new data, this function returns the
- first character of that data; otherwise it returns
- TQXmlInputSource::EndOfDocument.
-
- \sa reset() fetchData() TQXmlSimpleReader::parse() TQXmlSimpleReader::parseContinue()
-*/
-TQChar TQXmlInputSource::next()
-{
- if ( pos >= length ) {
- if ( nextReturnedEndOfData ) {
- nextReturnedEndOfData = FALSE;
- fetchData();
- if ( pos >= length ) {
- return EndOfDocument;
- }
- return next();
- }
- nextReturnedEndOfData = TRUE;
- return EndOfData;
- }
- return tqunicode[pos++];
-}
-
-/*!
- This function sets the position used by next() to the beginning of
- the data returned by data(). This is useful if you want to use the
- input source for more than one parse.
-
- \sa next()
-*/
-void TQXmlInputSource::reset()
-{
- nextReturnedEndOfData = FALSE;
- pos = 0;
-}
-
-/*!
- Returns the data the input source contains or TQString::null if the
- input source does not contain any data.
-
- \sa setData() TQXmlInputSource() fetchData()
-*/
-TQString TQXmlInputSource::data()
-{
- return str;
-}
-
-/*!
- Sets the data of the input source to \a dat.
-
- If the input source already contains data, this function deletes
- that data first.
-
- \sa data()
-*/
-void TQXmlInputSource::setData( const TQString& dat )
-{
- str = dat;
- tqunicode = str.tqunicode();
- pos = 0;
- length = str.length();
- nextReturnedEndOfData = FALSE;
-}
-
-/*!
- \overload
-
- The data \a dat is passed through the correct text-codec, before
- it is set.
-*/
-void TQXmlInputSource::setData( const TQByteArray& dat )
-{
- setData( fromRawData( dat ) );
-}
-
-/*!
- This function reads more data from the tqdevice that was set during
- construction. If the input source already contained data, this
- function deletes that data first.
-
- This object contains no data after a call to this function if the
- object was constructed without a tqdevice to read data from or if
- this function was not able to get more data from the tqdevice.
-
- There are two occasions where a fetch is done implicitly by
- another function call: during construction (so that the object
- starts out with some initial data where available), and during a
- call to next() (if the data had run out).
-
- You don't normally need to use this function if you use next().
-
- \sa data() next() TQXmlInputSource()
-*/
-void TQXmlInputSource::fetchData()
-{
- TQByteArray rawData;
-
- if ( inputDevice != 0 ) {
- if ( inputDevice->isOpen() || inputDevice->open( IO_ReadOnly ) )
- rawData = inputDevice->readAll();
- } else if ( inputStream != 0 ) {
- if ( inputStream->tqdevice()->isDirectAccess() ) {
- rawData = inputStream->tqdevice()->readAll();
- } else {
- int nread = 0;
- const int bufsize = 512;
- while ( !inputStream->tqdevice()->atEnd() ) {
- rawData.resize( nread + bufsize );
- nread += inputStream->tqdevice()->readBlock( rawData.data()+nread, bufsize );
- }
- rawData.resize( nread );
- }
- }
- setData( fromRawData( rawData ) );
-}
-
-/*!
- This function reads the XML file from \a data and tries to
- recognize the encoding. It converts the raw data \a data into a
- TQString and returns it. It tries its best to get the correct
- encoding for the XML file.
-
- If \a beginning is TRUE, this function assumes that the data
- starts at the beginning of a new XML document and looks for an
- encoding declaration. If \a beginning is FALSE, it converts the
- raw data using the encoding determined from prior calls.
-*/
-TQString TQXmlInputSource::fromRawData( const TQByteArray &data, bool beginning )
-{
- if ( data.size() == 0 )
- return TQString::null;
- if ( beginning ) {
- delete encMapper;
- encMapper = 0;
- }
- if ( encMapper == 0 ) {
- TQTextCodec *codec = 0;
- // look for byte order mark and read the first 5 characters
- if ( data.size() >= 2 &&
- ( ((uchar)data.at(0)==(uchar)0xfe &&
- (uchar)data.at(1)==(uchar)0xff ) ||
- ((uchar)data.at(0)==(uchar)0xff &&
- (uchar)data.at(1)==(uchar)0xfe ) )) {
- codec = TQTextCodec::codecForMib( 1000 ); // UTF-16
- } else {
- codec = TQTextCodec::codecForMib( 106 ); // UTF-8
- }
- if ( !codec )
- return TQString::null;
-
- encMapper = codec->makeDecoder();
- TQString input = encMapper->toUnicode( data.data(), data.size() );
- // ### unexpected EOF? (for incremental parsing)
- // starts the document with an XML declaration?
- if ( input.find("<?xml") == 0 ) {
- // try to find out if there is an encoding
- int endPos = input.find( ">" );
- int pos = input.find( "encoding" );
- if ( pos < endPos && pos != -1 ) {
- TQString encoding;
- do {
- pos++;
- if ( pos > endPos ) {
- return input;
- }
- } while( input[pos] != '"' && input[pos] != '\'' );
- pos++;
- while( input[pos] != '"' && input[pos] != '\'' ) {
- encoding += input[pos];
- pos++;
- if ( pos > endPos ) {
- return input;
- }
- }
-
- codec = TQTextCodec::codecForName( encoding );
- if ( codec == 0 ) {
- return input;
- }
- delete encMapper;
- encMapper = codec->makeDecoder();
- return encMapper->toUnicode( data.data(), data.size() );
- }
- }
- return input;
- }
- return encMapper->toUnicode( data.data(), data.size() );
-}
-
-
-/*********************************************
- *
- * TQXmlDefaultHandler
- *
- *********************************************/
-
-/*!
- \class TQXmlContentHandler tqxml.h
- \reentrant
- \brief The TQXmlContentHandler class provides an interface to
- report the logical content of XML data.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- If the application needs to be informed of basic parsing events,
- it can implement this interface and activate it using
- TQXmlReader::setContentHandler(). The reader can then report basic
- document-related events like the start and end of elements and
- character data through this interface.
-
- The order of events in this interface is very important, and
- mirrors the order of information in the document itself. For
- example, all of an element's content (character data, processing
- instructions, and sub-elements) appears, in order, between the
- startElement() event and the corresponding endElement() event.
-
- The class TQXmlDefaultHandler provides a default implementation for
- this interface; subclassing from the TQXmlDefaultHandler class is
- very convenient if you only want to be informed of some parsing
- events.
-
- The startDocument() function is called at the start of the
- document, and endDocument() is called at the end. Before parsing
- begins setDocumentLocator() is called. For each element
- startElement() is called, with endElement() being called at the
- end of each element. The characters() function is called with
- chunks of character data; ignorableWhitespace() is called with
- chunks of whitespace and processingInstruction() is called with
- processing instructions. If an entity is skipped skippedEntity()
- is called. At the beginning of prefix-URI scopes
- startPrefixMapping() is called.
-
- See also the \link xml.html#sax2Intro Introduction to SAX2\endlink.
-
- \sa TQXmlDTDHandler TQXmlDeclHandler TQXmlEntityResolver TQXmlErrorHandler
- TQXmlLexicalHandler
-*/
-
-/*!
- \fn void TQXmlContentHandler::setDocumentLocator( TQXmlLocator* locator )
-
- The reader calls this function before it starts parsing the
- document. The argument \a locator is a pointer to a TQXmlLocator
- which allows the application to get the parsing position within
- the document.
-
- Do not destroy the \a locator; it is destroyed when the reader is
- destroyed. (Do not use the \a locator after the reader is
- destroyed).
-*/
-
-/*!
- \fn bool TQXmlContentHandler::startDocument()
-
- The reader calls this function when it starts parsing the
- document. The reader calls this function just once, after the call
- to setDocumentLocator(), and before any other functions in this
- class or in the TQXmlDTDHandler class are called.
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-
- \sa endDocument()
-*/
-
-/*!
- \fn bool TQXmlContentHandler::endDocument()
-
- The reader calls this function after it has finished parsing. It
- is called just once, and is the last handler function called. It
- is called after the reader has read all input or has abandoned
- parsing because of a fatal error.
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-
- \sa startDocument()
-*/
-
-/*!
- \fn bool TQXmlContentHandler::startPrefixMapping( const TQString& prefix, const TQString& uri )
-
- The reader calls this function to signal the begin of a prefix-URI
- namespace mapping scope. This information is not necessary for
- normal namespace processing since the reader automatically
- replaces prefixes for element and attribute names.
-
- Note that startPrefixMapping() and endPrefixMapping() calls are
- not guaranteed to be properly nested relative to each other: all
- startPrefixMapping() events occur before the corresponding
- startElement() event, and all endPrefixMapping() events occur
- after the corresponding endElement() event, but their order is not
- otherwise guaranteed.
-
- The argument \a prefix is the namespace prefix being declared and
- the argument \a uri is the namespace URI the prefix is mapped to.
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-
- See also the \link xml.html#sax2Namespaces namespace description\endlink.
-
- \sa endPrefixMapping()
-*/
-
-/*!
- \fn bool TQXmlContentHandler::endPrefixMapping( const TQString& prefix )
-
- The reader calls this function to signal the end of a prefix
- mapping for the prefix \a prefix.
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-
- See also the \link xml.html#sax2Namespaces namespace description\endlink.
-
- \sa startPrefixMapping()
-*/
-
-/*!
- \fn bool TQXmlContentHandler::startElement( const TQString& namespaceURI, const TQString& localName, const TQString& qName, const TQXmlAttributes& atts )
-
- The reader calls this function when it has parsed a start element
- tag.
-
- There is a corresponding endElement() call when the corresponding
- end element tag is read. The startElement() and endElement() calls
- are always nested correctly. Empty element tags (e.g. \c{<x/>})
- cause a startElement() call to be immediately followed by an
- endElement() call.
-
- The attribute list provided only contains attributes with explicit
- values. The attribute list contains attributes used for namespace
- declaration (i.e. attributes starting with xmlns) only if the
- namespace-prefix property of the reader is TRUE.
-
- The argument \a namespaceURI is the namespace URI, or
- TQString::null if the element has no namespace URI or if no
- namespace processing is done. \a localName is the local name
- (without prefix), or TQString::null if no namespace processing is
- done, \a qName is the qualified name (with prefix) and \a atts are
- the attributes attached to the element. If there are no
- attributes, \a atts is an empty attributes object.
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-
- See also the \link xml.html#sax2Namespaces namespace description\endlink.
-
- \sa endElement()
-*/
-
-/*!
- \fn bool TQXmlContentHandler::endElement( const TQString& namespaceURI, const TQString& localName, const TQString& qName )
-
- The reader calls this function when it has parsed an end element
- tag with the qualified name \a qName, the local name \a localName
- and the namespace URI \a namespaceURI.
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-
- See also the \link xml.html#sax2Namespaces namespace description\endlink.
-
- \sa startElement()
-*/
-
-/*!
- \fn bool TQXmlContentHandler::characters( const TQString& ch )
-
- The reader calls this function when it has parsed a chunk of
- character data (either normal character data or character data
- inside a CDATA section; if you need to distinguish between those
- two types you must use TQXmlLexicalHandler::startCDATA() and
- TQXmlLexicalHandler::endCDATA()). The character data is reported in
- \a ch.
-
- Some readers report whitespace in element content using the
- ignorableWhitespace() function rather than using this one.
-
- A reader may report the character data of an element in more than
- one chunk; e.g. a reader might want to report "a\<b" in three
- characters() events ("a ", "\<" and " b").
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn bool TQXmlContentHandler::ignorableWhitespace( const TQString& ch )
-
- Some readers may use this function to report each chunk of
- whitespace in element content. The whitespace is reported in \a ch.
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn bool TQXmlContentHandler::processingInstruction( const TQString& target, const TQString& data )
-
- The reader calls this function when it has parsed a processing
- instruction.
-
- \a target is the target name of the processing instruction and \a
- data is the data in the processing instruction.
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn bool TQXmlContentHandler::skippedEntity( const TQString& name )
-
- Some readers may skip entities if they have not seen the
- declarations (e.g. because they are in an external DTD). If they
- do so they report that they skipped the entity called \a name by
- calling this function.
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn TQString TQXmlContentHandler::errorString()
-
- The reader calls this function to get an error string, e.g. if any
- of the handler functions returns FALSE.
-*/
-
-
-/*!
- \class TQXmlErrorHandler tqxml.h
- \reentrant
- \brief The TQXmlErrorHandler class provides an interface to report
- errors in XML data.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- If you want your application to report errors to the user or to
- perform customized error handling, you should subclass this class.
-
- You can set the error handler with TQXmlReader::setErrorHandler().
-
- Errors can be reported using warning(), error() and fatalError(),
- with the error text being reported with errorString().
-
- See also the \link xml.html#sax2Intro Introduction to SAX2\endlink.
-
- \sa TQXmlDTDHandler TQXmlDeclHandler TQXmlContentHandler TQXmlEntityResolver
- TQXmlLexicalHandler
-*/
-
-/*!
- \fn bool TQXmlErrorHandler::warning( const TQXmlParseException& exception )
-
- A reader might use this function to report a warning. Warnings are
- conditions that are not errors or fatal errors as defined by the
- XML 1.0 specification. Details of the warning are stored in \a
- exception.
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn bool TQXmlErrorHandler::error( const TQXmlParseException& exception )
-
- A reader might use this function to report a recoverable error. A
- recoverable error corresponds to the definiton of "error" in
- section 1.2 of the XML 1.0 specification. Details of the error are
- stored in \a exception.
-
- The reader must continue to provide normal parsing events after
- invoking this function.
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn bool TQXmlErrorHandler::fatalError( const TQXmlParseException& exception )
-
- A reader must use this function to report a non-recoverable error.
- Details of the error are stored in \a exception.
-
- If this function returns TRUE the reader might try to go on
- parsing and reporting further errors; but no regular parsing
- events are reported.
-*/
-
-/*!
- \fn TQString TQXmlErrorHandler::errorString()
-
- The reader calls this function to get an error string if any of
- the handler functions returns FALSE.
-*/
-
-
-/*!
- \class TQXmlDTDHandler tqxml.h
- \reentrant
- \brief The TQXmlDTDHandler class provides an interface to report
- DTD content of XML data.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- If an application needs information about notations and unparsed
- entities, it can implement this interface and register an instance
- with TQXmlReader::setDTDHandler().
-
- Note that this interface includes only those DTD events that the
- XML recommendation requires processors to report, i.e. notation
- and unparsed entity declarations using notationDecl() and
- unparsedEntityDecl() respectively.
-
- See also the \link xml.html#sax2Intro Introduction to SAX2\endlink.
-
- \sa TQXmlDeclHandler TQXmlContentHandler TQXmlEntityResolver TQXmlErrorHandler
- TQXmlLexicalHandler
-*/
-
-/*!
- \fn bool TQXmlDTDHandler::notationDecl( const TQString& name, const TQString& publicId, const TQString& systemId )
-
- The reader calls this function when it has parsed a notation
- declaration.
-
- The argument \a name is the notation name, \a publicId is the
- notation's public identifier and \a systemId is the notation's
- system identifier.
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn bool TQXmlDTDHandler::unparsedEntityDecl( const TQString& name, const TQString& publicId, const TQString& systemId, const TQString& notationName )
-
- The reader calls this function when it finds an unparsed entity
- declaration.
-
- The argument \a name is the unparsed entity's name, \a publicId is
- the entity's public identifier, \a systemId is the entity's system
- identifier and \a notationName is the name of the associated
- notation.
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn TQString TQXmlDTDHandler::errorString()
-
- The reader calls this function to get an error string if any of
- the handler functions returns FALSE.
-*/
-
-
-/*!
- \class TQXmlEntityResolver tqxml.h
- \reentrant
- \brief The TQXmlEntityResolver class provides an interface to
- resolve external entities contained in XML data.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- If an application needs to implement customized handling for
- external entities, it must implement this interface, i.e.
- resolveEntity(), and register it with
- TQXmlReader::setEntityResolver().
-
- See also the \link xml.html#sax2Intro Introduction to SAX2\endlink.
-
- \sa TQXmlDTDHandler TQXmlDeclHandler TQXmlContentHandler TQXmlErrorHandler
- TQXmlLexicalHandler
-*/
-
-/*!
- \fn bool TQXmlEntityResolver::resolveEntity( const TQString& publicId, const TQString& systemId, TQXmlInputSource*& ret )
-
- The reader calls this function before it opens any external
- entity, except the top-level document entity. The application may
- request the reader to resolve the entity itself (\a ret is 0) or
- to use an entirely different input source (\a ret points to the
- input source).
-
- The reader deletes the input source \a ret when it no longer needs
- it, so you should allocate it on the heap with \c new.
-
- The argument \a publicId is the public identifier of the external
- entity, \a systemId is the system identifier of the external
- entity and \a ret is the return value of this function. If \a ret
- is 0 the reader should resolve the entity itself, if it is
- non-zero it must point to an input source which the reader uses
- instead.
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn TQString TQXmlEntityResolver::errorString()
-
- The reader calls this function to get an error string if any of
- the handler functions returns FALSE.
-*/
-
-
-/*!
- \class TQXmlLexicalHandler tqxml.h
- \reentrant
- \brief The TQXmlLexicalHandler class provides an interface to
- report the lexical content of XML data.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- The events in the lexical handler apply to the entire document,
- not just to the document element, and all lexical handler events
- appear between the content handler's startDocument and endDocument
- events.
-
- You can set the lexical handler with
- TQXmlReader::setLexicalHandler().
-
- This interface's design is based on the the SAX2 extension
- LexicalHandler.
-
- The interface provides the startDTD(), endDTD(), startEntity(),
- endEntity(), startCDATA(), endCDATA() and comment() functions.
-
- See also the \link xml.html#sax2Intro Introduction to SAX2\endlink.
-
- \sa TQXmlDTDHandler TQXmlDeclHandler TQXmlContentHandler TQXmlEntityResolver
- TQXmlErrorHandler
-*/
-
-/*!
- \fn bool TQXmlLexicalHandler::startDTD( const TQString& name, const TQString& publicId, const TQString& systemId )
-
- The reader calls this function to report the start of a DTD
- declaration, if any. It reports the name of the document type in
- \a name, the public identifier in \a publicId and the system
- identifier in \a systemId.
-
- If the public identifier is missing, \a publicId is set to
- TQString::null. If the system identifier is missing, \a systemId is
- set to TQString::null. Note that it is not valid XML to have a
- public identifier but no system identifier; in such cases a parse
- error will occur.
-
- All declarations reported through TQXmlDTDHandler or
- TQXmlDeclHandler appear between the startDTD() and endDTD() calls.
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-
- \sa endDTD()
-*/
-
-/*!
- \fn bool TQXmlLexicalHandler::endDTD()
-
- The reader calls this function to report the end of a DTD
- declaration, if any.
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-
- \sa startDTD()
-*/
-
-/*!
- \fn bool TQXmlLexicalHandler::startEntity( const TQString& name )
-
- The reader calls this function to report the start of an entity
- called \a name.
-
- Note that if the entity is unknown, the reader reports it through
- TQXmlContentHandler::skippedEntity() and not through this
- function.
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-
- \sa endEntity() TQXmlSimpleReader::setFeature()
-*/
-
-/*!
- \fn bool TQXmlLexicalHandler::endEntity( const TQString& name )
-
- The reader calls this function to report the end of an entity
- called \a name.
-
- For every startEntity() call, there is a corresponding endEntity()
- call. The calls to startEntity() and endEntity() are properly
- nested.
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-
- \sa startEntity() TQXmlContentHandler::skippedEntity() TQXmlSimpleReader::setFeature()
-*/
-
-/*!
- \fn bool TQXmlLexicalHandler::startCDATA()
-
- The reader calls this function to report the start of a CDATA
- section. The content of the CDATA section is reported through the
- TQXmlContentHandler::characters() function. This function is
- intended only to report the boundary.
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-
- \sa endCDATA()
-*/
-
-/*!
- \fn bool TQXmlLexicalHandler::endCDATA()
-
- The reader calls this function to report the end of a CDATA
- section.
-
- If this function returns FALSE the reader stops parsing and reports
- an error. The reader uses the function errorString() to get the error
- message.
-
- \sa startCDATA() TQXmlContentHandler::characters()
-*/
-
-/*!
- \fn bool TQXmlLexicalHandler::comment( const TQString& ch )
-
- The reader calls this function to report an XML comment anywhere
- in the document. It reports the text of the comment in \a ch.
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn TQString TQXmlLexicalHandler::errorString()
-
- The reader calls this function to get an error string if any of
- the handler functions returns FALSE.
-*/
-
-
-/*!
- \class TQXmlDeclHandler tqxml.h
- \reentrant
- \brief The TQXmlDeclHandler class provides an interface to report declaration
- content of XML data.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- You can set the declaration handler with
- TQXmlReader::setDeclHandler().
-
- This interface is based on the SAX2 extension DeclHandler.
-
- The interface provides attributeDecl(), internalEntityDecl() and
- externalEntityDecl() functions.
-
- See also the \link xml.html#sax2Intro Introduction to SAX2\endlink.
-
- \sa TQXmlDTDHandler TQXmlContentHandler TQXmlEntityResolver TQXmlErrorHandler
- TQXmlLexicalHandler
-*/
-
-/*!
- \fn bool TQXmlDeclHandler::attributeDecl( const TQString& eName, const TQString& aName, const TQString& type, const TQString& valueDefault, const TQString& value )
-
- The reader calls this function to report an attribute type
- declaration. Only the effective (first) declaration for an
- attribute is reported.
-
- The reader passes the name of the associated element in \a eName
- and the name of the attribute in \a aName. It passes a string that
- represents the attribute type in \a type and a string that
- represents the attribute default in \a valueDefault. This string
- is one of "#IMPLIED", "#RETQUIRED", "#FIXED" or TQString::null (if
- none of the others applies). The reader passes the attribute's
- default value in \a value. If no default value is specified in the
- XML file, \a value is TQString::null.
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn bool TQXmlDeclHandler::internalEntityDecl( const TQString& name, const TQString& value )
-
- The reader calls this function to report an internal entity
- declaration. Only the effective (first) declaration is reported.
-
- The reader passes the name of the entity in \a name and the value
- of the entity in \a value.
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn bool TQXmlDeclHandler::externalEntityDecl( const TQString& name, const TQString& publicId, const TQString& systemId )
-
- The reader calls this function to report a parsed external entity
- declaration. Only the effective (first) declaration for each
- entity is reported.
-
- The reader passes the name of the entity in \a name, the public
- identifier in \a publicId and the system identifier in \a
- systemId. If there is no public identifier specified, it passes
- TQString::null in \a publicId.
-
- If this function returns FALSE the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn TQString TQXmlDeclHandler::errorString()
-
- The reader calls this function to get an error string if any of
- the handler functions returns FALSE.
-*/
-
-
-/*!
- \class TQXmlDefaultHandler tqxml.h
- \reentrant
- \brief The TQXmlDefaultHandler class provides a default implementation of all
- the XML handler classes.
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- Very often we are only interested in parts of the things that the
- reader reports. This class implements a default behaviour for the
- handler classes (i.e. most of the time do nothing). Usually this
- is the class you subclass for implementing your own customized
- handler.
-
- See also the \link xml.html#sax2Intro Introduction to SAX2\endlink.
-
- \sa TQXmlDTDHandler TQXmlDeclHandler TQXmlContentHandler TQXmlEntityResolver
- TQXmlErrorHandler TQXmlLexicalHandler
-*/
-
-/*!
- \fn TQXmlDefaultHandler::TQXmlDefaultHandler()
-
- Constructor.
-*/
-/*!
- \fn TQXmlDefaultHandler::~TQXmlDefaultHandler()
-
- Destructor.
-*/
-
-/*!
- \reimp
-
- Does nothing.
-*/
-void TQXmlDefaultHandler::setDocumentLocator( TQXmlLocator* )
-{
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::startDocument()
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::endDocument()
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::startPrefixMapping( const TQString&, const TQString& )
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::endPrefixMapping( const TQString& )
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::startElement( const TQString&, const TQString&,
- const TQString&, const TQXmlAttributes& )
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::endElement( const TQString&, const TQString&,
- const TQString& )
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::characters( const TQString& )
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::ignorableWhitespace( const TQString& )
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::processingInstruction( const TQString&,
- const TQString& )
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::skippedEntity( const TQString& )
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::warning( const TQXmlParseException& )
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::error( const TQXmlParseException& )
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::fatalError( const TQXmlParseException& )
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::notationDecl( const TQString&, const TQString&,
- const TQString& )
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::unparsedEntityDecl( const TQString&, const TQString&,
- const TQString&, const TQString& )
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Sets \a ret to 0, so that the reader uses the system identifier
- provided in the XML document.
-*/
-bool TQXmlDefaultHandler::resolveEntity( const TQString&, const TQString&,
- TQXmlInputSource*& ret )
-{
- ret = 0;
- return TRUE;
-}
-
-/*!
- \reimp
-
- Returns the default error string.
-*/
-TQString TQXmlDefaultHandler::errorString()
-{
- return TQString( XMLERR_ERRORBYCONSUMER );
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::startDTD( const TQString&, const TQString&, const TQString& )
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::endDTD()
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::startEntity( const TQString& )
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::endEntity( const TQString& )
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::startCDATA()
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::endCDATA()
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::comment( const TQString& )
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::attributeDecl( const TQString&, const TQString&, const TQString&, const TQString&, const TQString& )
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::internalEntityDecl( const TQString&, const TQString& )
-{
- return TRUE;
-}
-
-/*!
- \reimp
-
- Does nothing.
-*/
-bool TQXmlDefaultHandler::externalEntityDecl( const TQString&, const TQString&, const TQString& )
-{
- return TRUE;
-}
-
-
-/*********************************************
- *
- * TQXmlSimpleReaderPrivate
- *
- *********************************************/
-
-class TQXmlSimpleReaderPrivate
-{
-private:
- // functions
- inline TQXmlSimpleReaderPrivate()
- {
- parseStack = 0;
- undefEntityInAttrHack = FALSE;
- }
-
- inline ~TQXmlSimpleReaderPrivate()
- {
- delete parseStack;
- }
-
- inline void initIncrementalParsing()
- {
- delete parseStack;
- parseStack = new TQValueStack<ParseState>;
- }
-
- // used to determine if elements are correctly nested
- TQValueStack<TQString> tags;
-
- // used for entity declarations
- struct ExternParameterEntity
- {
- ExternParameterEntity( ) {}
- ExternParameterEntity( const TQString &p, const TQString &s )
- : publicId(p), systemId(s) {}
- TQString publicId;
- TQString systemId;
-
- TQ_DUMMY_COMPARISON_OPERATOR(ExternParameterEntity)
- };
- struct ExternEntity
- {
- ExternEntity( ) {}
- ExternEntity( const TQString &p, const TQString &s, const TQString &n )
- : publicId(p), systemId(s), notation(n) {}
- TQString publicId;
- TQString systemId;
- TQString notation;
- TQ_DUMMY_COMPARISON_OPERATOR(ExternEntity)
- };
- TQMap<TQString,ExternParameterEntity> externParameterEntities;
- TQMap<TQString,TQString> parameterEntities;
- TQMap<TQString,ExternEntity> externEntities;
- TQMap<TQString,TQString> entities;
-
- // used for parsing of entity references
- TQValueStack<TQString> xmlRef;
- TQValueStack<TQString> xmlRefName;
-
- // used for standalone declaration
- enum Standalone { Yes, No, Unknown };
-
- TQString doctype; // only used for the doctype
- TQString xmlVersion; // only used to store the version information
- TQString encoding; // only used to store the encoding
- Standalone standalone; // used to store the value of the standalone declaration
-
- TQString publicId; // used by parseExternalID() to store the public ID
- TQString systemId; // used by parseExternalID() to store the system ID
- TQString attDeclEName; // use by parseAttlistDecl()
- TQString attDeclAName; // use by parseAttlistDecl()
-
- // flags for some features support
- bool useNamespaces;
- bool useNamespacePrefixes;
- bool reportWhitespaceCharData;
- bool reportEntities;
-
- // used to build the attribute list
- TQXmlAttributes attList;
-
- // used in TQXmlSimpleReader::parseContent() to decide whether character
- // data was read
- bool contentCharDataRead;
-
- // helper classes
- TQXmlLocator *locator;
- TQXmlNamespaceSupport namespaceSupport;
-
- // error string
- TQString error;
-
- // arguments for parse functions (this is needed to allow incremental
- // parsing)
- bool parsePI_xmldecl;
- bool parseName_useRef;
- bool parseReference_charDataRead;
- TQXmlSimpleReader::EntityRecognitionContext parseReference_context;
- bool parseExternalID_allowPublicID;
- TQXmlSimpleReader::EntityRecognitionContext parsePEReference_context;
- TQString parseString_s;
-
- // for incremental parsing
- struct ParseState {
- typedef bool (TQXmlSimpleReader::*ParseFunction) ();
- ParseFunction function;
- int state;
- };
- TQValueStack<ParseState> *parseStack;
-
- // used in parseProlog()
- bool xmldecl_possible;
- bool doctype_read;
-
- // used in parseDoctype()
- bool startDTDwasReported;
-
- // used in parseString()
- signed char Done;
-
- bool undefEntityInAttrHack;
-
- int nameValueLen;
- int refValueLen;
- int stringValueLen;
-
- // friend declarations
- friend class TQXmlSimpleReader;
-};
-
-
-/*********************************************
- *
- * TQXmlSimpleReader
- *
- *********************************************/
-
-/*!
- \class TQXmlReader tqxml.h
- \reentrant
- \brief The TQXmlReader class provides an interface for XML readers (i.e.
- parsers).
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
-
- This abstract class provides an interface for all of TQt's XML
- readers. Currently there is only one implementation of a reader
- included in TQt's XML module: TQXmlSimpleReader. In future releases
- there might be more readers with different properties available
- (e.g. a validating parser).
-
- The design of the XML classes follows the \link
- http://www.saxproject.org/ SAX2 Java interface\endlink, with
- the names adapted to fit TQt naming conventions. It should be very
- easy for anybody who has worked with SAX2 to get started with the
- TQt XML classes.
-
- All readers use the class TQXmlInputSource to read the input
- document. Since you are normally interested in particular content
- in the XML document, the reader reports the content through
- special handler classes (TQXmlDTDHandler, TQXmlDeclHandler,
- TQXmlContentHandler, TQXmlEntityResolver, TQXmlErrorHandler and
- TQXmlLexicalHandler), which you must subclass, if you want to
- process the contents.
-
- Since the handler classes only describe interfaces you must
- implement all the functions. We provide the TQXmlDefaultHandler
- class to make this easier: it implements a default behaviour (do
- nothing) for all functions, so you can subclass it and just
- implement the functions you are interested in.
-
- Features and properties of the reader can be set with setFeature()
- and setProperty() respectively. You can set the reader to use your
- own subclasses with setEntityResolver(), setDTDHandler(),
- setContentHandler(), setErrorHandler(), setLexicalHandler() and
- setDeclHandler(). The parse itself is started with a call to
- parse().
-
- \sa TQXmlSimpleReader
-*/
-
-/*!
- \fn bool TQXmlReader::feature( const TQString& name, bool *ok ) const
-
- If the reader has the feature called \a name, the feature's value
- is returned. If no such feature exists the return value is
- undefined.
-
- If \a ok is not 0: \a *ok is set to TRUE if the reader has the
- feature called \a name; otherwise \a *ok is set to FALSE.
-
- \sa setFeature() hasFeature()
-*/
-
-/*!
- \fn void TQXmlReader::setFeature( const TQString& name, bool value )
-
- Sets the feature called \a name to the given \a value. If the
- reader doesn't have the feature nothing happens.
-
- \sa feature() hasFeature()
-*/
-
-/*!
- \fn bool TQXmlReader::hasFeature( const TQString& name ) const
-
- Returns \c TRUE if the reader has the feature called \a name;
- otherwise returns FALSE.
-
- \sa feature() setFeature()
-*/
-
-/*!
- \fn void* TQXmlReader::property( const TQString& name, bool *ok ) const
-
- If the reader has the property \a name, this function returns the
- value of the property; otherwise the return value is undefined.
-
- If \a ok is not 0: if the reader has the \a name property \a *ok
- is set to TRUE; otherwise \a *ok is set to FALSE.
-
- \sa setProperty() hasProperty()
-*/
-
-/*!
- \fn void TQXmlReader::setProperty( const TQString& name, void* value )
-
- Sets the property \a name to \a value. If the reader doesn't have
- the property nothing happens.
-
- \sa property() hasProperty()
-*/
-
-/*!
- \fn bool TQXmlReader::hasProperty( const TQString& name ) const
-
- Returns TRUE if the reader has the property \a name; otherwise
- returns FALSE.
-
- \sa property() setProperty()
-*/
-
-/*!
- \fn void TQXmlReader::setEntityResolver( TQXmlEntityResolver* handler )
-
- Sets the entity resolver to \a handler.
-
- \sa entityResolver()
-*/
-
-/*!
- \fn TQXmlEntityResolver* TQXmlReader::entityResolver() const
-
- Returns the entity resolver or 0 if none was set.
-
- \sa setEntityResolver()
-*/
-
-/*!
- \fn void TQXmlReader::setDTDHandler( TQXmlDTDHandler* handler )
-
- Sets the DTD handler to \a handler.
-
- \sa DTDHandler()
-*/
-
-/*!
- \fn TQXmlDTDHandler* TQXmlReader::DTDHandler() const
-
- Returns the DTD handler or 0 if none was set.
-
- \sa setDTDHandler()
-*/
-
-/*!
- \fn void TQXmlReader::setContentHandler( TQXmlContentHandler* handler )
-
- Sets the content handler to \a handler.
-
- \sa contentHandler()
-*/
-
-/*!
- \fn TQXmlContentHandler* TQXmlReader::contentHandler() const
-
- Returns the content handler or 0 if none was set.
-
- \sa setContentHandler()
-*/
-
-/*!
- \fn void TQXmlReader::setErrorHandler( TQXmlErrorHandler* handler )
-
- Sets the error handler to \a handler. Clears the error handler if
- \a handler is 0.
-
- \sa errorHandler()
-*/
-
-/*!
- \fn TQXmlErrorHandler* TQXmlReader::errorHandler() const
-
- Returns the error handler or 0 if none is set.
-
- \sa setErrorHandler()
-*/
-
-/*!
- \fn void TQXmlReader::setLexicalHandler( TQXmlLexicalHandler* handler )
-
- Sets the lexical handler to \a handler.
-
- \sa lexicalHandler()
-*/
-
-/*!
- \fn TQXmlLexicalHandler* TQXmlReader::lexicalHandler() const
-
- Returns the lexical handler or 0 if none was set.
-
- \sa setLexicalHandler()
-*/
-
-/*!
- \fn void TQXmlReader::setDeclHandler( TQXmlDeclHandler* handler )
-
- Sets the declaration handler to \a handler.
-
- \sa declHandler()
-*/
-
-/*!
- \fn TQXmlDeclHandler* TQXmlReader::declHandler() const
-
- Returns the declaration handler or 0 if none was set.
-
- \sa setDeclHandler()
-*/
-
-/*!
- \fn bool TQXmlReader::parse( const TQXmlInputSource& input )
-
- \obsolete
-*/
-
-/*!
- \fn bool TQXmlReader::parse( const TQXmlInputSource* input )
-
- Reads an XML document from \a input and parses it. Returns TRUE if
- the parsing was successful; otherwise returns FALSE.
-*/
-
-
-/*!
- \class TQXmlSimpleReader tqxml.h
- \reentrant
- \brief The TQXmlSimpleReader class provides an implementation of a
- simple XML reader (parser).
-\if defined(commercial)
- It is part of the <a href="commercialeditions.html">TQt Enterprise Edition</a>.
-\endif
-
- \module XML
- \ingroup xml-tools
- \mainclass
-
- This XML reader is sufficient for simple parsing tasks. The reader:
- \list
- \i provides a well-formed parser;
- \i does not parse any external entities;
- \i can do namespace processing.
- \endlist
-
- Documents are parsed with a call to parse().
-
-*/
-
-static inline bool is_S(TQChar ch)
-{
- ushort uc = ch.tqunicode();
- return (uc == ' ' || uc == '\t' || uc == '\n' || uc == '\r');
-}
-
-enum NameChar { NameBeginning, NameNotBeginning, NotName };
-
-static const char Begi = (char)NameBeginning;
-static const char NtBg = (char)NameNotBeginning;
-static const char NotN = (char)NotName;
-
-static const char nameCharTable[128] =
-{
-// 0x00
- NotN, NotN, NotN, NotN, NotN, NotN, NotN, NotN,
- NotN, NotN, NotN, NotN, NotN, NotN, NotN, NotN,
-// 0x10
- NotN, NotN, NotN, NotN, NotN, NotN, NotN, NotN,
- NotN, NotN, NotN, NotN, NotN, NotN, NotN, NotN,
-// 0x20 (0x2D is '-', 0x2E is '.')
- NotN, NotN, NotN, NotN, NotN, NotN, NotN, NotN,
- NotN, NotN, NotN, NotN, NotN, NtBg, NtBg, NotN,
-// 0x30 (0x30..0x39 are '0'..'9', 0x3A is ':')
- NtBg, NtBg, NtBg, NtBg, NtBg, NtBg, NtBg, NtBg,
- NtBg, NtBg, Begi, NotN, NotN, NotN, NotN, NotN,
-// 0x40 (0x41..0x5A are 'A'..'Z')
- NotN, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
- Begi, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
-// 0x50 (0x5F is '_')
- Begi, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
- Begi, Begi, Begi, NotN, NotN, NotN, NotN, Begi,
-// 0x60 (0x61..0x7A are 'a'..'z')
- NotN, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
- Begi, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
-// 0x70
- Begi, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
- Begi, Begi, Begi, NotN, NotN, NotN, NotN, NotN
-};
-
-static inline NameChar fastDetermineNameChar(TQChar ch)
-{
- ushort uc = ch.tqunicode();
- if (!(uc & ~0x7f)) // uc < 128
- return (NameChar)nameCharTable[uc];
-
- TQChar::Category cat = ch.category();
- // ### some these categories might be slightly wrong
- if ((cat >= TQChar::Letter_Uppercase && cat <= TQChar::Letter_Other)
- || cat == TQChar::Number_Letter)
- return NameBeginning;
- if ((cat >= TQChar::Number_DecimalDigit && cat <= TQChar::Number_Other)
- || (cat >= TQChar::Mark_NonSpacing && cat <= TQChar::Mark_Enclosing))
- return NameNotBeginning;
- return NotName;
-}
-
-static NameChar determineNameChar(TQChar ch)
-{
- return fastDetermineNameChar(ch);
-}
-
-inline void TQXmlSimpleReader::nameClear()
-{
- d->nameValueLen = 0; nameArrayPos = 0;
-}
-
-inline void TQXmlSimpleReader::refClear()
-{
- d->refValueLen = 0; refArrayPos = 0;
-}
-
-/*!
- Constructs a simple XML reader with the following feature settings:
- \table
- \header \i Feature \i Setting
- \row \i \e http://xml.org/sax/features/namespaces \i TRUE
- \row \i \e http://xml.org/sax/features/namespace-prefixes \i FALSE
- \row \i \e http://trolltech.com/xml/features/report-whitespace-only-CharData
- \i TRUE
- \row \i \e http://trolltech.com/xml/features/report-start-end-entity \i FALSE
- \endtable
-
- More information about features can be found in the \link
- xml.html#sax2Features TQt SAX2 overview. \endlink
-
- \sa setFeature()
-*/
-
-TQXmlSimpleReader::TQXmlSimpleReader()
-{
- d = new TQXmlSimpleReaderPrivate();
- d->locator = new TQXmlSimpleReaderLocator( this );
-
- entityRes = 0;
- dtdHnd = 0;
- contentHnd = 0;
- errorHnd = 0;
- lexicalHnd = 0;
- declHnd = 0;
-
- // default feature settings
- d->useNamespaces = TRUE;
- d->useNamespacePrefixes = FALSE;
- d->reportWhitespaceCharData = TRUE;
- d->reportEntities = FALSE;
-}
-
-/*!
- Destroys the simple XML reader.
-*/
-TQXmlSimpleReader::~TQXmlSimpleReader()
-{
- delete d->locator;
- delete d;
-}
-
-/*!
- \reimp
-*/
-bool TQXmlSimpleReader::feature( const TQString& name, bool *ok ) const
-{
- if ( ok != 0 )
- *ok = TRUE;
- if ( name == "http://xml.org/sax/features/namespaces" ) {
- return d->useNamespaces;
- } else if ( name == "http://xml.org/sax/features/namespace-prefixes" ) {
- return d->useNamespacePrefixes;
- } else if ( name == "http://trolltech.com/xml/features/report-whitespace-only-CharData" ) {
- return d->reportWhitespaceCharData;
- } else if ( name == "http://trolltech.com/xml/features/report-start-end-entity" ) {
- return d->reportEntities;
- } else {
- qWarning( "Unknown feature %s", name.latin1() );
- if ( ok != 0 )
- *ok = FALSE;
- }
- return FALSE;
-}
-
-/*!
- Sets the state of the feature \a name to \a value:
-
- If the feature is not recognized, it is ignored.
-
- The following features are supported:
- \table
- \header \i Feature \i Notes
- \row \i \e http://xml.org/sax/features/namespaces
- \i If this feature is TRUE, namespace processing is
- performed.
- \row \i \e http://xml.org/sax/features/namespace-prefixes
- \i If this feature is TRUE, the the original prefixed names
- and attributes used for namespace declarations are
- reported.
- \row \i \e http://trolltech.com/xml/features/report-whitespace-only-CharData
- \i If this feature is TRUE, CharData that only contain
- whitespace are not ignored, but are reported via
- TQXmlContentHandler::characters().
- \row \i \e http://trolltech.com/xml/features/report-start-end-entity
- \i If this feature is TRUE, the parser reports
- TQXmlContentHandler::startEntity() and
- TQXmlContentHandler::endEntity() events. So character data
- might be reported in chunks. If this feature is FALSE, the
- parser does not report those events, but rather silently
- substitutes the entities and reports the character data in
- one chunk.
- \endtable
-
- \quotefile xml/tagreader-with-features/tagreader.cpp
- \skipto reader
- \printline reader
- \skipto setFeature
- \printline setFeature
- \printline TRUE
-
- (Code taken from xml/tagreader-with-features/tagreader.cpp)
-
- \sa feature() hasFeature()
-*/
-void TQXmlSimpleReader::setFeature( const TQString& name, bool value )
-{
- if ( name == "http://xml.org/sax/features/namespaces" ) {
- d->useNamespaces = value;
- } else if ( name == "http://xml.org/sax/features/namespace-prefixes" ) {
- d->useNamespacePrefixes = value;
- } else if ( name == "http://trolltech.com/xml/features/report-whitespace-only-CharData" ) {
- d->reportWhitespaceCharData = value;
- } else if ( name == "http://trolltech.com/xml/features/report-start-end-entity" ) {
- d->reportEntities = value;
- } else {
- qWarning( "Unknown feature %s", name.latin1() );
- }
-}
-
-/*! \reimp
-*/
-bool TQXmlSimpleReader::hasFeature( const TQString& name ) const
-{
- if ( name == "http://xml.org/sax/features/namespaces"
- || name == "http://xml.org/sax/features/namespace-prefixes"
- || name == "http://trolltech.com/xml/features/report-whitespace-only-CharData"
- || name == "http://trolltech.com/xml/features/report-start-end-entity" ) {
- return TRUE;
- } else {
- return FALSE;
- }
-}
-
-/*! \reimp
-*/
-void* TQXmlSimpleReader::property( const TQString&, bool *ok ) const
-{
- if ( ok != 0 )
- *ok = FALSE;
- return 0;
-}
-
-/*! \reimp
-*/
-void TQXmlSimpleReader::setProperty( const TQString&, void* )
-{
-}
-
-/*!
- \reimp
-*/
-bool TQXmlSimpleReader::hasProperty( const TQString& ) const
-{
- return FALSE;
-}
-
-/*!
- \reimp
-*/
-void TQXmlSimpleReader::setEntityResolver( TQXmlEntityResolver* handler )
-{ entityRes = handler; }
-
-/*!
- \reimp
-*/
-TQXmlEntityResolver* TQXmlSimpleReader::entityResolver() const
-{ return entityRes; }
-
-/*!
- \reimp
-*/
-void TQXmlSimpleReader::setDTDHandler( TQXmlDTDHandler* handler )
-{ dtdHnd = handler; }
-
-/*!
- \reimp
-*/
-TQXmlDTDHandler* TQXmlSimpleReader::DTDHandler() const
-{ return dtdHnd; }
-
-/*!
- \reimp
-*/
-void TQXmlSimpleReader::setContentHandler( TQXmlContentHandler* handler )
-{ contentHnd = handler; }
-
-/*!
- \reimp
-*/
-TQXmlContentHandler* TQXmlSimpleReader::contentHandler() const
-{ return contentHnd; }
-
-/*!
- \reimp
-*/
-void TQXmlSimpleReader::setErrorHandler( TQXmlErrorHandler* handler )
-{ errorHnd = handler; }
-
-/*!
- \reimp
-*/
-TQXmlErrorHandler* TQXmlSimpleReader::errorHandler() const
-{ return errorHnd; }
-
-/*!
- \reimp
-*/
-void TQXmlSimpleReader::setLexicalHandler( TQXmlLexicalHandler* handler )
-{ lexicalHnd = handler; }
-
-/*!
- \reimp
-*/
-TQXmlLexicalHandler* TQXmlSimpleReader::lexicalHandler() const
-{ return lexicalHnd; }
-
-/*!
- \reimp
-*/
-void TQXmlSimpleReader::setDeclHandler( TQXmlDeclHandler* handler )
-{ declHnd = handler; }
-
-/*!
- \reimp
-*/
-TQXmlDeclHandler* TQXmlSimpleReader::declHandler() const
-{ return declHnd; }
-
-
-
-/*!
- \reimp
-*/
-bool TQXmlSimpleReader::parse( const TQXmlInputSource& input )
-{
- return parse( &input, FALSE );
-}
-
-/*!
- \reimp
-*/
-bool TQXmlSimpleReader::parse( const TQXmlInputSource* input )
-{
- return parse( input, FALSE );
-}
-
-/*!
- Reads an XML document from \a input and parses it. Returns FALSE
- if the parsing detects an error; otherwise returns TRUE.
-
- If \a incremental is TRUE, the parser does not return FALSE when
- it reaches the end of the \a input without reaching the end of the
- XML file. Instead it stores the state of the parser so that
- parsing can be continued at a later stage when more data is
- available. You can use the function parseContinue() to continue
- with parsing. This class stores a pointer to the input source \a
- input and the parseContinue() function tries to read from that
- input souce. This means that you should not delete the input
- source \a input until you've finished your calls to
- parseContinue(). If you call this function with \a incremental
- TRUE whilst an incremental parse is in progress a new parsing
- session will be started and the previous session lost.
-
- If \a incremental is FALSE, this function behaves like the normal
- parse function, i.e. it returns FALSE when the end of input is
- reached without reaching the end of the XML file and the parsing
- cannot be continued.
-
- \sa parseContinue() TQSocket
-*/
-bool TQXmlSimpleReader::parse( const TQXmlInputSource *input, bool incremental )
-{
- init( input );
- if ( incremental ) {
- d->initIncrementalParsing();
- } else {
- delete d->parseStack;
- d->parseStack = 0;
- }
- // call the handler
- if ( contentHnd ) {
- contentHnd->setDocumentLocator( d->locator );
- if ( !contentHnd->startDocument() ) {
- reportParseError( contentHnd->errorString() );
- d->tags.clear();
- return FALSE;
- }
- }
- return parseBeginOrContinue( 0, incremental );
-}
-
-/*!
- Continues incremental parsing; this function reads the input from
- the TQXmlInputSource that was specified with the last parse()
- command. To use this function, you \e must have called parse()
- with the incremental argument set to TRUE.
-
- Returns FALSE if a parsing error occurs; otherwise returns TRUE.
-
- If the input source returns an empty string for the function
- TQXmlInputSource::data(), then this means that the end of the XML
- file has been reached; this is quite important, especially if you
- want to use the reader to parse more than one XML file.
-
- The case of the end of the XML file being reached without having
- finished parsing is not considered to be an error: you can
- continue parsing at a later stage by calling this function again
- when there is more data available to parse.
-
- This function assumes that the end of the XML document is reached
- if the TQXmlInputSource::next() function returns
- TQXmlInputSource::EndOfDocument. If the parser has not finished
- parsing when it encounters this symbol, it is an error and FALSE
- is returned.
-
- \sa parse() TQXmlInputSource::next()
-*/
-bool TQXmlSimpleReader::parseContinue()
-{
- if ( d->parseStack == 0 || d->parseStack->isEmpty() )
- return FALSE;
- initData();
- int state = d->parseStack->pop().state;
- return parseBeginOrContinue( state, TRUE );
-}
-
-/*
- Common part of parse() and parseContinue()
-*/
-bool TQXmlSimpleReader::parseBeginOrContinue( int state, bool incremental )
-{
- bool atEndOrig = atEnd();
-
- if ( state==0 ) {
- if ( !parseProlog() ) {
- if ( incremental && d->error.isNull() ) {
- pushParseState( 0, 0 );
- return TRUE;
- } else {
- d->tags.clear();
- return FALSE;
- }
- }
- state = 1;
- }
- if ( state==1 ) {
- if ( !parseElement() ) {
- if ( incremental && d->error.isNull() ) {
- pushParseState( 0, 1 );
- return TRUE;
- } else {
- d->tags.clear();
- return FALSE;
- }
- }
- state = 2;
- }
- // parse Misc*
- while ( !atEnd() ) {
- if ( !parseMisc() ) {
- if ( incremental && d->error.isNull() ) {
- pushParseState( 0, 2 );
- return TRUE;
- } else {
- d->tags.clear();
- return FALSE;
- }
- }
- }
- if ( !atEndOrig && incremental ) {
- // we parsed something at all, so be prepared to come back later
- pushParseState( 0, 2 );
- return TRUE;
- }
- // is stack empty?
- if ( !d->tags.isEmpty() && !d->error.isNull() ) {
- reportParseError( XMLERR_UNEXPECTEDEOF );
- d->tags.clear();
- return FALSE;
- }
- // call the handler
- if ( contentHnd ) {
- delete d->parseStack;
- d->parseStack = 0;
- if ( !contentHnd->endDocument() ) {
- reportParseError( contentHnd->errorString() );
- return FALSE;
- }
- }
- return TRUE;
-}
-
-//
-// The following private parse functions have another semantics for the return
-// value: They return TRUE iff parsing has finished successfully (i.e. the end
-// of the XML file must be reached!). If one of these functions return FALSE,
-// there is only an error when d->error.isNULL() is also FALSE.
-//
-
-/*
- For the incremental parsing, it is very important that the parse...()
- functions have a certain structure. Since it might be hard to understand how
- they work, here is a description of the tqlayout of these functions:
-
- bool TQXmlSimpleReader::parse...()
- {
-(1) const signed char Init = 0;
- ...
-
-(2) const signed char Inp... = 0;
- ...
-
-(3) static signed char table[3][2] = {
- ...
- };
- signed char state;
- signed char input;
-
-(4) if (d->parseStack == 0 || d->parseStack->isEmpty()) {
-(4a) ...
- } else {
-(4b) ...
- }
-
- for ( ; ; ) {
-(5) switch ( state ) {
- ...
- }
-
-(6)
-(6a) if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parseNmtoken, state );
- return FALSE;
- }
-(6b) if (determineNameChar(c) != NotName) {
- ...
- }
-(7) state = table[state][input];
-
-(8) switch ( state ) {
- ...
- }
- }
- }
-
- Explanation:
- ad 1: constants for the states (used in the transition table)
- ad 2: constants for the input (used in the transition table)
- ad 3: the transition table for the state machine
- ad 4: test if we are in a parseContinue() step
- a) if no, do inititalizations
- b) if yes, restore the state and call parse functions recursively
- ad 5: Do some actions according to the state; from the logical execution
- order, this code belongs after 8 (see there for an explanation)
- ad 6: Check the character that is at the actual "cursor" position:
- a) If we reached the EOF, report either error or push the state (in the
- case of incremental parsing).
- b) Otherwise, set the input character constant for the transition
- table.
- ad 7: Get the new state according to the input that was read.
- ad 8: Do some actions according to the state. The last line in every case
- statement reads new data (i.e. it move the cursor). This can also be
- done by calling another parse...() funtion. If you need processing for
- this state after that, you have to put it into the switch statement 5.
- This ensures that you have a well defined re-entry point, when you ran
- out of data.
-*/
-
-/*
- Parses the prolog [22].
-*/
-bool TQXmlSimpleReader::parseProlog()
-{
- const signed char Init = 0;
- const signed char EatWS = 1; // eat white spaces
- const signed char Lt = 2; // '<' read
- const signed char Em = 3; // '!' read
- const signed char DocType = 4; // read doctype
- const signed char Comment = 5; // read comment
- const signed char CommentR = 6; // same as Comment, but already reported
- const signed char PInstr = 7; // read PI
- const signed char PInstrR = 8; // same as PInstr, but already reported
- const signed char Done = 9;
-
- const signed char InpWs = 0;
- const signed char InpLt = 1; // <
- const signed char InpQm = 2; // ?
- const signed char InpEm = 3; // !
- const signed char InpD = 4; // D
- const signed char InpDash = 5; // -
- const signed char InpUnknown = 6;
-
- static const signed char table[9][7] = {
- /* InpWs InpLt InpQm InpEm InpD InpDash InpUnknown */
- { EatWS, Lt, -1, -1, -1, -1, -1 }, // Init
- { -1, Lt, -1, -1, -1, -1, -1 }, // EatWS
- { -1, -1, PInstr,Em, Done, -1, Done }, // Lt
- { -1, -1, -1, -1, DocType, Comment, -1 }, // Em
- { EatWS, Lt, -1, -1, -1, -1, -1 }, // DocType
- { EatWS, Lt, -1, -1, -1, -1, -1 }, // Comment
- { EatWS, Lt, -1, -1, -1, -1, -1 }, // CommentR
- { EatWS, Lt, -1, -1, -1, -1, -1 }, // PInstr
- { EatWS, Lt, -1, -1, -1, -1, -1 } // PInstrR
- };
- signed char state;
- signed char input;
-
- if ( d->parseStack==0 || d->parseStack->isEmpty() ) {
- d->xmldecl_possible = TRUE;
- d->doctype_read = FALSE;
- state = Init;
- } else {
- state = d->parseStack->pop().state;
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: parseProlog (cont) in state %d", state );
-#endif
- if ( !d->parseStack->isEmpty() ) {
- ParseFunction function = d->parseStack->top().function;
- if ( function == &TQXmlSimpleReader::eat_ws ) {
- d->parseStack->pop();
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: eat_ws (cont)" );
-#endif
- }
- if ( !(this->*function)() ) {
- parseFailed( &TQXmlSimpleReader::parseProlog, state );
- return FALSE;
- }
- }
- }
-
- for (;;) {
- switch ( state ) {
- case DocType:
- if ( d->doctype_read ) {
- reportParseError( XMLERR_MORETHANONEDOCTYPE );
- return FALSE;
- } else {
- d->doctype_read = FALSE;
- }
- break;
- case Comment:
- if ( lexicalHnd ) {
- if ( !lexicalHnd->comment( string() ) ) {
- reportParseError( lexicalHnd->errorString() );
- return FALSE;
- }
- }
- state = CommentR;
- break;
- case PInstr:
- // call the handler
- if ( contentHnd ) {
- if ( d->xmldecl_possible && !d->xmlVersion.isEmpty() ) {
- TQString value( "version = '" );
- value += d->xmlVersion;
- value += "'";
- if ( !d->encoding.isEmpty() ) {
- value += " encoding = '";
- value += d->encoding;
- value += "'";
- }
- if ( d->standalone == TQXmlSimpleReaderPrivate::Yes ) {
- value += " standalone = 'yes'";
- } else if ( d->standalone == TQXmlSimpleReaderPrivate::No ) {
- value += " standalone = 'no'";
- }
- if ( !contentHnd->processingInstruction( "xml", value ) ) {
- reportParseError( contentHnd->errorString() );
- return FALSE;
- }
- } else {
- if ( !contentHnd->processingInstruction( name(), string() ) ) {
- reportParseError( contentHnd->errorString() );
- return FALSE;
- }
- }
- }
- // XML declaration only on first position possible
- d->xmldecl_possible = FALSE;
- state = PInstrR;
- break;
- case Done:
- return TRUE;
- case -1:
- reportParseError( XMLERR_ERRORPARSINGELEMENT );
- return FALSE;
- }
-
- if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parseProlog, state );
- return FALSE;
- }
- if ( is_S(c) ) {
- input = InpWs;
- } else if ( c.tqunicode() == '<' ) {
- input = InpLt;
- } else if ( c.tqunicode() == '?' ) {
- input = InpQm;
- } else if ( c.tqunicode() == '!' ) {
- input = InpEm;
- } else if ( c.tqunicode() == 'D' ) {
- input = InpD;
- } else if ( c.tqunicode() == '-' ) {
- input = InpDash;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch ( state ) {
- case EatWS:
- // XML declaration only on first position possible
- d->xmldecl_possible = FALSE;
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseProlog, state );
- return FALSE;
- }
- break;
- case Lt:
- next();
- break;
- case Em:
- // XML declaration only on first position possible
- d->xmldecl_possible = FALSE;
- next();
- break;
- case DocType:
- if ( !parseDoctype() ) {
- parseFailed( &TQXmlSimpleReader::parseProlog, state );
- return FALSE;
- }
- break;
- case Comment:
- case CommentR:
- if ( !parseComment() ) {
- parseFailed( &TQXmlSimpleReader::parseProlog, state );
- return FALSE;
- }
- break;
- case PInstr:
- case PInstrR:
- d->parsePI_xmldecl = d->xmldecl_possible;
- if ( !parsePI() ) {
- parseFailed( &TQXmlSimpleReader::parseProlog, state );
- return FALSE;
- }
- break;
- }
- }
-}
-
-/*
- Parse an element [39].
-
- Precondition: the opening '<' is already read.
-*/
-bool TQXmlSimpleReader::parseElement()
-{
- const int Init = 0;
- const int ReadName = 1;
- const int Ws1 = 2;
- const int STagEnd = 3;
- const int STagEnd2 = 4;
- const int ETagBegin = 5;
- const int ETagBegin2 = 6;
- const int Ws2 = 7;
- const int EmptyTag = 8;
- const int Attrib = 9;
- const int AttribPro = 10; // like Attrib, but processAttribute was already called
- const int Ws3 = 11;
- const int Done = 12;
-
- const int InpWs = 0; // whitespace
- const int InpNameBe = 1; // is_NameBeginning()
- const int InpGt = 2; // >
- const int InpSlash = 3; // /
- const int InpUnknown = 4;
-
- static const int table[12][5] = {
- /* InpWs InpNameBe InpGt InpSlash InpUnknown */
- { -1, ReadName, -1, -1, -1 }, // Init
- { Ws1, Attrib, STagEnd, EmptyTag, -1 }, // ReadName
- { -1, Attrib, STagEnd, EmptyTag, -1 }, // Ws1
- { STagEnd2, STagEnd2, STagEnd2, STagEnd2, STagEnd2 }, // STagEnd
- { -1, -1, -1, ETagBegin, -1 }, // STagEnd2
- { -1, ETagBegin2, -1, -1, -1 }, // ETagBegin
- { Ws2, -1, Done, -1, -1 }, // ETagBegin2
- { -1, -1, Done, -1, -1 }, // Ws2
- { -1, -1, Done, -1, -1 }, // EmptyTag
- { Ws3, Attrib, STagEnd, EmptyTag, -1 }, // Attrib
- { Ws3, Attrib, STagEnd, EmptyTag, -1 }, // AttribPro
- { -1, Attrib, STagEnd, EmptyTag, -1 } // Ws3
- };
- int state;
- int input;
-
- if ( d->parseStack==0 || d->parseStack->isEmpty() ) {
- state = Init;
- } else {
- state = d->parseStack->pop().state;
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: parseElement (cont) in state %d", state );
-#endif
- if ( !d->parseStack->isEmpty() ) {
- ParseFunction function = d->parseStack->top().function;
- if ( function == &TQXmlSimpleReader::eat_ws ) {
- d->parseStack->pop();
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: eat_ws (cont)" );
-#endif
- }
- if ( !(this->*function)() ) {
- parseFailed( &TQXmlSimpleReader::parseElement, state );
- return FALSE;
- }
- }
- }
-
- for (;;) {
- switch ( state ) {
- case ReadName:
- // store it on the stack
- d->tags.push( name() );
- // empty the attributes
- d->attList.clear();
- if ( d->useNamespaces )
- d->namespaceSupport.pushContext();
- break;
- case ETagBegin2:
- if ( !processElementETagBegin2() )
- return FALSE;
- break;
- case Attrib:
- if ( !processElementAttribute() )
- return FALSE;
- state = AttribPro;
- break;
- case Done:
- return TRUE;
- case -1:
- reportParseError( XMLERR_ERRORPARSINGELEMENT );
- return FALSE;
- }
-
- if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parseElement, state );
- return FALSE;
- }
-
- if (fastDetermineNameChar(c) == NameBeginning) {
- input = InpNameBe;
- } else if ( c.tqunicode() == '>' ) {
- input = InpGt;
- } else if (is_S(c)) {
- input = InpWs;
- } else if (c.tqunicode() == '/') {
- input = InpSlash;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch ( state ) {
- case ReadName:
- d->parseName_useRef = FALSE;
- if ( !parseName() ) {
- parseFailed( &TQXmlSimpleReader::parseElement, state );
- return FALSE;
- }
- break;
- case Ws1:
- case Ws2:
- case Ws3:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseElement, state );
- return FALSE;
- }
- break;
- case STagEnd:
- // call the handler
- if ( contentHnd ) {
- const TQString &tagsTop = d->tags.top();
- if ( d->useNamespaces ) {
- TQString uri, lname;
- d->namespaceSupport.processName(tagsTop, FALSE, uri, lname);
- if (!contentHnd->startElement(uri, lname, tagsTop, d->attList)) {
- reportParseError( contentHnd->errorString() );
- return FALSE;
- }
- } else {
- if (!contentHnd->startElement(TQString::null, TQString::null, tagsTop, d->attList)) {
- reportParseError( contentHnd->errorString() );
- return FALSE;
- }
- }
- }
- next();
- break;
- case STagEnd2:
- if ( !parseContent() ) {
- parseFailed( &TQXmlSimpleReader::parseElement, state );
- return FALSE;
- }
- break;
- case ETagBegin:
- next();
- break;
- case ETagBegin2:
- // get the name of the tag
- d->parseName_useRef = FALSE;
- if ( !parseName() ) {
- parseFailed( &TQXmlSimpleReader::parseElement, state );
- return FALSE;
- }
- break;
- case EmptyTag:
- if ( d->tags.isEmpty() ) {
- reportParseError( XMLERR_TAGMISMATCH );
- return FALSE;
- }
- if ( !processElementEmptyTag() )
- return FALSE;
- next();
- break;
- case Attrib:
- case AttribPro:
- // get name and value of attribute
- if ( !parseAttribute() ) {
- parseFailed( &TQXmlSimpleReader::parseElement, state );
- return FALSE;
- }
- break;
- case Done:
- next();
- break;
- }
- }
-}
-/*
- Helper to break down the size of the code in the case statement.
- Return FALSE on error, otherwise TRUE.
-*/
-bool TQXmlSimpleReader::processElementEmptyTag()
-{
- TQString uri, lname;
- // pop the stack and call the handler
- if ( contentHnd ) {
- if ( d->useNamespaces ) {
- // report startElement first...
- d->namespaceSupport.processName( d->tags.top(), FALSE, uri, lname );
- if ( !contentHnd->startElement( uri, lname, d->tags.top(), d->attList ) ) {
- reportParseError( contentHnd->errorString() );
- return FALSE;
- }
- // ... followed by endElement...
- if ( !contentHnd->endElement( uri, lname, d->tags.pop() ) ) {
- reportParseError( contentHnd->errorString() );
- return FALSE;
- }
- // ... followed by endPrefixMapping
- TQStringList prefixesBefore, prefixesAfter;
- if ( contentHnd ) {
- prefixesBefore = d->namespaceSupport.prefixes();
- }
- d->namespaceSupport.popContext();
- // call the handler for prefix mapping
- prefixesAfter = d->namespaceSupport.prefixes();
- for ( TQStringList::Iterator it = prefixesBefore.begin(); it != prefixesBefore.end(); ++it ) {
- if ( prefixesAfter.contains(*it) == 0 ) {
- if ( !contentHnd->endPrefixMapping( *it ) ) {
- reportParseError( contentHnd->errorString() );
- return FALSE;
- }
- }
- }
- } else {
- // report startElement first...
- if ( !contentHnd->startElement( TQString::null, TQString::null, d->tags.top(), d->attList ) ) {
- reportParseError( contentHnd->errorString() );
- return FALSE;
- }
- // ... followed by endElement
- if ( !contentHnd->endElement( TQString::null, TQString::null, d->tags.pop() ) ) {
- reportParseError( contentHnd->errorString() );
- return FALSE;
- }
- }
- } else {
- d->tags.pop_back();
- d->namespaceSupport.popContext();
- }
- return TRUE;
-}
-/*
- Helper to break down the size of the code in the case statement.
- Return FALSE on error, otherwise TRUE.
-*/
-bool TQXmlSimpleReader::processElementETagBegin2()
-{
- const TQString &name = TQXmlSimpleReader::name();
-
- // pop the stack and compare it with the name
- if ( d->tags.pop() != name ) {
- reportParseError( XMLERR_TAGMISMATCH );
- return FALSE;
- }
- // call the handler
- if ( contentHnd ) {
- TQString uri, lname;
-
- if (d->useNamespaces)
- d->namespaceSupport.processName(name, FALSE, uri, lname);
- if (!contentHnd->endElement(uri, lname, name)) {
- reportParseError(contentHnd->errorString());
- return FALSE;
- }
- }
- if ( d->useNamespaces ) {
- NamespaceMap prefixesBefore, prefixesAfter;
- if (contentHnd)
- prefixesBefore = d->namespaceSupport.d->ns;
-
- d->namespaceSupport.popContext();
- // call the handler for prefix mapping
- if ( contentHnd ) {
- prefixesAfter = d->namespaceSupport.d->ns;
- if (prefixesBefore.size() != prefixesAfter.size()) {
- for (NamespaceMap::const_iterator it = prefixesBefore.constBegin(); it != prefixesBefore.constEnd(); ++it) {
- if (!it.key().isEmpty() && !prefixesAfter.contains(it.key())) {
- if (!contentHnd->endPrefixMapping(it.key())) {
- reportParseError(contentHnd->errorString());
- return FALSE;
- }
- }
- }
- }
- }
- }
- return TRUE;
-}
-/*
- Helper to break down the size of the code in the case statement.
- Return FALSE on error, otherwise TRUE.
-*/
-bool TQXmlSimpleReader::processElementAttribute()
-{
- TQString uri, lname, prefix;
- const TQString &name = TQXmlSimpleReader::name();
- const TQString &string = TQXmlSimpleReader::string();
-
- // add the attribute to the list
- if ( d->useNamespaces ) {
- // is it a namespace declaration?
- d->namespaceSupport.splitName(name, prefix, lname);
- if (prefix == "xmlns") {
- // namespace declaration
- d->namespaceSupport.setPrefix( lname, string );
- if ( d->useNamespacePrefixes ) {
- // according to http://www.w3.org/2000/xmlns/, the "prefix"
- // xmlns maps to the namespace name
- // http://www.w3.org/2000/xmlns/
- d->attList.append( name, "http://www.w3.org/2000/xmlns/", lname, string );
- }
- // call the handler for prefix mapping
- if ( contentHnd ) {
- if ( !contentHnd->startPrefixMapping( lname, string ) ) {
- reportParseError( contentHnd->errorString() );
- return FALSE;
- }
- }
- } else {
- // no namespace delcaration
- d->namespaceSupport.processName( name, TRUE, uri, lname );
- d->attList.append( name, uri, lname, string );
- }
- } else {
- // no namespace support
- d->attList.append( name, TQString::null, TQString::null, string );
- }
- return TRUE;
-}
-
-/*
- Parse a content [43].
-
- A content is only used between tags. If a end tag is found the < is already
- read and the head stand on the '/' of the end tag '</name>'.
-*/
-bool TQXmlSimpleReader::parseContent()
-{
- const signed char Init = 0;
- const signed char ChD = 1; // CharData
- const signed char ChD1 = 2; // CharData help state
- const signed char ChD2 = 3; // CharData help state
- const signed char Ref = 4; // Reference
- const signed char Lt = 5; // '<' read
- const signed char PInstr = 6; // PI
- const signed char PInstrR = 7; // same as PInstr, but already reported
- const signed char Elem = 8; // Element
- const signed char Em = 9; // '!' read
- const signed char Com = 10; // Comment
- const signed char ComR = 11; // same as Com, but already reported
- const signed char CDS = 12; // CDSect
- const signed char CDS1 = 13; // read a CDSect
- const signed char CDS2 = 14; // read a CDSect (help state)
- const signed char CDS3 = 15; // read a CDSect (help state)
- const signed char Done = 16; // finished reading content
-
- const signed char InpLt = 0; // <
- const signed char InpGt = 1; // >
- const signed char InpSlash = 2; // /
- const signed char InpTQMark = 3; // ?
- const signed char InpEMark = 4; // !
- const signed char InpAmp = 5; // &
- const signed char InpDash = 6; // -
- const signed char InpOpenB = 7; // [
- const signed char InpCloseB = 8; // ]
- const signed char InpUnknown = 9;
-
- static const signed char mapCLT2FSMChar[] = {
- InpUnknown, // white space
- InpUnknown, // %
- InpAmp, // &
- InpGt, // >
- InpLt, // <
- InpSlash, // /
- InpTQMark, // ?
- InpEMark, // !
- InpDash, // -
- InpCloseB, // ]
- InpOpenB, // [
- InpUnknown, // =
- InpUnknown, // "
- InpUnknown, // '
- InpUnknown // unknown
- };
-
- static const signed char table[16][10] = {
- /* InpLt InpGt InpSlash InpTQMark InpEMark InpAmp InpDash InpOpenB InpCloseB InpUnknown */
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD1, ChD }, // Init
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD1, ChD }, // ChD
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD2, ChD }, // ChD1
- { Lt, -1, ChD, ChD, ChD, Ref, ChD, ChD, ChD2, ChD }, // ChD2
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD, ChD }, // Ref (same as Init)
- { -1, -1, Done, PInstr, Em, -1, -1, -1, -1, Elem }, // Lt
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD, ChD }, // PInstr (same as Init)
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD, ChD }, // PInstrR
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD, ChD }, // Elem (same as Init)
- { -1, -1, -1, -1, -1, -1, Com, CDS, -1, -1 }, // Em
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD, ChD }, // Com (same as Init)
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD, ChD }, // ComR
- { CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS2, CDS1 }, // CDS
- { CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS2, CDS1 }, // CDS1
- { CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS3, CDS1 }, // CDS2
- { CDS1, Init, CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS3, CDS1 } // CDS3
- };
- signed char state;
- signed char input;
-
- if ( d->parseStack==0 || d->parseStack->isEmpty() ) {
- d->contentCharDataRead = FALSE;
- state = Init;
- } else {
- state = d->parseStack->pop().state;
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: parseContent (cont) in state %d", state );
-#endif
- if ( !d->parseStack->isEmpty() ) {
- ParseFunction function = d->parseStack->top().function;
- if ( function == &TQXmlSimpleReader::eat_ws ) {
- d->parseStack->pop();
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: eat_ws (cont)" );
-#endif
- }
- if ( !(this->*function)() ) {
- parseFailed( &TQXmlSimpleReader::parseContent, state );
- return FALSE;
- }
- }
- }
-
- for (;;) {
- switch ( state ) {
- case Ref:
- if ( !d->contentCharDataRead)
- d->contentCharDataRead = d->parseReference_charDataRead;
- break;
- case PInstr:
- if ( contentHnd ) {
- if ( !contentHnd->processingInstruction(name(),string()) ) {
- reportParseError( contentHnd->errorString() );
- return FALSE;
- }
- }
- state = PInstrR;
- break;
- case Com:
- if ( lexicalHnd ) {
- if ( !lexicalHnd->comment( string() ) ) {
- reportParseError( lexicalHnd->errorString() );
- return FALSE;
- }
- }
- state = ComR;
- break;
- case CDS:
- stringClear();
- break;
- case CDS2:
- if ( !atEnd() && c.tqunicode() != ']' )
- stringAddC( ']' );
- break;
- case CDS3:
- // test if this skipping was legal
- if ( !atEnd() ) {
- if ( c.tqunicode() == '>' ) {
- // the end of the CDSect
- if ( lexicalHnd ) {
- if ( !lexicalHnd->startCDATA() ) {
- reportParseError( lexicalHnd->errorString() );
- return FALSE;
- }
- }
- if ( contentHnd ) {
- if ( !contentHnd->characters( string() ) ) {
- reportParseError( contentHnd->errorString() );
- return FALSE;
- }
- }
- if ( lexicalHnd ) {
- if ( !lexicalHnd->endCDATA() ) {
- reportParseError( lexicalHnd->errorString() );
- return FALSE;
- }
- }
- } else if (c.tqunicode() == ']') {
- // three or more ']'
- stringAddC( ']' );
- } else {
- // after ']]' comes another character
- stringAddC( ']' );
- stringAddC( ']' );
- }
- }
- break;
- case Done:
- // call the handler for CharData
- if ( contentHnd ) {
- if ( d->contentCharDataRead ) {
- if ( d->reportWhitespaceCharData || !string().simplifyWhiteSpace().isEmpty() ) {
- if ( !contentHnd->characters( string() ) ) {
- reportParseError( contentHnd->errorString() );
- return FALSE;
- }
- }
- }
- }
- // Done
- return TRUE;
- case -1:
- // Error
- reportParseError( XMLERR_ERRORPARSINGCONTENT );
- return FALSE;
- }
-
- // get input (use lookup-table instead of nested ifs for performance
- // reasons)
- if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parseContent, state );
- return FALSE;
- }
- if ( c.row() ) {
- input = InpUnknown;
- } else {
- input = mapCLT2FSMChar[ charLookupTable[ c.cell() ] ];
- }
- state = table[state][input];
-
- switch ( state ) {
- case Init:
- // skip the ending '>' of a CDATASection
- next();
- break;
- case ChD:
- // on first call: clear string
- if ( !d->contentCharDataRead ) {
- d->contentCharDataRead = TRUE;
- stringClear();
- }
- stringAddC();
- if ( d->reportEntities ) {
- if ( !reportEndEntities() )
- return FALSE;
- }
- next();
- break;
- case ChD1:
- // on first call: clear string
- if ( !d->contentCharDataRead ) {
- d->contentCharDataRead = TRUE;
- stringClear();
- }
- stringAddC();
- if ( d->reportEntities ) {
- if ( !reportEndEntities() )
- return FALSE;
- }
- next();
- break;
- case ChD2:
- stringAddC();
- if ( d->reportEntities ) {
- if ( !reportEndEntities() )
- return FALSE;
- }
- next();
- break;
- case Ref:
- if ( !d->contentCharDataRead) {
- // reference may be CharData; so clear string to be safe
- stringClear();
- d->parseReference_context = InContent;
- if ( !parseReference() ) {
- parseFailed( &TQXmlSimpleReader::parseContent, state );
- return FALSE;
- }
- } else {
- if ( d->reportEntities ) {
- // report character data in chunks
- if ( contentHnd ) {
- if ( d->reportWhitespaceCharData || !string().simplifyWhiteSpace().isEmpty() ) {
- if ( !contentHnd->characters( string() ) ) {
- reportParseError( contentHnd->errorString() );
- return FALSE;
- }
- }
- }
- stringClear();
- }
- d->parseReference_context = InContent;
- if ( !parseReference() ) {
- parseFailed( &TQXmlSimpleReader::parseContent, state );
- return FALSE;
- }
- }
- break;
- case Lt:
- // call the handler for CharData
- if ( contentHnd ) {
- if ( d->contentCharDataRead ) {
- if ( d->reportWhitespaceCharData || !string().simplifyWhiteSpace().isEmpty() ) {
- if ( !contentHnd->characters( string() ) ) {
- reportParseError( contentHnd->errorString() );
- return FALSE;
- }
- }
- }
- }
- d->contentCharDataRead = FALSE;
- next();
- break;
- case PInstr:
- case PInstrR:
- d->parsePI_xmldecl = FALSE;
- if ( !parsePI() ) {
- parseFailed( &TQXmlSimpleReader::parseContent, state );
- return FALSE;
- }
- break;
- case Elem:
- if ( !parseElement() ) {
- parseFailed( &TQXmlSimpleReader::parseContent, state );
- return FALSE;
- }
- break;
- case Em:
- next();
- break;
- case Com:
- case ComR:
- if ( !parseComment() ) {
- parseFailed( &TQXmlSimpleReader::parseContent, state );
- return FALSE;
- }
- break;
- case CDS:
- d->parseString_s = "[CDATA[";
- if ( !parseString() ) {
- parseFailed( &TQXmlSimpleReader::parseContent, state );
- return FALSE;
- }
- break;
- case CDS1:
- stringAddC();
- next();
- break;
- case CDS2:
- // skip ']'
- next();
- break;
- case CDS3:
- // skip ']'...
- next();
- break;
- }
- }
-}
-bool TQXmlSimpleReader::reportEndEntities()
-{
- int count = (int)d->xmlRef.count();
- while ( count != 0 && d->xmlRef.top().isEmpty() ) {
- if ( contentHnd ) {
- if ( d->reportWhitespaceCharData || !string().simplifyWhiteSpace().isEmpty() ) {
- if ( !contentHnd->characters( string() ) ) {
- reportParseError( contentHnd->errorString() );
- return FALSE;
- }
- }
- }
- stringClear();
- if ( lexicalHnd ) {
- if ( !lexicalHnd->endEntity(d->xmlRefName.top()) ) {
- reportParseError( lexicalHnd->errorString() );
- return FALSE;
- }
- }
- d->xmlRef.pop_back();
- d->xmlRefName.pop_back();
- count--;
- }
- return TRUE;
-}
-
-/*
- Parse Misc [27].
-*/
-bool TQXmlSimpleReader::parseMisc()
-{
- const signed char Init = 0;
- const signed char Lt = 1; // '<' was read
- const signed char Comment = 2; // read comment
- const signed char eatWS = 3; // eat whitespaces
- const signed char PInstr = 4; // read PI
- const signed char Comment2 = 5; // read comment
-
- const signed char InpWs = 0; // S
- const signed char InpLt = 1; // <
- const signed char InpQm = 2; // ?
- const signed char InpEm = 3; // !
- const signed char InpUnknown = 4;
-
- static const signed char table[3][5] = {
- /* InpWs InpLt InpQm InpEm InpUnknown */
- { eatWS, Lt, -1, -1, -1 }, // Init
- { -1, -1, PInstr,Comment, -1 }, // Lt
- { -1, -1, -1, -1, Comment2 } // Comment
- };
- signed char state;
- signed char input;
-
- if ( d->parseStack==0 || d->parseStack->isEmpty() ) {
- state = Init;
- } else {
- state = d->parseStack->pop().state;
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: parseMisc (cont) in state %d", state );
-#endif
- if ( !d->parseStack->isEmpty() ) {
- ParseFunction function = d->parseStack->top().function;
- if ( function == &TQXmlSimpleReader::eat_ws ) {
- d->parseStack->pop();
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: eat_ws (cont)" );
-#endif
- }
- if ( !(this->*function)() ) {
- parseFailed( &TQXmlSimpleReader::parseMisc, state );
- return FALSE;
- }
- }
- }
-
- for (;;) {
- switch ( state ) {
- case eatWS:
- return TRUE;
- case PInstr:
- if ( contentHnd ) {
- if ( !contentHnd->processingInstruction(name(),string()) ) {
- reportParseError( contentHnd->errorString() );
- return FALSE;
- }
- }
- return TRUE;
- case Comment2:
- if ( lexicalHnd ) {
- if ( !lexicalHnd->comment( string() ) ) {
- reportParseError( lexicalHnd->errorString() );
- return FALSE;
- }
- }
- return TRUE;
- case -1:
- // Error
- reportParseError( XMLERR_UNEXPECTEDCHARACTER );
- return FALSE;
- }
-
- if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parseMisc, state );
- return FALSE;
- }
- if ( is_S(c) ) {
- input = InpWs;
- } else if ( c.tqunicode() == '<' ) {
- input = InpLt;
- } else if ( c.tqunicode() == '?' ) {
- input = InpQm;
- } else if ( c.tqunicode() == '!' ) {
- input = InpEm;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch ( state ) {
- case eatWS:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseMisc, state );
- return FALSE;
- }
- break;
- case Lt:
- next();
- break;
- case PInstr:
- d->parsePI_xmldecl = FALSE;
- if ( !parsePI() ) {
- parseFailed( &TQXmlSimpleReader::parseMisc, state );
- return FALSE;
- }
- break;
- case Comment:
- next();
- break;
- case Comment2:
- if ( !parseComment() ) {
- parseFailed( &TQXmlSimpleReader::parseMisc, state );
- return FALSE;
- }
- break;
- }
- }
-}
-
-/*
- Parse a processing instruction [16].
-
- If xmldec is TRUE, it tries to parse a PI or a XML declaration [23].
-
- Precondition: the beginning '<' of the PI is already read and the head stand
- on the '?' of '<?'.
-
- If this funktion was successful, the head-position is on the first
- character after the PI.
-*/
-bool TQXmlSimpleReader::parsePI()
-{
- const signed char Init = 0;
- const signed char QmI = 1; // ? was read
- const signed char Name = 2; // read Name
- const signed char XMLDecl = 3; // read XMLDecl
- const signed char Ws1 = 4; // eat ws after "xml" of XMLDecl
- const signed char PInstr = 5; // read PI
- const signed char Ws2 = 6; // eat ws after Name of PI
- const signed char Version = 7; // read versionInfo
- const signed char Ws3 = 8; // eat ws after versionInfo
- const signed char EorSD = 9; // read EDecl or SDDecl
- const signed char Ws4 = 10; // eat ws after EDecl or SDDecl
- const signed char SD = 11; // read SDDecl
- const signed char Ws5 = 12; // eat ws after SDDecl
- const signed char ADone = 13; // almost done
- const signed char Char = 14; // Char was read
- const signed char Qm = 15; // Qm was read
- const signed char Done = 16; // finished reading content
-
- const signed char InpWs = 0; // whitespace
- const signed char InpNameBe = 1; // NameBeginning()
- const signed char InpGt = 2; // >
- const signed char InpQm = 3; // ?
- const signed char InpUnknown = 4;
-
- static const signed char table[16][5] = {
- /* InpWs, InpNameBe InpGt InpQm InpUnknown */
- { -1, -1, -1, QmI, -1 }, // Init
- { -1, Name, -1, -1, -1 }, // QmI
- { -1, -1, -1, -1, -1 }, // Name (this state is left not through input)
- { Ws1, -1, -1, -1, -1 }, // XMLDecl
- { -1, Version, -1, -1, -1 }, // Ws1
- { Ws2, -1, -1, Qm, -1 }, // PInstr
- { Char, Char, Char, Qm, Char }, // Ws2
- { Ws3, -1, -1, ADone, -1 }, // Version
- { -1, EorSD, -1, ADone, -1 }, // Ws3
- { Ws4, -1, -1, ADone, -1 }, // EorSD
- { -1, SD, -1, ADone, -1 }, // Ws4
- { Ws5, -1, -1, ADone, -1 }, // SD
- { -1, -1, -1, ADone, -1 }, // Ws5
- { -1, -1, Done, -1, -1 }, // ADone
- { Char, Char, Char, Qm, Char }, // Char
- { Char, Char, Done, Qm, Char }, // Qm
- };
- signed char state;
- signed char input;
-
- if ( d->parseStack==0 || d->parseStack->isEmpty() ) {
- state = Init;
- } else {
- state = d->parseStack->pop().state;
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: parsePI (cont) in state %d", state );
-#endif
- if ( !d->parseStack->isEmpty() ) {
- ParseFunction function = d->parseStack->top().function;
- if ( function == &TQXmlSimpleReader::eat_ws ) {
- d->parseStack->pop();
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: eat_ws (cont)" );
-#endif
- }
- if ( !(this->*function)() ) {
- parseFailed( &TQXmlSimpleReader::parsePI, state );
- return FALSE;
- }
- }
- }
-
- for (;;) {
- switch ( state ) {
- case Name:
- // test what name was read and determine the next state
- // (not very beautiful, I admit)
- if ( name().lower() == "xml" ) {
- if ( d->parsePI_xmldecl && name()=="xml" ) {
- state = XMLDecl;
- } else {
- reportParseError( XMLERR_INVALIDNAMEFORPI );
- return FALSE;
- }
- } else {
- state = PInstr;
- stringClear();
- }
- break;
- case Version:
- // get version (syntax like an attribute)
- if ( name() != "version" ) {
- reportParseError( XMLERR_VERSIONEXPECTED );
- return FALSE;
- }
- d->xmlVersion = string();
- break;
- case EorSD:
- // get the EDecl or SDDecl (syntax like an attribute)
- if ( name() == "standalone" ) {
- if ( string()=="yes" ) {
- d->standalone = TQXmlSimpleReaderPrivate::Yes;
- } else if ( string()=="no" ) {
- d->standalone = TQXmlSimpleReaderPrivate::No;
- } else {
- reportParseError( XMLERR_WRONGVALUEFORSDECL );
- return FALSE;
- }
- } else if ( name() == "encoding" ) {
- d->encoding = string();
- } else {
- reportParseError( XMLERR_EDECLORSDDECLEXPECTED );
- return FALSE;
- }
- break;
- case SD:
- if ( name() != "standalone" ) {
- reportParseError( XMLERR_SDDECLEXPECTED );
- return FALSE;
- }
- if ( string()=="yes" ) {
- d->standalone = TQXmlSimpleReaderPrivate::Yes;
- } else if ( string()=="no" ) {
- d->standalone = TQXmlSimpleReaderPrivate::No;
- } else {
- reportParseError( XMLERR_WRONGVALUEFORSDECL );
- return FALSE;
- }
- break;
- case Qm:
- // test if the skipping was legal
- if ( !atEnd() && c.tqunicode() != '>' )
- stringAddC( '?' );
- break;
- case Done:
- return TRUE;
- case -1:
- // Error
- reportParseError( XMLERR_UNEXPECTEDCHARACTER );
- return FALSE;
- }
-
- if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parsePI, state );
- return FALSE;
- }
- if ( is_S(c) ) {
- input = InpWs;
- } else if (determineNameChar(c) == NameBeginning) {
- input = InpNameBe;
- } else if ( c.tqunicode() == '>' ) {
- input = InpGt;
- } else if ( c.tqunicode() == '?' ) {
- input = InpQm;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch ( state ) {
- case QmI:
- next();
- break;
- case Name:
- d->parseName_useRef = FALSE;
- if ( !parseName() ) {
- parseFailed( &TQXmlSimpleReader::parsePI, state );
- return FALSE;
- }
- break;
- case Ws1:
- case Ws2:
- case Ws3:
- case Ws4:
- case Ws5:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parsePI, state );
- return FALSE;
- }
- break;
- case Version:
- if ( !parseAttribute() ) {
- parseFailed( &TQXmlSimpleReader::parsePI, state );
- return FALSE;
- }
- break;
- case EorSD:
- if ( !parseAttribute() ) {
- parseFailed( &TQXmlSimpleReader::parsePI, state );
- return FALSE;
- }
- break;
- case SD:
- // get the SDDecl (syntax like an attribute)
- if ( d->standalone != TQXmlSimpleReaderPrivate::Unknown ) {
- // already parsed the standalone declaration
- reportParseError( XMLERR_UNEXPECTEDCHARACTER );
- return FALSE;
- }
- if ( !parseAttribute() ) {
- parseFailed( &TQXmlSimpleReader::parsePI, state );
- return FALSE;
- }
- break;
- case ADone:
- next();
- break;
- case Char:
- stringAddC();
- next();
- break;
- case Qm:
- // skip the '?'
- next();
- break;
- case Done:
- next();
- break;
- }
- }
-}
-
-/*
- Parse a document type definition (doctypedecl [28]).
-
- Precondition: the beginning '<!' of the doctype is already read the head
- stands on the 'D' of '<!DOCTYPE'.
-
- If this funktion was successful, the head-position is on the first
- character after the document type definition.
-*/
-bool TQXmlSimpleReader::parseDoctype()
-{
- const signed char Init = 0;
- const signed char Doctype = 1; // read the doctype
- const signed char Ws1 = 2; // eat_ws
- const signed char Doctype2 = 3; // read the doctype, part 2
- const signed char Ws2 = 4; // eat_ws
- const signed char Sys = 5; // read SYSTEM or PUBLIC
- const signed char Ws3 = 6; // eat_ws
- const signed char MP = 7; // markupdecl or PEReference
- const signed char MPR = 8; // same as MP, but already reported
- const signed char PER = 9; // PERReference
- const signed char Mup = 10; // markupdecl
- const signed char Ws4 = 11; // eat_ws
- const signed char MPE = 12; // end of markupdecl or PEReference
- const signed char Done = 13;
-
- const signed char InpWs = 0;
- const signed char InpD = 1; // 'D'
- const signed char InpS = 2; // 'S' or 'P'
- const signed char InpOB = 3; // [
- const signed char InpCB = 4; // ]
- const signed char InpPer = 5; // %
- const signed char InpGt = 6; // >
- const signed char InpUnknown = 7;
-
- static const signed char table[13][8] = {
- /* InpWs, InpD InpS InpOB InpCB InpPer InpGt InpUnknown */
- { -1, Doctype, -1, -1, -1, -1, -1, -1 }, // Init
- { Ws1, -1, -1, -1, -1, -1, -1, -1 }, // Doctype
- { -1, Doctype2, Doctype2, -1, -1, -1, -1, Doctype2 }, // Ws1
- { Ws2, -1, Sys, MP, -1, -1, Done, -1 }, // Doctype2
- { -1, -1, Sys, MP, -1, -1, Done, -1 }, // Ws2
- { Ws3, -1, -1, MP, -1, -1, Done, -1 }, // Sys
- { -1, -1, -1, MP, -1, -1, Done, -1 }, // Ws3
- { -1, -1, -1, -1, MPE, PER, -1, Mup }, // MP
- { -1, -1, -1, -1, MPE, PER, -1, Mup }, // MPR
- { Ws4, -1, -1, -1, MPE, PER, -1, Mup }, // PER
- { Ws4, -1, -1, -1, MPE, PER, -1, Mup }, // Mup
- { -1, -1, -1, -1, MPE, PER, -1, Mup }, // Ws4
- { -1, -1, -1, -1, -1, -1, Done, -1 } // MPE
- };
- signed char state;
- signed char input;
-
- if ( d->parseStack==0 || d->parseStack->isEmpty() ) {
- d->startDTDwasReported = FALSE;
- d->systemId = TQString::null;
- d->publicId = TQString::null;
- state = Init;
- } else {
- state = d->parseStack->pop().state;
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: parseDoctype (cont) in state %d", state );
-#endif
- if ( !d->parseStack->isEmpty() ) {
- ParseFunction function = d->parseStack->top().function;
- if ( function == &TQXmlSimpleReader::eat_ws ) {
- d->parseStack->pop();
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: eat_ws (cont)" );
-#endif
- }
- if ( !(this->*function)() ) {
- parseFailed( &TQXmlSimpleReader::parseDoctype, state );
- return FALSE;
- }
- }
- }
-
- for (;;) {
- switch ( state ) {
- case Doctype2:
- d->doctype = name();
- break;
- case MP:
- if ( !d->startDTDwasReported && lexicalHnd ) {
- d->startDTDwasReported = TRUE;
- if ( !lexicalHnd->startDTD( d->doctype, d->publicId, d->systemId ) ) {
- reportParseError( lexicalHnd->errorString() );
- return FALSE;
- }
- }
- state = MPR;
- break;
- case Done:
- return TRUE;
- case -1:
- // Error
- reportParseError( XMLERR_ERRORPARSINGDOCTYPE );
- return FALSE;
- }
-
- if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parseDoctype, state );
- return FALSE;
- }
- if ( is_S(c) ) {
- input = InpWs;
- } else if ( c.tqunicode() == 'D' ) {
- input = InpD;
- } else if ( c.tqunicode() == 'S' ) {
- input = InpS;
- } else if ( c.tqunicode() == 'P' ) {
- input = InpS;
- } else if ( c.tqunicode() == '[' ) {
- input = InpOB;
- } else if ( c.tqunicode() == ']' ) {
- input = InpCB;
- } else if ( c.tqunicode() == '%' ) {
- input = InpPer;
- } else if ( c.tqunicode() == '>' ) {
- input = InpGt;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch ( state ) {
- case Doctype:
- d->parseString_s = "DOCTYPE";
- if ( !parseString() ) {
- parseFailed( &TQXmlSimpleReader::parseDoctype, state );
- return FALSE;
- }
- break;
- case Ws1:
- case Ws2:
- case Ws3:
- case Ws4:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseDoctype, state );
- return FALSE;
- }
- break;
- case Doctype2:
- d->parseName_useRef = FALSE;
- if ( !parseName() ) {
- parseFailed( &TQXmlSimpleReader::parseDoctype, state );
- return FALSE;
- }
- break;
- case Sys:
- d->parseExternalID_allowPublicID = FALSE;
- if ( !parseExternalID() ) {
- parseFailed( &TQXmlSimpleReader::parseDoctype, state );
- return FALSE;
- }
- break;
- case MP:
- case MPR:
- if ( !next_eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseDoctype, state );
- return FALSE;
- }
- break;
- case PER:
- d->parsePEReference_context = InDTD;
- if ( !parsePEReference() ) {
- parseFailed( &TQXmlSimpleReader::parseDoctype, state );
- return FALSE;
- }
- break;
- case Mup:
- if ( !parseMarkupdecl() ) {
- parseFailed( &TQXmlSimpleReader::parseDoctype, state );
- return FALSE;
- }
- break;
- case MPE:
- if ( !next_eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseDoctype, state );
- return FALSE;
- }
- break;
- case Done:
- if ( lexicalHnd ) {
- if ( !d->startDTDwasReported ) {
- d->startDTDwasReported = TRUE;
- if ( !lexicalHnd->startDTD( d->doctype, d->publicId, d->systemId ) ) {
- reportParseError( lexicalHnd->errorString() );
- return FALSE;
- }
- }
- if ( !lexicalHnd->endDTD() ) {
- reportParseError( lexicalHnd->errorString() );
- return FALSE;
- }
- }
- next();
- break;
- }
- }
-}
-
-/*
- Parse a ExternalID [75].
-
- If allowPublicID is TRUE parse ExternalID [75] or PublicID [83].
-*/
-bool TQXmlSimpleReader::parseExternalID()
-{
- const signed char Init = 0;
- const signed char Sys = 1; // parse 'SYSTEM'
- const signed char SysWS = 2; // parse the whitespace after 'SYSTEM'
- const signed char SysSQ = 3; // parse SystemLiteral with '
- const signed char SysSQ2 = 4; // parse SystemLiteral with '
- const signed char SysDQ = 5; // parse SystemLiteral with "
- const signed char SysDQ2 = 6; // parse SystemLiteral with "
- const signed char Pub = 7; // parse 'PUBLIC'
- const signed char PubWS = 8; // parse the whitespace after 'PUBLIC'
- const signed char PubSQ = 9; // parse PubidLiteral with '
- const signed char PubSQ2 = 10; // parse PubidLiteral with '
- const signed char PubDQ = 11; // parse PubidLiteral with "
- const signed char PubDQ2 = 12; // parse PubidLiteral with "
- const signed char PubE = 13; // finished parsing the PubidLiteral
- const signed char PubWS2 = 14; // parse the whitespace after the PubidLiteral
- const signed char PDone = 15; // done if allowPublicID is TRUE
- const signed char Done = 16;
-
- const signed char InpSQ = 0; // '
- const signed char InpDQ = 1; // "
- const signed char InpS = 2; // S
- const signed char InpP = 3; // P
- const signed char InpWs = 4; // white space
- const signed char InpUnknown = 5;
-
- static const signed char table[15][6] = {
- /* InpSQ InpDQ InpS InpP InpWs InpUnknown */
- { -1, -1, Sys, Pub, -1, -1 }, // Init
- { -1, -1, -1, -1, SysWS, -1 }, // Sys
- { SysSQ, SysDQ, -1, -1, -1, -1 }, // SysWS
- { Done, SysSQ2, SysSQ2, SysSQ2, SysSQ2, SysSQ2 }, // SysSQ
- { Done, SysSQ2, SysSQ2, SysSQ2, SysSQ2, SysSQ2 }, // SysSQ2
- { SysDQ2, Done, SysDQ2, SysDQ2, SysDQ2, SysDQ2 }, // SysDQ
- { SysDQ2, Done, SysDQ2, SysDQ2, SysDQ2, SysDQ2 }, // SysDQ2
- { -1, -1, -1, -1, PubWS, -1 }, // Pub
- { PubSQ, PubDQ, -1, -1, -1, -1 }, // PubWS
- { PubE, -1, PubSQ2, PubSQ2, PubSQ2, PubSQ2 }, // PubSQ
- { PubE, -1, PubSQ2, PubSQ2, PubSQ2, PubSQ2 }, // PubSQ2
- { -1, PubE, PubDQ2, PubDQ2, PubDQ2, PubDQ2 }, // PubDQ
- { -1, PubE, PubDQ2, PubDQ2, PubDQ2, PubDQ2 }, // PubDQ2
- { PDone, PDone, PDone, PDone, PubWS2, PDone }, // PubE
- { SysSQ, SysDQ, PDone, PDone, PDone, PDone } // PubWS2
- };
- signed char state;
- signed char input;
-
- if ( d->parseStack==0 || d->parseStack->isEmpty() ) {
- d->systemId = TQString::null;
- d->publicId = TQString::null;
- state = Init;
- } else {
- state = d->parseStack->pop().state;
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: parseExternalID (cont) in state %d", state );
-#endif
- if ( !d->parseStack->isEmpty() ) {
- ParseFunction function = d->parseStack->top().function;
- if ( function == &TQXmlSimpleReader::eat_ws ) {
- d->parseStack->pop();
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: eat_ws (cont)" );
-#endif
- }
- if ( !(this->*function)() ) {
- parseFailed( &TQXmlSimpleReader::parseExternalID, state );
- return FALSE;
- }
- }
- }
-
- for (;;) {
- switch ( state ) {
- case PDone:
- if ( d->parseExternalID_allowPublicID ) {
- d->publicId = string();
- return TRUE;
- } else {
- reportParseError( XMLERR_UNEXPECTEDCHARACTER );
- return FALSE;
- }
- case Done:
- return TRUE;
- case -1:
- // Error
- reportParseError( XMLERR_UNEXPECTEDCHARACTER );
- return FALSE;
- }
-
- if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parseExternalID, state );
- return FALSE;
- }
- if ( is_S(c) ) {
- input = InpWs;
- } else if ( c.tqunicode() == '\'' ) {
- input = InpSQ;
- } else if ( c.tqunicode() == '"' ) {
- input = InpDQ;
- } else if ( c.tqunicode() == 'S' ) {
- input = InpS;
- } else if ( c.tqunicode() == 'P' ) {
- input = InpP;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch ( state ) {
- case Sys:
- d->parseString_s = "SYSTEM";
- if ( !parseString() ) {
- parseFailed( &TQXmlSimpleReader::parseExternalID, state );
- return FALSE;
- }
- break;
- case SysWS:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseExternalID, state );
- return FALSE;
- }
- break;
- case SysSQ:
- case SysDQ:
- stringClear();
- next();
- break;
- case SysSQ2:
- case SysDQ2:
- stringAddC();
- next();
- break;
- case Pub:
- d->parseString_s = "PUBLIC";
- if ( !parseString() ) {
- parseFailed( &TQXmlSimpleReader::parseExternalID, state );
- return FALSE;
- }
- break;
- case PubWS:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseExternalID, state );
- return FALSE;
- }
- break;
- case PubSQ:
- case PubDQ:
- stringClear();
- next();
- break;
- case PubSQ2:
- case PubDQ2:
- stringAddC();
- next();
- break;
- case PubE:
- next();
- break;
- case PubWS2:
- d->publicId = string();
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseExternalID, state );
- return FALSE;
- }
- break;
- case Done:
- d->systemId = string();
- next();
- break;
- }
- }
-}
-
-/*
- Parse a markupdecl [29].
-*/
-bool TQXmlSimpleReader::parseMarkupdecl()
-{
- const signed char Init = 0;
- const signed char Lt = 1; // < was read
- const signed char Em = 2; // ! was read
- const signed char CE = 3; // E was read
- const signed char Qm = 4; // ? was read
- const signed char Dash = 5; // - was read
- const signed char CA = 6; // A was read
- const signed char CEL = 7; // EL was read
- const signed char CEN = 8; // EN was read
- const signed char CN = 9; // N was read
- const signed char Done = 10;
-
- const signed char InpLt = 0; // <
- const signed char InpQm = 1; // ?
- const signed char InpEm = 2; // !
- const signed char InpDash = 3; // -
- const signed char InpA = 4; // A
- const signed char InpE = 5; // E
- const signed char InpL = 6; // L
- const signed char InpN = 7; // N
- const signed char InpUnknown = 8;
-
- static const signed char table[4][9] = {
- /* InpLt InpQm InpEm InpDash InpA InpE InpL InpN InpUnknown */
- { Lt, -1, -1, -1, -1, -1, -1, -1, -1 }, // Init
- { -1, Qm, Em, -1, -1, -1, -1, -1, -1 }, // Lt
- { -1, -1, -1, Dash, CA, CE, -1, CN, -1 }, // Em
- { -1, -1, -1, -1, -1, -1, CEL, CEN, -1 } // CE
- };
- signed char state;
- signed char input;
-
- if ( d->parseStack==0 || d->parseStack->isEmpty() ) {
- state = Init;
- } else {
- state = d->parseStack->pop().state;
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: parseMarkupdecl (cont) in state %d", state );
-#endif
- if ( !d->parseStack->isEmpty() ) {
- ParseFunction function = d->parseStack->top().function;
- if ( function == &TQXmlSimpleReader::eat_ws ) {
- d->parseStack->pop();
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: eat_ws (cont)" );
-#endif
- }
- if ( !(this->*function)() ) {
- parseFailed( &TQXmlSimpleReader::parseMarkupdecl, state );
- return FALSE;
- }
- }
- }
-
- for (;;) {
- switch ( state ) {
- case Qm:
- if ( contentHnd ) {
- if ( !contentHnd->processingInstruction(name(),string()) ) {
- reportParseError( contentHnd->errorString() );
- return FALSE;
- }
- }
- return TRUE;
- case Dash:
- if ( lexicalHnd ) {
- if ( !lexicalHnd->comment( string() ) ) {
- reportParseError( lexicalHnd->errorString() );
- return FALSE;
- }
- }
- return TRUE;
- case CA:
- return TRUE;
- case CEL:
- return TRUE;
- case CEN:
- return TRUE;
- case CN:
- return TRUE;
- case Done:
- return TRUE;
- case -1:
- // Error
- reportParseError( XMLERR_LETTEREXPECTED );
- return FALSE;
- }
-
- if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parseMarkupdecl, state );
- return FALSE;
- }
- if ( c.tqunicode() == '<' ) {
- input = InpLt;
- } else if ( c.tqunicode() == '?' ) {
- input = InpQm;
- } else if ( c.tqunicode() == '!' ) {
- input = InpEm;
- } else if ( c.tqunicode() == '-' ) {
- input = InpDash;
- } else if ( c.tqunicode() == 'A' ) {
- input = InpA;
- } else if ( c.tqunicode() == 'E' ) {
- input = InpE;
- } else if ( c.tqunicode() == 'L' ) {
- input = InpL;
- } else if ( c.tqunicode() == 'N' ) {
- input = InpN;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch ( state ) {
- case Lt:
- next();
- break;
- case Em:
- next();
- break;
- case CE:
- next();
- break;
- case Qm:
- d->parsePI_xmldecl = FALSE;
- if ( !parsePI() ) {
- parseFailed( &TQXmlSimpleReader::parseMarkupdecl, state );
- return FALSE;
- }
- break;
- case Dash:
- if ( !parseComment() ) {
- parseFailed( &TQXmlSimpleReader::parseMarkupdecl, state );
- return FALSE;
- }
- break;
- case CA:
- if ( !parseAttlistDecl() ) {
- parseFailed( &TQXmlSimpleReader::parseMarkupdecl, state );
- return FALSE;
- }
- break;
- case CEL:
- if ( !parseElementDecl() ) {
- parseFailed( &TQXmlSimpleReader::parseMarkupdecl, state );
- return FALSE;
- }
- break;
- case CEN:
- if ( !parseEntityDecl() ) {
- parseFailed( &TQXmlSimpleReader::parseMarkupdecl, state );
- return FALSE;
- }
- break;
- case CN:
- if ( !parseNotationDecl() ) {
- parseFailed( &TQXmlSimpleReader::parseMarkupdecl, state );
- return FALSE;
- }
- break;
- }
- }
-}
-
-/*
- Parse a PEReference [69]
-*/
-bool TQXmlSimpleReader::parsePEReference()
-{
- const signed char Init = 0;
- const signed char Next = 1;
- const signed char Name = 2;
- const signed char NameR = 3; // same as Name, but already reported
- const signed char Done = 4;
-
- const signed char InpSemi = 0; // ;
- const signed char InpPer = 1; // %
- const signed char InpUnknown = 2;
-
- static const signed char table[4][3] = {
- /* InpSemi InpPer InpUnknown */
- { -1, Next, -1 }, // Init
- { -1, -1, Name }, // Next
- { Done, -1, -1 }, // Name
- { Done, -1, -1 } // NameR
- };
- signed char state;
- signed char input;
-
- if ( d->parseStack==0 || d->parseStack->isEmpty() ) {
- state = Init;
- } else {
- state = d->parseStack->pop().state;
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: parsePEReference (cont) in state %d", state );
-#endif
- if ( !d->parseStack->isEmpty() ) {
- ParseFunction function = d->parseStack->top().function;
- if ( function == &TQXmlSimpleReader::eat_ws ) {
- d->parseStack->pop();
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: eat_ws (cont)" );
-#endif
- }
- if ( !(this->*function)() ) {
- parseFailed( &TQXmlSimpleReader::parsePEReference, state );
- return FALSE;
- }
- }
- }
-
- for (;;) {
- switch ( state ) {
- case Name:
- {
- bool skipIt = TRUE;
- TQString xmlRefString;
-
- TQMap<TQString,TQString>::Iterator it;
- it = d->parameterEntities.find( ref() );
- if ( it != d->parameterEntities.end() ) {
- skipIt = FALSE;
- xmlRefString = it.data();
- } else if ( entityRes ) {
- TQMap<TQString,TQXmlSimpleReaderPrivate::ExternParameterEntity>::Iterator it2;
- it2 = d->externParameterEntities.find( ref() );
- TQXmlInputSource *ret = 0;
- if ( it2 != d->externParameterEntities.end() ) {
- if ( !entityRes->resolveEntity( it2.data().publicId, it2.data().systemId, ret ) ) {
- delete ret;
- reportParseError( entityRes->errorString() );
- return FALSE;
- }
- if ( ret ) {
- xmlRefString = ret->data();
- delete ret;
- if ( !stripTextDecl( xmlRefString ) ) {
- reportParseError( XMLERR_ERRORINTEXTDECL );
- return FALSE;
- }
- skipIt = FALSE;
- }
- }
- }
-
- if ( skipIt ) {
- if ( contentHnd ) {
- if ( !contentHnd->skippedEntity( TQString("%") + ref() ) ) {
- reportParseError( contentHnd->errorString() );
- return FALSE;
- }
- }
- } else {
- if ( d->parsePEReference_context == InEntityValue ) {
- // Included in literal
- if ( !insertXmlRef( xmlRefString, ref(), TRUE ) )
- return FALSE;
- } else if ( d->parsePEReference_context == InDTD ) {
- // Included as PE
- if ( !insertXmlRef( TQString(" ")+xmlRefString+TQString(" "), ref(), FALSE ) )
- return FALSE;
- }
- }
- }
- state = NameR;
- break;
- case Done:
- return TRUE;
- case -1:
- // Error
- reportParseError( XMLERR_LETTEREXPECTED );
- return FALSE;
- }
-
- if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parsePEReference, state );
- return FALSE;
- }
- if ( c.tqunicode() == ';' ) {
- input = InpSemi;
- } else if ( c.tqunicode() == '%' ) {
- input = InpPer;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch ( state ) {
- case Next:
- next();
- break;
- case Name:
- case NameR:
- d->parseName_useRef = TRUE;
- if ( !parseName() ) {
- parseFailed( &TQXmlSimpleReader::parsePEReference, state );
- return FALSE;
- }
- break;
- case Done:
- next();
- break;
- }
- }
-}
-
-/*
- Parse a AttlistDecl [52].
-
- Precondition: the beginning '<!' is already read and the head
- stands on the 'A' of '<!ATTLIST'
-*/
-bool TQXmlSimpleReader::parseAttlistDecl()
-{
- const signed char Init = 0;
- const signed char Attlist = 1; // parse the string "ATTLIST"
- const signed char Ws = 2; // whitespace read
- const signed char Name = 3; // parse name
- const signed char Ws1 = 4; // whitespace read
- const signed char Attdef = 5; // parse the AttDef
- const signed char Ws2 = 6; // whitespace read
- const signed char Atttype = 7; // parse the AttType
- const signed char Ws3 = 8; // whitespace read
- const signed char DDecH = 9; // DefaultDecl with #
- const signed char DefReq = 10; // parse the string "RETQUIRED"
- const signed char DefImp = 11; // parse the string "IMPLIED"
- const signed char DefFix = 12; // parse the string "FIXED"
- const signed char Attval = 13; // parse the AttValue
- const signed char Ws4 = 14; // whitespace read
- const signed char Done = 15;
-
- const signed char InpWs = 0; // white space
- const signed char InpGt = 1; // >
- const signed char InpHash = 2; // #
- const signed char InpA = 3; // A
- const signed char InpI = 4; // I
- const signed char InpF = 5; // F
- const signed char InpR = 6; // R
- const signed char InpUnknown = 7;
-
- static const signed char table[15][8] = {
- /* InpWs InpGt InpHash InpA InpI InpF InpR InpUnknown */
- { -1, -1, -1, Attlist, -1, -1, -1, -1 }, // Init
- { Ws, -1, -1, -1, -1, -1, -1, -1 }, // Attlist
- { -1, -1, -1, Name, Name, Name, Name, Name }, // Ws
- { Ws1, Done, Attdef, Attdef, Attdef, Attdef, Attdef, Attdef }, // Name
- { -1, Done, Attdef, Attdef, Attdef, Attdef, Attdef, Attdef }, // Ws1
- { Ws2, -1, -1, -1, -1, -1, -1, -1 }, // Attdef
- { -1, Atttype, Atttype, Atttype, Atttype, Atttype, Atttype, Atttype }, // Ws2
- { Ws3, -1, -1, -1, -1, -1, -1, -1 }, // Attype
- { -1, Attval, DDecH, Attval, Attval, Attval, Attval, Attval }, // Ws3
- { -1, -1, -1, -1, DefImp, DefFix, DefReq, -1 }, // DDecH
- { Ws4, Ws4, -1, -1, -1, -1, -1, -1 }, // DefReq
- { Ws4, Ws4, -1, -1, -1, -1, -1, -1 }, // DefImp
- { Ws3, -1, -1, -1, -1, -1, -1, -1 }, // DefFix
- { Ws4, Ws4, -1, -1, -1, -1, -1, -1 }, // Attval
- { -1, Done, Attdef, Attdef, Attdef, Attdef, Attdef, Attdef } // Ws4
- };
- signed char state;
- signed char input;
-
- if ( d->parseStack==0 || d->parseStack->isEmpty() ) {
- state = Init;
- } else {
- state = d->parseStack->pop().state;
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: parseAttlistDecl (cont) in state %d", state );
-#endif
- if ( !d->parseStack->isEmpty() ) {
- ParseFunction function = d->parseStack->top().function;
- if ( function == &TQXmlSimpleReader::eat_ws ) {
- d->parseStack->pop();
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: eat_ws (cont)" );
-#endif
- }
- if ( !(this->*function)() ) {
- parseFailed( &TQXmlSimpleReader::parseAttlistDecl, state );
- return FALSE;
- }
- }
- }
-
- for (;;) {
- switch ( state ) {
- case Name:
- d->attDeclEName = name();
- break;
- case Attdef:
- d->attDeclAName = name();
- break;
- case Done:
- return TRUE;
- case -1:
- // Error
- reportParseError( XMLERR_LETTEREXPECTED );
- return FALSE;
- }
-
- if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parseAttlistDecl, state );
- return FALSE;
- }
- if ( is_S(c) ) {
- input = InpWs;
- } else if ( c.tqunicode() == '>' ) {
- input = InpGt;
- } else if ( c.tqunicode() == '#' ) {
- input = InpHash;
- } else if ( c.tqunicode() == 'A' ) {
- input = InpA;
- } else if ( c.tqunicode() == 'I' ) {
- input = InpI;
- } else if ( c.tqunicode() == 'F' ) {
- input = InpF;
- } else if ( c.tqunicode() == 'R' ) {
- input = InpR;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch ( state ) {
- case Attlist:
- d->parseString_s = "ATTLIST";
- if ( !parseString() ) {
- parseFailed( &TQXmlSimpleReader::parseAttlistDecl, state );
- return FALSE;
- }
- break;
- case Ws:
- case Ws1:
- case Ws2:
- case Ws3:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseAttlistDecl, state );
- return FALSE;
- }
- break;
- case Name:
- d->parseName_useRef = FALSE;
- if ( !parseName() ) {
- parseFailed( &TQXmlSimpleReader::parseAttlistDecl, state );
- return FALSE;
- }
- break;
- case Attdef:
- d->parseName_useRef = FALSE;
- if ( !parseName() ) {
- parseFailed( &TQXmlSimpleReader::parseAttlistDecl, state );
- return FALSE;
- }
- break;
- case Atttype:
- if ( !parseAttType() ) {
- parseFailed( &TQXmlSimpleReader::parseAttlistDecl, state );
- return FALSE;
- }
- break;
- case DDecH:
- next();
- break;
- case DefReq:
- d->parseString_s = "RETQUIRED";
- if ( !parseString() ) {
- parseFailed( &TQXmlSimpleReader::parseAttlistDecl, state );
- return FALSE;
- }
- break;
- case DefImp:
- d->parseString_s = "IMPLIED";
- if ( !parseString() ) {
- parseFailed( &TQXmlSimpleReader::parseAttlistDecl, state );
- return FALSE;
- }
- break;
- case DefFix:
- d->parseString_s = "FIXED";
- if ( !parseString() ) {
- parseFailed( &TQXmlSimpleReader::parseAttlistDecl, state );
- return FALSE;
- }
- break;
- case Attval:
- if ( !parseAttValue() ) {
- parseFailed( &TQXmlSimpleReader::parseAttlistDecl, state );
- return FALSE;
- }
- break;
- case Ws4:
- if ( declHnd ) {
- // ### not all values are computed yet...
- if ( !declHnd->attributeDecl( d->attDeclEName, d->attDeclAName, "", "", "" ) ) {
- reportParseError( declHnd->errorString() );
- return FALSE;
- }
- }
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseAttlistDecl, state );
- return FALSE;
- }
- break;
- case Done:
- next();
- break;
- }
- }
-}
-
-/*
- Parse a AttType [54]
-*/
-bool TQXmlSimpleReader::parseAttType()
-{
- const signed char Init = 0;
- const signed char ST = 1; // StringType
- const signed char TTI = 2; // TokenizedType starting with 'I'
- const signed char TTI2 = 3; // TokenizedType helpstate
- const signed char TTI3 = 4; // TokenizedType helpstate
- const signed char TTE = 5; // TokenizedType starting with 'E'
- const signed char TTEY = 6; // TokenizedType starting with 'ENTITY'
- const signed char TTEI = 7; // TokenizedType starting with 'ENTITI'
- const signed char N = 8; // N read (TokenizedType or Notation)
- const signed char TTNM = 9; // TokenizedType starting with 'NM'
- const signed char TTNM2 = 10; // TokenizedType helpstate
- const signed char NO = 11; // Notation
- const signed char NO2 = 12; // Notation helpstate
- const signed char NO3 = 13; // Notation helpstate
- const signed char NOName = 14; // Notation, read name
- const signed char NO4 = 15; // Notation helpstate
- const signed char EN = 16; // Enumeration
- const signed char ENNmt = 17; // Enumeration, read Nmtoken
- const signed char EN2 = 18; // Enumeration helpstate
- const signed char ADone = 19; // almost done (make next and accept)
- const signed char Done = 20;
-
- const signed char InpWs = 0; // whitespace
- const signed char InpOp = 1; // (
- const signed char InpCp = 2; // )
- const signed char InpPipe = 3; // |
- const signed char InpC = 4; // C
- const signed char InpE = 5; // E
- const signed char InpI = 6; // I
- const signed char InpM = 7; // M
- const signed char InpN = 8; // N
- const signed char InpO = 9; // O
- const signed char InpR = 10; // R
- const signed char InpS = 11; // S
- const signed char InpY = 12; // Y
- const signed char InpUnknown = 13;
-
- static const signed char table[19][14] = {
- /* InpWs InpOp InpCp InpPipe InpC InpE InpI InpM InpN InpO InpR InpS InpY InpUnknown */
- { -1, EN, -1, -1, ST, TTE, TTI, -1, N, -1, -1, -1, -1, -1 }, // Init
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done }, // ST
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, TTI2, Done, Done, Done }, // TTI
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, TTI3, Done, Done }, // TTI2
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done }, // TTI3
- { -1, -1, -1, -1, -1, -1, TTEI, -1, -1, -1, -1, -1, TTEY, -1 }, // TTE
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done }, // TTEY
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done }, // TTEI
- { -1, -1, -1, -1, -1, -1, -1, TTNM, -1, NO, -1, -1, -1, -1 }, // N
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, TTNM2, Done, Done }, // TTNM
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done }, // TTNM2
- { NO2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // NO
- { -1, NO3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // NO2
- { NOName, NOName, NOName, NOName, NOName, NOName, NOName, NOName, NOName, NOName, NOName, NOName, NOName, NOName }, // NO3
- { NO4, -1, ADone, NO3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // NOName
- { -1, -1, ADone, NO3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // NO4
- { -1, -1, ENNmt, -1, ENNmt, ENNmt, ENNmt, ENNmt, ENNmt, ENNmt, ENNmt, ENNmt, ENNmt, ENNmt }, // EN
- { EN2, -1, ADone, EN, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // ENNmt
- { -1, -1, ADone, EN, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 } // EN2
- };
- signed char state;
- signed char input;
-
- if ( d->parseStack==0 || d->parseStack->isEmpty() ) {
- state = Init;
- } else {
- state = d->parseStack->pop().state;
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: parseAttType (cont) in state %d", state );
-#endif
- if ( !d->parseStack->isEmpty() ) {
- ParseFunction function = d->parseStack->top().function;
- if ( function == &TQXmlSimpleReader::eat_ws ) {
- d->parseStack->pop();
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: eat_ws (cont)" );
-#endif
- }
- if ( !(this->*function)() ) {
- parseFailed( &TQXmlSimpleReader::parseAttType, state );
- return FALSE;
- }
- }
- }
-
- for (;;) {
- switch ( state ) {
- case ADone:
- return TRUE;
- case Done:
- return TRUE;
- case -1:
- // Error
- reportParseError( XMLERR_LETTEREXPECTED );
- return FALSE;
- }
-
- if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parseAttType, state );
- return FALSE;
- }
- if ( is_S(c) ) {
- input = InpWs;
- } else if ( c.tqunicode() == '(' ) {
- input = InpOp;
- } else if ( c.tqunicode() == ')' ) {
- input = InpCp;
- } else if ( c.tqunicode() == '|' ) {
- input = InpPipe;
- } else if ( c.tqunicode() == 'C' ) {
- input = InpC;
- } else if ( c.tqunicode() == 'E' ) {
- input = InpE;
- } else if ( c.tqunicode() == 'I' ) {
- input = InpI;
- } else if ( c.tqunicode() == 'M' ) {
- input = InpM;
- } else if ( c.tqunicode() == 'N' ) {
- input = InpN;
- } else if ( c.tqunicode() == 'O' ) {
- input = InpO;
- } else if ( c.tqunicode() == 'R' ) {
- input = InpR;
- } else if ( c.tqunicode() == 'S' ) {
- input = InpS;
- } else if ( c.tqunicode() == 'Y' ) {
- input = InpY;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch ( state ) {
- case ST:
- d->parseString_s = "CDATA";
- if ( !parseString() ) {
- parseFailed( &TQXmlSimpleReader::parseAttType, state );
- return FALSE;
- }
- break;
- case TTI:
- d->parseString_s = "ID";
- if ( !parseString() ) {
- parseFailed( &TQXmlSimpleReader::parseAttType, state );
- return FALSE;
- }
- break;
- case TTI2:
- d->parseString_s = "REF";
- if ( !parseString() ) {
- parseFailed( &TQXmlSimpleReader::parseAttType, state );
- return FALSE;
- }
- break;
- case TTI3:
- next(); // S
- break;
- case TTE:
- d->parseString_s = "ENTIT";
- if ( !parseString() ) {
- parseFailed( &TQXmlSimpleReader::parseAttType, state );
- return FALSE;
- }
- break;
- case TTEY:
- next(); // Y
- break;
- case TTEI:
- d->parseString_s = "IES";
- if ( !parseString() ) {
- parseFailed( &TQXmlSimpleReader::parseAttType, state );
- return FALSE;
- }
- break;
- case N:
- next(); // N
- break;
- case TTNM:
- d->parseString_s = "MTOKEN";
- if ( !parseString() ) {
- parseFailed( &TQXmlSimpleReader::parseAttType, state );
- return FALSE;
- }
- break;
- case TTNM2:
- next(); // S
- break;
- case NO:
- d->parseString_s = "OTATION";
- if ( !parseString() ) {
- parseFailed( &TQXmlSimpleReader::parseAttType, state );
- return FALSE;
- }
- break;
- case NO2:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseAttType, state );
- return FALSE;
- }
- break;
- case NO3:
- if ( !next_eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseAttType, state );
- return FALSE;
- }
- break;
- case NOName:
- d->parseName_useRef = FALSE;
- if ( !parseName() ) {
- parseFailed( &TQXmlSimpleReader::parseAttType, state );
- return FALSE;
- }
- break;
- case NO4:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseAttType, state );
- return FALSE;
- }
- break;
- case EN:
- if ( !next_eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseAttType, state );
- return FALSE;
- }
- break;
- case ENNmt:
- if ( !parseNmtoken() ) {
- parseFailed( &TQXmlSimpleReader::parseAttType, state );
- return FALSE;
- }
- break;
- case EN2:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseAttType, state );
- return FALSE;
- }
- break;
- case ADone:
- next();
- break;
- }
- }
-}
-
-/*
- Parse a AttValue [10]
-
- Precondition: the head stands on the beginning " or '
-
- If this function was successful, the head stands on the first
- character after the closing " or ' and the value of the attribute
- is in string().
-*/
-bool TQXmlSimpleReader::parseAttValue()
-{
- const signed char Init = 0;
- const signed char Dq = 1; // double quotes were read
- const signed char DqRef = 2; // read references in double quotes
- const signed char DqC = 3; // signed character read in double quotes
- const signed char Sq = 4; // single quotes were read
- const signed char SqRef = 5; // read references in single quotes
- const signed char SqC = 6; // signed character read in single quotes
- const signed char Done = 7;
-
- const signed char InpDq = 0; // "
- const signed char InpSq = 1; // '
- const signed char InpAmp = 2; // &
- const signed char InpLt = 3; // <
- const signed char InpUnknown = 4;
-
- static const signed char table[7][5] = {
- /* InpDq InpSq InpAmp InpLt InpUnknown */
- { Dq, Sq, -1, -1, -1 }, // Init
- { Done, DqC, DqRef, -1, DqC }, // Dq
- { Done, DqC, DqRef, -1, DqC }, // DqRef
- { Done, DqC, DqRef, -1, DqC }, // DqC
- { SqC, Done, SqRef, -1, SqC }, // Sq
- { SqC, Done, SqRef, -1, SqC }, // SqRef
- { SqC, Done, SqRef, -1, SqC } // SqRef
- };
- signed char state;
- signed char input;
-
- if ( d->parseStack==0 || d->parseStack->isEmpty() ) {
- state = Init;
- } else {
- state = d->parseStack->pop().state;
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: parseAttValue (cont) in state %d", state );
-#endif
- if ( !d->parseStack->isEmpty() ) {
- ParseFunction function = d->parseStack->top().function;
- if ( function == &TQXmlSimpleReader::eat_ws ) {
- d->parseStack->pop();
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: eat_ws (cont)" );
-#endif
- }
- if ( !(this->*function)() ) {
- parseFailed( &TQXmlSimpleReader::parseAttValue, state );
- return FALSE;
- }
- }
- }
-
- for (;;) {
- switch ( state ) {
- case Done:
- return TRUE;
- case -1:
- // Error
- reportParseError( XMLERR_UNEXPECTEDCHARACTER );
- return FALSE;
- }
-
- if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parseAttValue, state );
- return FALSE;
- }
- if ( c.tqunicode() == '"' ) {
- input = InpDq;
- } else if ( c.tqunicode() == '\'' ) {
- input = InpSq;
- } else if ( c.tqunicode() == '&' ) {
- input = InpAmp;
- } else if ( c.tqunicode() == '<' ) {
- input = InpLt;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch ( state ) {
- case Dq:
- case Sq:
- stringClear();
- next();
- break;
- case DqRef:
- case SqRef:
- d->parseReference_context = InAttributeValue;
- if ( !parseReference() ) {
- parseFailed( &TQXmlSimpleReader::parseAttValue, state );
- return FALSE;
- }
- break;
- case DqC:
- case SqC:
- stringAddC();
- next();
- break;
- case Done:
- next();
- break;
- }
- }
-}
-
-/*
- Parse a elementdecl [45].
-
- Precondition: the beginning '<!E' is already read and the head
- stands on the 'L' of '<!ELEMENT'
-*/
-bool TQXmlSimpleReader::parseElementDecl()
-{
- const signed char Init = 0;
- const signed char Elem = 1; // parse the beginning string
- const signed char Ws1 = 2; // whitespace required
- const signed char Nam = 3; // parse Name
- const signed char Ws2 = 4; // whitespace required
- const signed char Empty = 5; // read EMPTY
- const signed char Any = 6; // read ANY
- const signed char Cont = 7; // read contentspec (except ANY or EMPTY)
- const signed char Mix = 8; // read Mixed
- const signed char Mix2 = 9; //
- const signed char Mix3 = 10; //
- const signed char MixN1 = 11; //
- const signed char MixN2 = 12; //
- const signed char MixN3 = 13; //
- const signed char MixN4 = 14; //
- const signed char Cp = 15; // parse cp
- const signed char Cp2 = 16; //
- const signed char WsD = 17; // eat whitespace before Done
- const signed char Done = 18;
-
- const signed char InpWs = 0;
- const signed char InpGt = 1; // >
- const signed char InpPipe = 2; // |
- const signed char InpOp = 3; // (
- const signed char InpCp = 4; // )
- const signed char InpHash = 5; // #
- const signed char InpQm = 6; // ?
- const signed char InpAst = 7; // *
- const signed char InpPlus = 8; // +
- const signed char InpA = 9; // A
- const signed char InpE = 10; // E
- const signed char InpL = 11; // L
- const signed char InpUnknown = 12;
-
- static const signed char table[18][13] = {
- /* InpWs InpGt InpPipe InpOp InpCp InpHash InpQm InpAst InpPlus InpA InpE InpL InpUnknown */
- { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, Elem, -1 }, // Init
- { Ws1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // Elem
- { -1, -1, -1, -1, -1, -1, -1, -1, -1, Nam, Nam, Nam, Nam }, // Ws1
- { Ws2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // Nam
- { -1, -1, -1, Cont, -1, -1, -1, -1, -1, Any, Empty, -1, -1 }, // Ws2
- { WsD, Done, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // Empty
- { WsD, Done, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // Any
- { -1, -1, -1, Cp, Cp, Mix, -1, -1, -1, Cp, Cp, Cp, Cp }, // Cont
- { Mix2, -1, MixN1, -1, Mix3, -1, -1, -1, -1, -1, -1, -1, -1 }, // Mix
- { -1, -1, MixN1, -1, Mix3, -1, -1, -1, -1, -1, -1, -1, -1 }, // Mix2
- { WsD, Done, -1, -1, -1, -1, -1, WsD, -1, -1, -1, -1, -1 }, // Mix3
- { -1, -1, -1, -1, -1, -1, -1, -1, -1, MixN2, MixN2, MixN2, MixN2 }, // MixN1
- { MixN3, -1, MixN1, -1, MixN4, -1, -1, -1, -1, -1, -1, -1, -1 }, // MixN2
- { -1, -1, MixN1, -1, MixN4, -1, -1, -1, -1, -1, -1, -1, -1 }, // MixN3
- { -1, -1, -1, -1, -1, -1, -1, WsD, -1, -1, -1, -1, -1 }, // MixN4
- { WsD, Done, -1, -1, -1, -1, Cp2, Cp2, Cp2, -1, -1, -1, -1 }, // Cp
- { WsD, Done, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // Cp2
- { -1, Done, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 } // WsD
- };
- signed char state;
- signed char input;
-
- if ( d->parseStack==0 || d->parseStack->isEmpty() ) {
- state = Init;
- } else {
- state = d->parseStack->pop().state;
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: parseElementDecl (cont) in state %d", state );
-#endif
- if ( !d->parseStack->isEmpty() ) {
- ParseFunction function = d->parseStack->top().function;
- if ( function == &TQXmlSimpleReader::eat_ws ) {
- d->parseStack->pop();
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: eat_ws (cont)" );
-#endif
- }
- if ( !(this->*function)() ) {
- parseFailed( &TQXmlSimpleReader::parseElementDecl, state );
- return FALSE;
- }
- }
- }
-
- for (;;) {
- switch ( state ) {
- case Done:
- return TRUE;
- case -1:
- reportParseError( XMLERR_UNEXPECTEDCHARACTER );
- return FALSE;
- }
-
- if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parseElementDecl, state );
- return FALSE;
- }
- if ( is_S(c) ) {
- input = InpWs;
- } else if ( c.tqunicode() == '>' ) {
- input = InpGt;
- } else if ( c.tqunicode() == '|' ) {
- input = InpPipe;
- } else if ( c.tqunicode() == '(' ) {
- input = InpOp;
- } else if ( c.tqunicode() == ')' ) {
- input = InpCp;
- } else if ( c.tqunicode() == '#' ) {
- input = InpHash;
- } else if ( c.tqunicode() == '?' ) {
- input = InpQm;
- } else if ( c.tqunicode() == '*' ) {
- input = InpAst;
- } else if ( c.tqunicode() == '+' ) {
- input = InpPlus;
- } else if ( c.tqunicode() == 'A' ) {
- input = InpA;
- } else if ( c.tqunicode() == 'E' ) {
- input = InpE;
- } else if ( c.tqunicode() == 'L' ) {
- input = InpL;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch ( state ) {
- case Elem:
- d->parseString_s = "LEMENT";
- if ( !parseString() ) {
- parseFailed( &TQXmlSimpleReader::parseElementDecl, state );
- return FALSE;
- }
- break;
- case Ws1:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseElementDecl, state );
- return FALSE;
- }
- break;
- case Nam:
- d->parseName_useRef = FALSE;
- if ( !parseName() ) {
- parseFailed( &TQXmlSimpleReader::parseElementDecl, state );
- return FALSE;
- }
- break;
- case Ws2:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseElementDecl, state );
- return FALSE;
- }
- break;
- case Empty:
- d->parseString_s = "EMPTY";
- if ( !parseString() ) {
- parseFailed( &TQXmlSimpleReader::parseElementDecl, state );
- return FALSE;
- }
- break;
- case Any:
- d->parseString_s = "ANY";
- if ( !parseString() ) {
- parseFailed( &TQXmlSimpleReader::parseElementDecl, state );
- return FALSE;
- }
- break;
- case Cont:
- if ( !next_eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseElementDecl, state );
- return FALSE;
- }
- break;
- case Mix:
- d->parseString_s = "#PCDATA";
- if ( !parseString() ) {
- parseFailed( &TQXmlSimpleReader::parseElementDecl, state );
- return FALSE;
- }
- break;
- case Mix2:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseElementDecl, state );
- return FALSE;
- }
- break;
- case Mix3:
- next();
- break;
- case MixN1:
- if ( !next_eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseElementDecl, state );
- return FALSE;
- }
- break;
- case MixN2:
- d->parseName_useRef = FALSE;
- if ( !parseName() ) {
- parseFailed( &TQXmlSimpleReader::parseElementDecl, state );
- return FALSE;
- }
- break;
- case MixN3:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseElementDecl, state );
- return FALSE;
- }
- break;
- case MixN4:
- next();
- break;
- case Cp:
- if ( !parseChoiceSeq() ) {
- parseFailed( &TQXmlSimpleReader::parseElementDecl, state );
- return FALSE;
- }
- break;
- case Cp2:
- next();
- break;
- case WsD:
- if ( !next_eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseElementDecl, state );
- return FALSE;
- }
- break;
- case Done:
- next();
- break;
- }
- }
-}
-
-/*
- Parse a NotationDecl [82].
-
- Precondition: the beginning '<!' is already read and the head
- stands on the 'N' of '<!NOTATION'
-*/
-bool TQXmlSimpleReader::parseNotationDecl()
-{
- const signed char Init = 0;
- const signed char Not = 1; // read NOTATION
- const signed char Ws1 = 2; // eat whitespaces
- const signed char Nam = 3; // read Name
- const signed char Ws2 = 4; // eat whitespaces
- const signed char ExtID = 5; // parse ExternalID
- const signed char ExtIDR = 6; // same as ExtID, but already reported
- const signed char Ws3 = 7; // eat whitespaces
- const signed char Done = 8;
-
- const signed char InpWs = 0;
- const signed char InpGt = 1; // >
- const signed char InpN = 2; // N
- const signed char InpUnknown = 3;
-
- static const signed char table[8][4] = {
- /* InpWs InpGt InpN InpUnknown */
- { -1, -1, Not, -1 }, // Init
- { Ws1, -1, -1, -1 }, // Not
- { -1, -1, Nam, Nam }, // Ws1
- { Ws2, Done, -1, -1 }, // Nam
- { -1, Done, ExtID, ExtID }, // Ws2
- { Ws3, Done, -1, -1 }, // ExtID
- { Ws3, Done, -1, -1 }, // ExtIDR
- { -1, Done, -1, -1 } // Ws3
- };
- signed char state;
- signed char input;
-
- if ( d->parseStack==0 || d->parseStack->isEmpty() ) {
- state = Init;
- } else {
- state = d->parseStack->pop().state;
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: parseNotationDecl (cont) in state %d", state );
-#endif
- if ( !d->parseStack->isEmpty() ) {
- ParseFunction function = d->parseStack->top().function;
- if ( function == &TQXmlSimpleReader::eat_ws ) {
- d->parseStack->pop();
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: eat_ws (cont)" );
-#endif
- }
- if ( !(this->*function)() ) {
- parseFailed( &TQXmlSimpleReader::parseNotationDecl, state );
- return FALSE;
- }
- }
- }
-
- for (;;) {
- switch ( state ) {
- case ExtID:
- // call the handler
- if ( dtdHnd ) {
- if ( !dtdHnd->notationDecl( name(), d->publicId, d->systemId ) ) {
- reportParseError( dtdHnd->errorString() );
- return FALSE;
- }
- }
- state = ExtIDR;
- break;
- case Done:
- return TRUE;
- case -1:
- // Error
- reportParseError( XMLERR_UNEXPECTEDCHARACTER );
- return FALSE;
- }
-
- if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parseNotationDecl, state );
- return FALSE;
- }
- if ( is_S(c) ) {
- input = InpWs;
- } else if ( c.tqunicode() == '>' ) {
- input = InpGt;
- } else if ( c.tqunicode() == 'N' ) {
- input = InpN;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch ( state ) {
- case Not:
- d->parseString_s = "NOTATION";
- if ( !parseString() ) {
- parseFailed( &TQXmlSimpleReader::parseNotationDecl, state );
- return FALSE;
- }
- break;
- case Ws1:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseNotationDecl, state );
- return FALSE;
- }
- break;
- case Nam:
- d->parseName_useRef = FALSE;
- if ( !parseName() ) {
- parseFailed( &TQXmlSimpleReader::parseNotationDecl, state );
- return FALSE;
- }
- break;
- case Ws2:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseNotationDecl, state );
- return FALSE;
- }
- break;
- case ExtID:
- case ExtIDR:
- d->parseExternalID_allowPublicID = TRUE;
- if ( !parseExternalID() ) {
- parseFailed( &TQXmlSimpleReader::parseNotationDecl, state );
- return FALSE;
- }
- break;
- case Ws3:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseNotationDecl, state );
- return FALSE;
- }
- break;
- case Done:
- next();
- break;
- }
- }
-}
-
-/*
- Parse choice [49] or seq [50].
-
- Precondition: the beginning '('S? is already read and the head
- stands on the first non-whitespace character after it.
-*/
-bool TQXmlSimpleReader::parseChoiceSeq()
-{
- const signed char Init = 0;
- const signed char Ws1 = 1; // eat whitespace
- const signed char CorS = 2; // choice or set
- const signed char Ws2 = 3; // eat whitespace
- const signed char More = 4; // more cp to read
- const signed char Name = 5; // read name
- const signed char Done = 6; //
-
- const signed char InpWs = 0; // S
- const signed char InpOp = 1; // (
- const signed char InpCp = 2; // )
- const signed char InpQm = 3; // ?
- const signed char InpAst = 4; // *
- const signed char InpPlus = 5; // +
- const signed char InpPipe = 6; // |
- const signed char InpComm = 7; // ,
- const signed char InpUnknown = 8;
-
- static const signed char table[6][9] = {
- /* InpWs InpOp InpCp InpQm InpAst InpPlus InpPipe InpComm InpUnknown */
- { -1, Ws1, -1, -1, -1, -1, -1, -1, Name }, // Init
- { -1, CorS, -1, -1, -1, -1, -1, -1, CorS }, // Ws1
- { Ws2, -1, Done, Ws2, Ws2, Ws2, More, More, -1 }, // CorS
- { -1, -1, Done, -1, -1, -1, More, More, -1 }, // Ws2
- { -1, Ws1, -1, -1, -1, -1, -1, -1, Name }, // More (same as Init)
- { Ws2, -1, Done, Ws2, Ws2, Ws2, More, More, -1 } // Name (same as CorS)
- };
- signed char state;
- signed char input;
-
- if ( d->parseStack==0 || d->parseStack->isEmpty() ) {
- state = Init;
- } else {
- state = d->parseStack->pop().state;
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: parseChoiceSeq (cont) in state %d", state );
-#endif
- if ( !d->parseStack->isEmpty() ) {
- ParseFunction function = d->parseStack->top().function;
- if ( function == &TQXmlSimpleReader::eat_ws ) {
- d->parseStack->pop();
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: eat_ws (cont)" );
-#endif
- }
- if ( !(this->*function)() ) {
- parseFailed( &TQXmlSimpleReader::parseChoiceSeq, state );
- return FALSE;
- }
- }
- }
-
- for (;;) {
- switch ( state ) {
- case Done:
- return TRUE;
- case -1:
- // Error
- reportParseError( XMLERR_UNEXPECTEDCHARACTER );
- return FALSE;
- }
-
- if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parseChoiceSeq, state );
- return FALSE;
- }
- if ( is_S(c) ) {
- input = InpWs;
- } else if ( c.tqunicode() == '(' ) {
- input = InpOp;
- } else if ( c.tqunicode() == ')' ) {
- input = InpCp;
- } else if ( c.tqunicode() == '?' ) {
- input = InpQm;
- } else if ( c.tqunicode() == '*' ) {
- input = InpAst;
- } else if ( c.tqunicode() == '+' ) {
- input = InpPlus;
- } else if ( c.tqunicode() == '|' ) {
- input = InpPipe;
- } else if ( c.tqunicode() == ',' ) {
- input = InpComm;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch ( state ) {
- case Ws1:
- if ( !next_eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseChoiceSeq, state );
- return FALSE;
- }
- break;
- case CorS:
- if ( !parseChoiceSeq() ) {
- parseFailed( &TQXmlSimpleReader::parseChoiceSeq, state );
- return FALSE;
- }
- break;
- case Ws2:
- if ( !next_eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseChoiceSeq, state );
- return FALSE;
- }
- break;
- case More:
- if ( !next_eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseChoiceSeq, state );
- return FALSE;
- }
- break;
- case Name:
- d->parseName_useRef = FALSE;
- if ( !parseName() ) {
- parseFailed( &TQXmlSimpleReader::parseChoiceSeq, state );
- return FALSE;
- }
- break;
- case Done:
- next();
- break;
- }
- }
-}
-
-/*
- Parse a EntityDecl [70].
-
- Precondition: the beginning '<!E' is already read and the head
- stand on the 'N' of '<!ENTITY'
-*/
-bool TQXmlSimpleReader::parseEntityDecl()
-{
- const signed char Init = 0;
- const signed char Ent = 1; // parse "ENTITY"
- const signed char Ws1 = 2; // white space read
- const signed char Name = 3; // parse name
- const signed char Ws2 = 4; // white space read
- const signed char EValue = 5; // parse entity value
- const signed char EValueR = 6; // same as EValue, but already reported
- const signed char ExtID = 7; // parse ExternalID
- const signed char Ws3 = 8; // white space read
- const signed char Ndata = 9; // parse "NDATA"
- const signed char Ws4 = 10; // white space read
- const signed char NNam = 11; // parse name
- const signed char NNamR = 12; // same as NNam, but already reported
- const signed char PEDec = 13; // parse PEDecl
- const signed char Ws6 = 14; // white space read
- const signed char PENam = 15; // parse name
- const signed char Ws7 = 16; // white space read
- const signed char PEVal = 17; // parse entity value
- const signed char PEValR = 18; // same as PEVal, but already reported
- const signed char PEEID = 19; // parse ExternalID
- const signed char PEEIDR = 20; // same as PEEID, but already reported
- const signed char WsE = 21; // white space read
- const signed char Done = 22;
- const signed char EDDone = 23; // done, but also report an external, unparsed entity decl
-
- const signed char InpWs = 0; // white space
- const signed char InpPer = 1; // %
- const signed char InpQuot = 2; // " or '
- const signed char InpGt = 3; // >
- const signed char InpN = 4; // N
- const signed char InpUnknown = 5;
-
- static const signed char table[22][6] = {
- /* InpWs InpPer InpQuot InpGt InpN InpUnknown */
- { -1, -1, -1, -1, Ent, -1 }, // Init
- { Ws1, -1, -1, -1, -1, -1 }, // Ent
- { -1, PEDec, -1, -1, Name, Name }, // Ws1
- { Ws2, -1, -1, -1, -1, -1 }, // Name
- { -1, -1, EValue, -1, -1, ExtID }, // Ws2
- { WsE, -1, -1, Done, -1, -1 }, // EValue
- { WsE, -1, -1, Done, -1, -1 }, // EValueR
- { Ws3, -1, -1, EDDone,-1, -1 }, // ExtID
- { -1, -1, -1, EDDone,Ndata, -1 }, // Ws3
- { Ws4, -1, -1, -1, -1, -1 }, // Ndata
- { -1, -1, -1, -1, NNam, NNam }, // Ws4
- { WsE, -1, -1, Done, -1, -1 }, // NNam
- { WsE, -1, -1, Done, -1, -1 }, // NNamR
- { Ws6, -1, -1, -1, -1, -1 }, // PEDec
- { -1, -1, -1, -1, PENam, PENam }, // Ws6
- { Ws7, -1, -1, -1, -1, -1 }, // PENam
- { -1, -1, PEVal, -1, -1, PEEID }, // Ws7
- { WsE, -1, -1, Done, -1, -1 }, // PEVal
- { WsE, -1, -1, Done, -1, -1 }, // PEValR
- { WsE, -1, -1, Done, -1, -1 }, // PEEID
- { WsE, -1, -1, Done, -1, -1 }, // PEEIDR
- { -1, -1, -1, Done, -1, -1 } // WsE
- };
- signed char state;
- signed char input;
-
- if ( d->parseStack==0 || d->parseStack->isEmpty() ) {
- state = Init;
- } else {
- state = d->parseStack->pop().state;
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: parseEntityDecl (cont) in state %d", state );
-#endif
- if ( !d->parseStack->isEmpty() ) {
- ParseFunction function = d->parseStack->top().function;
- if ( function == &TQXmlSimpleReader::eat_ws ) {
- d->parseStack->pop();
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: eat_ws (cont)" );
-#endif
- }
- if ( !(this->*function)() ) {
- parseFailed( &TQXmlSimpleReader::parseEntityDecl, state );
- return FALSE;
- }
- }
- }
-
- for (;;) {
- switch ( state ) {
- case EValue:
- if ( !entityExist( name() ) ) {
- d->entities.insert( name(), string() );
- if ( declHnd ) {
- if ( !declHnd->internalEntityDecl( name(), string() ) ) {
- reportParseError( declHnd->errorString() );
- return FALSE;
- }
- }
- }
- state = EValueR;
- break;
- case NNam:
- if ( !entityExist( name() ) ) {
- d->externEntities.insert( name(), TQXmlSimpleReaderPrivate::ExternEntity( d->publicId, d->systemId, ref() ) );
- if ( dtdHnd ) {
- if ( !dtdHnd->unparsedEntityDecl( name(), d->publicId, d->systemId, ref() ) ) {
- reportParseError( declHnd->errorString() );
- return FALSE;
- }
- }
- }
- state = NNamR;
- break;
- case PEVal:
- if ( !entityExist( name() ) ) {
- d->parameterEntities.insert( name(), string() );
- if ( declHnd ) {
- if ( !declHnd->internalEntityDecl( TQString("%")+name(), string() ) ) {
- reportParseError( declHnd->errorString() );
- return FALSE;
- }
- }
- }
- state = PEValR;
- break;
- case PEEID:
- if ( !entityExist( name() ) ) {
- d->externParameterEntities.insert( name(), TQXmlSimpleReaderPrivate::ExternParameterEntity( d->publicId, d->systemId ) );
- if ( declHnd ) {
- if ( !declHnd->externalEntityDecl( TQString("%")+name(), d->publicId, d->systemId ) ) {
- reportParseError( declHnd->errorString() );
- return FALSE;
- }
- }
- }
- state = PEEIDR;
- break;
- case EDDone:
- if ( !entityExist( name() ) ) {
- d->externEntities.insert( name(), TQXmlSimpleReaderPrivate::ExternEntity( d->publicId, d->systemId, TQString::null ) );
- if ( declHnd ) {
- if ( !declHnd->externalEntityDecl( name(), d->publicId, d->systemId ) ) {
- reportParseError( declHnd->errorString() );
- return FALSE;
- }
- }
- }
- return TRUE;
- case Done:
- return TRUE;
- case -1:
- // Error
- reportParseError( XMLERR_LETTEREXPECTED );
- return FALSE;
- }
-
- if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parseEntityDecl, state );
- return FALSE;
- }
- if ( is_S(c) ) {
- input = InpWs;
- } else if ( c.tqunicode() == '%' ) {
- input = InpPer;
- } else if ( c.tqunicode() == '"' || c.tqunicode() == '\'' ) {
- input = InpQuot;
- } else if ( c.tqunicode() == '>' ) {
- input = InpGt;
- } else if ( c.tqunicode() == 'N' ) {
- input = InpN;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch ( state ) {
- case Ent:
- d->parseString_s = "NTITY";
- if ( !parseString() ) {
- parseFailed( &TQXmlSimpleReader::parseEntityDecl, state );
- return FALSE;
- }
- break;
- case Ws1:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseEntityDecl, state );
- return FALSE;
- }
- break;
- case Name:
- d->parseName_useRef = FALSE;
- if ( !parseName() ) {
- parseFailed( &TQXmlSimpleReader::parseEntityDecl, state );
- return FALSE;
- }
- break;
- case Ws2:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseEntityDecl, state );
- return FALSE;
- }
- break;
- case EValue:
- case EValueR:
- if ( !parseEntityValue() ) {
- parseFailed( &TQXmlSimpleReader::parseEntityDecl, state );
- return FALSE;
- }
- break;
- case ExtID:
- d->parseExternalID_allowPublicID = FALSE;
- if ( !parseExternalID() ) {
- parseFailed( &TQXmlSimpleReader::parseEntityDecl, state );
- return FALSE;
- }
- break;
- case Ws3:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseEntityDecl, state );
- return FALSE;
- }
- break;
- case Ndata:
- d->parseString_s = "NDATA";
- if ( !parseString() ) {
- parseFailed( &TQXmlSimpleReader::parseEntityDecl, state );
- return FALSE;
- }
- break;
- case Ws4:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseEntityDecl, state );
- return FALSE;
- }
- break;
- case NNam:
- case NNamR:
- d->parseName_useRef = TRUE;
- if ( !parseName() ) {
- parseFailed( &TQXmlSimpleReader::parseEntityDecl, state );
- return FALSE;
- }
- break;
- case PEDec:
- next();
- break;
- case Ws6:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseEntityDecl, state );
- return FALSE;
- }
- break;
- case PENam:
- d->parseName_useRef = FALSE;
- if ( !parseName() ) {
- parseFailed( &TQXmlSimpleReader::parseEntityDecl, state );
- return FALSE;
- }
- break;
- case Ws7:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseEntityDecl, state );
- return FALSE;
- }
- break;
- case PEVal:
- case PEValR:
- if ( !parseEntityValue() ) {
- parseFailed( &TQXmlSimpleReader::parseEntityDecl, state );
- return FALSE;
- }
- break;
- case PEEID:
- case PEEIDR:
- d->parseExternalID_allowPublicID = FALSE;
- if ( !parseExternalID() ) {
- parseFailed( &TQXmlSimpleReader::parseEntityDecl, state );
- return FALSE;
- }
- break;
- case WsE:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseEntityDecl, state );
- return FALSE;
- }
- break;
- case EDDone:
- next();
- break;
- case Done:
- next();
- break;
- }
- }
-}
-
-/*
- Parse a EntityValue [9]
-*/
-bool TQXmlSimpleReader::parseEntityValue()
-{
- const signed char Init = 0;
- const signed char Dq = 1; // EntityValue is double quoted
- const signed char DqC = 2; // signed character
- const signed char DqPER = 3; // PERefence
- const signed char DqRef = 4; // Reference
- const signed char Sq = 5; // EntityValue is double quoted
- const signed char SqC = 6; // signed character
- const signed char SqPER = 7; // PERefence
- const signed char SqRef = 8; // Reference
- const signed char Done = 9;
-
- const signed char InpDq = 0; // "
- const signed char InpSq = 1; // '
- const signed char InpAmp = 2; // &
- const signed char InpPer = 3; // %
- const signed char InpUnknown = 4;
-
- static const signed char table[9][5] = {
- /* InpDq InpSq InpAmp InpPer InpUnknown */
- { Dq, Sq, -1, -1, -1 }, // Init
- { Done, DqC, DqRef, DqPER, DqC }, // Dq
- { Done, DqC, DqRef, DqPER, DqC }, // DqC
- { Done, DqC, DqRef, DqPER, DqC }, // DqPER
- { Done, DqC, DqRef, DqPER, DqC }, // DqRef
- { SqC, Done, SqRef, SqPER, SqC }, // Sq
- { SqC, Done, SqRef, SqPER, SqC }, // SqC
- { SqC, Done, SqRef, SqPER, SqC }, // SqPER
- { SqC, Done, SqRef, SqPER, SqC } // SqRef
- };
- signed char state;
- signed char input;
-
- if ( d->parseStack==0 || d->parseStack->isEmpty() ) {
- state = Init;
- } else {
- state = d->parseStack->pop().state;
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: parseEntityValue (cont) in state %d", state );
-#endif
- if ( !d->parseStack->isEmpty() ) {
- ParseFunction function = d->parseStack->top().function;
- if ( function == &TQXmlSimpleReader::eat_ws ) {
- d->parseStack->pop();
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: eat_ws (cont)" );
-#endif
- }
- if ( !(this->*function)() ) {
- parseFailed( &TQXmlSimpleReader::parseEntityValue, state );
- return FALSE;
- }
- }
- }
-
- for (;;) {
- switch ( state ) {
- case Done:
- return TRUE;
- case -1:
- // Error
- reportParseError( XMLERR_LETTEREXPECTED );
- return FALSE;
- }
-
- if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parseEntityValue, state );
- return FALSE;
- }
- if ( c.tqunicode() == '"' ) {
- input = InpDq;
- } else if ( c.tqunicode() == '\'' ) {
- input = InpSq;
- } else if ( c.tqunicode() == '&' ) {
- input = InpAmp;
- } else if ( c.tqunicode() == '%' ) {
- input = InpPer;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch ( state ) {
- case Dq:
- case Sq:
- stringClear();
- next();
- break;
- case DqC:
- case SqC:
- stringAddC();
- next();
- break;
- case DqPER:
- case SqPER:
- d->parsePEReference_context = InEntityValue;
- if ( !parsePEReference() ) {
- parseFailed( &TQXmlSimpleReader::parseEntityValue, state );
- return FALSE;
- }
- break;
- case DqRef:
- case SqRef:
- d->parseReference_context = InEntityValue;
- if ( !parseReference() ) {
- parseFailed( &TQXmlSimpleReader::parseEntityValue, state );
- return FALSE;
- }
- break;
- case Done:
- next();
- break;
- }
- }
-}
-
-/*
- Parse a comment [15].
-
- Precondition: the beginning '<!' of the comment is already read and the head
- stands on the first '-' of '<!--'.
-
- If this funktion was successful, the head-position is on the first
- character after the comment.
-*/
-bool TQXmlSimpleReader::parseComment()
-{
- const signed char Init = 0;
- const signed char Dash1 = 1; // the first dash was read
- const signed char Dash2 = 2; // the second dash was read
- const signed char Com = 3; // read comment
- const signed char Com2 = 4; // read comment (help state)
- const signed char ComE = 5; // finished reading comment
- const signed char Done = 6;
-
- const signed char InpDash = 0; // -
- const signed char InpGt = 1; // >
- const signed char InpUnknown = 2;
-
- static const signed char table[6][3] = {
- /* InpDash InpGt InpUnknown */
- { Dash1, -1, -1 }, // Init
- { Dash2, -1, -1 }, // Dash1
- { Com2, Com, Com }, // Dash2
- { Com2, Com, Com }, // Com
- { ComE, Com, Com }, // Com2
- { -1, Done, -1 } // ComE
- };
- signed char state;
- signed char input;
-
- if ( d->parseStack==0 || d->parseStack->isEmpty() ) {
- state = Init;
- } else {
- state = d->parseStack->pop().state;
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: parseComment (cont) in state %d", state );
-#endif
- if ( !d->parseStack->isEmpty() ) {
- ParseFunction function = d->parseStack->top().function;
- if ( function == &TQXmlSimpleReader::eat_ws ) {
- d->parseStack->pop();
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: eat_ws (cont)" );
-#endif
- }
- if ( !(this->*function)() ) {
- parseFailed( &TQXmlSimpleReader::parseComment, state );
- return FALSE;
- }
- }
- }
-
- for (;;) {
- switch ( state ) {
- case Dash2:
- stringClear();
- break;
- case Com2:
- // if next character is not a dash than don't skip it
- if ( !atEnd() && c.tqunicode() != '-' )
- stringAddC( '-' );
- break;
- case Done:
- return TRUE;
- case -1:
- // Error
- reportParseError( XMLERR_ERRORPARSINGCOMMENT );
- return FALSE;
- }
-
- if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parseComment, state );
- return FALSE;
- }
- if ( c.tqunicode() == '-' ) {
- input = InpDash;
- } else if ( c.tqunicode() == '>' ) {
- input = InpGt;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch ( state ) {
- case Dash1:
- next();
- break;
- case Dash2:
- next();
- break;
- case Com:
- stringAddC();
- next();
- break;
- case Com2:
- next();
- break;
- case ComE:
- next();
- break;
- case Done:
- next();
- break;
- }
- }
-}
-
-/*
- Parse an Attribute [41].
-
- Precondition: the head stands on the first character of the name
- of the attribute (i.e. all whitespaces are already parsed).
-
- The head stand on the next character after the end quotes. The
- variable name contains the name of the attribute and the variable
- string contains the value of the attribute.
-*/
-bool TQXmlSimpleReader::parseAttribute()
-{
- const int Init = 0;
- const int PName = 1; // parse name
- const int Ws = 2; // eat ws
- const int Eq = 3; // the '=' was read
- const int Quotes = 4; // " or ' were read
-
- const int InpNameBe = 0;
- const int InpEq = 1; // =
- const int InpDq = 2; // "
- const int InpSq = 3; // '
- const int InpUnknown = 4;
-
- static const int table[4][5] = {
- /* InpNameBe InpEq InpDq InpSq InpUnknown */
- { PName, -1, -1, -1, -1 }, // Init
- { -1, Eq, -1, -1, Ws }, // PName
- { -1, Eq, -1, -1, -1 }, // Ws
- { -1, -1, Quotes, Quotes, -1 } // Eq
- };
- int state;
- int input;
-
- if ( d->parseStack==0 || d->parseStack->isEmpty() ) {
- state = Init;
- } else {
- state = d->parseStack->pop().state;
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: parseAttribute (cont) in state %d", state );
-#endif
- if ( !d->parseStack->isEmpty() ) {
- ParseFunction function = d->parseStack->top().function;
- if ( function == &TQXmlSimpleReader::eat_ws ) {
- d->parseStack->pop();
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: eat_ws (cont)" );
-#endif
- }
- if ( !(this->*function)() ) {
- parseFailed( &TQXmlSimpleReader::parseAttribute, state );
- return FALSE;
- }
- }
- }
-
- for (;;) {
- switch ( state ) {
- case Quotes:
- // Done
- return TRUE;
- case -1:
- // Error
- reportParseError( XMLERR_UNEXPECTEDCHARACTER );
- return FALSE;
- }
-
- if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parseAttribute, state );
- return FALSE;
- }
- if ( determineNameChar(c) == NameBeginning ) {
- input = InpNameBe;
- } else if ( c.tqunicode() == '=' ) {
- input = InpEq;
- } else if ( c.tqunicode() == '"' ) {
- input = InpDq;
- } else if ( c.tqunicode() == '\'' ) {
- input = InpSq;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch ( state ) {
- case PName:
- d->parseName_useRef = FALSE;
- if ( !parseName() ) {
- parseFailed( &TQXmlSimpleReader::parseAttribute, state );
- return FALSE;
- }
- break;
- case Ws:
- if ( !eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseAttribute, state );
- return FALSE;
- }
- break;
- case Eq:
- if ( !next_eat_ws() ) {
- parseFailed( &TQXmlSimpleReader::parseAttribute, state );
- return FALSE;
- }
- break;
- case Quotes:
- if ( !parseAttValue() ) {
- parseFailed( &TQXmlSimpleReader::parseAttribute, state );
- return FALSE;
- }
- break;
- }
- }
-}
-
-/*
- Parse a Name [5] and store the name in name or ref (if useRef is TRUE).
-*/
-bool TQXmlSimpleReader::parseName()
-{
- const int Init = 0;
- const int Name1 = 1; // parse first signed character of the name
- const int Name = 2; // parse name
- const int Done = 3;
-
- const int InpNameBe = 0; // name beginning signed characters
- const int InpNameCh = 1; // NameChar without InpNameBe
- const int InpUnknown = 2;
-
- TQ_ASSERT(InpNameBe == (int)NameBeginning);
- TQ_ASSERT(InpNameCh == (int)NameNotBeginning);
- TQ_ASSERT(InpUnknown == (int)NotName);
-
- static const int table[3][3] = {
- /* InpNameBe InpNameCh InpUnknown */
- { Name1, -1, -1 }, // Init
- { Name, Name, Done }, // Name1
- { Name, Name, Done } // Name
- };
- int state;
-
- if ( d->parseStack==0 || d->parseStack->isEmpty() ) {
- state = Init;
- } else {
- state = d->parseStack->pop().state;
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: parseName (cont) in state %d", state );
-#endif
- if ( !d->parseStack->isEmpty() ) {
- ParseFunction function = d->parseStack->top().function;
- if ( function == &TQXmlSimpleReader::eat_ws ) {
- d->parseStack->pop();
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: eat_ws (cont)" );
-#endif
- }
- if ( !(this->*function)() ) {
- parseFailed( &TQXmlSimpleReader::parseName, state );
- return FALSE;
- }
- }
- }
-
- for (;;) {
- switch ( state ) {
- case Done:
- return TRUE;
- case -1:
- // Error
- reportParseError( XMLERR_LETTEREXPECTED );
- return FALSE;
- }
-
- if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parseName, state );
- return FALSE;
- }
-
- // we can safely do the (int) cast thanks to the TQ_ASSERTs earlier in this function
- state = table[state][(int)fastDetermineNameChar(c)];
-
- switch ( state ) {
- case Name1:
- if ( d->parseName_useRef ) {
- refClear();
- refAddC();
- } else {
- nameClear();
- nameAddC();
- }
- next();
- break;
- case Name:
- if ( d->parseName_useRef ) {
- refAddC();
- } else {
- nameAddC();
- }
- next();
- break;
- }
- }
-}
-
-/*
- Parse a Nmtoken [7] and store the name in name.
-*/
-bool TQXmlSimpleReader::parseNmtoken()
-{
- const signed char Init = 0;
- const signed char NameF = 1;
- const signed char Name = 2;
- const signed char Done = 3;
-
- const signed char InpNameCh = 0; // NameChar without InpNameBe
- const signed char InpUnknown = 1;
-
- static const signed char table[3][2] = {
- /* InpNameCh InpUnknown */
- { NameF, -1 }, // Init
- { Name, Done }, // NameF
- { Name, Done } // Name
- };
- signed char state;
- signed char input;
-
- if ( d->parseStack==0 || d->parseStack->isEmpty() ) {
- state = Init;
- } else {
- state = d->parseStack->pop().state;
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: parseNmtoken (cont) in state %d", state );
-#endif
- if ( !d->parseStack->isEmpty() ) {
- ParseFunction function = d->parseStack->top().function;
- if ( function == &TQXmlSimpleReader::eat_ws ) {
- d->parseStack->pop();
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: eat_ws (cont)" );
-#endif
- }
- if ( !(this->*function)() ) {
- parseFailed( &TQXmlSimpleReader::parseNmtoken, state );
- return FALSE;
- }
- }
- }
-
- for (;;) {
- switch ( state ) {
- case Done:
- return TRUE;
- case -1:
- // Error
- reportParseError( XMLERR_LETTEREXPECTED );
- return FALSE;
- }
-
- if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parseNmtoken, state );
- return FALSE;
- }
- if (determineNameChar(c) == NotName) {
- input = InpUnknown;
- } else {
- input = InpNameCh;
- }
- state = table[state][input];
-
- switch ( state ) {
- case NameF:
- nameClear();
- nameAddC();
- next();
- break;
- case Name:
- nameAddC();
- next();
- break;
- }
- }
-}
-
-/*
- Parse a Reference [67].
-
- parseReference_charDataRead is set to TRUE if the reference must not be
- parsed. The character(s) which the reference mapped to are appended to
- string. The head stands on the first character after the reference.
-
- parseReference_charDataRead is set to FALSE if the reference must be parsed.
- The charachter(s) which the reference mapped to are inserted at the reference
- position. The head stands on the first character of the replacement).
-*/
-bool TQXmlSimpleReader::parseReference()
-{
- // temporary variables (only used in very local context, so they don't
- // interfere with incremental parsing)
- uint tmp;
- bool ok;
-
- const signed char Init = 0;
- const signed char SRef = 1; // start of a reference
- const signed char ChRef = 2; // parse CharRef
- const signed char ChDec = 3; // parse CharRef decimal
- const signed char ChHexS = 4; // start CharRef hexadecimal
- const signed char ChHex = 5; // parse CharRef hexadecimal
- const signed char Name = 6; // parse name
- const signed char DoneD = 7; // done CharRef decimal
- const signed char DoneH = 8; // done CharRef hexadecimal
- const signed char DoneN = 9; // done EntityRef
-
- const signed char InpAmp = 0; // &
- const signed char InpSemi = 1; // ;
- const signed char InpHash = 2; // #
- const signed char InpX = 3; // x
- const signed char InpNum = 4; // 0-9
- const signed char InpHex = 5; // a-f A-F
- const signed char InpUnknown = 6;
-
- static const signed char table[8][7] = {
- /* InpAmp InpSemi InpHash InpX InpNum InpHex InpUnknown */
- { SRef, -1, -1, -1, -1, -1, -1 }, // Init
- { -1, -1, ChRef, Name, Name, Name, Name }, // SRef
- { -1, -1, -1, ChHexS, ChDec, -1, -1 }, // ChRef
- { -1, DoneD, -1, -1, ChDec, -1, -1 }, // ChDec
- { -1, -1, -1, -1, ChHex, ChHex, -1 }, // ChHexS
- { -1, DoneH, -1, -1, ChHex, ChHex, -1 }, // ChHex
- { -1, DoneN, -1, -1, -1, -1, -1 } // Name
- };
- signed char state;
- signed char input;
-
- if ( d->parseStack==0 || d->parseStack->isEmpty() ) {
- d->parseReference_charDataRead = FALSE;
- state = Init;
- } else {
- state = d->parseStack->pop().state;
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: parseReference (cont) in state %d", state );
-#endif
- if ( !d->parseStack->isEmpty() ) {
- ParseFunction function = d->parseStack->top().function;
- if ( function == &TQXmlSimpleReader::eat_ws ) {
- d->parseStack->pop();
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: eat_ws (cont)" );
-#endif
- }
- if ( !(this->*function)() ) {
- parseFailed( &TQXmlSimpleReader::parseReference, state );
- return FALSE;
- }
- }
- }
-
- for (;;) {
- switch ( state ) {
- case DoneD:
- return TRUE;
- case DoneH:
- return TRUE;
- case DoneN:
- return TRUE;
- case -1:
- // Error
- reportParseError( XMLERR_ERRORPARSINGREFERENCE );
- return FALSE;
- }
-
- if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parseReference, state );
- return FALSE;
- }
- if ( c.row() ) {
- input = InpUnknown;
- } else if ( c.cell() == '&' ) {
- input = InpAmp;
- } else if ( c.cell() == ';' ) {
- input = InpSemi;
- } else if ( c.cell() == '#' ) {
- input = InpHash;
- } else if ( c.cell() == 'x' ) {
- input = InpX;
- } else if ( '0' <= c.cell() && c.cell() <= '9' ) {
- input = InpNum;
- } else if ( 'a' <= c.cell() && c.cell() <= 'f' ) {
- input = InpHex;
- } else if ( 'A' <= c.cell() && c.cell() <= 'F' ) {
- input = InpHex;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch ( state ) {
- case SRef:
- refClear();
- next();
- break;
- case ChRef:
- next();
- break;
- case ChDec:
- refAddC();
- next();
- break;
- case ChHexS:
- next();
- break;
- case ChHex:
- refAddC();
- next();
- break;
- case Name:
- // read the name into the ref
- d->parseName_useRef = TRUE;
- if ( !parseName() ) {
- parseFailed( &TQXmlSimpleReader::parseReference, state );
- return FALSE;
- }
- break;
- case DoneD:
- tmp = ref().toUInt( &ok, 10 );
- if ( ok ) {
- stringAddC( TQChar(tmp) );
- } else {
- reportParseError( XMLERR_ERRORPARSINGREFERENCE );
- return FALSE;
- }
- d->parseReference_charDataRead = TRUE;
- next();
- break;
- case DoneH:
- tmp = ref().toUInt( &ok, 16 );
- if ( ok ) {
- stringAddC( TQChar(tmp) );
- } else {
- reportParseError( XMLERR_ERRORPARSINGREFERENCE );
- return FALSE;
- }
- d->parseReference_charDataRead = TRUE;
- next();
- break;
- case DoneN:
- if ( !processReference() )
- return FALSE;
- next();
- break;
- }
- }
-}
-
-/* This private function is only called by TQDom. It avoids a data corruption bug
- whereby undefined entities in attribute values would be appended after the
- element that contained them.
-
- The solution is not perfect - the undefined entity reference is replaced by
- an empty string. The propper fix will come in TQt4, when SAX will be extended
- so that attribute values can be made up of multiple tqchildren, rather than just
- a single string value.
-*/
-void TQXmlSimpleReader::setUndefEntityInAttrHack(bool b)
-{
- d->undefEntityInAttrHack = b;
-}
-
-/*
- Helper function for parseReference()
-*/
-bool TQXmlSimpleReader::processReference()
-{
- TQString reference = ref();
- if ( reference == "amp" ) {
- if ( d->parseReference_context == InEntityValue ) {
- // Bypassed
- stringAddC( '&' ); stringAddC( 'a' ); stringAddC( 'm' ); stringAddC( 'p' ); stringAddC( ';' );
- } else {
- // Included or Included in literal
- stringAddC( '&' );
- }
- d->parseReference_charDataRead = TRUE;
- } else if ( reference == "lt" ) {
- if ( d->parseReference_context == InEntityValue ) {
- // Bypassed
- stringAddC( '&' ); stringAddC( 'l' ); stringAddC( 't' ); stringAddC( ';' );
- } else {
- // Included or Included in literal
- stringAddC( '<' );
- }
- d->parseReference_charDataRead = TRUE;
- } else if ( reference == "gt" ) {
- if ( d->parseReference_context == InEntityValue ) {
- // Bypassed
- stringAddC( '&' ); stringAddC( 'g' ); stringAddC( 't' ); stringAddC( ';' );
- } else {
- // Included or Included in literal
- stringAddC( '>' );
- }
- d->parseReference_charDataRead = TRUE;
- } else if ( reference == "apos" ) {
- if ( d->parseReference_context == InEntityValue ) {
- // Bypassed
- stringAddC( '&' ); stringAddC( 'a' ); stringAddC( 'p' ); stringAddC( 'o' ); stringAddC( 's' ); stringAddC( ';' );
- } else {
- // Included or Included in literal
- stringAddC( '\'' );
- }
- d->parseReference_charDataRead = TRUE;
- } else if ( reference == "quot" ) {
- if ( d->parseReference_context == InEntityValue ) {
- // Bypassed
- stringAddC( '&' ); stringAddC( 'q' ); stringAddC( 'u' ); stringAddC( 'o' ); stringAddC( 't' ); stringAddC( ';' );
- } else {
- // Included or Included in literal
- stringAddC( '"' );
- }
- d->parseReference_charDataRead = TRUE;
- } else {
- TQMap<TQString,TQString>::Iterator it;
- it = d->entities.find( reference );
- if ( it != d->entities.end() ) {
- // "Internal General"
- switch ( d->parseReference_context ) {
- case InContent:
- // Included
- if ( !insertXmlRef( it.data(), reference, FALSE ) )
- return FALSE;
- d->parseReference_charDataRead = FALSE;
- break;
- case InAttributeValue:
- // Included in literal
- if ( !insertXmlRef( it.data(), reference, TRUE ) )
- return FALSE;
- d->parseReference_charDataRead = FALSE;
- break;
- case InEntityValue:
- {
- // Bypassed
- stringAddC( '&' );
- for ( int i=0; i<(int)reference.length(); i++ ) {
- stringAddC( reference[i] );
- }
- stringAddC( ';');
- d->parseReference_charDataRead = TRUE;
- }
- break;
- case InDTD:
- // Forbidden
- d->parseReference_charDataRead = FALSE;
- reportParseError( XMLERR_INTERNALGENERALENTITYINDTD );
- return FALSE;
- }
- } else {
- TQMap<TQString,TQXmlSimpleReaderPrivate::ExternEntity>::Iterator itExtern;
- itExtern = d->externEntities.find( reference );
- if ( itExtern == d->externEntities.end() ) {
- // entity not declared
- // ### check this case for conformance
- if ( d->parseReference_context == InEntityValue ) {
- // Bypassed
- stringAddC( '&' );
- for ( int i=0; i<(int)reference.length(); i++ ) {
- stringAddC( reference[i] );
- }
- stringAddC( ';');
- d->parseReference_charDataRead = TRUE;
- } else {
- if ( contentHnd && !(d->parseReference_context == InAttributeValue
- && d->undefEntityInAttrHack)) {
- if ( !contentHnd->skippedEntity( reference ) ) {
- reportParseError( contentHnd->errorString() );
- return FALSE; // error
- }
- }
- }
- } else if ( (*itExtern).notation.isNull() ) {
- // "External Parsed General"
- switch ( d->parseReference_context ) {
- case InContent:
- {
- // Included if validating
- bool skipIt = TRUE;
- if ( entityRes ) {
- TQXmlInputSource *ret = 0;
- if ( !entityRes->resolveEntity( itExtern.data().publicId, itExtern.data().systemId, ret ) ) {
- delete ret;
- reportParseError( entityRes->errorString() );
- return FALSE;
- }
- if ( ret ) {
- TQString xmlRefString = ret->data();
- delete ret;
- if ( !stripTextDecl( xmlRefString ) ) {
- reportParseError( XMLERR_ERRORINTEXTDECL );
- return FALSE;
- }
- if ( !insertXmlRef( xmlRefString, reference, FALSE ) )
- return FALSE;
- skipIt = FALSE;
- }
- }
- if ( skipIt && contentHnd ) {
- if ( !contentHnd->skippedEntity( reference ) ) {
- reportParseError( contentHnd->errorString() );
- return FALSE; // error
- }
- }
- d->parseReference_charDataRead = FALSE;
- } break;
- case InAttributeValue:
- // Forbidden
- d->parseReference_charDataRead = FALSE;
- reportParseError( XMLERR_EXTERNALGENERALENTITYINAV );
- return FALSE;
- case InEntityValue:
- {
- // Bypassed
- stringAddC( '&' );
- for ( int i=0; i<(int)reference.length(); i++ ) {
- stringAddC( reference[i] );
- }
- stringAddC( ';');
- d->parseReference_charDataRead = TRUE;
- }
- break;
- case InDTD:
- // Forbidden
- d->parseReference_charDataRead = FALSE;
- reportParseError( XMLERR_EXTERNALGENERALENTITYINDTD );
- return FALSE;
- }
- } else {
- // "Unparsed"
- // ### notify for "Occurs as Attribute Value" missing (but this is no refence, anyway)
- // Forbidden
- d->parseReference_charDataRead = FALSE;
- reportParseError( XMLERR_UNPARSEDENTITYREFERENCE );
- return FALSE; // error
- }
- }
- }
- return TRUE; // no error
-}
-
-
-/*
- Parses over a simple string.
-
- After the string was successfully parsed, the head is on the first
- character after the string.
-*/
-bool TQXmlSimpleReader::parseString()
-{
- const signed char InpCharExpected = 0; // the character that was expected
- const signed char InpUnknown = 1;
-
- signed char state; // state in this function is the position in the string s
- signed char input;
-
- if ( d->parseStack==0 || d->parseStack->isEmpty() ) {
- d->Done = d->parseString_s.length();
- state = 0;
- } else {
- state = d->parseStack->pop().state;
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: parseString (cont) in state %d", state );
-#endif
- if ( !d->parseStack->isEmpty() ) {
- ParseFunction function = d->parseStack->top().function;
- if ( function == &TQXmlSimpleReader::eat_ws ) {
- d->parseStack->pop();
-#if defined(TQT_TQXML_DEBUG)
- qDebug( "TQXmlSimpleReader: eat_ws (cont)" );
-#endif
- }
- if ( !(this->*function)() ) {
- parseFailed( &TQXmlSimpleReader::parseString, state );
- return FALSE;
- }
- }
- }
-
- for (;;) {
- if ( state == d->Done ) {
- return TRUE;
- }
-
- if ( atEnd() ) {
- unexpectedEof( &TQXmlSimpleReader::parseString, state );
- return FALSE;
- }
- if ( c == d->parseString_s[(int)state] ) {
- input = InpCharExpected;
- } else {
- input = InpUnknown;
- }
- if ( input == InpCharExpected ) {
- state++;
- } else {
- // Error
- reportParseError( XMLERR_UNEXPECTEDCHARACTER );
- return FALSE;
- }
-
- next();
- }
-}
-
-/*
- This private function inserts and reports an entity substitution. The
- substituted string is \a data and the name of the entity reference is \a
- name. If \a inLiteral is TRUE, the entity is IncludedInLiteral (i.e., " and '
- must be quoted. Otherwise they are not quoted.
-
- This function returns FALSE on error.
-*/
-bool TQXmlSimpleReader::insertXmlRef( const TQString &data, const TQString &name, bool inLiteral )
-{
- if ( inLiteral ) {
- TQString tmp = data;
- d->xmlRef.push( TQT_TQSTRING(tmp.replace( "\"", "&quot;" )).replace( "'", "&apos;" ) );
- } else {
- d->xmlRef.push( data );
- }
- d->xmlRefName.push( name );
- uint n = (uint)TQMAX( d->parameterEntities.count(), d->entities.count() );
- if ( d->xmlRefName.count() > n+1 ) {
- // recursive entities
- reportParseError( XMLERR_RECURSIVEENTITIES );
- return FALSE;
- }
- if ( d->reportEntities && lexicalHnd ) {
- if ( !lexicalHnd->startEntity( name ) ) {
- reportParseError( lexicalHnd->errorString() );
- return FALSE;
- }
- }
- return TRUE;
-}
-
-/*
- This private function moves the cursor to the next character.
-*/
-void TQXmlSimpleReader::next()
-{
- int count = (int)d->xmlRef.count();
- while ( count != 0 ) {
- if ( d->xmlRef.top().isEmpty() ) {
- d->xmlRef.pop_back();
- d->xmlRefName.pop_back();
- count--;
- } else {
- c = d->xmlRef.top().constref( 0 );
- d->xmlRef.top().remove( (uint)0, 1 );
- return;
- }
- }
- // the following could be written nicer, but since it is a time-critical
- // function, rather optimize for speed
- ushort uc = c.tqunicode();
- if (uc == '\n') {
- c = inputSource->next();
- lineNr++;
- columnNr = -1;
- } else if ( uc == '\r' ) {
- c = inputSource->next();
- if ( c.tqunicode() != '\n' ) {
- lineNr++;
- columnNr = -1;
- }
- } else {
- c = inputSource->next();
- }
- ++columnNr;
-}
-
-/*
- This private function moves the cursor to the next non-whitespace character.
- This function does not move the cursor if the actual cursor position is a
- non-whitespace charcter.
-
- Returns FALSE when you use incremental parsing and this function reaches EOF
- with reading only whitespace characters. In this case it also poplulates the
- parseStack with useful information. In all other cases, this function returns
- TRUE.
-*/
-bool TQXmlSimpleReader::eat_ws()
-{
- while ( !atEnd() ) {
- if ( !is_S(c) ) {
- return TRUE;
- }
- next();
- }
- if ( d->parseStack != 0 ) {
- unexpectedEof( &TQXmlSimpleReader::eat_ws, 0 );
- return FALSE;
- }
- return TRUE;
-}
-
-bool TQXmlSimpleReader::next_eat_ws()
-{
- next();
- return eat_ws();
-}
-
-
-/*
- This private function initializes the reader. \a i is the input source to
- read the data from.
-*/
-void TQXmlSimpleReader::init( const TQXmlInputSource *i )
-{
- lineNr = 0;
- columnNr = -1;
- inputSource = (TQXmlInputSource *)i;
- initData();
-
- d->externParameterEntities.clear();
- d->parameterEntities.clear();
- d->externEntities.clear();
- d->entities.clear();
-
- d->tags.clear();
-
- d->doctype = "";
- d->xmlVersion = "";
- d->encoding = "";
- d->standalone = TQXmlSimpleReaderPrivate::Unknown;
- d->error = TQString::null;
-}
-
-/*
- This private function initializes the XML data related variables. Especially,
- it reads the data from the input source.
-*/
-void TQXmlSimpleReader::initData()
-{
- c = TQXmlInputSource::EndOfData;
- d->xmlRef.clear();
- next();
-}
-
-/*
- Returns TRUE if a entity with the name \a e exists,
- otherwise returns FALSE.
-*/
-bool TQXmlSimpleReader::entityExist( const TQString& e ) const
-{
- if ( d->parameterEntities.find(e) == d->parameterEntities.end() &&
- d->externParameterEntities.find(e) == d->externParameterEntities.end() &&
- d->externEntities.find(e) == d->externEntities.end() &&
- d->entities.find(e) == d->entities.end() ) {
- return FALSE;
- } else {
- return TRUE;
- }
-}
-
-void TQXmlSimpleReader::reportParseError( const TQString& error )
-{
- d->error = error;
- if ( errorHnd ) {
- if ( d->error.isNull() ) {
- errorHnd->fatalError( TQXmlParseException( XMLERR_OK, columnNr+1, lineNr+1 ) );
- } else {
- errorHnd->fatalError( TQXmlParseException( d->error, columnNr+1, lineNr+1 ) );
- }
- }
-}
-
-/*
- This private function is called when a parsing function encounters an
- unexpected EOF. It decides what to do (depending on incremental parsing or
- not). \a where is a pointer to the function where the error occurred and \a
- state is the parsing state in this function.
-*/
-void TQXmlSimpleReader::unexpectedEof( ParseFunction where, int state )
-{
- if ( d->parseStack == 0 ) {
- reportParseError( XMLERR_UNEXPECTEDEOF );
- } else {
- if ( c == TQXmlInputSource::EndOfDocument ) {
- reportParseError( XMLERR_UNEXPECTEDEOF );
- } else {
- pushParseState( where, state );
- }
- }
-}
-
-/*
- This private function is called when a parse...() function returned FALSE. It
- determines if there was an error or if incremental parsing simply went out of
- data and does the right thing for the case. \a where is a pointer to the
- function where the error occurred and \a state is the parsing state in this
- function.
-*/
-void TQXmlSimpleReader::parseFailed( ParseFunction where, int state )
-{
- if ( d->parseStack!=0 && d->error.isNull() ) {
- pushParseState( where, state );
- }
-}
-
-/*
- This private function pushes the function pointer \a function and state \a
- state to the parse stack. This is used when you are doing an incremental
- parsing and reach the end of file too early.
-
- Only call this function when d->parseStack!=0.
-*/
-void TQXmlSimpleReader::pushParseState( ParseFunction function, int state )
-{
- TQXmlSimpleReaderPrivate::ParseState ps;
- ps.function = function;
- ps.state = state;
- d->parseStack->push( ps );
-}
-
-inline static void updateValue(TQString &value, const TQChar *array, int &arrayPos, int &valueLen)
-{
- value.setLength(valueLen + arrayPos);
- memcpy(const_cast<TQChar*>(value.tqunicode()) + valueLen, array, arrayPos * sizeof(TQChar));
- valueLen += arrayPos;
- arrayPos = 0;
-}
-
-// use buffers instead of TQString::operator+= when single characters are read
-const TQString& TQXmlSimpleReader::string()
-{
- updateValue(stringValue, stringArray, stringArrayPos, d->stringValueLen);
- return stringValue;
-}
-
-const TQString& TQXmlSimpleReader::name()
-{
- updateValue(nameValue, nameArray, nameArrayPos, d->nameValueLen);
- return nameValue;
-}
-
-const TQString& TQXmlSimpleReader::ref()
-{
- updateValue(refValue, refArray, refArrayPos, d->refValueLen);
- return refValue;
-}
-
-void TQXmlSimpleReader::stringAddC(const TQChar &ch)
-{
- if (stringArrayPos == 256)
- updateValue(stringValue, stringArray, stringArrayPos, d->stringValueLen);
- stringArray[stringArrayPos++] = ch;
-}
-void TQXmlSimpleReader::nameAddC(const TQChar &ch)
-{
- if (nameArrayPos == 256)
- updateValue(nameValue, nameArray, nameArrayPos, d->nameValueLen);
- nameArray[nameArrayPos++] = ch;
-}
-
-void TQXmlSimpleReader::refAddC(const TQChar &ch)
-{
- if (refArrayPos == 256)
- updateValue(refValue, refArray, refArrayPos, d->refValueLen);
- refArray[refArrayPos++] = ch;
-}
-
-void TQXmlSimpleReader::stringClear()
-{
- d->stringValueLen = 0; stringArrayPos = 0;
-}
-
-
-#endif //TQT_NO_XML
diff --git a/tqtinterface/qt4/src/xml/tqxml.h b/tqtinterface/qt4/src/xml/tqxml.h
deleted file mode 100644
index 9a5c9c0..0000000
--- a/tqtinterface/qt4/src/xml/tqxml.h
+++ /dev/null
@@ -1,531 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQXmlSimpleReader and related classes.
-**
-** Created : 000518
-**
-** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
-**
-** This file is part of the xml module of the TQt GUI Toolkit.
-**
-** This file may be used under the terms of the GNU General
-** Public License versions 2.0 or 3.0 as published by the Free
-** Software Foundation and appearing in the files LICENSE.GPL2
-** and LICENSE.GPL3 included in the packaging of this file.
-** Alternatively you may (at your option) use any later version
-** of the GNU General Public License if such license has been
-** publicly approved by Trolltech ASA (or its successors, if any)
-** and the KDE Free TQt Foundation.
-**
-** Please review the following information to ensure GNU General
-** Public Licensing requirements will be met:
-** http://trolltech.com/products/qt/licenses/licensing/opensource/.
-** If you are unsure which license is appropriate for your use, please
-** review the following information:
-** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
-** or contact the sales department at sales@trolltech.com.
-**
-** This file may be used under the terms of the Q Public License as
-** defined by Trolltech ASA and appearing in the file LICENSE.TQPL
-** included in the packaging of this file. Licensees holding valid TQt
-** Commercial licenses may use this file in accordance with the TQt
-** Commercial License Agreement provided with the Software.
-**
-** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
-** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
-** herein.
-**
-**********************************************************************/
-
-#ifndef TQXML_H
-#define TQXML_H
-
-#ifndef TQT_H
-#include "tqtextstream.h"
-#include "tqfile.h"
-#include "tqstring.h"
-#include "tqstringlist.h"
-#include "tqvaluevector.h"
-#endif // TQT_H
-
-#if !defined(TQT_MODULE_XML) || defined( TQT_LICENSE_PROFESSIONAL ) || defined( TQT_INTERNAL_XML )
-#define TQM_EXPORT_XML
-#else
-#define TQM_EXPORT_XML TQ_EXPORT
-#endif
-
-#ifndef TQT_NO_XML
-
-class TQXmlNamespaceSupport;
-class TQXmlAttributes;
-class TQXmlContentHandler;
-class TQXmlDefaultHandler;
-class TQXmlDTDHandler;
-class TQXmlEntityResolver;
-class TQXmlErrorHandler;
-class TQXmlLexicalHandler;
-class TQXmlDeclHandler;
-class TQXmlInputSource;
-class TQXmlLocator;
-class TQXmlNamespaceSupport;
-class TQXmlParseException;
-
-class TQXmlReader;
-class TQXmlSimpleReader;
-
-class TQXmlSimpleReaderPrivate;
-class TQXmlNamespaceSupportPrivate;
-class TQXmlAttributesPrivate;
-class TQXmlInputSourcePrivate;
-class TQXmlParseExceptionPrivate;
-class TQXmlLocatorPrivate;
-class TQXmlDefaultHandlerPrivate;
-
-
-//
-// SAX Namespace Support
-//
-
-class TQM_EXPORT_XML TQXmlNamespaceSupport
-{
-public:
- TQXmlNamespaceSupport();
- ~TQXmlNamespaceSupport();
-
- void setPrefix( const TQString&, const TQString& );
-
- TQString prefix( const TQString& ) const;
- TQString uri( const TQString& ) const;
- void splitName( const TQString&, TQString&, TQString& ) const;
- void processName( const TQString&, bool, TQString&, TQString& ) const;
- TQStringList prefixes() const;
- TQStringList prefixes( const TQString& ) const;
-
- void pushContext();
- void popContext();
- void reset();
-
-private:
- TQXmlNamespaceSupportPrivate *d;
-
- friend class TQXmlSimpleReader;
-};
-
-
-//
-// SAX Attributes
-//
-
-class TQM_EXPORT_XML TQXmlAttributes
-{
-public:
- TQXmlAttributes() {}
- virtual ~TQXmlAttributes() {}
-
- int index( const TQString& qName ) const;
- int index( const TQString& uri, const TQString& localPart ) const;
- int length() const;
- int count() const;
- TQString localName( int index ) const;
- TQString qName( int index ) const;
- TQString uri( int index ) const;
- TQString type( int index ) const;
- TQString type( const TQString& qName ) const;
- TQString type( const TQString& uri, const TQString& localName ) const;
- TQString value( int index ) const;
- TQString value( const TQString& qName ) const;
- TQString value( const TQString& uri, const TQString& localName ) const;
-
- void clear();
- void append( const TQString &qName, const TQString &uri, const TQString &localPart, const TQString &value );
-
-private:
- TQStringList qnameList;
- TQStringList uriList;
- TQStringList localnameList;
- TQStringList valueList;
-
- TQXmlAttributesPrivate *d;
-};
-
-//
-// SAX Input Source
-//
-
-class TQM_EXPORT_XML TQXmlInputSource
-{
-public:
- TQXmlInputSource();
- TQXmlInputSource( TQIODevice *dev );
- TQXmlInputSource( TQFile& file ); // obsolete
- TQXmlInputSource( TQTextStream& stream ); // obsolete
- virtual ~TQXmlInputSource();
-
- virtual void setData( const TQString& dat );
- virtual void setData( const TQByteArray& dat );
- virtual void fetchData();
- virtual TQString data();
- virtual TQChar next();
- virtual void reset();
-
- static const TQChar EndOfData;
- static const TQChar EndOfDocument;
-
-protected:
- virtual TQString fromRawData( const TQByteArray &data, bool beginning = FALSE );
-
-private:
- void init();
-
- TQIODevice *inputDevice;
- TQTextStream *inputStream;
-
- TQString str;
- const TQChar *tqunicode;
- int pos;
- int length;
- bool nextReturnedEndOfData;
- TQTextDecoder *encMapper;
-
- TQXmlInputSourcePrivate *d;
-};
-
-//
-// SAX Exception Classes
-//
-
-class TQM_EXPORT_XML TQXmlParseException
-{
-public:
- TQXmlParseException( const TQString& name="", int c=-1, int l=-1, const TQString& p="", const TQString& s="" )
- : msg( name ), column( c ), line( l ), pub( p ), sys( s )
- { }
-
- int columnNumber() const;
- int lineNumber() const;
- TQString publicId() const;
- TQString systemId() const;
- TQString message() const;
-
-private:
- TQString msg;
- int column;
- int line;
- TQString pub;
- TQString sys;
-
- TQXmlParseExceptionPrivate *d;
-};
-
-
-//
-// XML Reader
-//
-
-class TQM_EXPORT_XML TQXmlReader
-{
-public:
- virtual bool feature( const TQString& name, bool *ok = 0 ) const = 0;
- virtual void setFeature( const TQString& name, bool value ) = 0;
- virtual bool hasFeature( const TQString& name ) const = 0;
- virtual void* property( const TQString& name, bool *ok = 0 ) const = 0;
- virtual void setProperty( const TQString& name, void* value ) = 0;
- virtual bool hasProperty( const TQString& name ) const = 0;
- virtual void setEntityResolver( TQXmlEntityResolver* handler ) = 0;
- virtual TQXmlEntityResolver* entityResolver() const = 0;
- virtual void setDTDHandler( TQXmlDTDHandler* handler ) = 0;
- virtual TQXmlDTDHandler* DTDHandler() const = 0;
- virtual void setContentHandler( TQXmlContentHandler* handler ) = 0;
- virtual TQXmlContentHandler* contentHandler() const = 0;
- virtual void setErrorHandler( TQXmlErrorHandler* handler ) = 0;
- virtual TQXmlErrorHandler* errorHandler() const = 0;
- virtual void setLexicalHandler( TQXmlLexicalHandler* handler ) = 0;
- virtual TQXmlLexicalHandler* lexicalHandler() const = 0;
- virtual void setDeclHandler( TQXmlDeclHandler* handler ) = 0;
- virtual TQXmlDeclHandler* declHandler() const = 0;
- virtual bool parse( const TQXmlInputSource& input ) = 0;
- virtual bool parse( const TQXmlInputSource* input ) = 0;
-};
-
-class TQM_EXPORT_XML TQXmlSimpleReader : public TQXmlReader
-{
-public:
- TQXmlSimpleReader();
- virtual ~TQXmlSimpleReader();
-
- bool feature( const TQString& name, bool *ok = 0 ) const;
- void setFeature( const TQString& name, bool value );
- bool hasFeature( const TQString& name ) const;
-
- void* property( const TQString& name, bool *ok = 0 ) const;
- void setProperty( const TQString& name, void* value );
- bool hasProperty( const TQString& name ) const;
-
- void setEntityResolver( TQXmlEntityResolver* handler );
- TQXmlEntityResolver* entityResolver() const;
- void setDTDHandler( TQXmlDTDHandler* handler );
- TQXmlDTDHandler* DTDHandler() const;
- void setContentHandler( TQXmlContentHandler* handler );
- TQXmlContentHandler* contentHandler() const;
- void setErrorHandler( TQXmlErrorHandler* handler );
- TQXmlErrorHandler* errorHandler() const;
- void setLexicalHandler( TQXmlLexicalHandler* handler );
- TQXmlLexicalHandler* lexicalHandler() const;
- void setDeclHandler( TQXmlDeclHandler* handler );
- TQXmlDeclHandler* declHandler() const;
-
- bool parse( const TQXmlInputSource& input );
- bool parse( const TQXmlInputSource* input );
- virtual bool parse( const TQXmlInputSource* input, bool incremental );
- virtual bool parseContinue();
-
-private:
- // variables
- TQXmlContentHandler *contentHnd;
- TQXmlErrorHandler *errorHnd;
- TQXmlDTDHandler *dtdHnd;
- TQXmlEntityResolver *entityRes;
- TQXmlLexicalHandler *lexicalHnd;
- TQXmlDeclHandler *declHnd;
-
- TQXmlInputSource *inputSource;
-
- TQChar c; // the character at reading position
- int lineNr; // number of line
- int columnNr; // position in line
-
- int nameArrayPos;
- TQChar nameArray[256]; // only used for names
- TQString nameValue; // only used for names
- int refArrayPos;
- TQChar refArray[256]; // only used for references
- TQString refValue; // only used for references
- int stringArrayPos;
- TQChar stringArray[256]; // used for any other strings that are parsed
- TQString stringValue; // used for any other strings that are parsed
-
- TQXmlSimpleReaderPrivate* d;
-
- const TQString &string();
- void stringClear();
- inline void stringAddC() { stringAddC(c); }
- void stringAddC(const TQChar&);
- const TQString& name();
- void nameClear();
- inline void nameAddC() { nameAddC(c); }
- void nameAddC(const TQChar&);
- const TQString& ref();
- void refClear();
- inline void refAddC() { refAddC(c); }
- void refAddC(const TQChar&);
-
- // used by parseReference() and parsePEReference()
- enum EntityRecognitionContext { InContent, InAttributeValue, InEntityValue, InDTD };
-
- // private functions
- bool eat_ws();
- bool next_eat_ws();
-
- void next();
- bool atEnd();
-
- void init( const TQXmlInputSource* i );
- void initData();
-
- bool entityExist( const TQString& ) const;
-
- bool parseBeginOrContinue( int state, bool incremental );
-
- bool parseProlog();
- bool parseElement();
- bool processElementEmptyTag();
- bool processElementETagBegin2();
- bool processElementAttribute();
- bool parseMisc();
- bool parseContent();
-
- bool parsePI();
- bool parseDoctype();
- bool parseComment();
-
- bool parseName();
- bool parseNmtoken();
- bool parseAttribute();
- bool parseReference();
- bool processReference();
-
- bool parseExternalID();
- bool parsePEReference();
- bool parseMarkupdecl();
- bool parseAttlistDecl();
- bool parseAttType();
- bool parseAttValue();
- bool parseElementDecl();
- bool parseNotationDecl();
- bool parseChoiceSeq();
- bool parseEntityDecl();
- bool parseEntityValue();
-
- bool parseString();
-
- bool insertXmlRef( const TQString&, const TQString&, bool );
-
- bool reportEndEntities();
- void reportParseError( const TQString& error );
-
- typedef bool (TQXmlSimpleReader::*ParseFunction) ();
- void unexpectedEof( ParseFunction where, int state );
- void parseFailed( ParseFunction where, int state );
- void pushParseState( ParseFunction function, int state );
-
- void setUndefEntityInAttrHack(bool b);
-
- friend class TQXmlSimpleReaderPrivate;
- friend class TQXmlSimpleReaderLocator;
- friend class TQDomDocumentPrivate;
-};
-
-//
-// SAX Locator
-//
-
-class TQM_EXPORT_XML TQXmlLocator
-{
-public:
- TQXmlLocator();
- virtual ~TQXmlLocator();
-
- virtual int columnNumber() = 0;
- virtual int lineNumber() = 0;
-// TQString getPublicId()
-// TQString getSystemId()
-};
-
-//
-// SAX handler classes
-//
-
-class TQM_EXPORT_XML TQXmlContentHandler
-{
-public:
- virtual void setDocumentLocator( TQXmlLocator* locator ) = 0;
- virtual bool startDocument() = 0;
- virtual bool endDocument() = 0;
- virtual bool startPrefixMapping( const TQString& prefix, const TQString& uri ) = 0;
- virtual bool endPrefixMapping( const TQString& prefix ) = 0;
- virtual bool startElement( const TQString& namespaceURI, const TQString& localName, const TQString& qName, const TQXmlAttributes& atts ) = 0;
- virtual bool endElement( const TQString& namespaceURI, const TQString& localName, const TQString& qName ) = 0;
- virtual bool characters( const TQString& ch ) = 0;
- virtual bool ignorableWhitespace( const TQString& ch ) = 0;
- virtual bool processingInstruction( const TQString& target, const TQString& data ) = 0;
- virtual bool skippedEntity( const TQString& name ) = 0;
- virtual TQString errorString() = 0;
-};
-
-class TQM_EXPORT_XML TQXmlErrorHandler
-{
-public:
- virtual bool warning( const TQXmlParseException& exception ) = 0;
- virtual bool error( const TQXmlParseException& exception ) = 0;
- virtual bool fatalError( const TQXmlParseException& exception ) = 0;
- virtual TQString errorString() = 0;
-};
-
-class TQM_EXPORT_XML TQXmlDTDHandler
-{
-public:
- virtual bool notationDecl( const TQString& name, const TQString& publicId, const TQString& systemId ) = 0;
- virtual bool unparsedEntityDecl( const TQString& name, const TQString& publicId, const TQString& systemId, const TQString& notationName ) = 0;
- virtual TQString errorString() = 0;
-};
-
-class TQM_EXPORT_XML TQXmlEntityResolver
-{
-public:
- virtual bool resolveEntity( const TQString& publicId, const TQString& systemId, TQXmlInputSource*& ret ) = 0;
- virtual TQString errorString() = 0;
-};
-
-class TQM_EXPORT_XML TQXmlLexicalHandler
-{
-public:
- virtual bool startDTD( const TQString& name, const TQString& publicId, const TQString& systemId ) = 0;
- virtual bool endDTD() = 0;
- virtual bool startEntity( const TQString& name ) = 0;
- virtual bool endEntity( const TQString& name ) = 0;
- virtual bool startCDATA() = 0;
- virtual bool endCDATA() = 0;
- virtual bool comment( const TQString& ch ) = 0;
- virtual TQString errorString() = 0;
-};
-
-class TQM_EXPORT_XML TQXmlDeclHandler
-{
-public:
- virtual bool attributeDecl( const TQString& eName, const TQString& aName, const TQString& type, const TQString& valueDefault, const TQString& value ) = 0;
- virtual bool internalEntityDecl( const TQString& name, const TQString& value ) = 0;
- virtual bool externalEntityDecl( const TQString& name, const TQString& publicId, const TQString& systemId ) = 0;
- virtual TQString errorString() = 0;
-};
-
-
-class TQM_EXPORT_XML TQXmlDefaultHandler : public TQXmlContentHandler, public TQXmlErrorHandler, public TQXmlDTDHandler, public TQXmlEntityResolver, public TQXmlLexicalHandler, public TQXmlDeclHandler
-{
-public:
- TQXmlDefaultHandler() { }
- virtual ~TQXmlDefaultHandler() { }
-
- void setDocumentLocator( TQXmlLocator* locator );
- bool startDocument();
- bool endDocument();
- bool startPrefixMapping( const TQString& prefix, const TQString& uri );
- bool endPrefixMapping( const TQString& prefix );
- bool startElement( const TQString& namespaceURI, const TQString& localName, const TQString& qName, const TQXmlAttributes& atts );
- bool endElement( const TQString& namespaceURI, const TQString& localName, const TQString& qName );
- bool characters( const TQString& ch );
- bool ignorableWhitespace( const TQString& ch );
- bool processingInstruction( const TQString& target, const TQString& data );
- bool skippedEntity( const TQString& name );
-
- bool warning( const TQXmlParseException& exception );
- bool error( const TQXmlParseException& exception );
- bool fatalError( const TQXmlParseException& exception );
-
- bool notationDecl( const TQString& name, const TQString& publicId, const TQString& systemId );
- bool unparsedEntityDecl( const TQString& name, const TQString& publicId, const TQString& systemId, const TQString& notationName );
-
- bool resolveEntity( const TQString& publicId, const TQString& systemId, TQXmlInputSource*& ret );
-
- bool startDTD( const TQString& name, const TQString& publicId, const TQString& systemId );
- bool endDTD();
- bool startEntity( const TQString& name );
- bool endEntity( const TQString& name );
- bool startCDATA();
- bool endCDATA();
- bool comment( const TQString& ch );
-
- bool attributeDecl( const TQString& eName, const TQString& aName, const TQString& type, const TQString& valueDefault, const TQString& value );
- bool internalEntityDecl( const TQString& name, const TQString& value );
- bool externalEntityDecl( const TQString& name, const TQString& publicId, const TQString& systemId );
-
- TQString errorString();
-
-private:
- TQXmlDefaultHandlerPrivate *d;
-};
-
-
-//
-// inlines
-//
-
-inline bool TQXmlSimpleReader::atEnd()
-{ return (c.tqunicode()|0x0001) == 0xffff; }
-inline int TQXmlAttributes::count() const
-{ return length(); }
-
-
-#endif //TQT_NO_XML
-
-#endif