summaryrefslogtreecommitdiffstats
path: root/WebCore/editing/TextIterator.h
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2010-08-13 05:20:16 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-08-13 05:20:16 -0700
commitf4958a7d95cd5fbc1c74905e229b02c95cd5ee78 (patch)
tree14a0f1b07a19948c2ed93d0d8547caa7fe10aa0e /WebCore/editing/TextIterator.h
parentd074a7997da8ce379434eb6e208b97cde8a0841c (diff)
parentf964bc1fd59a545a80a0cc2529ad8830be514871 (diff)
downloadexternal_webkit-f4958a7d95cd5fbc1c74905e229b02c95cd5ee78.zip
external_webkit-f4958a7d95cd5fbc1c74905e229b02c95cd5ee78.tar.gz
external_webkit-f4958a7d95cd5fbc1c74905e229b02c95cd5ee78.tar.bz2
Merge changes I60a96064,I6929172f,Idefd9bec,I8cf448f2,I8791737a,I992c56b0,Ibb4b089d,I779a8ec0,Ife412e30,I2da1ae98,Ibcf41849
* changes: Merge WebKit at r65072 : Update WebKit revision number. Merge WebKit at r65072 : Update test_expectations. Merge WebKit at r65072 : Complete cherry-pick of WebKit change 43848 to add EmptyDeviceMotionClient Merge WebKit at r65072 : Implement DeviceMotionClientAndroid Merge WebKit at r65072: JSC build fix in InspectorController.h Merge WebKit at r65072: Fix V8 code generator. Merge WebKit at r65072 : Build fix for JSC, update ambiguous usage of JSLock. Merge WebKit at r65072: String class has moved to the WTF namespace. Merge Webkit at r65072 : Fix conflicts. Merge Webkit at r65072 : Fix Makefiles. Merge WebKit at r65072 : Initial merge by git.
Diffstat (limited to 'WebCore/editing/TextIterator.h')
-rw-r--r--WebCore/editing/TextIterator.h25
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;