matchesOffsetRange method

bool matchesOffsetRange({
  1. required int startOffset,
  2. 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;
}