deleteWordForwardRange function

({int end, int start}) deleteWordForwardRange(
  1. List<String> graphemes,
  2. int offset, {
  3. required GraphemePredicate isWord,
})

Implementation

({int start, int end}) deleteWordForwardRange(
  List<String> graphemes,
  int offset, {
  required GraphemePredicate isWord,
}) {
  if (offset < 0 || offset >= graphemes.length) {
    final clamped = offset.clamp(0, graphemes.length);
    return (start: clamped, end: clamped);
  }

  var end = offset;
  if (isWord(graphemes[offset])) {
    while (end < graphemes.length && isWord(graphemes[end])) {
      end++;
    }
  } else {
    while (end < graphemes.length && !isWord(graphemes[end])) {
      end++;
    }
    while (end < graphemes.length && isWord(graphemes[end])) {
      end++;
    }
  }

  return (start: offset, end: end.clamp(0, graphemes.length));
}