applyRule method

  1. @override
Delta? applyRule(
  1. Document document,
  2. int index, {
  3. int? len,
  4. Object? data,
  5. Attribute? attribute,
})
override

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