diff options
Diffstat (limited to 'tqtinterface/qt4/src/xml/tqdom.cpp')
-rw-r--r-- | tqtinterface/qt4/src/xml/tqdom.cpp | 7092 |
1 files changed, 0 insertions, 7092 deletions
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 [email protected]. -** -** 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 ¬ationName ) ; - - 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 <h1> tag and the node created by the - <p> 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 <p> tag, previousSibling() - will return the node representing the <h1> 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 <p> tag, nextSibling() will - return the node representing the <h2> 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 <!DOCTYPE name> - 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 - <!DOCTYPE name> 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, "<" ); - len += 3; - i += 4; - } else if ( tmp[(int)i] == '"' ) { - tmp.replace( i, 1, """ ); - len += 5; - i += 6; - } else if ( tmp[(int)i] == '&' ) { - tmp.replace( i, 1, "&" ); - len += 4; - i += 5; - } else if ( tmp[(int)i] == '>' && i>=2 && tmp[(int)i-1]==']' && tmp[(int)i-2]==']' ) { - tmp.replace( i, 1, ">" ); - 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 <h1> tag, - will return "Hello TQt <xml is cool>". - - 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 "]]>" - 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, "<" ); - d = tmp.data(); - len += 4; - i += 5; - } - else if ( d[i] == '"' ) { - tmp.replace( i, 1, """ ); - d = tmp.data(); - len += 4; - i += 5; - } else if ( d[i] == '&' && i + 1 < len && d[i+1] == '#' ) { - // Dont encode < or " or &custom;. - // Only encode character references - tmp.replace( i, 1, "&" ); - 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 ¬ationName ) -{ - 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 |