26 #include "dom/dom_exception.h"
27 #include "xml/dom_docimpl.h"
28 #include "xml/dom2_rangeimpl.h"
38 Range::Range(
const Document rootContainer)
40 if(rootContainer.handle())
42 impl =
new RangeImpl(rootContainer.handle()->docPtr());
49 Range::Range(
const Range &other)
52 if (impl) impl->ref();
55 Range::Range(
const Node startContainer,
const long startOffset,
const Node endContainer,
const long endOffset)
61 if (!startContainer.handle()->getDocument() ||
62 startContainer.handle()->getDocument() != endContainer.handle()->getDocument()) {
66 impl =
new RangeImpl(startContainer.handle()->docPtr(),startContainer.handle(),startOffset,endContainer.handle(),endOffset);
70 Range::Range(RangeImpl *i)
73 if (impl) impl->ref();
76 Range &Range::operator = (
const Range &other)
78 if ( impl != other.impl ) {
79 if (impl) impl->deref();
81 if (impl) impl->ref();
88 if (impl) impl->deref();
91 Node Range::startContainer()
const
96 int exceptioncode = 0;
97 NodeImpl *r = impl->startContainer(exceptioncode);
98 throwException(exceptioncode);
102 long Range::startOffset()
const
107 int exceptioncode = 0;
108 long r = impl->startOffset(exceptioncode);
109 throwException(exceptioncode);
114 Node Range::endContainer()
const
119 int exceptioncode = 0;
120 NodeImpl *r = impl->endContainer(exceptioncode);
121 throwException(exceptioncode);
125 long Range::endOffset()
const
130 int exceptioncode = 0;
131 long r = impl->endOffset(exceptioncode);
132 throwException(exceptioncode);
136 bool Range::collapsed()
const
141 int exceptioncode = 0;
142 bool r = impl->collapsed(exceptioncode);
143 throwException(exceptioncode);
147 Node Range::commonAncestorContainer()
152 int exceptioncode = 0;
153 NodeImpl *r = impl->commonAncestorContainer(exceptioncode);
154 throwException(exceptioncode);
158 void Range::setStart(
const Node &refNode,
long offset )
163 int exceptioncode = 0;
164 impl->setStart(refNode.handle(),offset,exceptioncode);
165 throwException(exceptioncode);
168 void Range::setEnd(
const Node &refNode,
long offset )
173 int exceptioncode = 0;
174 impl->setEnd(refNode.handle(),offset,exceptioncode);
175 throwException(exceptioncode);
178 void Range::setStartBefore(
const Node &refNode )
184 int exceptioncode = 0;
185 impl->setStartBefore(refNode.handle(),exceptioncode);
186 throwException(exceptioncode);
189 void Range::setStartAfter(
const Node &refNode )
194 int exceptioncode = 0;
195 impl->setStartAfter(refNode.handle(),exceptioncode);
196 throwException(exceptioncode);
199 void Range::setEndBefore(
const Node &refNode )
204 int exceptioncode = 0;
205 impl->setEndBefore(refNode.handle(),exceptioncode);
206 throwException(exceptioncode);
209 void Range::setEndAfter(
const Node &refNode )
214 int exceptioncode = 0;
215 impl->setEndAfter(refNode.handle(),exceptioncode);
216 throwException(exceptioncode);
219 void Range::collapse(
bool toStart )
224 int exceptioncode = 0;
225 impl->collapse(toStart,exceptioncode);
226 throwException(exceptioncode);
229 void Range::selectNode(
const Node &refNode )
234 int exceptioncode = 0;
235 impl->selectNode(refNode.handle(),exceptioncode);
236 throwException(exceptioncode);
239 void Range::selectNodeContents(
const Node &refNode )
244 int exceptioncode = 0;
245 impl->selectNodeContents(refNode.handle(),exceptioncode);
246 throwException(exceptioncode);
249 short Range::compareBoundaryPoints( CompareHow how,
const Range &sourceRange )
254 int exceptioncode = 0;
255 short r = impl->compareBoundaryPoints(how,sourceRange.handle(),exceptioncode);
256 throwException(exceptioncode);
260 bool Range::boundaryPointsValid( )
265 return impl->boundaryPointsValid();
268 void Range::deleteContents( )
273 int exceptioncode = 0;
274 impl->deleteContents(exceptioncode);
275 throwException(exceptioncode);
283 int exceptioncode = 0;
284 DocumentFragmentImpl *r = impl->extractContents(exceptioncode);
285 throwException(exceptioncode);
294 int exceptioncode = 0;
295 DocumentFragmentImpl *r = impl->cloneContents(exceptioncode);
296 throwException(exceptioncode);
300 void Range::insertNode(
const Node &newNode )
305 int exceptioncode = 0;
306 impl->insertNode(newNode.handle(),exceptioncode);
307 throwException(exceptioncode);
310 void Range::surroundContents(
const Node &newParent )
315 int exceptioncode = 0;
316 impl->surroundContents(newParent.handle(),exceptioncode);
317 throwException(exceptioncode);
320 Range Range::cloneRange( )
325 int exceptioncode = 0;
326 RangeImpl *r = impl->cloneRange(exceptioncode);
327 throwException(exceptioncode);
336 int exceptioncode = 0;
337 DOMString r = impl->toString(exceptioncode);
338 throwException(exceptioncode);
347 int exceptioncode = 0;
348 DOMString r = impl->toHTML(exceptioncode);
349 throwException(exceptioncode);
358 int exceptioncode = 0;
360 throwException(exceptioncode);
365 void Range::detach( )
370 int exceptioncode = 0;
371 impl->detach(exceptioncode);
372 throwException(exceptioncode);
375 bool Range::isDetached()
const
380 return impl->isDetached();
383 RangeImpl *Range::handle()
const
388 bool Range::isNull()
const
393 void Range::throwException(
int exceptioncode)
const
399 if (exceptioncode >= RangeException::_EXCEPTION_OFFSET && exceptioncode <= RangeException::_EXCEPTION_MAX)
400 throw RangeException(
static_cast<RangeException::RangeExceptionCode
>(exceptioncode-RangeException::_EXCEPTION_OFFSET));