apply method
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;
}