graphemesInRange method
List<String>
graphemesInRange(
{ - required int startOffset,
- required int endOffset,
})
Implementation
List<String> graphemesInRange({
required int startOffset,
required int endOffset,
}) {
final normalizedStart = startOffset.clamp(0, length);
final normalizedEnd = endOffset.clamp(normalizedStart, length);
if (normalizedStart == normalizedEnd) {
return const <String>[];
}
final result = <String>[];
var remaining = normalizedEnd - normalizedStart;
final start = positionForOffset(normalizedStart);
var line = start.line;
var column = start.column;
while (remaining > 0 && line < _storage.lineCount) {
final lineLength = this.lineLength(line);
final takeCount = (lineLength - column).clamp(0, remaining);
if (takeCount > 0) {
result.addAll(
_storage.graphemesInLineRange(
line,
startColumn: column,
endColumn: column + takeCount,
),
);
remaining -= takeCount;
column += takeCount;
}
if (remaining > 0 &&
column == lineLength &&
line < _storage.lineCount - 1) {
result.add('\n');
remaining -= 1;
line += 1;
column = 0;
}
}
return result;
}