DOMRange.hpp
上传用户:zhuqijet
上传日期:2013-06-25
资源大小:10074k
文件大小:23k
源码类别:

词法分析

开发平台:

Visual C++

  1. #ifndef DOMRange_HEADER_GUARD_
  2. #define DOMRange_HEADER_GUARD_
  3. /*
  4.  * The Apache Software License, Version 1.1
  5.  *
  6.  * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
  7.  * reserved.
  8.  *
  9.  * Redistribution and use in source and binary forms, with or without
  10.  * modification, are permitted provided that the following conditions
  11.  * are met:
  12.  *
  13.  * 1. Redistributions of source code must retain the above copyright
  14.  *    notice, this list of conditions and the following disclaimer.
  15.  *
  16.  * 2. Redistributions in binary form must reproduce the above copyright
  17.  *    notice, this list of conditions and the following disclaimer in
  18.  *    the documentation and/or other materials provided with the
  19.  *    distribution.
  20.  *
  21.  * 3. The end-user documentation included with the redistribution,
  22.  *    if any, must include the following acknowledgment:
  23.  *       "This product includes software developed by the
  24.  *        Apache Software Foundation (http://www.apache.org/)."
  25.  *    Alternately, this acknowledgment may appear in the software itself,
  26.  *    if and wherever such third-party acknowledgments normally appear.
  27.  *
  28.  * 4. The names "Xerces" and "Apache Software Foundation" must
  29.  *    not be used to endorse or promote products derived from this
  30.  *    software without prior written permission. For written
  31.  *    permission, please contact apache@apache.org.
  32.  *
  33.  * 5. Products derived from this software may not be called "Apache",
  34.  *    nor may "Apache" appear in their name, without prior written
  35.  *    permission of the Apache Software Foundation.
  36.  *
  37.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  38.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  39.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  40.  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  41.  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  42.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  43.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  44.  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  45.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  46.  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  47.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  48.  * SUCH DAMAGE.
  49.  * ====================================================================
  50.  *
  51.  * This software consists of voluntary contributions made by many
  52.  * individuals on behalf of the Apache Software Foundation, and was
  53.  * originally based on software copyright (c) 2001, International
  54.  * Business Machines, Inc., http://www.ibm.com .  For more information
  55.  * on the Apache Software Foundation, please see
  56.  * <http://www.apache.org/>.
  57.  */
  58. /*
  59.  * $Id: DOMRange.hpp,v 1.8 2003/03/07 19:59:08 tng Exp $
  60.  */
  61. #include <xercesc/util/XercesDefs.hpp>
  62. XERCES_CPP_NAMESPACE_BEGIN
  63. class DOMNode;
  64. class DOMDocumentFragment;
  65. /**
  66.  * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113'>Document Object Model (DOM) Level 2 Traversal and Range Specification</a>.
  67.  * @since DOM Level 2
  68.  */
  69. class CDOM_EXPORT DOMRange {
  70. protected:
  71.     // -----------------------------------------------------------------------
  72.     //  Hidden constructors
  73.     // -----------------------------------------------------------------------
  74.     /** @name Hidden constructors */
  75.     //@{    
  76.     DOMRange() {};
  77.     //@}
  78. private:
  79.     // -----------------------------------------------------------------------
  80.     // Unimplemented constructors and operators
  81.     // -----------------------------------------------------------------------
  82.     /** @name Unimplemented constructors and operators */
  83.     //@{
  84.     DOMRange(const DOMRange &);
  85.     DOMRange & operator = (const DOMRange &);
  86.     //@}
  87. public:
  88.     // -----------------------------------------------------------------------
  89.     //  All constructors are hidden, just the destructor is available
  90.     // -----------------------------------------------------------------------
  91.     /** @name Destructor */
  92.     //@{
  93.     /**
  94.      * Destructor
  95.      *
  96.      */
  97.     virtual ~DOMRange() {};
  98.     //@}
  99.     // -----------------------------------------------------------------------
  100.     //  Class Types
  101.     // -----------------------------------------------------------------------
  102.     /** @name Public Contants */
  103.     //@{
  104.     /**
  105.      * Constants CompareHow.
  106.      *
  107.      * <p><code>START_TO_START:</code>
  108.      * Compare start boundary-point of <code>sourceRange</code> to start
  109.      * boundary-point of Range on which <code>compareBoundaryPoints</code>
  110.      * is invoked.</p>
  111.      *
  112.      * <p><code>START_TO_END:</code>
  113.      * Compare start boundary-point of <code>sourceRange</code> to end
  114.      * boundary-point of Range on which <code>compareBoundaryPoints</code>
  115.      * is invoked.</p>
  116.      *
  117.      * <p><code>END_TO_END:</code>
  118.      * Compare end boundary-point of <code>sourceRange</code> to end
  119.      * boundary-point of Range on which <code>compareBoundaryPoints</code>
  120.      * is invoked.</p>
  121.      *
  122.      * <p><code>END_TO_START:</code>
  123.      * Compare end boundary-point of <code>sourceRange</code> to start
  124.      * boundary-point of Range on which <code>compareBoundaryPoints</code>
  125.      * is invoked.</p>
  126.      *
  127.      * @since DOM Level 2
  128.      */
  129.     enum CompareHow {
  130.         START_TO_START  = 0,
  131.         START_TO_END    = 1,
  132.         END_TO_END      = 2,
  133.         END_TO_START    = 3
  134.     };
  135.     //@}
  136.     // -----------------------------------------------------------------------
  137.     //  Virtual DOMRange interface
  138.     // -----------------------------------------------------------------------
  139.     /** @name Functions introduced in DOM Level 2 */
  140.     //@{
  141.     // -----------------------------------------------------------------------
  142.     //  Getter methods
  143.     // -----------------------------------------------------------------------
  144.     /**
  145.      * DOMNode within which the Range begins
  146.      * @exception DOMException
  147.      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
  148.      *   invoked on this object.
  149.      *
  150.      * @since DOM Level 2
  151.      */
  152.     virtual DOMNode* getStartContainer() const = 0;
  153.     /**
  154.      * Offset within the starting node of the Range.
  155.      * @exception DOMException
  156.      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
  157.      *   invoked on this object.
  158.      *
  159.      * @since DOM Level 2
  160.      */
  161.     virtual XMLSize_t getStartOffset() const = 0;
  162.     /**
  163.      * DOMNode within which the Range ends
  164.      * @exception DOMException
  165.      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
  166.      *   invoked on this object.
  167.      *
  168.      * @since DOM Level 2
  169.      */
  170.     virtual DOMNode* getEndContainer() const = 0;
  171.     /**
  172.      * Offset within the ending node of the Range.
  173.      * @exception DOMException
  174.      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
  175.      *   invoked on this object.
  176.      *
  177.      * @since DOM Level 2
  178.      */
  179.     virtual XMLSize_t getEndOffset() const = 0;
  180.     /**
  181.      * TRUE if the Range is collapsed
  182.      * @exception DOMException
  183.      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
  184.      *   invoked on this object.
  185.      *
  186.      * @since DOM Level 2
  187.      */
  188.     virtual bool getCollapsed() const = 0;
  189.     /**
  190.      * The deepest common ancestor container of the Range's two
  191.      * boundary-points.
  192.      * @exception DOMException
  193.      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
  194.      *   invoked on this object.
  195.      *
  196.      * @since DOM Level 2
  197.      */
  198.     virtual const DOMNode* getCommonAncestorContainer() const = 0;
  199.     // -----------------------------------------------------------------------
  200.     //  Setter methods
  201.     // -----------------------------------------------------------------------
  202.     /**
  203.      * Sets the attributes describing the start of the Range.
  204.      * @param refNode The <code>refNode</code> value. This parameter must be
  205.      *   different from <code>null</code>.
  206.      * @param offset The <code>startOffset</code> value.
  207.      * @exception DOMRangeException
  208.      *   INVALID_NODE_TYPE_ERR: Raised if <code>refNode</code> or an ancestor
  209.      *   of <code>refNode</code> is an DOMEntity, DOMNotation, or DOMDocumentType
  210.      *   node.
  211.      * @exception DOMException
  212.      *   INDEX_SIZE_ERR: Raised if <code>offset</code> is negative or greater
  213.      *   than the number of child units in <code>refNode</code>. Child units
  214.      *   are 16-bit units if <code>refNode</code> is a type of DOMCharacterData
  215.      *   node (e.g., a DOMText or DOMComment node) or a DOMProcessingInstruction
  216.      *   node. Child units are Nodes in all other cases.
  217.      *   <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already
  218.      *   been invoked on this object.
  219.      *   <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created
  220.      *   from a different document than the one that created this range.
  221.      *
  222.      * @since DOM Level 2
  223.      */
  224.     virtual void setStart(const DOMNode *refNode, XMLSize_t offset) = 0;
  225.     /**
  226.      * Sets the attributes describing the end of a Range.
  227.      * @param refNode The <code>refNode</code> value. This parameter must be
  228.      *   different from <code>null</code>.
  229.      * @param offset The <code>endOffset</code> value.
  230.      * @exception DOMRangeException
  231.      *   INVALID_NODE_TYPE_ERR: Raised if <code>refNode</code> or an ancestor
  232.      *   of <code>refNode</code> is an DOMEntity, DOMNotation, or DOMDocumentType
  233.      *   node.
  234.      * @exception DOMException
  235.      *   INDEX_SIZE_ERR: Raised if <code>offset</code> is negative or greater
  236.      *   than the number of child units in <code>refNode</code>. Child units
  237.      *   are 16-bit units if <code>refNode</code> is a type of DOMCharacterData
  238.      *   node (e.g., a DOMText or DOMComment node) or a DOMProcessingInstruction
  239.      *   node. Child units are Nodes in all other cases.
  240.      *   <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already
  241.      *   been invoked on this object.
  242.      *   <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created
  243.      *   from a different document than the one that created this range.
  244.      *
  245.      * @since DOM Level 2
  246.      */
  247.     virtual void setEnd(const DOMNode *refNode, XMLSize_t offset) = 0;
  248.     /**
  249.      * Sets the start position to be before a node
  250.      * @param refNode Range starts before <code>refNode</code>
  251.      * @exception DOMRangeException
  252.      *   INVALID_NODE_TYPE_ERR: Raised if the root container of
  253.      *   <code>refNode</code> is not an DOMAttr, DOMDocument, or DOMDocumentFragment
  254.      *   node or if <code>refNode</code> is a DOMDocument, DOMDocumentFragment,
  255.      *   DOMAttr, DOMEntity, or DOMNotation node.
  256.      * @exception DOMException
  257.      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
  258.      *   invoked on this object.
  259.      *   <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created
  260.      *   from a different document than the one that created this range.
  261.      *
  262.      * @since DOM Level 2
  263.      */
  264.     virtual void setStartBefore(const DOMNode *refNode) = 0;
  265.     /**
  266.      * Sets the start position to be after a node
  267.      * @param refNode Range starts after <code>refNode</code>
  268.      * @exception DOMRangeException
  269.      *   INVALID_NODE_TYPE_ERR: Raised if the root container of
  270.      *   <code>refNode</code> is not an DOMAttr, DOMDocument, or DOMDocumentFragment
  271.      *   node or if <code>refNode</code> is a DOMDocument, DOMDocumentFragment,
  272.      *   DOMAttr, DOMEntity, or DOMNotation node.
  273.      * @exception DOMException
  274.      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
  275.      *   invoked on this object.
  276.      *   <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created
  277.      *   from a different document than the one that created this range.
  278.      *
  279.      * @since DOM Level 2
  280.      */
  281.     virtual void setStartAfter(const DOMNode *refNode) = 0;
  282.     /**
  283.      * Sets the end position to be before a node.
  284.      * @param refNode Range ends before <code>refNode</code>
  285.      * @exception DOMRangeException
  286.      *   INVALID_NODE_TYPE_ERR: Raised if the root container of
  287.      *   <code>refNode</code> is not an DOMAttr, DOMDocument, or DOMDocumentFragment
  288.      *   node or if <code>refNode</code> is a DOMDocument, DOMDocumentFragment,
  289.      *   DOMAttr, DOMEntity, or DOMNotation node.
  290.      * @exception DOMException
  291.      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
  292.      *   invoked on this object.
  293.      *   <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created
  294.      *   from a different document than the one that created this range.
  295.      *
  296.      * @since DOM Level 2
  297.      */
  298.     virtual void setEndBefore(const DOMNode *refNode) = 0;
  299.     /**
  300.      * Sets the end of a Range to be after a node
  301.      * @param refNode Range ends after <code>refNode</code>.
  302.      * @exception DOMRangeException
  303.      *   INVALID_NODE_TYPE_ERR: Raised if the root container of
  304.      *   <code>refNode</code> is not a DOMAttr, DOMDocument or DOMDocumentFragment
  305.      *   node or if <code>refNode</code> is a DOMDocument, DOMDocumentFragment,
  306.      *   DOMAttr, DOMEntity, or DOMNotation node.
  307.      * @exception DOMException
  308.      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
  309.      *   invoked on this object.
  310.      *   <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created
  311.      *   from a different document than the one that created this range.
  312.      *
  313.      * @since DOM Level 2
  314.      */
  315.     virtual void setEndAfter(const DOMNode *refNode) = 0;
  316.     // -----------------------------------------------------------------------
  317.     //  Misc methods
  318.     // -----------------------------------------------------------------------
  319.     /**
  320.      * Collapse a Range onto one of its boundary-points
  321.      * @param toStart If TRUE, collapses the Range onto its start; if FALSE,
  322.      *   collapses it onto its end.
  323.      * @exception DOMException
  324.      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
  325.      *   invoked on this object.
  326.      *
  327.      * @since DOM Level 2
  328.      */
  329.     virtual void collapse(bool toStart) = 0;
  330.     /**
  331.      * Select a node and its contents
  332.      * @param refNode The node to select.
  333.      * @exception DOMRangeException
  334.      *   INVALID_NODE_TYPE_ERR: Raised if an ancestor of <code>refNode</code>
  335.      *   is an DOMEntity, DOMNotation or DOMDocumentType node or if
  336.      *   <code>refNode</code> is a DOMDocument, DOMDocumentFragment, DOMAttr, DOMEntity,
  337.      *   or DOMNotation node.
  338.      * @exception DOMException
  339.      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
  340.      *   invoked on this object.
  341.      *   <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created
  342.      *   from a different document than the one that created this range.
  343.      *
  344.      * @since DOM Level 2
  345.      */
  346.     virtual void selectNode(const DOMNode *refNode) = 0;
  347.     /**
  348.      * Select the contents within a node
  349.      * @param refNode DOMNode to select from
  350.      * @exception DOMRangeException
  351.      *   INVALID_NODE_TYPE_ERR: Raised if <code>refNode</code> or an ancestor
  352.      *   of <code>refNode</code> is an DOMEntity, DOMNotation or DOMDocumentType node.
  353.      * @exception DOMException
  354.      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
  355.      *   invoked on this object.
  356.      *   <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created
  357.      *   from a different document than the one that created this range.
  358.      *
  359.      * @since DOM Level 2
  360.      */
  361.     virtual void selectNodeContents(const DOMNode *refNode) = 0;
  362.     /**
  363.      * Compare the boundary-points of two Ranges in a document.
  364.      * @param how A code representing the type of comparison, as defined
  365.      *   above.
  366.      * @param sourceRange The <code>Range</code> on which this current
  367.      *   <code>Range</code> is compared to.
  368.      * @return  -1, 0 or 1 depending on whether the corresponding
  369.      *   boundary-point of the Range is respectively before, equal to, or
  370.      *   after the corresponding boundary-point of <code>sourceRange</code>.
  371.      * @exception DOMException
  372.      *   WRONG_DOCUMENT_ERR: Raised if the two Ranges are not in the same
  373.      *   DOMDocument or DOMDocumentFragment.
  374.      *   <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already
  375.      *   been invoked on this object.
  376.      *
  377.      * @since DOM Level 2
  378.      */
  379.     virtual short compareBoundaryPoints(CompareHow how, const DOMRange* sourceRange) const = 0;
  380.     /**
  381.      * Removes the contents of a Range from the containing document or
  382.      * document fragment without returning a reference to the removed
  383.      * content.
  384.      * @exception DOMException
  385.      *   NO_MODIFICATION_ALLOWED_ERR: Raised if any portion of the content of
  386.      *   the Range is read-only or any of the nodes that contain any of the
  387.      *   content of the Range are read-only.
  388.      *   <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already
  389.      *   been invoked on this object.
  390.      *
  391.      * @since DOM Level 2
  392.      */
  393.     virtual void deleteContents() = 0;
  394.     /**
  395.      * Moves the contents of a Range from the containing document or document
  396.      * fragment to a new DOMDocumentFragment.
  397.      * @return A DOMDocumentFragment containing the extracted contents.
  398.      * @exception DOMException
  399.      *   NO_MODIFICATION_ALLOWED_ERR: Raised if any portion of the content of
  400.      *   the Range is read-only or any of the nodes which contain any of the
  401.      *   content of the Range are read-only.
  402.      *   <br>HIERARCHY_REQUEST_ERR: Raised if a DOMDocumentType node would be
  403.      *   extracted into the new DOMDocumentFragment.
  404.      *   <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already
  405.      *   been invoked on this object.
  406.      *
  407.      * @since DOM Level 2
  408.      */
  409.     virtual DOMDocumentFragment* extractContents() = 0;
  410.     /**
  411.      * Duplicates the contents of a Range
  412.      * @return A DOMDocumentFragment that contains content equivalent to this
  413.      *   Range.
  414.      * @exception DOMException
  415.      *   HIERARCHY_REQUEST_ERR: Raised if a DOMDocumentType node would be
  416.      *   extracted into the new DOMDocumentFragment.
  417.      *   <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already
  418.      *   been invoked on this object.
  419.      *
  420.      * @since DOM Level 2
  421.      */
  422.     virtual DOMDocumentFragment* cloneContents() const = 0;
  423.     /**
  424.      * Inserts a node into the DOMDocument or DOMDocumentFragment at the start of
  425.      * the Range. If the container is a DOMText node, this will be split at the
  426.      * start of the Range (as if the DOMText node's splitText method was
  427.      * performed at the insertion point) and the insertion will occur
  428.      * between the two resulting DOMText nodes. Adjacent DOMText nodes will not be
  429.      * automatically merged. If the node to be inserted is a
  430.      * DOMDocumentFragment node, the children will be inserted rather than the
  431.      * DOMDocumentFragment node itself.
  432.      * @param newNode The node to insert at the start of the Range
  433.      * @exception DOMException
  434.      *   NO_MODIFICATION_ALLOWED_ERR: Raised if an ancestor container of the
  435.      *   start of the Range is read-only.
  436.      *   <br>WRONG_DOCUMENT_ERR: Raised if <code>newNode</code> and the
  437.      *   container of the start of the Range were not created from the same
  438.      *   document.
  439.      *   <br>HIERARCHY_REQUEST_ERR: Raised if the container of the start of
  440.      *   the Range is of a type that does not allow children of the type of
  441.      *   <code>newNode</code> or if <code>newNode</code> is an ancestor of
  442.      *   the container.
  443.      *   <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already
  444.      *   been invoked on this object.
  445.      * @exception DOMRangeException
  446.      *   INVALID_NODE_TYPE_ERR: Raised if <code>newNode</code> is an DOMAttr,
  447.      *   DOMEntity, DOMNotation, or DOMDocument node.
  448.      *
  449.      * @since DOM Level 2
  450.      */
  451.     virtual void insertNode(DOMNode *newNode) = 0;
  452.     /**
  453.      * Reparents the contents of the Range to the given node and inserts the
  454.      * node at the position of the start of the Range.
  455.      * @param newParent The node to surround the contents with.
  456.      * @exception DOMException
  457.      *   NO_MODIFICATION_ALLOWED_ERR: Raised if an ancestor container of
  458.      *   either boundary-point of the Range is read-only.
  459.      *   <br>WRONG_DOCUMENT_ERR: Raised if <code> newParent</code> and the
  460.      *   container of the start of the Range were not created from the same
  461.      *   document.
  462.      *   <br>HIERARCHY_REQUEST_ERR: Raised if the container of the start of
  463.      *   the Range is of a type that does not allow children of the type of
  464.      *   <code>newParent</code> or if <code>newParent</code> is an ancestor
  465.      *   of the container or if <code>node</code> would end up with a child
  466.      *   node of a type not allowed by the type of <code>node</code>.
  467.      *   <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already
  468.      *   been invoked on this object.
  469.      * @exception DOMRangeException
  470.      *   BAD_BOUNDARYPOINTS_ERR: Raised if the Range partially selects a
  471.      *   non-text node.
  472.      *   <br>INVALID_NODE_TYPE_ERR: Raised if <code> node</code> is an DOMAttr,
  473.      *   DOMEntity, DOMDocumentType, DOMNotation, DOMDocument, or DOMDocumentFragment node.
  474.      *
  475.      * @since DOM Level 2
  476.      */
  477.     virtual void surroundContents(DOMNode *newParent) = 0;
  478.     /**
  479.      * Produces a new Range whose boundary-points are equal to the
  480.      * boundary-points of the Range.
  481.      * @return The duplicated Range.
  482.      * @exception DOMException
  483.      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
  484.      *   invoked on this object.
  485.      *
  486.      * @since DOM Level 2
  487.      */
  488.     virtual DOMRange* cloneRange() const = 0;
  489.     /**
  490.      * Returns the contents of a Range as a string. This string contains only
  491.      * the data characters, not any markup.
  492.      * @return The contents of the Range.
  493.      * @exception DOMException
  494.      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
  495.      *   invoked on this object.
  496.      *
  497.      * @since DOM Level 2
  498.      */
  499.     virtual const XMLCh* toString() const = 0;
  500.     /**
  501.      * Called to indicate that the Range is no longer in use and that the
  502.      * implementation may relinquish any resources associated with this
  503.      * Range. Subsequent calls to any methods or attribute getters on this
  504.      * Range will result in a <code>DOMException</code> being thrown with an
  505.      * error code of <code>INVALID_STATE_ERR</code>.
  506.      * @exception DOMException
  507.      *   INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
  508.      *   invoked on this object.
  509.      *
  510.      * @since DOM Level 2
  511.      */
  512.     virtual void detach() = 0;
  513.     //@}
  514.     // -----------------------------------------------------------------------
  515.     //  Non-standard Extension
  516.     // -----------------------------------------------------------------------
  517.     /** @name Non-standard Extension */
  518.     //@{
  519.     /**
  520.      * Called to indicate that this Range is no longer in use
  521.      * and that the implementation may relinquish any resources associated with it.
  522.      * (release() will call detach() where appropriate)
  523.      *
  524.      * Access to a released object will lead to unexpected result.
  525.      */
  526.     virtual void release() = 0;
  527.     //@}
  528. };
  529. XERCES_CPP_NAMESPACE_END
  530. #endif