/* * 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 #include 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: <!DOCTYPE ex SYSTEM "ex.dtd" [ * <!ENTITY foo "foo"> <!ENTITY bar "bar"> <!ENTITY % baz * "baz"> ]> <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