| Index: Source/core/editing/TextIterator.cpp
|
| diff --git a/Source/core/editing/TextIterator.cpp b/Source/core/editing/TextIterator.cpp
|
| index 974ae2b6fbea5a358ace88d83c4dd688c4ba22fb..94284580d37393761eb4c2fd71437e3ace178f0b 100644
|
| --- a/Source/core/editing/TextIterator.cpp
|
| +++ b/Source/core/editing/TextIterator.cpp
|
| @@ -163,7 +163,7 @@ unsigned BitStack::size() const
|
| static unsigned depthCrossingShadowBoundaries(Node* node)
|
| {
|
| unsigned depth = 0;
|
| - for (Node* parent = node->parentOrShadowHostNode(); parent; parent = parent->parentOrShadowHostNode())
|
| + for (ContainerNode* parent = node->parentOrShadowHostNode(); parent; parent = parent->parentOrShadowHostNode())
|
| ++depth;
|
| return depth;
|
| }
|
| @@ -225,8 +225,8 @@ static void pushFullyClippedState(BitStack& stack, Node* node)
|
| static void setUpFullyClippedStack(BitStack& stack, Node* node)
|
| {
|
| // Put the nodes in a vector so we can iterate in reverse order.
|
| - WillBeHeapVector<RawPtrWillBeMember<Node>, 100> ancestry;
|
| - for (Node* parent = node->parentOrShadowHostNode(); parent; parent = parent->parentOrShadowHostNode())
|
| + WillBeHeapVector<RawPtrWillBeMember<ContainerNode>, 100> ancestry;
|
| + for (ContainerNode* parent = node->parentOrShadowHostNode(); parent; parent = parent->parentOrShadowHostNode())
|
| ancestry.append(parent);
|
|
|
| // Call pushFullyClippedState on each node starting with the earliest ancestor.
|
| @@ -464,11 +464,11 @@ void TextIterator::advance()
|
| if (renderer->isText() && m_node->nodeType() == Node::TEXT_NODE) { // FIXME: What about CDATA_SECTION_NODE?
|
| handledNode = handleTextNode();
|
| } else if (renderer && (renderer->isImage() || renderer->isWidget()
|
| - || (m_node && m_node->isElementNode()
|
| - && (toElement(m_node)->isFormControlElement()
|
| - || isHTMLLegendElement(toElement(*m_node))
|
| - || isHTMLMeterElement(toElement(*m_node))
|
| - || isHTMLProgressElement(toElement(*m_node)))))) {
|
| + || (m_node && m_node->isHTMLElement()
|
| + && (isHTMLFormControlElement(toHTMLElement(*m_node))
|
| + || isHTMLLegendElement(toHTMLElement(*m_node))
|
| + || isHTMLMeterElement(toHTMLElement(*m_node))
|
| + || isHTMLProgressElement(toHTMLElement(*m_node)))))) {
|
| handledNode = handleReplacedElement();
|
| } else {
|
| handledNode = handleNonTextNode();
|
| @@ -492,7 +492,7 @@ void TextIterator::advance()
|
| if (!next) {
|
| // 3. If we are at the last child, go up the node tree until we find a next sibling.
|
| bool pastEnd = NodeTraversal::next(*m_node) == m_pastEndNode;
|
| - Node* parentNode = m_node->parentNode();
|
| + ContainerNode* parentNode = m_node->parentNode();
|
| while (!next && parentNode) {
|
| if ((pastEnd && parentNode == m_endContainer) || m_endContainer->isDescendantOf(parentNode))
|
| return;
|
| @@ -605,23 +605,24 @@ bool TextIterator::handleTextNode()
|
| if (m_fullyClippedStack.top() && !m_ignoresStyleVisibility)
|
| return false;
|
|
|
| - RenderText* renderer = toRenderText(m_node->renderer());
|
| + Text* textNode = toText(m_node);
|
| + RenderText* renderer = textNode->renderer();
|
|
|
| - m_lastTextNode = m_node;
|
| + m_lastTextNode = textNode;
|
| String str = renderer->text();
|
|
|
| // handle pre-formatted text
|
| if (!renderer->style()->collapseWhiteSpace()) {
|
| int runStart = m_offset;
|
| if (m_lastTextNodeEndedWithCollapsedSpace && hasVisibleTextNode(renderer)) {
|
| - emitCharacter(' ', m_node, 0, runStart, runStart);
|
| + emitCharacter(' ', textNode, 0, runStart, runStart);
|
| return false;
|
| }
|
| if (!m_handledFirstLetter && renderer->isTextFragment() && !m_offset) {
|
| handleTextNodeFirstLetter(toRenderTextFragment(renderer));
|
| if (m_firstLetterText) {
|
| String firstLetter = m_firstLetterText->text();
|
| - emitText(m_node, m_firstLetterText, m_offset, m_offset + firstLetter.length());
|
| + emitText(textNode, m_firstLetterText, m_offset, m_offset + firstLetter.length());
|
| m_firstLetterText = 0;
|
| m_textBox = 0;
|
| return false;
|
| @@ -630,13 +631,13 @@ bool TextIterator::handleTextNode()
|
| if (renderer->style()->visibility() != VISIBLE && !m_ignoresStyleVisibility)
|
| return false;
|
| int strLength = str.length();
|
| - int end = (m_node == m_endContainer) ? m_endOffset : INT_MAX;
|
| + int end = (textNode == m_endContainer) ? m_endOffset : INT_MAX;
|
| int runEnd = std::min(strLength, end);
|
|
|
| if (runStart >= runEnd)
|
| return true;
|
|
|
| - emitText(m_node, runStart, runEnd);
|
| + emitText(textNode, textNode->renderer(), runStart, runEnd);
|
| return true;
|
| }
|
|
|
| @@ -1156,9 +1157,8 @@ void TextIterator::emitCharacter(UChar c, Node* textNode, Node* offsetBaseNode,
|
| m_lastCharacter = c;
|
| }
|
|
|
| -void TextIterator::emitText(Node* textNode, RenderObject* renderObject, int textStartOffset, int textEndOffset)
|
| +void TextIterator::emitText(Node* textNode, RenderText* renderer, int textStartOffset, int textEndOffset)
|
| {
|
| - RenderText* renderer = toRenderText(renderObject);
|
| m_text = m_emitsOriginalText ? renderer->originalText() : renderer->text();
|
| ASSERT(!m_text.isEmpty());
|
| ASSERT(0 <= textStartOffset && textStartOffset < static_cast<int>(m_text.length()));
|
| @@ -1177,11 +1177,6 @@ void TextIterator::emitText(Node* textNode, RenderObject* renderObject, int text
|
| m_hasEmitted = true;
|
| }
|
|
|
| -void TextIterator::emitText(Node* textNode, int textStartOffset, int textEndOffset)
|
| -{
|
| - emitText(textNode, m_node->renderer(), textStartOffset, textEndOffset);
|
| -}
|
| -
|
| PassRefPtrWillBeRawPtr<Range> TextIterator::range() const
|
| {
|
| // use the current run information, if we have it
|
| @@ -1379,7 +1374,7 @@ void SimplifiedBackwardsTextIterator::advance()
|
|
|
| bool SimplifiedBackwardsTextIterator::handleTextNode()
|
| {
|
| - m_lastTextNode = m_node;
|
| + m_lastTextNode = toText(m_node);
|
|
|
| int startOffset;
|
| int offsetInNode;
|
|
|