apply method
Applies heuristic rule to a retain (format) operation on a document
and
returns resulting Delta.
Implementation
@override
Delta? apply(Delta document, int index, int length, NotusAttribute attribute) {
if (attribute.scope != NotusAttributeScope.inline) return null;
final result = Delta()..retain(index);
final iter = DeltaIterator(document);
iter.skip(index);
// Apply inline styles to all non-line-break characters within range of this
// retain operation.
var current = 0;
while (current < length && iter.hasNext) {
final op = iter.next(length - current);
var lf = op!.data.indexOf('\n');
if (lf != -1) {
var pos = 0;
while (lf != -1) {
result..retain(lf - pos, attribute.toJson())..retain(1);
pos = lf + 1;
lf = op.data.indexOf('\n', pos);
}
if (pos < op.length!) result.retain(op.length! - pos, attribute.toJson());
} else {
result.retain(op.length!, attribute.toJson());
}
current += op.length!;
}
return result;
}