Index: third_party/WebKit/Source/core/editing/iterators/SimplifiedBackwardsTextIterator.cpp |
diff --git a/third_party/WebKit/Source/core/editing/iterators/SimplifiedBackwardsTextIterator.cpp b/third_party/WebKit/Source/core/editing/iterators/SimplifiedBackwardsTextIterator.cpp |
index 3d8aeab7673cc8d8e41059adffc7ebadd6fadcd2..7699e3fda12c98fb1f7867b20b14c3b112b30f72 100644 |
--- a/third_party/WebKit/Source/core/editing/iterators/SimplifiedBackwardsTextIterator.cpp |
+++ b/third_party/WebKit/Source/core/editing/iterators/SimplifiedBackwardsTextIterator.cpp |
@@ -410,6 +410,41 @@ bool SimplifiedBackwardsTextIteratorAlgorithm<Strategy>::isBetweenSurrogatePair( |
return position > 0 && position < length() && U16_IS_TRAIL(characterAt(position - 1)) && U16_IS_LEAD(characterAt(position)); |
} |
+template <typename Strategy> |
+int SimplifiedBackwardsTextIteratorAlgorithm<Strategy>::copyTextTo(BackwardsTextBuffer& output, int position, int minLength) const |
+{ |
+ int copiedLength = isBetweenSurrogatePair(position + minLength) ? minLength + 1 : minLength; |
+ copyCodeUnitsTo(output, position, copiedLength); |
+ return copiedLength; |
+} |
+ |
+template <typename Strategy> |
+int SimplifiedBackwardsTextIteratorAlgorithm<Strategy>::copyTextTo(BackwardsTextBuffer& output, int position) const |
+{ |
+ return copyTextTo(output, position, m_textLength - position); |
+} |
+ |
+template <typename Strategy> |
+void SimplifiedBackwardsTextIteratorAlgorithm<Strategy>::copyCodeUnitsTo(BackwardsTextBuffer& output, int position, int copyLength) const |
+{ |
+ ASSERT(position >= 0); |
+ ASSERT(copyLength >= 0); |
+ ASSERT(position + copyLength <= m_textLength); |
+ // Make sure there's no integer overflow. |
+ ASSERT(position + copyLength >= position); |
+ if (m_textLength == 0 || copyLength == 0) |
+ return; |
+ if (m_singleCharacterBuffer) { |
+ output.push(m_singleCharacterBuffer); |
+ } else { |
+ int offset = m_textOffset + m_textLength - position - copyLength; |
+ if (m_textContainer.is8Bit()) |
+ output.push(m_textContainer.characters8() + offset, copyLength); |
+ else |
+ output.push(m_textContainer.characters16() + offset, copyLength); |
+ } |
+} |
+ |
template class CORE_TEMPLATE_EXPORT SimplifiedBackwardsTextIteratorAlgorithm<EditingStrategy>; |
template class CORE_TEMPLATE_EXPORT SimplifiedBackwardsTextIteratorAlgorithm<EditingInComposedTreeStrategy>; |