in lib/src/grapheme_clusters/breaks.dart [113:144]
int nextBreak() {
while (cursor > start) {
var breakAt = cursor;
var char = base.codeUnitAt(--cursor);
if (char & 0xFC00 != 0xDC00) {
state = moveBack(state, low(char));
if (state >= stateLookaheadMin) state = _lookAhead(state);
if (state & stateNoBreak == 0) {
return breakAt;
}
continue;
}
// The category of an unpaired tail surrogate is Control.
var category = categoryControl;
if (cursor >= start) {
var prevChar = base.codeUnitAt(cursor - 1);
if (prevChar & 0xFC00 == 0xD800) {
category = high(prevChar, char);
cursor -= 1;
}
}
state = moveBack(state, category);
if (state >= stateLookaheadMin) state = _lookAhead(state);
if (state & stateNoBreak == 0) {
return breakAt;
}
}
state = moveBack(state, categoryEoT);
if (state >= stateLookaheadMin) state = _lookAhead(state);
if (state & stateNoBreak == 0) return cursor;
return -1;
}