You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdelibs/khtml/dom/dom_doc.h

1108 lines
39 KiB

/*
* 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 tqcontains
* 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 tqcontains
* 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 tqcontains 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 tqcontains 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
* tqcontains 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 tqcontains 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
* tqcontains 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 tqcontains 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