| Index: Source/WebCore/editing/TextIterator.cpp
|
| ===================================================================
|
| --- Source/WebCore/editing/TextIterator.cpp (revision 109384)
|
| +++ Source/WebCore/editing/TextIterator.cpp (working copy)
|
| @@ -487,25 +487,20 @@
|
| return true;
|
| }
|
|
|
| - if (!renderer->firstTextBox() && str.length() > 0) {
|
| - if (!m_handledFirstLetter && renderer->isTextFragment()) {
|
| - handleTextNodeFirstLetter(static_cast<RenderTextFragment*>(renderer));
|
| - if (m_firstLetterText) {
|
| - handleTextBox();
|
| - return false;
|
| - }
|
| - }
|
| + if (renderer->firstTextBox())
|
| + m_textBox = renderer->firstTextBox();
|
| +
|
| + bool shouldHandleFirstLetter = !m_handledFirstLetter && renderer->isTextFragment() && !m_offset;
|
| + if (shouldHandleFirstLetter)
|
| + handleTextNodeFirstLetter(static_cast<RenderTextFragment*>(renderer));
|
| +
|
| + if (!renderer->firstTextBox() && str.length() > 0 && !shouldHandleFirstLetter) {
|
| if (renderer->style()->visibility() != VISIBLE && !m_ignoresStyleVisibility)
|
| return false;
|
| m_lastTextNodeEndedWithCollapsedSpace = true; // entire block is collapsed space
|
| return true;
|
| }
|
|
|
| -
|
| - m_textBox = renderer->firstTextBox();
|
| - if (!m_handledFirstLetter && renderer->isTextFragment() && !m_offset)
|
| - handleTextNodeFirstLetter(static_cast<RenderTextFragment*>(renderer));
|
| -
|
| if (m_firstLetterText)
|
| renderer = m_firstLetterText;
|
|
|
| @@ -562,6 +557,7 @@
|
| nextTextBox = m_sortedTextBoxes[m_sortedTextBoxesPosition + 1];
|
| } else
|
| nextTextBox = m_textBox->nextTextBox();
|
| + ASSERT(!nextTextBox || nextTextBox->renderer() == renderer);
|
|
|
| if (runStart < runEnd) {
|
| // Handle either a single newline character (which becomes a space),
|
| @@ -630,6 +626,7 @@
|
| m_handledFirstLetter = true;
|
| m_remainingTextBox = m_textBox;
|
| m_textBox = firstLetter->firstTextBox();
|
| + m_sortedTextBoxes.clear();
|
| m_firstLetterText = firstLetter;
|
| }
|
| }
|
|
|