void SVGTextContentElement::selectSubString(unsigned charnum, unsigned nchars, ExceptionCode& ec) { unsigned numberOfChars = getNumberOfChars(); if (charnum >= numberOfChars) { ec = INDEX_SIZE_ERR; return; } if (nchars > numberOfChars - charnum) nchars = numberOfChars - charnum; ASSERT(document()); ASSERT(document()->frame()); FrameSelection* selection = document()->frame()->selection(); if (!selection) return; // Find selection start VisiblePosition start(firstPositionInNode(const_cast<SVGTextContentElement*>(this))); for (unsigned i = 0; i < charnum; ++i) start = start.next(); // Find selection end VisiblePosition end(start); for (unsigned i = 0; i < nchars; ++i) end = end.next(); selection->setSelection(VisibleSelection(start, end)); }
void SVGTextContentElement::selectSubString(unsigned charnum, unsigned nchars, ExceptionState& es) { unsigned numberOfChars = getNumberOfChars(); if (charnum >= numberOfChars) { es.throwUninformativeAndGenericDOMException(IndexSizeError); return; } if (nchars > numberOfChars - charnum) nchars = numberOfChars - charnum; ASSERT(document().frame()); // Find selection start VisiblePosition start(firstPositionInNode(const_cast<SVGTextContentElement*>(this))); for (unsigned i = 0; i < charnum; ++i) start = start.next(); // Find selection end VisiblePosition end(start); for (unsigned i = 0; i < nchars; ++i) end = end.next(); document().frame()->selection().setSelection(VisibleSelection(start, end)); }
void SVGTextContentElement::selectSubString(unsigned charnum, unsigned nchars, ExceptionCode& ec) const { unsigned numberOfChars = getNumberOfChars(); if (charnum >= numberOfChars) { ec = INDEX_SIZE_ERR; return; } if (nchars > numberOfChars - charnum) nchars = numberOfChars - charnum; ASSERT(document()); ASSERT(document()->frame()); SelectionController* controller = document()->frame()->selection(); if (!controller) return; // Find selection start VisiblePosition start(const_cast<SVGTextContentElement*>(this), 0, SEL_DEFAULT_AFFINITY); for (unsigned i = 0; i < charnum; ++i) start = start.next(); // Find selection end VisiblePosition end(start); for (unsigned i = 0; i < nchars; ++i) end = end.next(); controller->setSelection(VisibleSelection(start, end)); }
float SVGTextContentElement::getRotationOfChar(unsigned charnum, ExceptionCode& ec) { document()->updateLayoutIgnorePendingStylesheets(); if (charnum > getNumberOfChars()) { ec = INDEX_SIZE_ERR; return 0.0f; } return SVGTextQuery(renderer()).rotationOfCharacter(charnum); }
float SVGTextContentElement::getRotationOfChar(long charnum, ExceptionCode& ec) const { document()->updateLayoutIgnorePendingStylesheets(); if (charnum < 0 || charnum > getNumberOfChars()) { ec = INDEX_SIZE_ERR; return 0.0f; } return executeTextQuery(this, SVGInlineTextBoxQueryWalker::Rotation, charnum).floatResult(); }
SVGPoint SVGTextContentElement::getStartPositionOfChar(unsigned charnum, ExceptionCode& ec) { document().updateLayoutIgnorePendingStylesheets(); if (charnum > getNumberOfChars()) { ec = INDEX_SIZE_ERR; return SVGPoint(); } return SVGTextQuery(renderer()).startPositionOfCharacter(charnum); }
FloatRect SVGTextContentElement::getExtentOfChar(unsigned charnum, ExceptionCode& ec) const { document()->updateLayoutIgnorePendingStylesheets(); if (charnum > getNumberOfChars()) { ec = INDEX_SIZE_ERR; return FloatRect(); } return executeTextQuery(this, SVGInlineTextBoxQueryWalker::Extent, charnum).rectResult(); }
float SVGTextContentElement::getRotationOfChar(unsigned charnum, ExceptionState& es) { document().updateLayoutIgnorePendingStylesheets(); if (charnum > getNumberOfChars()) { es.throwUninformativeAndGenericDOMException(IndexSizeError); return 0.0f; } return SVGTextQuery(renderer()).rotationOfCharacter(charnum); }
SVGRect SVGTextContentElement::getExtentOfChar(unsigned charnum, ExceptionState& es) { document().updateLayoutIgnorePendingStylesheets(); if (charnum > getNumberOfChars()) { es.throwDOMException(IndexSizeError); return SVGRect(); } return SVGTextQuery(renderer()).extentOfCharacter(charnum); }
float SVGTextContentElement::getSubStringLength(unsigned charnum, unsigned nchars, ExceptionCode& ec) { document()->updateLayoutIgnorePendingStylesheets(); unsigned numberOfChars = getNumberOfChars(); if (charnum >= numberOfChars) { ec = INDEX_SIZE_ERR; return 0.0f; } return SVGTextQuery(renderer()).subStringLength(charnum, nchars); }
float SVGTextContentElement::getSubStringLength(unsigned charnum, unsigned nchars, ExceptionCode& ec) const { document()->updateLayoutIgnorePendingStylesheets(); unsigned numberOfChars = getNumberOfChars(); if (charnum >= numberOfChars) { ec = INDEX_SIZE_ERR; return 0.0f; } return executeTextQuery(this, SVGInlineTextBoxQueryWalker::SubStringLength, charnum, nchars).floatResult(); }
float SVGTextContentElement::getSubStringLength(unsigned charnum, unsigned nchars, ExceptionState& es) { document().updateLayoutIgnorePendingStylesheets(); unsigned numberOfChars = getNumberOfChars(); if (charnum >= numberOfChars) { es.throwUninformativeAndGenericDOMException(IndexSizeError); return 0.0f; } if (nchars > numberOfChars - charnum) nchars = numberOfChars - charnum; return SVGTextQuery(renderer()).subStringLength(charnum, nchars); }
float SVGTextContentElement::getSubStringLength(long charnum, long nchars, ExceptionCode& ec) const { document()->updateLayoutIgnorePendingStylesheets(); // Differences to SVG 1.1 spec, as the spec is clearly wrong. TODO: Raise SVG WG issue! // #1: We accept a 'long nchars' parameter instead of 'unsigned long nchars' to be able // to catch cases where someone called us with a negative 'nchars' value - in those // cases we'll just throw a 'INDEX_SIZE_ERR' (acid3 implicitly agrees with us) // // #2: We only throw if 'charnum + nchars' is greater than the number of characters, not // if it's equal, as this really doesn't make any sense (no way to measure the last character!) // // #3: If 'charnum' is greater than or equal to 'numberOfChars', we're throwing an exception here // as the result is undefined for every other value of 'nchars' than '0'. long numberOfChars = getNumberOfChars(); if (charnum < 0 || nchars < 0 || numberOfChars <= charnum || charnum + nchars > numberOfChars) { ec = INDEX_SIZE_ERR; return 0.0f; } return executeTextQuery(this, SVGInlineTextBoxQueryWalker::SubStringLength, charnum, nchars).floatResult(); }