skipClosingDelimiter function
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,
);
}