int startOfLastWordBoundaryContext(const UChar* characters, int length) { for (int i = length; i > 0;) { int last = i; UChar32 ch; U16_PREV(characters, 0, i, ch); if (!requiresContextForWordBoundary(ch)) return last; } return 0; }
int endOfFirstWordBoundaryContext(const UChar* characters, int length) { for (int i = 0; i < length;) { int first = i; UChar32 ch; U16_NEXT(characters, i, length, ch); if (!requiresContextForWordBoundary(ch)) return first; } return length; }
unsigned startOfLastWordBoundaryContext(StringView text) { unsigned length = text.length(); for (unsigned i = length; i > 0; ) { unsigned last = i; UChar32 ch; U16_PREV(text, 0, i, ch); if (!requiresContextForWordBoundary(ch)) return last; } return 0; }
unsigned endOfFirstWordBoundaryContext(StringView text) { unsigned length = text.length(); for (unsigned i = 0; i < length; ) { unsigned first = i; UChar32 ch; U16_NEXT(text, i, length, ch); if (!requiresContextForWordBoundary(ch)) return first; } return length; }