summaryrefslogtreecommitdiffstats
path: root/khtml/dom/dom_doc.h
diff options
context:
space:
mode:
Diffstat (limited to 'khtml/dom/dom_doc.h')
-rw-r--r--khtml/dom/dom_doc.h1107
1 files changed, 1107 insertions, 0 deletions
diff --git a/khtml/dom/dom_doc.h b/khtml/dom/dom_doc.h
new file mode 100644
index 000000000..9a5331295
--- /dev/null
+++ b/khtml/dom/dom_doc.h
@@ -0,0 +1,1107 @@
+/*
+ * This file is part of the DOM implementation for KDE.
+ *
+ * (C) 1999 Lars Knoll (knoll@kde.org)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ * This file includes excerpts from the Document Object Model (DOM)
+ * Level 1 Specification (Recommendation)
+ * http://www.w3.org/TR/REC-DOM-Level-1/
+ * Copyright © World Wide Web Consortium , (Massachusetts Institute of
+ * Technology , Institut National de Recherche en Informatique et en
+ * Automatique , Keio University ). All Rights Reserved.
+ */
+
+#ifndef _DOM_Document_h_
+#define _DOM_Document_h_
+
+#include <dom/dom_node.h>
+#include <dom/css_stylesheet.h>
+
+class KHTMLView;
+class KHTMLPart;
+
+namespace DOM {
+
+class DOMString;
+class DocumentType;
+class NodeList;
+class CDATASection;
+class Comment;
+class DocumentFragment;
+class Text;
+class DOMImplementation;
+class Element;
+class Attr;
+class EntityReference;
+class ProcessingInstruction;
+class DocumentImpl;
+class Range;
+class NodeIterator;
+class TreeWalker;
+class NodeFilter;
+class DOMImplementationImpl;
+class DocumentTypeImpl;
+class Event;
+class AbstractView;
+class CSSStyleDeclaration;
+class HTMLElementImpl;
+class HTMLFrameElement;
+class HTMLElementImpl;
+class HTMLIFrameElement;
+class HTMLObjectElement;
+class HTMLDocument;
+
+/**
+ * The \c DOMImplementation interface provides a number of
+ * methods for performing operations that are independent of any
+ * particular instance of the document object model.
+ *
+ * DOM Level 2 and newer provide means for creating documents directly,
+ * which was not possible with DOM Level 1.
+ */
+class KHTML_EXPORT DOMImplementation
+{
+ friend class Document;
+public:
+ DOMImplementation();
+ DOMImplementation(const DOMImplementation &other);
+
+ DOMImplementation & operator = (const DOMImplementation &other);
+ ~DOMImplementation();
+
+ /**
+ * Test if the DOM implementation implements a specific feature.
+ *
+ * @param feature The package name of the feature to test. In
+ * Level 1, the legal values are "HTML" and "XML"
+ * (case-insensitive).
+ *
+ * @param version This is the version number of the package name
+ * to test. In Level 1, this is the string "1.0". If the version
+ * is not specified, supporting any version of the feature will
+ * cause the method to return \c true .
+ *
+ * @return \c true if the feature is implemented in
+ * the specified version, \c false otherwise.
+ *
+ */
+ bool hasFeature ( const DOMString &feature, const DOMString &version );
+
+ /**
+ * Introduced in DOM Level 2
+ *
+ * Creates an empty DocumentType node. Entity declarations and notations
+ * are not made available. Entity reference expansions and default
+ * attribute additions do not occur. It is expected that a future version
+ * of the DOM will provide a way for populating a DocumentType.
+ *
+ * HTML-only DOM implementations do not need to implement this method.
+ *
+ * @param qualifiedName The qualified name of the document type to be
+ * created.
+ *
+ * @param publicId The external subset public identifier.
+ *
+ * @param systemId The external subset system identifier.
+ *
+ * @return A new DocumentType node with Node.ownerDocument set to null.
+ *
+ * @exception DOMException
+ * INVALID_CHARACTER_ERR: Raised if the specified qualified name contains
+ * an illegal character.
+ *
+ * NAMESPACE_ERR: Raised if the qualifiedName is malformed.
+ */
+ DocumentType createDocumentType ( const DOMString &qualifiedName,
+ const DOMString &publicId,
+ const DOMString &systemId );
+
+ /**
+ * Introduced in DOM Level 2
+ *
+ * Creates an XML Document object of the specified type with its document
+ * element. HTML-only DOM implementations do not need to implement this
+ * method.
+ *
+ * @param namespaceURI The namespace URI of the document element to create.
+ *
+ * @param qualifiedName The qualified name of the document element to be
+ * created.
+ *
+ * @param doctype The type of document to be created or null. When doctype
+ * is not null, its Node.ownerDocument attribute is set to the document
+ * being created.
+ *
+ * @return A new Document object.
+ *
+ * @exception DOMException
+ * INVALID_CHARACTER_ERR: Raised if the specified qualified name contains
+ * an illegal character.
+ *
+ * NAMESPACE_ERR: Raised if the qualifiedName is malformed, if the
+ * qualifiedName has a prefix and the namespaceURI is null, or if the
+ * qualifiedName has a prefix that is "xml" and the namespaceURI is
+ * different from "http://www.w3.org/XML/1998/namespace" [Namespaces].
+ *
+ * WRONG_DOCUMENT_ERR: Raised if doctype has already been used with a
+ * different document or was created from a different implementation.
+ */
+ Document createDocument ( const DOMString &namespaceURI,
+ const DOMString &qualifiedName,
+ const DocumentType &doctype );
+
+ /**
+ * Introduced in DOM Level 3
+ * This method makes available a DOMImplementation's specialized
+ * interface.
+ *
+ * @param feature The name of the feature requested (case-insensitive)
+ *
+ * @return Returns an alternate DOMImplementation which implements
+ * the specialized APIs of the specified feature, if any, or null
+ * if there is no alternate DOMImplementation object which implements
+ * interfaces associated with that feature. Any alternate DOMImplementation
+ * returned by this method must delegate to the primary core DOMImplementation
+ * and not return results inconsistent with the primary DOMImplementation.
+ */
+ DOMImplementation getInterface(const DOMString &feature) const;
+
+ /**
+ * Introduced in DOM Level 2
+ * This method is from the DOMImplementationCSS interface
+ *
+ * Creates a new CSSStyleSheet.
+ *
+ * @param title The advisory title. See also the Style Sheet Interfaces
+ * section.
+ *
+ * @param media The comma-separated list of media associated with the
+ * new style sheet. See also the Style Sheet Interfaces section.
+ *
+ * @return A new CSS style sheet.
+ *
+ * @exception SYNTAX_ERR: Raised if the specified media string value has a syntax error and is unparsable.
+ */
+ CSSStyleSheet createCSSStyleSheet(const DOMString &title, const DOMString &media);
+
+ /**
+ * Introduced in DOM Level 2
+ * This method is from the HTMLDOMImplementation interface
+ *
+ * Creates an HTMLDocument with the minimal tree made of these
+ * elements: HTML,HEAD,TITLE and BODY.
+ * It extends the core interface which can be used to create an
+ * XHTML document by passing the XHTML namespace as the namespace
+ * for the root element.
+ *
+ * @param title The title of the document to be set as the content
+ * of the TITLE element, through a child Text node.
+ *
+ * @return the HTMLdocument
+ */
+ HTMLDocument createHTMLDocument(const DOMString& title);
+
+ /**
+ * @internal
+ * not part of the DOM
+ */
+ DOMImplementationImpl *handle() const;
+ bool isNull() const;
+
+protected:
+ DOMImplementation(DOMImplementationImpl *i);
+ DOMImplementationImpl *impl;
+};
+
+/**
+ * The \c Document interface represents the entire HTML or
+ * 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 \c Document
+ * , the \c Document interface also contains the factory
+ * methods needed to create these objects. The \c Node
+ * objects created have a \c ownerDocument attribute which
+ * associates them with the \c Document within whose
+ * context they were created.
+ *
+ */
+class KHTML_EXPORT Document : public Node
+{
+ friend class ::KHTMLView;
+ friend class ::KHTMLPart;
+ friend class AbstractView;
+ friend class DOMImplementation;
+ friend class HTMLFrameElement;
+ friend class HTMLIFrameElement;
+ friend class HTMLObjectElement;
+
+public:
+ Document();
+ /**
+ * don't create an implementation if false
+ * use at own risk
+ */
+ Document(bool);
+ Document(const Document &other);
+ Document(const Node &other) : Node()
+ {(*this)=other;}
+
+ Document & operator = (const Node &other);
+ Document & operator = (const Document &other);
+
+ ~Document();
+
+ /**
+ * The Document Type Declaration (see \c DocumentType
+ * ) associated with this document. For HTML documents as well as
+ * XML documents without a document type declaration this returns
+ * \c null . The DOM Level 1 does not support editing
+ * the Document Type Declaration, therefore \c docType
+ * cannot be altered in any way.
+ *
+ */
+ DocumentType doctype() const;
+
+ /**
+ * The \c DOMImplementation object that handles this
+ * document. A DOM application may use objects from multiple
+ * implementations.
+ *
+ */
+ DOMImplementation implementation() const;
+
+ /**
+ * This is a convenience attribute that allows direct access to
+ * the child node that is the root element of the document. For
+ * HTML documents, this is the element with the tagName "HTML".
+ *
+ */
+ Element documentElement() const;
+
+ /**
+ * Creates an element of the type specified. Note that the
+ * instance returned implements the Element interface, so
+ * attributes can be specified directly on the returned object.
+ *
+ * @param tagName The name of the element type to instantiate. For
+ * XML, this is case-sensitive. For HTML, the \c tagName
+ * parameter may be provided in any case, but it must be
+ * mapped to the canonical uppercase form by the DOM
+ * implementation.
+ *
+ * @return A new \c Element object.
+ *
+ * @exception DOMException
+ * INVALID_CHARACTER_ERR: Raised if the specified name contains an
+ * invalid character.
+ *
+ */
+ Element createElement ( const DOMString &tagName );
+
+ /**
+ * Introduced in DOM Level 2
+ * Creates an element of the given qualified name and namespace URI.
+ *
+ * @param namespaceURI The namespace URI of the element to create.
+ *
+ * @param qualifiedName The qualified name of the element type to instantiate.
+ *
+ * @return A new Element object with the following attributes:
+ *
+ * @exception INVALID_CHARACTER_ERR Raised if the specified qualified name
+ * contains an illegal character.
+ *
+ * @exception NAMESPACE_ERR Raised if the qualifiedName is malformed, if
+ * the qualifiedName has a prefix and the namespaceURI is null, or if the
+ * qualifiedName has a prefix that is "xml" and the namespaceURI is
+ * different from "http://www.w3.org/XML/1998/namespace"
+ */
+ Element createElementNS( const DOMString &namespaceURI,
+ const DOMString &qualifiedName );
+
+ /**
+ * Creates an empty \c DocumentFragment object.
+ *
+ * @return A new \c DocumentFragment .
+ *
+ */
+ DocumentFragment createDocumentFragment ( );
+
+ /**
+ * Creates a \c Text node given the specified string.
+ *
+ * @param data The data for the node.
+ *
+ * @return The new \c Text object.
+ *
+ */
+ Text createTextNode ( const DOMString &data );
+
+ /**
+ * Creates a \c Comment node given the specified
+ * string.
+ *
+ * @param data The data for the node.
+ *
+ * @return The new \c Comment object.
+ *
+ */
+ Comment createComment ( const DOMString &data );
+
+ /**
+ * Creates a \c CDATASection node whose value is the
+ * specified string.
+ *
+ * @param data The data for the \c CDATASection
+ * contents.
+ *
+ * @return The new \c CDATASection object.
+ *
+ * @exception DOMException
+ * NOT_SUPPORTED_ERR: Raised if this document is an HTML document.
+ *
+ */
+ CDATASection createCDATASection ( const DOMString &data );
+
+ /**
+ * Creates a \c ProcessingInstruction node given the
+ * specified name and data strings.
+ *
+ * @param target The target part of the processing instruction.
+ *
+ * @param data The data for the node.
+ *
+ * @return The new \c ProcessingInstruction object.
+ *
+ * @exception DOMException
+ * INVALID_CHARACTER_ERR: Raised if an invalid character is
+ * specified.
+ *
+ * NOT_SUPPORTED_ERR: Raised if this document is an HTML
+ * document.
+ *
+ */
+ ProcessingInstruction createProcessingInstruction ( const DOMString &target,
+ const DOMString &data );
+
+ /**
+ * Creates an \c Attr of the given name. Note that the
+ * \c Attr instance can then be set on an \c Element
+ * using the \c setAttribute method.
+ *
+ * @param name The name of the attribute.
+ *
+ * @return A new \c Attr object.
+ *
+ * @exception DOMException
+ * INVALID_CHARACTER_ERR: Raised if the specified name contains an
+ * invalid character.
+ *
+ */
+ Attr createAttribute ( const DOMString &name );
+
+ /**
+ * Introduced in DOM Level 2
+ * Creates an attribute of the given qualified name and namespace URI.
+ * HTML-only DOM implementations do not need to implement this method.
+ *
+ * @param namespaceURI The namespace URI of the attribute to create.
+ *
+ * @param qualifiedName The qualified name of the attribute to instantiate.
+ *
+ * @return A new Attr object with the following attributes:
+ * Node.nodeName - qualifiedName
+ * Node.namespaceURI - namespaceURI
+ * Node.prefix - prefix, extracted from qualifiedName, or null if there is
+ * no prefix
+ * Node.localName - local name, extracted from qualifiedName
+ * Attr.name - qualifiedName
+ * Node.nodeValue - the empty string
+ *
+ * @exception INVALID_CHARACTER_ERR Raised if the specified qualified name
+ * contains an illegal character.
+ *
+ * @exception NAMESPACE_ERR Raised if the qualifiedName is malformed, if
+ * the qualifiedName has a prefix and the namespaceURI is null, if the
+ * qualifiedName has a prefix that is "xml" and the namespaceURI is
+ * different from "http://www.w3.org/XML/1998/namespace", or if the
+ * qualifiedName is "xmlns" and the namespaceURI is different from
+ * "http://www.w3.org/2000/xmlns/".
+ */
+ Attr createAttributeNS( const DOMString &namespaceURI,
+ const DOMString &qualifiedName );
+
+ /**
+ * Creates an EntityReference object.
+ *
+ * @param name The name of the entity to reference.
+ *
+ * @return The new \c EntityReference object.
+ *
+ * @exception DOMException
+ * INVALID_CHARACTER_ERR: Raised if the specified name contains an
+ * invalid character.
+ *
+ * NOT_SUPPORTED_ERR: Raised if this document is an HTML
+ * document.
+ *
+ */
+ EntityReference createEntityReference ( const DOMString &name );
+
+ /**
+ * Moved from HTMLDocument in DOM Level 2
+ * Returns the Element whose \c id is given by
+ * elementId. If no such element exists, returns \c null
+ * . Behavior is not defined if more than one element has
+ * this \c id .
+ *
+ * @param elementId The unique \c id value for an
+ * element.
+ *
+ * @return The matching element.
+ *
+ */
+ Element getElementById ( const DOMString &elementId ) const;
+
+ /**
+ * No Exceptions.
+ *
+ * Returns a \c NodeList of all the \c Element 's
+ * with a given tag name in the order in which they
+ * would be encountered in a preorder traversal of the
+ * \c Document tree.
+ *
+ * @param tagname The name of the tag to match on. The special
+ * value "*" matches all tags.
+ *
+ * @return A new \c NodeList object containing all the
+ * matched \c Element s.
+ *
+ */
+ NodeList getElementsByTagName ( const DOMString &tagname );
+
+ /**
+ * Introduced in DOM Level 2
+ * No Exceptions
+ *
+ * Returns a NodeList of all the Elements with a given local name and
+ * namespace URI in the order in which they are encountered in a preorder
+ * traversal of the Document tree.
+ *
+ * @param namespaceURI The namespace URI of the elements to match on. The
+ * special value "*" matches all namespaces.
+ *
+ * @param localName The local name of the elements to match on. The special
+ * value "*" matches all local names.
+ *
+ * @return A new NodeList object containing all the matched Elements.
+ */
+ NodeList getElementsByTagNameNS( const DOMString &namespaceURI,
+ const DOMString &localName );
+
+ /**
+ * Introduced in DOM Level 2
+ *
+ * Imports a node from another document to this document. The returned node
+ * has no parent; (parentNode is null). The source node is not altered or
+ * removed from the original document; this method creates a new copy of
+ * the source node.
+ *
+ * For all nodes, importing a node creates a node object owned by the
+ * importing document, with attribute values identical to the source node's
+ * nodeName and nodeType, plus the attributes related to namespaces
+ * (prefix, localName, and namespaceURI).
+ *
+ * As in the cloneNode operation on a Node, the source node is not altered.
+ * Additional information is copied as appropriate to the nodeType,
+ * attempting to mirror the behavior expected if a fragment of XML or HTML
+ * source was copied from one document to another, recognizing that the two
+ * documents may have different DTDs in the XML case. The following list
+ * describes the specifics for each type of node.
+ *
+ * ATTRIBUTE_NODE
+ * The ownerElement attribute is set to null and the specified flag is set
+ * to true on the generated Attr. The descendants of the source Attr are
+ * recursively imported and the resulting nodes reassembled to form the
+ * corresponding subtree. Note that the deep parameter has no effect on
+ * Attr nodes; they always carry their children with them when imported.
+ *
+ * DOCUMENT_FRAGMENT_NODE
+ * If the deep option was set to true, the descendants of the source
+ * element are recursively imported and the resulting nodes reassembled to
+ * form the corresponding subtree. Otherwise, this simply generates an
+ * empty DocumentFragment.
+ *
+ * DOCUMENT_NODE
+ * Document nodes cannot be imported.
+ *
+ * DOCUMENT_TYPE_NODE
+ * DocumentType nodes cannot be imported.
+ *
+ * ELEMENT_NODE
+ * Specified attribute nodes of the source element are imported, and the
+ * generated Attr nodes are attached to the generated Element. Default
+ * attributes are not copied, though if the document being imported into
+ * defines default attributes for this element name, those are assigned. If
+ * the importNode deep parameter was set to true, the descendants of the
+ * source element are recursively imported and the resulting nodes
+ * reassembled to form the corresponding subtree.
+ *
+ * ENTITY_NODE
+ * Entity nodes can be imported, however in the current release of the DOM
+ * the DocumentType is readonly. Ability to add these imported nodes to a
+ * DocumentType will be considered for addition to a future release of the
+ * DOM.
+ * On import, the publicId, systemId, and notationName attributes are
+ * copied. If a deep import is requested, the descendants of the the source
+ * Entity are recursively imported and the resulting nodes reassembled to
+ * form the corresponding subtree.
+ *
+ * ENTITY_REFERENCE_NODE Only the EntityReference itself is copied, even if
+ * a deep import is requested, since the source and destination documents
+ * might have defined the entity differently. If the document being
+ * imported into provides a definition for this entity name, its value is
+ * assigned.
+ *
+ * NOTATION_NODE
+ * Notation nodes can be imported, however in the current release of the
+ * DOM the DocumentType is readonly. Ability to add these imported nodes to
+ * a DocumentType will be considered for addition to a future release of
+ * the DOM.
+ * On import, the publicId and systemId attributes are copied.
+ * Note that the deep parameter has no effect on Notation nodes since they
+ * never have any children.
+ *
+ * PROCESSING_INSTRUCTION_NODE
+ * The imported node copies its target and data values from those of the
+ * source node.
+ *
+ * TEXT_NODE, CDATA_SECTION_NODE, COMMENT_NODE
+ * These three types of nodes inheriting from CharacterData copy their data
+ * and length attributes from those of the source node.
+ *
+ * @param importedNode The node to import.
+ *
+ * @param deep If true, recursively import the subtree under the specified
+ * node; if false, import only the node itself, as explained above. This
+ * has no effect on Attr, EntityReference, and Notation nodes.
+ *
+ * @return The imported node that belongs to this Document.
+ *
+ * @exception DOMException
+ * NOT_SUPPORTED_ERR: Raised if the type of node being imported is not
+ * supported.
+ */
+ Node importNode( const Node & importedNode, bool deep );
+
+ /**
+ * @internal
+ * not part of the DOM
+ */
+ bool isHTMLDocument() const;
+
+ /**
+ * Introduced in DOM Level 2
+ * This method is from the DocumentRange interface
+ *
+ * @return Range
+ * The initial state of the Range returned from this method is such that
+ * both of its boundary-points are positioned at the beginning of the
+ * corresponding Document, before any content. The Range returned can only
+ * be used to select content associated with this Document, or with
+ * DocumentFragments and Attrs for which this Document is the ownerDocument.
+ */
+ Range createRange();
+
+ /**
+ * Introduced in DOM Level 2
+ * This method is from the DocumentTraversal interface
+ *
+ * Create a new NodeIterator over the subtree rooted at the specified node.
+ *
+ * @param root The node which will be iterated together with its children.
+ * The iterator is initially positioned just before this node. The
+ * whatToShow flags and the filter, if any, are not considered when setting
+ * this position. The root must not be null.
+ *
+ * @param whatToShow This flag specifies which node types may appear in the
+ * logical view of the tree presented by the iterator. See the description
+ * of NodeFilter for the set of possible SHOW_ values. These flags can be
+ * combined using OR.
+ *
+ * @param filter The NodeFilter to be used with this NodeIterator, or null to
+ * indicate no filter.
+ *
+ * @param entityReferenceExpansion The value of this flag determines
+ * whether entity reference nodes are expanded.
+ *
+ * @return NodeIterator The newly created NodeIterator.
+ *
+ * @exception DOMException
+ * NOT_SUPPORTED_ERR: Raised if the specified root is null.
+ */
+ NodeIterator createNodeIterator(Node root, unsigned long whatToShow,
+ NodeFilter filter,
+ bool entityReferenceExpansion);
+
+ /**
+ * Introduced in DOM Level 2
+ * This method is from the DocumentTraversal interface
+ *
+ * Create a new TreeWalker over the subtree rooted at the specified node.
+ *
+ * @param root The node which will serve as the root for the TreeWalker.
+ * The whatToShow flags and the NodeFilter are not considered when setting
+ * this value; any node type will be accepted as the root. The currentNode
+ * of the TreeWalker is initialized to this node, whether or not it is
+ * visible. The root functions as a stopping point for traversal methods
+ * that look upward in the document structure, such as parentNode and
+ * nextNode. The root must not be null.
+ *
+ * @param whatToShow This flag specifies which node types may appear in the
+ * logical view of the tree presented by the tree-walker. See the
+ * description of NodeFilter for the set of possible SHOW_ values. These
+ * flags can be combined using OR.
+ *
+ * @param filter The NodeFilter to be used with this TreeWalker, or null to
+ * indicate no filter.
+ *
+ * @param entityReferenceExpansion If this flag is false, the contents of
+ * EntityReference nodes are not presented in the logical view.
+ *
+ * @return The newly created TreeWalker.
+ *
+ * @exception DOMException
+ * NOT_SUPPORTED_ERR: Raised if the specified root is null.
+ */
+ TreeWalker createTreeWalker(Node root, unsigned long whatToShow,
+ NodeFilter filter,
+ bool entityReferenceExpansion);
+
+ /**
+ * Introduced in DOM Level 2
+ * This method is from the DocumentEvent interface
+ *
+ * The createEvent method is used in creating Events when it is either
+ * inconvenient or unnecessary for the user to create an Event themselves.
+ * In cases where the implementation provided Event is insufficient, users
+ * may supply their own Event implementations for use with the
+ * dispatchEvent method.
+ *
+ * @param eventType The eventType parameter specifies the type of Event
+ * interface to be created. If the Event interface specified is supported
+ * by the implementation this method will return a new Event of the
+ * interface type requested. If the Event is to be dispatched via the
+ * dispatchEvent method the appropriate event init method must be called
+ * after creation in order to initialize the Event's values. As an example,
+ * a user wishing to synthesize some kind of UIEvent would call createEvent
+ * with the parameter "UIEvents". The initUIEvent method could then be
+ * called on the newly created UIEvent to set the specific type of UIEvent
+ * to be dispatched and set its context information.
+ *
+ * @return The newly created EventExceptions
+ *
+ * @exception DOMException
+ * NOT_SUPPORTED_ERR: Raised if the implementation does not support the
+ * type of Event interface requested
+ */
+ Event createEvent(const DOMString &eventType);
+
+ /**
+ * Introduced in DOM Level 2
+ * This method is from the DocumentView interface
+ *
+ * The default AbstractView for this Document, or null if none available.
+ */
+ AbstractView defaultView() const;
+
+ /**
+ * Introduced in DOM Level 2
+ * This method is from the DocumentStyle interface
+ *
+ * A list containing all the style sheets explicitly linked into or
+ * embedded in a document. For HTML documents, this includes external style
+ * sheets, included via the HTML LINK element, and inline STYLE elements.
+ * In XML, this includes external style sheets, included via style sheet
+ * processing instructions (see [XML-StyleSheet]).
+ */
+ StyleSheetList styleSheets() const;
+
+ /**
+ * CSS3 mechanism for selecting alternate stylesheets using the DOM.
+ * Might change without further notice.
+ */
+
+ DOMString preferredStylesheetSet();
+ DOMString selectedStylesheetSet();
+ void setSelectedStylesheetSet(const DOMString& aString);
+
+ /**
+ * Adds a new style sheet to the list of style sheets.
+ *
+ * The new style sheet will be applied after all author and implicit
+ * style sheets, but before the user style sheet.
+ *
+ * Create new style sheets with e. g.
+ * \c DOMImplementation::createCSSStyleSheet
+ *
+ * This is not part of the official DOM.
+ *
+ * @param sheet style sheet
+ * @exception DOMException
+ * @since 3.4
+ */
+ void addStyleSheet(const StyleSheet &sheet);
+
+ /**
+ * Removes a style sheet to the list of style sheets.
+ *
+ * Only sheets added by \c addStyleSheet may be removed.
+ *
+ * This is not part of the official DOM.
+ *
+ * @param sheet style sheet to remove
+ * @exception DOMException
+ * NOT_FOUND_ERR \c sheet is not contained in the list of style sheets or
+ * it has not been added by \c addStyleSheet
+ * @since 3.4
+ */
+ void removeStyleSheet(const StyleSheet &sheet);
+
+ /**
+ * @return The KHTML view widget of this document.
+ */
+ KHTMLView *view() const;
+
+ /**
+ * Introduced in DOM Level 2
+ * This method is from the DocumentCSS interface
+ *
+ * This method is used to retrieve the override style declaration for a
+ * specified element and a specified pseudo-element.
+ *
+ * @param elt The element whose style is to be modified. This parameter
+ * cannot be null.
+ *
+ * @param pseudoElt The pseudo-element or null if none.
+ *
+ * @return The override style declaration.
+ */
+ CSSStyleDeclaration getOverrideStyle(const Element &elt,
+ const DOMString &pseudoElt);
+
+ /**
+ * Introduced in DOM Level 3
+ * This method is from the DocumentLS interface
+ *
+ * Indicates whether the method DocumentLS.load() should be synchronous or
+ * asynchronous. When the async attribute is set to true the load method
+ * returns control to the caller before the document has completed loading.
+ * The default value of this attribute is true.
+ */
+ bool async() const;
+
+ /**
+ * Introduced in DOM Level 3
+ * This method is from the DocumentLS interface
+ *
+ * see async
+ *
+ * @exception DOMException
+ * NOT_SUPPORTED_ERR: Raised if the implementation doesn't support the mode
+ * the attribute is being set to.
+ */
+ void setAsync( bool );
+
+
+ /**
+ * Introduced in DOM Level 3
+ * This method is from the DocumentLS interface
+ *
+ * If the document is currently being loaded as a result of the method load
+ * being invoked the loading and parsing is immediately aborted. The
+ * possibly partial result of parsing the document is discarded and the
+ * document is cleared.
+ */
+ void abort();
+
+ /**
+ * Introduced in DOM Level 3
+ * This method is from the DocumentLS interface
+ *
+ * Replaces the content of the document with the result of parsing the
+ * given URI. Invoking this method will either block the caller or return
+ * to the caller immediately depending on the value of the async attribute.
+ * Once the document is fully loaded a "load" event (as defined in
+ * [DOM Level 3 Events], except that the Event.targetNode will be the
+ * document, not an element) will be dispatched on the document. If an
+ * error occurs, an implementation dependent "error" event will be
+ * dispatched on the document. If this method is called on a document that
+ * is currently loading, the current load is interrupted and the new URI
+ * load is initiated.
+ *
+ * When invoking this method the parameters used in the DOMParser interface
+ * are assumed to have their default values with the exception that the
+ * parameters "entities", "normalize-characters",
+ * "check-character-normalization" are set to "false".
+ *
+ * The result of a call to this method is the same the result of a call to
+ * DOMParser.parseWithContext with an input stream referencing the URI that
+ * was passed to this call, the document as the context node, and the
+ * action ACTION_REPLACE_CHILDREN.
+ *
+ * @param uri of type DOMString
+ * The URI reference for the XML file to be loaded. If this is a relative
+ * URI, the base URI used by the implementation is implementation dependent.
+ *
+ * @return If async is set to true load returns true if the document load
+ * was successfully initiated. If an error occurred when initiating the
+ * document load, load returns false.
+ * If async is set to false load returns true if the document was
+ * successfully loaded and parsed. If an error occurred when either loading
+ * or parsing the URI, load returns false.
+ */
+ void load( const DOMString &uri );
+
+ /**
+ * Introduced in DOM Level 3
+ * This method is from the DocumentLS interface
+ *
+ * Replace the content of the document with the result of parsing the input
+ * string, this method is always synchronous. This method always parses
+ * from a DOMString, which means the data is always UTF-16. All other
+ * encoding information is ignored.
+ *
+ * The parameters used in the DOMParser interface are assumed to have their
+ * default values when invoking this method.
+ *
+ * The result of a call to this method is the same as the result of a call
+ * to DOMParser.parseWithContext with an input stream containing the string
+ * passed to this call, the document as the context node, and the action
+ * ACTION_REPLACE_CHILDREN.
+ *
+ * @param source A string containing an XML document.
+ */
+ void loadXML( const DOMString &source );
+
+ /**
+ * not part of the official DOM
+ *
+ * Documents are read-only by default, but they can be made editable by
+ * entering "design mode".
+ *
+ * @return whether this document is in design mode.
+ * @since 3.2
+ */
+ bool designMode() const;
+
+ /**
+ * not part of the official DOM
+ *
+ * @param enable @p true to enable design mode, @p false to disable.
+ * @see designMode
+ * @since 3.2
+ */
+ void setDesignMode(bool enable);
+
+ /**
+ * not part of the DOM
+ *
+ * completes a given URL
+ */
+ DOMString completeURL(const DOMString& url);
+
+ DOMString toString() const;
+
+ /**
+ * not part of the DOM
+ *
+ * Updates the rendered display after one or more changes to
+ * the DOM structure
+ */
+ void updateRendering();
+
+ Document( DocumentImpl *i);
+protected:
+
+ friend class Node;
+};
+
+class DocumentFragmentImpl;
+
+/**
+ * \c DocumentFragment is a "lightweight" or "minimal"
+ * \c Document object. It is very common to want to be
+ * able to extract a portion of a document's tree or to create a new
+ * fragment of a document. Imagine implementing a user command like
+ * cut or rearranging a document by moving fragments around. It is
+ * desirable to have an object which can hold such fragments and it is
+ * quite natural to use a Node for this purpose. While it is true that
+ * a \c Document object could fulfil this role, a
+ * \c Document object can potentially be a heavyweight object,
+ * depending on the underlying implementation. What is really needed
+ * for this is a very lightweight object. \c DocumentFragment
+ * is such an object.
+ *
+ * Furthermore, various operations -- such as inserting nodes as
+ * children of another \c Node -- may take
+ * \c DocumentFragment objects as arguments; this results in all
+ * the child nodes of the \c DocumentFragment being moved
+ * to the child list of this node.
+ *
+ * The children of a \c DocumentFragment node are zero or
+ * more nodes representing the tops of any sub-trees defining the
+ * structure of the document. \c DocumentFragment nodes do
+ * not need to be well-formed XML documents (although they do need to
+ * follow the rules imposed upon well-formed XML parsed entities,
+ * which can have multiple top nodes). For example, a
+ * \c DocumentFragment might have only one child and that child
+ * node could be a \c Text node. Such a structure model
+ * represents neither an HTML document nor a well-formed XML document.
+ *
+ * When a \c DocumentFragment is inserted into a
+ * \c Document (or indeed any other \c Node that may
+ * take children) the children of the \c DocumentFragment
+ * and not the \c DocumentFragment itself are inserted
+ * into the \c Node . This makes the
+ * \c DocumentFragment very useful when the user wishes to create
+ * nodes that are siblings; the \c DocumentFragment acts
+ * as the parent of these nodes so that the user can use the standard
+ * methods from the \c Node interface, such as
+ * \c insertBefore() and \c appendChild() .
+ *
+ */
+class KHTML_EXPORT DocumentFragment : public Node
+{
+ friend class Document;
+ friend class HTMLElementImpl;
+ friend class Range;
+
+public:
+ DocumentFragment();
+ DocumentFragment(const DocumentFragment &other);
+ DocumentFragment(const Node &other) : Node()
+ {(*this)=other;}
+
+ DocumentFragment & operator = (const Node &other);
+ DocumentFragment & operator = (const DocumentFragment &other);
+
+ ~DocumentFragment();
+
+protected:
+ DocumentFragment(DocumentFragmentImpl *i);
+};
+
+class NamedNodeMap;
+class DOMString;
+
+/**
+ * Each \c Document has a \c doctype attribute
+ * whose value is either \c null or a \c DocumentType
+ * object. The \c DocumentType interface in the
+ * DOM Level 1 Core provides an interface to the list of entities that
+ * are defined for the document, and little else because the effect of
+ * namespaces and the various XML scheme efforts on DTD representation
+ * are not clearly understood as of this writing.
+ *
+ * The DOM Level 1 doesn't support editing \c DocumentType
+ * nodes.
+ *
+ */
+class KHTML_EXPORT DocumentType : public Node
+{
+ friend class Document;
+ friend class DOMImplementation;
+public:
+ DocumentType();
+ DocumentType(const DocumentType &other);
+
+ DocumentType(const Node &other) : Node()
+ {(*this)=other;}
+ DocumentType & operator = (const Node &other);
+ DocumentType & operator = (const DocumentType &other);
+
+ ~DocumentType();
+
+ /**
+ * The name of DTD; i.e., the name immediately following the
+ * \c DOCTYPE keyword.
+ *
+ */
+ DOMString name() const;
+
+ /**
+ * A \c NamedNodeMap containing the general entities,
+ * both external and internal, declared in the DTD. Duplicates are
+ * discarded. For example in: &lt;!DOCTYPE ex SYSTEM "ex.dtd" [
+ * &lt;!ENTITY foo "foo"> &lt;!ENTITY bar "bar"> &lt;!ENTITY % baz
+ * "baz"> ]> &lt;ex/> the interface provides access to \c foo
+ * and \c bar but not \c baz .
+ * Every node in this map also implements the \c Entity
+ * interface.
+ *
+ * The DOM Level 1 does not support editing entities, therefore
+ * \c entities cannot be altered in any way.
+ *
+ */
+ NamedNodeMap entities() const;
+
+ /**
+ * A \c NamedNodeMap containing the notations declared
+ * in the DTD. Duplicates are discarded. Every node in this map
+ * also implements the \c Notation interface.
+ *
+ * The DOM Level 1 does not support editing notations, therefore
+ * \c notations cannot be altered in any way.
+ *
+ */
+ NamedNodeMap notations() const;
+
+ /**
+ * Introduced in DOM Level 2
+ *
+ * The public identifier of the external subset.
+ */
+ DOMString publicId() const;
+
+ /**
+ * Introduced in DOM Level 2
+ *
+ * The system identifier of the external subset.
+ */
+ DOMString systemId() const;
+
+ /**
+ * Introduced in DOM Level 2
+ *
+ * The internal subset as a string.
+ *
+ * Note: The actual content returned depends on how much information is
+ * available to the implementation. This may vary depending on various
+ * parameters, including the XML processor used to build the document.
+ */
+ DOMString internalSubset() const;
+
+protected:
+ DocumentType(DocumentTypeImpl *impl);
+};
+
+} //namespace
+#endif