skipClosingDelimiter function

TextCursorCommandResult skipClosingDelimiter(
  1. List<String> graphemes, {
  2. required int cursorOffset,
  3. int? selectionBaseOffset,
  4. int? selectionExtentOffset,
  5. required List<String> closing,
  6. bool clearSelection = false,
})

Implementation

TextCursorCommandResult skipClosingDelimiter(
  List<String> graphemes, {
  required int cursorOffset,
  int? selectionBaseOffset,
  int? selectionExtentOffset,
  required List<String> closing,
  bool clearSelection = false,
}) {
  if (closing.isEmpty) {
    return _unchangedCursorResult(
      cursorOffset: cursorOffset,
      selectionBaseOffset: selectionBaseOffset,
      selectionExtentOffset: selectionExtentOffset,
    );
  }

  final start = cursorOffset.clamp(0, graphemes.length);
  final end = start + closing.length;
  if (end > graphemes.length ||
      !_startsWithGraphemeSequence(graphemes.sublist(start, end), closing)) {
    return _unchangedCursorResult(
      cursorOffset: cursorOffset,
      selectionBaseOffset: selectionBaseOffset,
      selectionExtentOffset: selectionExtentOffset,
    );
  }

  return moveCursorToOffset(
    textLength: graphemes.length,
    cursorOffset: cursorOffset,
    selectionBaseOffset: selectionBaseOffset,
    selectionExtentOffset: selectionExtentOffset,
    targetOffset: end,
    clearSelection: clearSelection,
  );
}