lineRange method

List<String> lineRange(
  1. int startLine,
  2. int endLine
)

Lines [startLine, endLine) fetched with a single slice and split. Use this for viewport rendering, highlighting and gutters.

Implementation

List<String> lineRange(int startLine, int endLine) {
  final first = startLine.clamp(0, lineCount);
  final last = endLine.clamp(first, lineCount);
  if (first == last) return const [];

  final startOffset = getLineStartOffset(first);
  final endOffset = last >= lineCount
      ? length
      : getLineStartOffset(last) - 1; // exclude the newline ending last-1
  final parts = slice(startOffset, endOffset).split('\n');
  for (var i = 0; i < parts.length; i++) {
    final part = parts[i];
    if (part.endsWith('\r')) parts[i] = part.substring(0, part.length - 1);
  }
  return parts;
}