apply method

  1. @override
Delta? apply(
  1. Delta document,
  2. int index,
  3. Object data
)
override

Applies heuristic rule to an insert operation on a document and returns resulting Delta.

Implementation

@override
Delta? apply(Delta document, int index, Object data) {
  if (data is! String) return null;

  final iter = DeltaIterator(document);
  final previous = iter.skip(index);
  final target = iter.next();
  final cursorBeforeBlockEmbed = isBlockEmbed(target.data);
  final cursorAfterBlockEmbed =
      previous != null && isBlockEmbed(previous.data);

  if (cursorBeforeBlockEmbed || cursorAfterBlockEmbed) {
    final delta = Delta()..retain(index);
    if (cursorBeforeBlockEmbed && !data.endsWith('\n')) {
      return delta
        ..insert(data)
        ..insert('\n');
    }
    if (cursorAfterBlockEmbed && !data.startsWith('\n')) {
      return delta
        ..insert('\n')
        ..insert(data);
    }
    return delta..insert(data);
  }
  return null;
}