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.