matchesOffsetRange method
bool
matchesOffsetRange(
{ - required int startOffset,
- required List<String> graphemes,
})
Implementation
bool matchesOffsetRange({
required int startOffset,
required List<String> graphemes,
}) {
if (graphemes.isEmpty) {
return true;
}
final start = startOffset.clamp(0, length);
if (start + graphemes.length > length) {
return false;
}
var matched = 0;
final startPosition = positionForOffset(start);
var line = startPosition.line;
var column = startPosition.column;
while (matched < graphemes.length && line < _storage.lineCount) {
final lineLength = this.lineLength(line);
final takeCount = (lineLength - column).clamp(
0,
graphemes.length - matched,
);
if (takeCount > 0) {
if (!_storage.matchesGraphemesInLineRange(
line,
startColumn: column,
graphemes: graphemes,
graphemeStart: matched,
graphemeCount: takeCount,
)) {
return false;
}
column += takeCount;
matched += takeCount;
}
if (matched < graphemes.length &&
column == lineLength &&
line < _storage.lineCount - 1) {
if (graphemes[matched] != '\n') {
return false;
}
matched += 1;
line += 1;
column = 0;
} else if (column == lineLength) {
line += 1;
column = 0;
}
}
return matched == graphemes.length;
}