in lib/src/grapheme_clusters/breaks.dart [300:329]
int previousBreak(String text, int start, int end, int index) {
assert(0 <= start);
assert(start <= index);
assert(index <= end);
assert(end <= text.length);
if (index == start || index == end) return index;
var indexBefore = index;
var nextChar = text.codeUnitAt(index);
var category = categoryControl;
if (nextChar & 0xF800 != 0xD800) {
category = low(nextChar);
} else if (nextChar & 0xFC00 == 0xD800) {
var indexAfter = index + 1;
if (indexAfter < end) {
var secondChar = text.codeUnitAt(indexAfter);
if (secondChar & 0xFC00 == 0xDC00) {
category = high(nextChar, secondChar);
}
}
} else {
var prevChar = text.codeUnitAt(index - 1);
if (prevChar & 0xFC00 == 0xD800) {
category = high(prevChar, nextChar);
indexBefore -= 1;
}
}
return BackBreaks(
text, indexBefore, start, moveBack(stateEoTNoBreak, category))
.nextBreak();
}