applyRule method
Applies heuristic rule to an operation on a document
and returns
resulting Delta.
Implementation
@override
Delta? applyRule(Delta document, int index, {int? len, Object? data, Attribute? attribute}) {
if (attribute!.scope != AttributeScope.block) {
return null;
}
// Apply line styles to all newline characters within range of this
// retain operation.
var result = Delta()..retain(index);
final itr = DeltaIterator(document)..skip(index);
Operation op;
for (var cur = 0; cur < len! && itr.hasNext; cur += op.length!) {
op = itr.next(len - cur);
final opText = op.data is String ? op.data as String : '';
if (!opText.contains('\n')) {
result.retain(op.length!);
continue;
}
final delta = _applyAttribute(opText, op, attribute);
result = result.concat(delta);
}
// And include extra newline after retain
while (itr.hasNext) {
op = itr.next();
final opText = op.data is String ? op.data as String : '';
final lf = opText.indexOf('\n');
if (lf < 0) {
result.retain(op.length!);
continue;
}
final delta = _applyAttribute(opText, op, attribute, firstOnly: true);
result = result.concat(delta);
break;
}
return result;
}