summaryrefslogtreecommitdiffstats
path: root/tdehtml/dom/dom2_range.h
diff options
context:
space:
mode:
Diffstat (limited to 'tdehtml/dom/dom2_range.h')
-rw-r--r--tdehtml/dom/dom2_range.h475
1 files changed, 475 insertions, 0 deletions
diff --git a/tdehtml/dom/dom2_range.h b/tdehtml/dom/dom2_range.h
new file mode 100644
index 000000000..290f4f48c
--- /dev/null
+++ b/tdehtml/dom/dom2_range.h
@@ -0,0 +1,475 @@
+/*
+ * This file is part of the DOM implementation for KDE.
+ *
+ * (C) 1999 Lars Knoll (knoll@kde.org)
+ * (C) 2000 Gunnstein Lye (gunnstein@netcom.no)
+ * (C) 2000 Frederik Holljen (frederik.holljen@hig.no)
+ * (C) 2001 Peter Kelly (pmk@post.com)
+ *
+ * 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 2 Specification (Candidate Recommendation)
+ * http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/
+ * Copyright © 2000 W3C® (MIT, INRIA, Keio), All Rights Reserved.
+ *
+ */
+#ifndef _dom2_range_h_
+#define _dom2_range_h_
+
+#include <dom/dom_doc.h>
+#include <dom/dom_misc.h>
+
+namespace DOM {
+
+class DocumentFragment;
+class Node;
+class DOMString;
+class DocumentImpl;
+class RangeImpl;
+
+class DOMException;
+
+// Introduced in DOM Level 2:
+class KHTML_EXPORT RangeException {
+public:
+ RangeException(unsigned short _code) { code = _code; }
+ RangeException(const RangeException &other) { code = other.code; }
+
+ RangeException & operator = (const RangeException &other)
+ { code = other.code; return *this; }
+
+ virtual ~RangeException() {}
+ /**
+ * An integer indicating the type of error generated.
+ *
+ */
+ enum RangeExceptionCode {
+ BAD_BOUNDARYPOINTS_ERR = 1,
+ INVALID_NODE_TYPE_ERR = 2,
+ _EXCEPTION_OFFSET = 2000,
+ _EXCEPTION_MAX = 2999
+ };
+ unsigned short code;
+};
+
+
+class KHTML_EXPORT Range
+{
+ friend class DocumentImpl;
+ friend class Document;
+ friend class RangeImpl;
+public:
+ Range();
+ Range(const Document rootContainer);
+ Range(const Range &other);
+ Range(const Node startContainer, const long startOffset, const Node endContainer, const long endOffset);
+
+ Range & operator = (const Range &other);
+
+ ~Range();
+
+ /**
+ * Node within which the range begins
+ *
+ */
+ Node startContainer() const;
+
+ /**
+ * Offset within the starting node of the range.
+ *
+ */
+ long startOffset() const;
+
+ /**
+ * Node within which the range ends
+ *
+ */
+ Node endContainer() const;
+
+ /**
+ * Offset within the ending node of the range.
+ *
+ */
+ long endOffset() const;
+
+ /**
+ * true if the range is collapsed
+ *
+ */
+ bool collapsed() const;
+
+ /**
+ * Gets the common ancestor container of the range's two end-points.
+ * Also sets it.
+ *
+ */
+ // ### BIC make const in the next release
+ Node commonAncestorContainer();
+
+ /**
+ * Sets the attributes describing the start of the range.
+ *
+ * @param refNode The \c refNode value. This parameter
+ * must be different from \c null .
+ *
+ * @param offset The \c startOffset value.
+ *
+ * @return
+ *
+ * @exception RangeException
+ * NULL_NODE_ERR: Raised if \c refNode is \c null .
+ *
+ * INVALID_NODE_TYPE_ERR: Raised if \c refNode or an
+ * ancestor of \c refNode is an Attr, Entity,
+ * Notation, or DocumentType node.
+ *
+ * If an offset is out-of-bounds, should it just be fixed up or
+ * should an exception be raised.
+ *
+ */
+ void setStart ( const Node &refNode, long offset );
+
+ /**
+ * Sets the attributes describing the end of a range.
+ *
+ * @param refNode The \c refNode value. This parameter
+ * must be different from \c null .
+ *
+ * @param offset The \c endOffset value.
+ *
+ * @return
+ *
+ * @exception RangeException
+ * NULL_NODE_ERR: Raised if \c refNode is \c null .
+ *
+ * INVALID_NODE_TYPE_ERR: Raised if \c refNode or an
+ * ancestor of \c refNode is an Attr, Entity,
+ * Notation, or DocumentType node.
+ *
+ */
+ void setEnd ( const Node &refNode, long offset );
+
+ /**
+ * Sets the start position to be before a node
+ *
+ * @param refNode Range starts before \c refNode
+ *
+ * @return
+ *
+ * @exception RangeException
+ * INVALID_NODE_TYPE_ERR: Raised if an ancestor of \c refNode
+ * is an Attr, Entity, Notation, or DocumentType node or
+ * if \c refNode is a Document, DocumentFragment,
+ * Attr, Entity, or Notation node.
+ *
+ */
+ void setStartBefore ( const Node &refNode );
+
+ /**
+ * Sets the start position to be after a node
+ *
+ * @param refNode Range starts after \c refNode
+ *
+ * @return
+ *
+ * @exception RangeException
+ * INVALID_NODE_TYPE_ERR: Raised if an ancestor of \c refNode
+ * is an Attr, Entity, Notation, or DocumentType node or
+ * if \c refNode is a Document, DocumentFragment,
+ * Attr, Entity, or Notation node.
+ *
+ */
+ void setStartAfter ( const Node &refNode );
+
+ /**
+ * Sets the end position to be before a node.
+ *
+ * @param refNode Range ends before \c refNode
+ *
+ * @return
+ *
+ * @exception RangeException
+ * INVALID_NODE_TYPE_ERR: Raised if an ancestor of \c refNode
+ * is an Attr, Entity, Notation, or DocumentType node or
+ * if \c refNode is a Document, DocumentFragment,
+ * Attr, Entity, or Notation node.
+ *
+ */
+ void setEndBefore ( const Node &refNode );
+
+ /**
+ * Sets the end of a range to be after a node
+ *
+ * @param refNode Range ends after \c refNode .
+ *
+ * @return
+ *
+ * @exception RangeException
+ * INVALID_NODE_TYPE_ERR: Raised if an ancestor of \c refNode
+ * is an Attr, Entity, Notation or DocumentType node or if
+ * \c refNode is a Document, DocumentFragment, Attr,
+ * Entity, or Notation node.
+ *
+ */
+ void setEndAfter ( const Node &refNode );
+
+ /**
+ * Collapse a range onto one of its end-points
+ *
+ * @param toStart If true, collapses the Range onto its start; if
+ * false, collapses it onto its end.
+ *
+ * @return
+ *
+ */
+ void collapse ( bool toStart );
+
+ /**
+ * Select a node and its contents
+ *
+ * @param refNode The node to select.
+ *
+ * @return
+ *
+ * @exception RangeException
+ * INVALID_NODE_TYPE_ERR: Raised if an ancestor of \c refNode
+ * is an Attr, Entity, Notation or DocumentType node or if
+ * \c refNode is a Document, DocumentFragment, Attr,
+ * Entity, or Notation node.
+ *
+ */
+ void selectNode ( const Node &refNode );
+
+ /**
+ * Select the contents within a node
+ *
+ * @param refNode Node to select from
+ *
+ * @return
+ *
+ * @exception RangeException
+ * INVALID_NODE_TYPE_ERR: Raised if \c refNode or an
+ * ancestor of \c refNode is an Attr, Entity, Notation
+ * or DocumentType node.
+ *
+ */
+ void selectNodeContents ( const Node &refNode );
+
+ enum CompareHow {
+ START_TO_START = 0,
+ START_TO_END = 1,
+ END_TO_END = 2,
+ END_TO_START = 3
+ };
+
+ /**
+ * Compare the end-points of two ranges in a document.
+ *
+ * @param how
+ *
+ * @param sourceRange
+ *
+ * @return -1, 0 or 1 depending on whether the corresponding
+ * end-point of the Range is before, equal to, or after the
+ * corresponding end-point of \c sourceRange .
+ *
+ * @exception DOMException
+ * WRONG_DOCUMENT_ERR: Raised if the two Ranges are not in the
+ * same document or document fragment.
+ *
+ */
+ short compareBoundaryPoints ( CompareHow how, const Range &sourceRange );
+
+ /**
+ * @internal
+ * not part of the DOM
+ *
+ * Compare the boundary-points of a range.
+ *
+ * Return true if the startContainer is before the endContainer,
+ * or if they are equal.
+ * Return false if the startContainer is after the endContainer.
+ *
+ */
+ bool boundaryPointsValid ( );
+
+ /**
+ * Removes the contents of a range from the containing document or
+ * document fragment without returning a reference to the removed
+ * content.
+ *
+ * @return
+ *
+ * @exception DOMException
+ * NO_MODIFICATION_ALLOWED_ERR: Raised if any portion of the
+ * content of the range is read-only or any of the nodes that
+ * contain any of the content of the range are read-only.
+ *
+ */
+ void deleteContents ( );
+
+ /**
+ * Moves the contents of a range from the containing document or
+ * document fragment to a new DocumentFragment.
+ *
+ * @return A DocumentFragment containing the extracted contents.
+ *
+ * @exception DOMException
+ * NO_MODIFICATION_ALLOWED_ERR: Raised if any portion of the
+ * content of the range is read-only or any of the nodes which
+ * contain any of the content of the range are read-only.
+ *
+ * HIERARCHY_REQUEST_ERR: Raised if a DocumentType node would be
+ * extracted into the new DocumentFragment.
+ *
+ */
+ DocumentFragment extractContents ( );
+
+ /**
+ * Duplicates the contents of a range
+ *
+ * @return A DocumentFragment containing contents equivalent to
+ * those of this range.
+ *
+ * @exception DOMException
+ * HIERARCHY_REQUEST_ERR: Raised if a DocumentType node would be
+ * extracted into the new DocumentFragment.
+ *
+ */
+ DocumentFragment cloneContents ( );
+
+ /**
+ * Inserts a node into the document or document fragment at the
+ * start of the range.
+ *
+ * @param newNode The node to insert at the start of the range
+ *
+ * @return
+ *
+ * @exception DOMException
+ * NO_MODIFICATION_ALLOWED_ERR: Raised if an ancestor container of
+ * the start of the range is read-only.
+ *
+ * WRONG_DOCUMENT_ERR: Raised if \c newNode and the
+ * container of the start of the Range were not created from the
+ * same document.
+ *
+ * HIERARCHY_REQUEST_ERR: Raised if the container of the start of
+ * the Range is of a type that does not allow children of the type
+ * of \c newNode or if \c newNode is an
+ * ancestor of the container .
+ *
+ * @exception RangeException
+ * INVALID_NODE_TYPE_ERR: Raised if \c node is an
+ * Attr, Entity, Notation, DocumentFragment, or Document node.
+ *
+ */
+ void insertNode ( const Node &newNode );
+
+ /**
+ * Reparents the contents of the range to the given node and
+ * inserts the node at the position of the start of the range.
+ *
+ * @param newParent The node to surround the contents with.
+ *
+ * @return
+ *
+ * @exception DOMException
+ * NO_MODIFICATION_ALLOWED_ERR: Raised if an ancestor container of
+ * either end-point of the range is read-only.
+ *
+ * WRONG_DOCUMENT_ERR: Raised if \c newParent and the
+ * container of the start of the Range were not created from the
+ * same document.
+ *
+ * HIERARCHY_REQUEST_ERR: Raised if the container of the start of
+ * the Range is of a type that does not allow children of the type
+ * of \c newParent or if \c newParent is
+ * an ancestor of the container or if \c node would
+ * end up with a child node of a type not allowed by the type of
+ * \c node .
+ *
+ * @exception RangeException
+ * BAD_ENDPOINTS_ERR: Raised if the range partially selects a
+ * non-text node.
+ *
+ * INVALID_NODE_TYPE_ERR: Raised if \c node is an
+ * Attr, Entity, DocumentType, Notation, Document, or
+ * DocumentFragment node.
+ *
+ */
+ void surroundContents ( const Node &newParent );
+
+ /**
+ * Produces a new range whose end-points are equal to the
+ * end-points of the range.
+ *
+ * @return The duplicated range.
+ *
+ */
+ Range cloneRange ( );
+
+ /**
+ * Returns the contents of a range as a string.
+ *
+ * @return The contents of the range.
+ *
+ */
+ DOMString toString ( );
+
+ /**
+ * @internal Not part of DOM
+ */
+ DOMString toHTML ( );
+
+ /* Mozilla extension - only works for HTML documents. */
+ DocumentFragment createContextualFragment (const DOMString &html);
+
+ /**
+ * Called to indicate that the range is no longer in use and that
+ * the implementation may relinquish any resources associated with
+ * this range. Subsequent calls to any methods or attribute getters
+ * on this range will result in a DOMException being thrown with an
+ * error code of INVALID_STATE_ERR.
+ *
+ */
+ void detach ( );
+
+ /**
+ * not part of the DOM
+ * true if the range is detached
+ *
+ */
+ bool isDetached() const;
+
+ /**
+ * @internal
+ * not part of the DOM
+ */
+ RangeImpl *handle() const;
+ bool isNull() const;
+
+protected:
+ RangeImpl *impl;
+ Range(RangeImpl *i);
+private:
+ void throwException(int exceptioncode) const;
+};
+
+} // namespace
+
+#endif