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, ParchmentAttribute attribute) {
if (attribute.scope != ParchmentAttributeScope.line) return null;
var result = Delta()..retain(index);
final iter = DeltaIterator(document);
iter.skip(index);
// Apply line styles to all newline characters within range of this
// retain operation.
var current = 0;
while (current < length && iter.hasNext) {
final op = iter.next(length - current);
final opText = op.data is String ? op.data as String : '';
if (opText.contains('\n')) {
final delta = _applyAttribute(op.data as String, op, attribute);
result = result.concat(delta);
} else {
result.retain(op.length);
}
current += op.length;
}
// And include extra newline after retain
while (iter.hasNext) {
final op = iter.next();
final opText = op.data is String ? op.data as String : '';
final lf = opText.indexOf('\n');
if (lf == -1) {
result.retain(op.length);
continue;
}
final delta = _applyAttribute(opText, op, attribute, firstOnly: true);
result = result.concat(delta);
break;
}
return result;
}