transformWordOrAdjacent function

TextCommandResult transformWordOrAdjacent(
  1. List<String> graphemes, {
  2. required int cursorOffset,
  3. required GraphemePredicate isWord,
  4. required String transform(
    1. String text
    ),
})

Implementation

TextCommandResult transformWordOrAdjacent(
  List<String> graphemes, {
  required int cursorOffset,
  required nav.GraphemePredicate isWord,
  required String Function(String text) transform,
}) {
  final range = nav.wordRangeForTransform(
    graphemes,
    cursorOffset,
    isWord: isWord,
  );
  if (range == null || range.start == range.end) {
    return _unchangedResult(graphemes, cursorOffset: cursorOffset);
  }

  final original = graphemes.sublist(range.start, range.end).join();
  final transformed = transform(original);
  if (transformed == original) {
    return _unchangedResult(graphemes, cursorOffset: cursorOffset);
  }

  final replacement = transformed.characters.toList(growable: false);
  final result = edit_ops.replaceRange(
    graphemes,
    start: range.start,
    end: range.end,
    replacement: replacement,
  );
  return TextCommandResult(
    graphemes: result.graphemes,
    cursorOffset: range.start + replacement.length,
  );
}