applyRule method
Applies heuristic rule to an operation on a document
and returns
resulting Delta.
Implementation
@override
Delta? applyRule(
Document document,
int index, {
int? len,
Object? data,
Attribute? attribute,
}) {
if (attribute!.key != Attribute.link.key || len! > 0) {
return null;
}
final delta = Delta();
final itr = DeltaIterator(document.toDelta());
final before = itr.skip(index), after = itr.next();
int? beg = index, retain = 0;
if (before != null && before.hasAttribute(attribute.key)) {
beg -= before.length!;
retain = before.length;
}
if (after.hasAttribute(attribute.key)) {
if (retain != null) retain += after.length!;
}
if (retain == 0) {
return null;
}
delta
..retain(beg)
..retain(retain!, attribute.toJson());
return delta;
}