diff options
Diffstat (limited to 'WebCore/editing/TextIterator.h')
-rw-r--r-- | WebCore/editing/TextIterator.h | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/WebCore/editing/TextIterator.h b/WebCore/editing/TextIterator.h index ba381b9..805e060 100644 --- a/WebCore/editing/TextIterator.h +++ b/WebCore/editing/TextIterator.h @@ -32,6 +32,9 @@ namespace WebCore { +class RenderText; +class RenderTextFragment; + // FIXME: Can't really answer this question correctly without knowing the white-space mode. // FIXME: Move this somewhere else in the editing directory. It doesn't belong here. inline bool isCollapsibleWhitespace(UChar c) @@ -73,6 +76,7 @@ enum TextIteratorBehavior { TextIteratorEmitsCharactersBetweenAllVisiblePositions = 1 << 0, TextIteratorEntersTextControls = 1 << 1, TextIteratorEmitsTextsWithoutTranscoding = 1 << 2, + TextIteratorEndsAtEditingBoundary = 1 << 3 }; class TextIterator { @@ -102,7 +106,10 @@ private: bool handleReplacedElement(); bool handleNonTextNode(); void handleTextBox(); + void handleTextNodeFirstLetter(RenderTextFragment*); + bool hasVisibleTextNode(RenderText*); void emitCharacter(UChar, Node* textNode, Node* offsetBaseNode, int textStartOffset, int textEndOffset); + void emitText(Node* textNode, RenderObject* renderObject, int textStartOffset, int textEndOffset); void emitText(Node* textNode, int textStartOffset, int textEndOffset); // Current position, not necessarily of the text being returned, but position @@ -134,6 +141,11 @@ private: // are false and 0, we go back to normal iterating. bool m_needsAnotherNewline; InlineTextBox* m_textBox; + // Used when iteration over :first-letter text to save pointer to + // remaining text box. + InlineTextBox* m_remainingTextBox; + // Used to point to RenderText object for :first-letter. + RenderText *m_firstLetterText; // Used to do the whitespace collapsing logic. Node* m_lastTextNode; @@ -159,6 +171,8 @@ private: // Used when we want texts for copying, pasting, and transposing. bool m_emitsTextWithoutTranscoding; + // Used when deciding text fragment created by :first-letter should be looked into. + bool m_handledFirstLetter; }; // Iterates through the DOM range, returning all the text, and 0-length boundaries @@ -167,7 +181,7 @@ private: class SimplifiedBackwardsTextIterator { public: SimplifiedBackwardsTextIterator(); - explicit SimplifiedBackwardsTextIterator(const Range*); + explicit SimplifiedBackwardsTextIterator(const Range*, TextIteratorBehavior = TextIteratorDefaultBehavior); bool atEnd() const { return !m_positionNode; } void advance(); @@ -183,7 +197,11 @@ private: bool handleReplacedElement(); bool handleNonTextNode(); void emitCharacter(UChar, Node*, int startOffset, int endOffset); - + bool crossesEditingBoundary(Node*) const; + bool setCurrentNode(Node*); + void clearCurrentNode(); + + TextIteratorBehavior m_behavior; // Current position, not necessarily of the text being returned, but position // as we walk through the DOM tree. Node* m_node; @@ -247,7 +265,7 @@ private: class BackwardsCharacterIterator { public: BackwardsCharacterIterator(); - explicit BackwardsCharacterIterator(const Range*); + explicit BackwardsCharacterIterator(const Range*, TextIteratorBehavior = TextIteratorDefaultBehavior); void advance(int); @@ -256,6 +274,7 @@ public: PassRefPtr<Range> range() const; private: + TextIteratorBehavior m_behavior; int m_offset; int m_runOffset; bool m_atBreak; |