transformPosition method
Transforms index
against this delta.
Any "delete" operation before specified index
shifts it backward, as
well as any "insert" operation shifts it forward.
The force
argument is used to resolve scenarios when there is an
insert operation at the same position as index
. If force
is set to
true
(default) then position is forced to shift forward, otherwise
position stays at the same index. In other words setting force
to
false
gives higher priority to the transformed position.
Useful to adjust caret or selection positions.
Implementation
int transformPosition(int index, {bool force = true}) {
final iter = DeltaIterator(this);
var offset = 0;
while (iter.hasNext && offset <= index) {
final op = iter.next();
if (op.isDelete) {
index -= math.min(op.length!, index - offset);
continue;
} else if (op.isInsert && (offset < index || force)) {
index += op.length!;
}
offset += op.length!;
}
return index;
}