2 * Copyright (c) 2000 World Wide Web Consortium,
3 * (Massachusetts Institute of Technology, Institut National de
4 * Recherche en Informatique et en Automatique, Keio University). All
5 * Rights Reserved. This program is distributed under the W3C's Software
6 * Intellectual Property License. This program is distributed in the
7 * hope that it will be useful, but WITHOUT ANY WARRANTY; without even
8 * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
10 * See W3C License http://www.w3.org/Consortium/Legal/ for more details.
13 package org.w3c.dom.ranges;
15 import org.w3c.dom.Node;
16 import org.w3c.dom.DOMException;
17 import org.w3c.dom.DocumentFragment;
20 * <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>.
23 public interface Range {
25 * Node within which the Range begins
26 * @exception DOMException
27 * INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
28 * invoked on this object.
30 public Node getStartContainer()
34 * Offset within the starting node of the Range.
35 * @exception DOMException
36 * INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
37 * invoked on this object.
39 public int getStartOffset()
43 * Node within which the Range ends
44 * @exception DOMException
45 * INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
46 * invoked on this object.
48 public Node getEndContainer()
52 * Offset within the ending node of the Range.
53 * @exception DOMException
54 * INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
55 * invoked on this object.
57 public int getEndOffset()
61 * TRUE if the Range is collapsed
62 * @exception DOMException
63 * INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
64 * invoked on this object.
66 public boolean getCollapsed()
70 * The deepest common ancestor container of the Range's two
72 * @exception DOMException
73 * INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
74 * invoked on this object.
76 public Node getCommonAncestorContainer()
80 * Sets the attributes describing the start of the Range.
81 * @param refNode The <code>refNode</code> value. This parameter must be
82 * different from <code>null</code>.
83 * @param offset The <code>startOffset</code> value.
84 * @exception RangeException
85 * INVALID_NODE_TYPE_ERR: Raised if <code>refNode</code> or an ancestor
86 * of <code>refNode</code> is an Entity, Notation, or DocumentType
88 * @exception DOMException
89 * INDEX_SIZE_ERR: Raised if <code>offset</code> is negative or greater
90 * than the number of child units in <code>refNode</code>. Child units
91 * are 16-bit units if <code>refNode</code> is a type of CharacterData
92 * node (e.g., a Text or Comment node) or a ProcessingInstruction
93 * node. Child units are Nodes in all other cases.
94 * <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already
95 * been invoked on this object.
96 * <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created
97 * from a different document than the one that created this range.
99 public void setStart(Node refNode,
101 throws RangeException, DOMException;
104 * Sets the attributes describing the end of a Range.
105 * @param refNode The <code>refNode</code> value. This parameter must be
106 * different from <code>null</code>.
107 * @param offset The <code>endOffset</code> value.
108 * @exception RangeException
109 * INVALID_NODE_TYPE_ERR: Raised if <code>refNode</code> or an ancestor
110 * of <code>refNode</code> is an Entity, Notation, or DocumentType
112 * @exception DOMException
113 * INDEX_SIZE_ERR: Raised if <code>offset</code> is negative or greater
114 * than the number of child units in <code>refNode</code>. Child units
115 * are 16-bit units if <code>refNode</code> is a type of CharacterData
116 * node (e.g., a Text or Comment node) or a ProcessingInstruction
117 * node. Child units are Nodes in all other cases.
118 * <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already
119 * been invoked on this object.
120 * <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created
121 * from a different document than the one that created this range.
123 public void setEnd(Node refNode,
125 throws RangeException, DOMException;
128 * Sets the start position to be before a node
129 * @param refNode Range starts before <code>refNode</code>
130 * @exception RangeException
131 * INVALID_NODE_TYPE_ERR: Raised if the root container of
132 * <code>refNode</code> is not an Attr, Document, or DocumentFragment
133 * node or if <code>refNode</code> is a Document, DocumentFragment,
134 * Attr, Entity, or Notation node.
135 * @exception DOMException
136 * INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
137 * invoked on this object.
138 * <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created
139 * from a different document than the one that created this range.
141 public void setStartBefore(Node refNode)
142 throws RangeException, DOMException;
145 * Sets the start position to be after a node
146 * @param refNode Range starts after <code>refNode</code>
147 * @exception RangeException
148 * INVALID_NODE_TYPE_ERR: Raised if the root container of
149 * <code>refNode</code> is not an Attr, Document, or DocumentFragment
150 * node or if <code>refNode</code> is a Document, DocumentFragment,
151 * Attr, Entity, or Notation node.
152 * @exception DOMException
153 * INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
154 * invoked on this object.
155 * <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created
156 * from a different document than the one that created this range.
158 public void setStartAfter(Node refNode)
159 throws RangeException, DOMException;
162 * Sets the end position to be before a node.
163 * @param refNode Range ends before <code>refNode</code>
164 * @exception RangeException
165 * INVALID_NODE_TYPE_ERR: Raised if the root container of
166 * <code>refNode</code> is not an Attr, Document, or DocumentFragment
167 * node or if <code>refNode</code> is a Document, DocumentFragment,
168 * Attr, Entity, or Notation node.
169 * @exception DOMException
170 * INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
171 * invoked on this object.
172 * <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created
173 * from a different document than the one that created this range.
175 public void setEndBefore(Node refNode)
176 throws RangeException, DOMException;
179 * Sets the end of a Range to be after a node
180 * @param refNode Range ends after <code>refNode</code>.
181 * @exception RangeException
182 * INVALID_NODE_TYPE_ERR: Raised if the root container of
183 * <code>refNode</code> is not an Attr, Document or DocumentFragment
184 * node or if <code>refNode</code> is a Document, DocumentFragment,
185 * Attr, Entity, or Notation node.
186 * @exception DOMException
187 * INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
188 * invoked on this object.
189 * <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created
190 * from a different document than the one that created this range.
192 public void setEndAfter(Node refNode)
193 throws RangeException, DOMException;
196 * Collapse a Range onto one of its boundary-points
197 * @param toStart If TRUE, collapses the Range onto its start; if FALSE,
198 * collapses it onto its end.
199 * @exception DOMException
200 * INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
201 * invoked on this object.
203 public void collapse(boolean toStart)
207 * Select a node and its contents
208 * @param refNode The node to select.
209 * @exception RangeException
210 * INVALID_NODE_TYPE_ERR: Raised if an ancestor of <code>refNode</code>
211 * is an Entity, Notation or DocumentType node or if
212 * <code>refNode</code> is a Document, DocumentFragment, Attr, Entity,
214 * @exception DOMException
215 * INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
216 * invoked on this object.
217 * <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created
218 * from a different document than the one that created this range.
220 public void selectNode(Node refNode)
221 throws RangeException, DOMException;
224 * Select the contents within a node
225 * @param refNode Node to select from
226 * @exception RangeException
227 * INVALID_NODE_TYPE_ERR: Raised if <code>refNode</code> or an ancestor
228 * of <code>refNode</code> is an Entity, Notation or DocumentType node.
229 * @exception DOMException
230 * INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
231 * invoked on this object.
232 * <br>WRONG_DOCUMENT_ERR: Raised if <code>refNode</code> was created
233 * from a different document than the one that created this range.
235 public void selectNodeContents(Node refNode)
236 throws RangeException, DOMException;
240 * Compare start boundary-point of <code>sourceRange</code> to start
241 * boundary-point of Range on which <code>compareBoundaryPoints</code>
244 public static final short START_TO_START = 0;
246 * Compare start boundary-point of <code>sourceRange</code> to end
247 * boundary-point of Range on which <code>compareBoundaryPoints</code>
250 public static final short START_TO_END = 1;
252 * Compare end boundary-point of <code>sourceRange</code> to end
253 * boundary-point of Range on which <code>compareBoundaryPoints</code>
256 public static final short END_TO_END = 2;
258 * Compare end boundary-point of <code>sourceRange</code> to start
259 * boundary-point of Range on which <code>compareBoundaryPoints</code>
262 public static final short END_TO_START = 3;
265 * Compare the boundary-points of two Ranges in a document.
266 * @param how A code representing the type of comparison, as defined
268 * @param sourceRange The <code>Range</code> on which this current
269 * <code>Range</code> is compared to.
270 * @return -1, 0 or 1 depending on whether the corresponding
271 * boundary-point of the Range is respectively before, equal to, or
272 * after the corresponding boundary-point of <code>sourceRange</code>.
273 * @exception DOMException
274 * WRONG_DOCUMENT_ERR: Raised if the two Ranges are not in the same
275 * Document or DocumentFragment.
276 * <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already
277 * been invoked on this object.
279 public short compareBoundaryPoints(short how,
284 * Removes the contents of a Range from the containing document or
285 * document fragment without returning a reference to the removed
287 * @exception DOMException
288 * NO_MODIFICATION_ALLOWED_ERR: Raised if any portion of the content of
289 * the Range is read-only or any of the nodes that contain any of the
290 * content of the Range are read-only.
291 * <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already
292 * been invoked on this object.
294 public void deleteContents()
298 * Moves the contents of a Range from the containing document or document
299 * fragment to a new DocumentFragment.
300 * @return A DocumentFragment containing the extracted contents.
301 * @exception DOMException
302 * NO_MODIFICATION_ALLOWED_ERR: Raised if any portion of the content of
303 * the Range is read-only or any of the nodes which contain any of the
304 * content of the Range are read-only.
305 * <br>HIERARCHY_REQUEST_ERR: Raised if a DocumentType node would be
306 * extracted into the new DocumentFragment.
307 * <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already
308 * been invoked on this object.
310 public DocumentFragment extractContents()
314 * Duplicates the contents of a Range
315 * @return A DocumentFragment that contains content equivalent to this
317 * @exception DOMException
318 * HIERARCHY_REQUEST_ERR: Raised if a DocumentType node would be
319 * extracted into the new DocumentFragment.
320 * <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already
321 * been invoked on this object.
323 public DocumentFragment cloneContents()
327 * Inserts a node into the Document or DocumentFragment at the start of
328 * the Range. If the container is a Text node, this will be split at the
329 * start of the Range (as if the Text node's splitText method was
330 * performed at the insertion point) and the insertion will occur
331 * between the two resulting Text nodes. Adjacent Text nodes will not be
332 * automatically merged. If the node to be inserted is a
333 * DocumentFragment node, the children will be inserted rather than the
334 * DocumentFragment node itself.
335 * @param newNode The node to insert at the start of the Range
336 * @exception DOMException
337 * NO_MODIFICATION_ALLOWED_ERR: Raised if an ancestor container of the
338 * start of the Range is read-only.
339 * <br>WRONG_DOCUMENT_ERR: Raised if <code>newNode</code> and the
340 * container of the start of the Range were not created from the same
342 * <br>HIERARCHY_REQUEST_ERR: Raised if the container of the start of
343 * the Range is of a type that does not allow children of the type of
344 * <code>newNode</code> or if <code>newNode</code> is an ancestor of
346 * <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already
347 * been invoked on this object.
348 * @exception RangeException
349 * INVALID_NODE_TYPE_ERR: Raised if <code>newNode</code> is an Attr,
350 * Entity, Notation, or Document node.
352 public void insertNode(Node newNode)
353 throws DOMException, RangeException;
356 * Reparents the contents of the Range to the given node and inserts the
357 * node at the position of the start of the Range.
358 * @param newParent The node to surround the contents with.
359 * @exception DOMException
360 * NO_MODIFICATION_ALLOWED_ERR: Raised if an ancestor container of
361 * either boundary-point of the Range is read-only.
362 * <br>WRONG_DOCUMENT_ERR: Raised if <code> newParent</code> and the
363 * container of the start of the Range were not created from the same
365 * <br>HIERARCHY_REQUEST_ERR: Raised if the container of the start of
366 * the Range is of a type that does not allow children of the type of
367 * <code>newParent</code> or if <code>newParent</code> is an ancestor
368 * of the container or if <code>node</code> would end up with a child
369 * node of a type not allowed by the type of <code>node</code>.
370 * <br>INVALID_STATE_ERR: Raised if <code>detach()</code> has already
371 * been invoked on this object.
372 * @exception RangeException
373 * BAD_BOUNDARYPOINTS_ERR: Raised if the Range partially selects a
375 * <br>INVALID_NODE_TYPE_ERR: Raised if <code> node</code> is an Attr,
376 * Entity, DocumentType, Notation, Document, or DocumentFragment node.
378 public void surroundContents(Node newParent)
379 throws DOMException, RangeException;
382 * Produces a new Range whose boundary-points are equal to the
383 * boundary-points of the Range.
384 * @return The duplicated Range.
385 * @exception DOMException
386 * INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
387 * invoked on this object.
389 public Range cloneRange()
393 * Returns the contents of a Range as a string. This string contains only
394 * the data characters, not any markup.
395 * @return The contents of the Range.
396 * @exception DOMException
397 * INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
398 * invoked on this object.
400 public String toString()
404 * Called to indicate that the Range is no longer in use and that the
405 * implementation may relinquish any resources associated with this
406 * Range. Subsequent calls to any methods or attribute getters on this
407 * Range will result in a <code>DOMException</code> being thrown with an
408 * error code of <code>INVALID_STATE_ERR</code>.
409 * @exception DOMException
410 * INVALID_STATE_ERR: Raised if <code>detach()</code> has already been
411 * invoked on this object.