operations property

Iterable<Operation> operations

Returns a sequence of operations describing how to turn source into target.

Implementation

Iterable<Operation> get operations {
  if (_operations.isNotEmpty) return _operations;
  var sourceStart = 0, targetStart = 0;
  for (final block in matches) {
    final type =
        sourceStart < block.sourceStart && targetStart < block.targetStart
            ? OperationType.replace
            : sourceStart < block.sourceStart
                ? OperationType.delete
                : targetStart < block.targetStart
                    ? OperationType.insert
                    : null;

    if (type != null) {
      _operations.add(Operation(
        type,
        sourceStart: sourceStart,
        sourceEnd: block.sourceStart,
        targetStart: targetStart,
        targetEnd: block.targetStart,
      ));
    }
    sourceStart = block.sourceStart + block.length;
    targetStart = block.targetStart + block.length;
    if (block.length > 0) {
      _operations.add(Operation(
        OperationType.equal,
        sourceStart: block.sourceStart,
        sourceEnd: sourceStart,
        targetStart: block.targetStart,
        targetEnd: targetStart,
      ));
    }
  }
  return _operations;
}