deleteWordForwardRangeFromReader function

({int end, int start}) deleteWordForwardRangeFromReader(
  1. int length,
  2. int offset, {
  3. required GraphemePredicate isWord,
  4. required GraphemeReader graphemeAt,
})

Implementation

({int start, int end}) deleteWordForwardRangeFromReader(
  int length,
  int offset, {
  required GraphemePredicate isWord,
  required GraphemeReader graphemeAt,
}) {
  if (offset < 0 || offset >= length) {
    final clamped = offset.clamp(0, length);
    return (start: clamped, end: clamped);
  }

  var end = offset;
  final current = graphemeAt(offset);
  if (current != null && isWord(current)) {
    while (end < length) {
      final grapheme = graphemeAt(end);
      if (grapheme == null || !isWord(grapheme)) {
        break;
      }
      end++;
    }
  } else {
    while (end < length) {
      final grapheme = graphemeAt(end);
      if (grapheme != null && isWord(grapheme)) {
        break;
      }
      end++;
    }
    while (end < length) {
      final grapheme = graphemeAt(end);
      if (grapheme == null || !isWord(grapheme)) {
        break;
      }
      end++;
    }
  }

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