src/xml/dom/qdom.h
changeset 0 1918ee327afb
child 4 3b1da2848fc7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/xml/dom/qdom.h	Mon Jan 11 14:00:40 2010 +0000
@@ -0,0 +1,681 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtXml module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QDOM_H
+#define QDOM_H
+
+#include <QtCore/qstring.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Xml)
+
+#ifndef QT_NO_DOM
+
+class QIODevice;
+class QTextStream;
+
+class QXmlInputSource;
+class QXmlReader;
+
+class QDomDocumentPrivate;
+class QDomDocumentTypePrivate;
+class QDomDocumentFragmentPrivate;
+class QDomNodePrivate;
+class QDomNodeListPrivate;
+class QDomImplementationPrivate;
+class QDomElementPrivate;
+class QDomNotationPrivate;
+class QDomEntityPrivate;
+class QDomEntityReferencePrivate;
+class QDomProcessingInstructionPrivate;
+class QDomAttrPrivate;
+class QDomCharacterDataPrivate;
+class QDomTextPrivate;
+class QDomCommentPrivate;
+class QDomCDATASectionPrivate;
+class QDomNamedNodeMapPrivate;
+class QDomImplementationPrivate;
+
+class QDomNodeList;
+class QDomElement;
+class QDomText;
+class QDomComment;
+class QDomCDATASection;
+class QDomProcessingInstruction;
+class QDomAttr;
+class QDomEntityReference;
+class QDomDocument;
+class QDomNamedNodeMap;
+class QDomDocument;
+class QDomDocumentFragment;
+class QDomDocumentType;
+class QDomImplementation;
+class QDomNode;
+class QDomEntity;
+class QDomNotation;
+class QDomCharacterData;
+
+class Q_XML_EXPORT QDomImplementation
+{
+public:
+    QDomImplementation();
+    QDomImplementation(const QDomImplementation&);
+    ~QDomImplementation();
+    QDomImplementation& operator= (const QDomImplementation&);
+    bool operator== (const QDomImplementation&) const;
+    bool operator!= (const QDomImplementation&) const;
+
+    // functions
+    bool hasFeature(const QString& feature, const QString& version) const;
+    QDomDocumentType createDocumentType(const QString& qName, const QString& publicId, const QString& systemId);
+    QDomDocument createDocument(const QString& nsURI, const QString& qName, const QDomDocumentType& doctype);
+
+    enum InvalidDataPolicy { AcceptInvalidChars = 0, DropInvalidChars, ReturnNullNode };
+    static InvalidDataPolicy invalidDataPolicy();
+    static void setInvalidDataPolicy(InvalidDataPolicy policy);
+
+    // Qt extension
+    bool isNull();
+
+private:
+    QDomImplementationPrivate* impl;
+    QDomImplementation(QDomImplementationPrivate*);
+
+    friend class QDomDocument;
+};
+
+class Q_XML_EXPORT QDomNode
+{
+public:
+    enum NodeType {
+        ElementNode               = 1,
+        AttributeNode             = 2,
+        TextNode                  = 3,
+        CDATASectionNode          = 4,
+        EntityReferenceNode       = 5,
+        EntityNode                = 6,
+        ProcessingInstructionNode = 7,
+        CommentNode               = 8,
+        DocumentNode              = 9,
+        DocumentTypeNode          = 10,
+        DocumentFragmentNode      = 11,
+        NotationNode              = 12,
+        BaseNode                  = 21,// this is not in the standard
+        CharacterDataNode         = 22 // this is not in the standard
+    };
+
+    enum EncodingPolicy
+    {
+        EncodingFromDocument      = 1,
+        EncodingFromTextStream    = 2
+    };
+
+    QDomNode();
+    QDomNode(const QDomNode&);
+    QDomNode& operator= (const QDomNode&);
+    bool operator== (const QDomNode&) const;
+    bool operator!= (const QDomNode&) const;
+    ~QDomNode();
+
+    // DOM functions
+    QDomNode insertBefore(const QDomNode& newChild, const QDomNode& refChild);
+    QDomNode insertAfter(const QDomNode& newChild, const QDomNode& refChild);
+    QDomNode replaceChild(const QDomNode& newChild, const QDomNode& oldChild);
+    QDomNode removeChild(const QDomNode& oldChild);
+    QDomNode appendChild(const QDomNode& newChild);
+    bool hasChildNodes() const;
+    QDomNode cloneNode(bool deep = true) const;
+    void normalize();
+    bool isSupported(const QString& feature, const QString& version) const;
+
+    // DOM read-only attributes
+    QString nodeName() const;
+    NodeType nodeType() const;
+    QDomNode parentNode() const;
+    QDomNodeList childNodes() const;
+    QDomNode firstChild() const;
+    QDomNode lastChild() const;
+    QDomNode previousSibling() const;
+    QDomNode nextSibling() const;
+    QDomNamedNodeMap attributes() const;
+    QDomDocument ownerDocument() const;
+    QString namespaceURI() const;
+    QString localName() const;
+    bool hasAttributes() const;
+
+    // DOM attributes
+    QString nodeValue() const;
+    void setNodeValue(const QString&);
+    QString prefix() const;
+    void setPrefix(const QString& pre);
+
+    // Qt extensions
+    bool isAttr() const;
+    bool isCDATASection() const;
+    bool isDocumentFragment() const;
+    bool isDocument() const;
+    bool isDocumentType() const;
+    bool isElement() const;
+    bool isEntityReference() const;
+    bool isText() const;
+    bool isEntity() const;
+    bool isNotation() const;
+    bool isProcessingInstruction() const;
+    bool isCharacterData() const;
+    bool isComment() const;
+
+    /**
+     * Shortcut to avoid dealing with QDomNodeList
+     * all the time.
+     */
+    QDomNode namedItem(const QString& name) const;
+
+    bool isNull() const;
+    void clear();
+
+    QDomAttr toAttr() const;
+    QDomCDATASection toCDATASection() const;
+    QDomDocumentFragment toDocumentFragment() const;
+    QDomDocument toDocument() const;
+    QDomDocumentType toDocumentType() const;
+    QDomElement toElement() const;
+    QDomEntityReference toEntityReference() const;
+    QDomText toText() const;
+    QDomEntity toEntity() const;
+    QDomNotation toNotation() const;
+    QDomProcessingInstruction toProcessingInstruction() const;
+    QDomCharacterData toCharacterData() const;
+    QDomComment toComment() const;
+
+    void save(QTextStream&, int) const;
+    void save(QTextStream&, int, EncodingPolicy) const; // ### Qt 5: Merge overload(if we at all keep this)
+
+    QDomElement firstChildElement(const QString &tagName = QString()) const;
+    QDomElement lastChildElement(const QString &tagName = QString()) const;
+    QDomElement previousSiblingElement(const QString &tagName = QString()) const;
+    QDomElement nextSiblingElement(const QString &taName = QString()) const;
+
+    int lineNumber() const;
+    int columnNumber() const;
+
+protected:
+    QDomNodePrivate* impl;
+    QDomNode(QDomNodePrivate*);
+
+private:
+    friend class QDomDocument;
+    friend class QDomDocumentType;
+    friend class QDomNodeList;
+    friend class QDomNamedNodeMap;
+};
+
+class Q_XML_EXPORT QDomNodeList
+{
+public:
+    QDomNodeList();
+    QDomNodeList(const QDomNodeList&);
+    QDomNodeList& operator= (const QDomNodeList&);
+    bool operator== (const QDomNodeList&) const;
+    bool operator!= (const QDomNodeList&) const;
+    ~QDomNodeList();
+
+    // DOM functions
+    QDomNode item(int index) const;
+    inline QDomNode at(int index) const { return item(index); } // Qt API consistency
+
+    // DOM read only attributes
+    uint length() const;
+    inline int count() const { return length(); } // Qt API consitancy
+    inline int size() const { return length(); } // Qt API consistency
+    inline bool isEmpty() const { return length() == 0; } // Qt API consistency
+
+private:
+    QDomNodeListPrivate* impl;
+    QDomNodeList(QDomNodeListPrivate*);
+
+    friend class QDomNode;
+    friend class QDomElement;
+    friend class QDomDocument;
+};
+
+class Q_XML_EXPORT QDomDocumentType : public QDomNode
+{
+public:
+    QDomDocumentType();
+    QDomDocumentType(const QDomDocumentType& x);
+    QDomDocumentType& operator= (const QDomDocumentType&);
+
+    // DOM read only attributes
+    QString name() const;
+    QDomNamedNodeMap entities() const;
+    QDomNamedNodeMap notations() const;
+    QString publicId() const;
+    QString systemId() const;
+    QString internalSubset() const;
+
+    // Overridden from QDomNode
+    inline QDomNode::NodeType nodeType() const { return DocumentTypeNode; }
+
+private:
+    QDomDocumentType(QDomDocumentTypePrivate*);
+
+    friend class QDomImplementation;
+    friend class QDomDocument;
+    friend class QDomNode;
+};
+
+class Q_XML_EXPORT QDomDocument : public QDomNode
+{
+public:
+    QDomDocument();
+    explicit QDomDocument(const QString& name);
+    explicit QDomDocument(const QDomDocumentType& doctype);
+    QDomDocument(const QDomDocument& x);
+    QDomDocument& operator= (const QDomDocument&);
+    ~QDomDocument();
+
+    // DOM functions
+    QDomElement createElement(const QString& tagName);
+    QDomDocumentFragment createDocumentFragment();
+    QDomText createTextNode(const QString& data);
+    QDomComment createComment(const QString& data);
+    QDomCDATASection createCDATASection(const QString& data);
+    QDomProcessingInstruction createProcessingInstruction(const QString& target, const QString& data);
+    QDomAttr createAttribute(const QString& name);
+    QDomEntityReference createEntityReference(const QString& name);
+    QDomNodeList elementsByTagName(const QString& tagname) const;
+    QDomNode importNode(const QDomNode& importedNode, bool deep);
+    QDomElement createElementNS(const QString& nsURI, const QString& qName);
+    QDomAttr createAttributeNS(const QString& nsURI, const QString& qName);
+    QDomNodeList elementsByTagNameNS(const QString& nsURI, const QString& localName);
+    QDomElement elementById(const QString& elementId);
+
+    // DOM read only attributes
+    QDomDocumentType doctype() const;
+    QDomImplementation implementation() const;
+    QDomElement documentElement() const;
+
+    // Overridden from QDomNode
+    inline QDomNode::NodeType nodeType() const { return DocumentNode; }
+
+    // Qt extensions
+    bool setContent(const QByteArray& text, bool namespaceProcessing, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
+    bool setContent(const QString& text, bool namespaceProcessing, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
+    bool setContent(QIODevice* dev, bool namespaceProcessing, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
+    bool setContent(QXmlInputSource *source, bool namespaceProcessing, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
+    bool setContent(const QByteArray& text, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
+    bool setContent(const QString& text, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
+    bool setContent(QIODevice* dev, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
+    bool setContent(QXmlInputSource *source, QXmlReader *reader, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
+
+    // Qt extensions
+    QString toString(int = 1) const;
+    QByteArray toByteArray(int = 1) const;
+
+private:
+    QDomDocument(QDomDocumentPrivate*);
+
+    friend class QDomNode;
+};
+
+class Q_XML_EXPORT QDomNamedNodeMap
+{
+public:
+    QDomNamedNodeMap();
+    QDomNamedNodeMap(const QDomNamedNodeMap&);
+    QDomNamedNodeMap& operator= (const QDomNamedNodeMap&);
+    bool operator== (const QDomNamedNodeMap&) const;
+    bool operator!= (const QDomNamedNodeMap&) const;
+    ~QDomNamedNodeMap();
+
+    // DOM functions
+    QDomNode namedItem(const QString& name) const;
+    QDomNode setNamedItem(const QDomNode& newNode);
+    QDomNode removeNamedItem(const QString& name);
+    QDomNode item(int index) const;
+    QDomNode namedItemNS(const QString& nsURI, const QString& localName) const;
+    QDomNode setNamedItemNS(const QDomNode& newNode);
+    QDomNode removeNamedItemNS(const QString& nsURI, const QString& localName);
+
+    // DOM read only attributes
+    uint length() const;
+    int count() const { return length(); } // Qt API consitancy
+    inline int size() const { return length(); } // Qt API consistency
+    inline bool isEmpty() const { return length() == 0; } // Qt API consistency
+
+    // Qt extension
+    bool contains(const QString& name) const;
+
+private:
+    QDomNamedNodeMapPrivate* impl;
+    QDomNamedNodeMap(QDomNamedNodeMapPrivate*);
+
+    friend class QDomNode;
+    friend class QDomDocumentType;
+    friend class QDomElement;
+};
+
+class Q_XML_EXPORT QDomDocumentFragment : public QDomNode
+{
+public:
+    QDomDocumentFragment();
+    QDomDocumentFragment(const QDomDocumentFragment& x);
+    QDomDocumentFragment& operator= (const QDomDocumentFragment&);
+
+    // Overridden from QDomNode
+    inline QDomNode::NodeType nodeType() const { return DocumentFragmentNode; }
+
+private:
+    QDomDocumentFragment(QDomDocumentFragmentPrivate*);
+
+    friend class QDomDocument;
+    friend class QDomNode;
+};
+
+class Q_XML_EXPORT QDomCharacterData : public QDomNode
+{
+public:
+    QDomCharacterData();
+    QDomCharacterData(const QDomCharacterData& x);
+    QDomCharacterData& operator= (const QDomCharacterData&);
+
+    // DOM functions
+    QString substringData(unsigned long offset, unsigned long count);
+    void appendData(const QString& arg);
+    void insertData(unsigned long offset, const QString& arg);
+    void deleteData(unsigned long offset, unsigned long count);
+    void replaceData(unsigned long offset, unsigned long count, const QString& arg);
+
+    // DOM read only attributes
+    uint length() const;
+
+    // DOM attributes
+    QString data() const;
+    void setData(const QString&);
+
+    // Overridden from QDomNode
+    QDomNode::NodeType nodeType() const;
+
+private:
+    QDomCharacterData(QDomCharacterDataPrivate*);
+
+    friend class QDomDocument;
+    friend class QDomText;
+    friend class QDomComment;
+    friend class QDomNode;
+};
+
+class Q_XML_EXPORT QDomAttr : public QDomNode
+{
+public:
+    QDomAttr();
+    QDomAttr(const QDomAttr& x);
+    QDomAttr& operator= (const QDomAttr&);
+
+    // DOM read only attributes
+    QString name() const;
+    bool specified() const;
+    QDomElement ownerElement() const;
+
+    // DOM attributes
+    QString value() const;
+    void setValue(const QString&);
+
+    // Overridden from QDomNode
+    inline QDomNode::NodeType nodeType() const { return AttributeNode; }
+
+private:
+    QDomAttr(QDomAttrPrivate*);
+
+    friend class QDomDocument;
+    friend class QDomElement;
+    friend class QDomNode;
+};
+
+class Q_XML_EXPORT QDomElement : public QDomNode
+{
+public:
+    QDomElement();
+    QDomElement(const QDomElement& x);
+    QDomElement& operator= (const QDomElement&);
+
+    // DOM functions
+    QString attribute(const QString& name, const QString& defValue = QString() ) const;
+    void setAttribute(const QString& name, const QString& value);
+    void setAttribute(const QString& name, qlonglong value);
+    void setAttribute(const QString& name, qulonglong value);
+    inline void setAttribute(const QString& name, int value)
+        { setAttribute(name, qlonglong(value)); }
+    inline void setAttribute(const QString& name, uint value)
+        { setAttribute(name, qulonglong(value)); }
+    void setAttribute(const QString& name, float value);
+    void setAttribute(const QString& name, double value);
+    void removeAttribute(const QString& name);
+    QDomAttr attributeNode(const QString& name);
+    QDomAttr setAttributeNode(const QDomAttr& newAttr);
+    QDomAttr removeAttributeNode(const QDomAttr& oldAttr);
+    QDomNodeList elementsByTagName(const QString& tagname) const;
+    bool hasAttribute(const QString& name) const;
+
+    QString attributeNS(const QString nsURI, const QString& localName, const QString& defValue = QString()) const;
+    void setAttributeNS(const QString nsURI, const QString& qName, const QString& value);
+    inline void setAttributeNS(const QString nsURI, const QString& qName, int value)
+        { setAttributeNS(nsURI, qName, qlonglong(value)); }
+    inline void setAttributeNS(const QString nsURI, const QString& qName, uint value)
+        { setAttributeNS(nsURI, qName, qulonglong(value)); }
+    void setAttributeNS(const QString nsURI, const QString& qName, qlonglong value);
+    void setAttributeNS(const QString nsURI, const QString& qName, qulonglong value);
+    void setAttributeNS(const QString nsURI, const QString& qName, double value);
+    void removeAttributeNS(const QString& nsURI, const QString& localName);
+    QDomAttr attributeNodeNS(const QString& nsURI, const QString& localName);
+    QDomAttr setAttributeNodeNS(const QDomAttr& newAttr);
+    QDomNodeList elementsByTagNameNS(const QString& nsURI, const QString& localName) const;
+    bool hasAttributeNS(const QString& nsURI, const QString& localName) const;
+
+    // DOM read only attributes
+    QString tagName() const;
+    void setTagName(const QString& name); // Qt extension
+
+    // Overridden from QDomNode
+    QDomNamedNodeMap attributes() const;
+    inline QDomNode::NodeType nodeType() const { return ElementNode; }
+
+    QString text() const;
+
+private:
+    QDomElement(QDomElementPrivate*);
+
+    friend class QDomDocument;
+    friend class QDomNode;
+    friend class QDomAttr;
+};
+
+class Q_XML_EXPORT QDomText : public QDomCharacterData
+{
+public:
+    QDomText();
+    QDomText(const QDomText& x);
+    QDomText& operator= (const QDomText&);
+
+    // DOM functions
+    QDomText splitText(int offset);
+
+    // Overridden from QDomCharacterData
+    inline QDomNode::NodeType nodeType() const { return TextNode; }
+
+private:
+    QDomText(QDomTextPrivate*);
+
+    friend class QDomCDATASection;
+    friend class QDomDocument;
+    friend class QDomNode;
+};
+
+class Q_XML_EXPORT QDomComment : public QDomCharacterData
+{
+public:
+    QDomComment();
+    QDomComment(const QDomComment& x);
+    QDomComment& operator= (const QDomComment&);
+
+    // Overridden from QDomCharacterData
+    inline QDomNode::NodeType nodeType() const { return CommentNode; }
+
+private:
+    QDomComment(QDomCommentPrivate*);
+
+    friend class QDomDocument;
+    friend class QDomNode;
+};
+
+class Q_XML_EXPORT QDomCDATASection : public QDomText
+{
+public:
+    QDomCDATASection();
+    QDomCDATASection(const QDomCDATASection& x);
+    QDomCDATASection& operator= (const QDomCDATASection&);
+
+    // Overridden from QDomText
+    inline QDomNode::NodeType nodeType() const { return CDATASectionNode; }
+
+private:
+    QDomCDATASection(QDomCDATASectionPrivate*);
+
+    friend class QDomDocument;
+    friend class QDomNode;
+};
+
+class Q_XML_EXPORT QDomNotation : public QDomNode
+{
+public:
+    QDomNotation();
+    QDomNotation(const QDomNotation& x);
+    QDomNotation& operator= (const QDomNotation&);
+
+    // DOM read only attributes
+    QString publicId() const;
+    QString systemId() const;
+
+    // Overridden from QDomNode
+    inline QDomNode::NodeType nodeType() const { return NotationNode; }
+
+private:
+    QDomNotation(QDomNotationPrivate*);
+
+    friend class QDomDocument;
+    friend class QDomNode;
+};
+
+class Q_XML_EXPORT QDomEntity : public QDomNode
+{
+public:
+    QDomEntity();
+    QDomEntity(const QDomEntity& x);
+    QDomEntity& operator= (const QDomEntity&);
+
+    // DOM read only attributes
+    QString publicId() const;
+    QString systemId() const;
+    QString notationName() const;
+
+    // Overridden from QDomNode
+    inline QDomNode::NodeType nodeType() const { return EntityNode; }
+
+private:
+    QDomEntity(QDomEntityPrivate*);
+
+    friend class QDomNode;
+};
+
+class Q_XML_EXPORT QDomEntityReference : public QDomNode
+{
+public:
+    QDomEntityReference();
+    QDomEntityReference(const QDomEntityReference& x);
+    QDomEntityReference& operator= (const QDomEntityReference&);
+
+    // Overridden from QDomNode
+    inline QDomNode::NodeType nodeType() const { return EntityReferenceNode; }
+
+private:
+    QDomEntityReference(QDomEntityReferencePrivate*);
+
+    friend class QDomDocument;
+    friend class QDomNode;
+};
+
+class Q_XML_EXPORT QDomProcessingInstruction : public QDomNode
+{
+public:
+    QDomProcessingInstruction();
+    QDomProcessingInstruction(const QDomProcessingInstruction& x);
+    QDomProcessingInstruction& operator= (const QDomProcessingInstruction&);
+
+    // DOM read only attributes
+    QString target() const;
+
+    // DOM attributes
+    QString data() const;
+    void setData(const QString& d);
+
+    // Overridden from QDomNode
+    inline QDomNode::NodeType nodeType() const { return ProcessingInstructionNode; }
+
+private:
+    QDomProcessingInstruction(QDomProcessingInstructionPrivate*);
+
+    friend class QDomDocument;
+    friend class QDomNode;
+};
+
+
+Q_XML_EXPORT QTextStream& operator<<(QTextStream&, const QDomNode&);
+
+#endif // QT_NO_DOM
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QDOM_H