GitHub - mark-summerfield/ddiff: A D implementation of Python difflib's sequence matcher. (original) (raw)
A D diff library that implements the Python difflib module's sequence matcher.
ddiff is a library for finding the differences between two sequences.
The sequences can be of lines, strings (e.g., words), characters, bytes, or of any custom “item” type so long as it implements ==and <.
Examples
For example, this code:
import qtrac.ddiff: diff, EqualSpan;
auto diffs = diff( "the quick brown fox jumped over the lazy dogs".split!isWhite, "the quick red fox jumped over the very busy dogs".split!isWhite, EqualSpan.Keep); foreach (diff; diffs) writeln(diff.toString());
produces this output:
= ["the", "quick"]
< ["brown"] |> ["red"]
= ["fox", "jumped", "over", "the"]
< ["lazy"] |> ["very", "busy"]
= ["dogs"]
By default the third argument is EqualSpan.Drop, in which case the output from the above would be:
< ["brown"] |> ["red"]
< ["lazy"] |> ["very", "busy"]
The Diff.toString() method is really just for testing. Each Diffstruct has a Tag indicating the kind of difference (Equal, Insert,Delete, Replace) and (in a and b), the relevant subslices of the two input ranges.
See also src/tests.d, especially the tests near the end.
License
ddiff is free open source software (FOSS) licensed under the Apache License, Version 2.0.