| Index: Source/platform/text/TextBreakIterator.cpp
|
| diff --git a/Source/platform/text/TextBreakIterator.cpp b/Source/platform/text/TextBreakIterator.cpp
|
| index ec97484b4650a36532906ddba5e4b44967494ada..750fce265531c3b041cb37bf6abf3f16589e99e3 100644
|
| --- a/Source/platform/text/TextBreakIterator.cpp
|
| +++ b/Source/platform/text/TextBreakIterator.cpp
|
| @@ -50,6 +50,26 @@ unsigned numGraphemeClusters(const String& string)
|
| return num;
|
| }
|
|
|
| +ClusterData countCharactersAndGraphemesInCluster(const UChar* normalizedBuffer, unsigned normalizedBufferLength, uint16_t startIndex, uint16_t endIndex)
|
| +{
|
| + if (startIndex > endIndex) {
|
| + uint16_t tempIndex = startIndex;
|
| + startIndex = endIndex;
|
| + endIndex = tempIndex;
|
| + }
|
| + uint16_t length = endIndex - startIndex;
|
| + ASSERT(static_cast<unsigned>(startIndex + length) <= normalizedBufferLength);
|
| + TextBreakIterator* cursorPosIterator = cursorMovementIterator(&normalizedBuffer[startIndex], length);
|
| +
|
| + int cursorPos = cursorPosIterator->current();
|
| + int numGraphemes = -1;
|
| + while (0 <= cursorPos) {
|
| + cursorPos = cursorPosIterator->next();
|
| + numGraphemes++;
|
| + }
|
| +
|
| + return ClusterData(std::max(numGraphemes, 0), cursorPosIterator->current());
|
| +}
|
|
|
| static inline bool isBreakableSpace(UChar ch)
|
| {
|
|
|