Index: Source/core/editing/TextIterator.cpp |
diff --git a/Source/core/editing/TextIterator.cpp b/Source/core/editing/TextIterator.cpp |
index 6dbacf33703c2168d0f513fa614a98d9c101d2b3..f806c98df89e1187bd7e88b26f7ffa9211a591ee 100644 |
--- a/Source/core/editing/TextIterator.cpp |
+++ b/Source/core/editing/TextIterator.cpp |
@@ -1849,9 +1849,9 @@ void BackwardsCharacterIterator::advance(int count) |
// -------- |
-WordAwareIterator::WordAwareIterator(const Range* range) |
+WordAwareIterator::WordAwareIterator(const Position& start, const Position& end) |
: m_didLookAhead(true) // So we consider the first chunk from the text iterator. |
- , m_textIterator(range) |
+ , m_textIterator(start, end) |
{ |
advance(); // Get in position over the first chunk of text. |
} |
@@ -2242,6 +2242,18 @@ int TextIterator::rangeLength(const Range* r, bool forSelectionPreservation) |
return length; |
} |
+int TextIterator::rangeLength(const Position& start, const Position& end, bool forSelectionPreservation) |
+{ |
+ int length = 0; |
+ TextIteratorBehaviorFlags behaviorFlags = TextIteratorEmitsObjectReplacementCharacter; |
+ if (forSelectionPreservation) |
+ behaviorFlags |= TextIteratorEmitsCharactersBetweenAllVisiblePositions; |
+ for (TextIterator it(start, end, behaviorFlags); !it.atEnd(); it.advance()) |
+ length += it.length(); |
+ |
+ return length; |
+} |
+ |
PassRefPtrWillBeRawPtr<Range> TextIterator::subrange(Range* entireRange, int characterOffset, int characterCount) |
{ |
CharacterIterator entireRangeIterator(entireRange); |
@@ -2251,9 +2263,15 @@ PassRefPtrWillBeRawPtr<Range> TextIterator::subrange(Range* entireRange, int cha |
return Range::create(entireRange->ownerDocument(), start, end); |
} |
+void TextIterator::subrange(Position& start, Position& end, int characterOffset, int characterCount) |
+{ |
+ CharacterIterator entireRangeIterator(start, end); |
+ calculateCharacterSubrange(entireRangeIterator, characterOffset, characterCount, start, end); |
+} |
+ |
// -------- |
-String plainText(const Range* r, TextIteratorBehaviorFlags behavior) |
+static String createPlainText(TextIterator& it) |
{ |
// The initial buffer size can be critical for performance: https://bugs.webkit.org/show_bug.cgi?id=81192 |
static const unsigned initialCapacity = 1 << 15; |
@@ -2262,7 +2280,7 @@ String plainText(const Range* r, TextIteratorBehaviorFlags behavior) |
StringBuilder builder; |
builder.reserveCapacity(initialCapacity); |
- for (TextIterator it(r, behavior); !it.atEnd(); it.advance()) { |
+ for (; !it.atEnd(); it.advance()) { |
it.appendTextToStringBuilder(builder); |
bufferLength += it.length(); |
} |
@@ -2273,6 +2291,18 @@ String plainText(const Range* r, TextIteratorBehaviorFlags behavior) |
return builder.toString(); |
} |
+String plainText(const Range* r, TextIteratorBehaviorFlags behavior) |
+{ |
+ TextIterator it(r, behavior); |
+ return createPlainText(it); |
+} |
+ |
+String plainText(const Position& start, const Position& end, TextIteratorBehaviorFlags behavior) |
+{ |
+ TextIterator it(start, end, behavior); |
+ return createPlainText(it); |
+} |
+ |
static PassRefPtrWillBeRawPtr<Range> collapsedToBoundary(const Range* range, bool forward) |
{ |
RefPtrWillBeRawPtr<Range> result = range->cloneRange(); |