(chibi diff)

(lcs a-ls b-ls [eq])

Finds the Longest Common Subsequence between a-ls and b-ls, comparing elements with eq (default equal?. Returns this sequence as a list, using the elements from a-ls. Uses quadratic time and space.

(lcs-with-positions a-ls b-ls [eq])

Variant of lcs which returns the annotated sequence. The result is a list of the common elements, each represented as a list of 3 values: the element, the zero-indexed position in a-ls where the element occurred, and the position in b-ls.

(diff a b [reader eq])

Utility to run lcs on text. a and b can be strings or ports, which are tokenized into a sequence by calling reader until eof-object is found. Returns a list of three values, the sequences read from a and b, and the lcs result.

(write-diff diff [writer out])

Utility to format the result of a diff to output port out (default (current-output-port)). Applies writer to successive diff chunks. writer should be a procedure of three arguments: (writer subsequence type out). subsequence is a subsequence from the original input, type is a symbol indicating the type of diff: 'same if this is part of the lcs, 'add if it is unique to the second input, or 'remove if it is unique to the first input. writer defaults to write-line-diffs, assuming the default line diffs.

(diff->string diff . o)

Equivalent to write-diff but collects the output to a string.

(write-line-diffs lines type out)

The default writer for write-diff, annotates simple +/- prefixes for added/removed lines.

(write-line-diffs/color lines type out)

A variant of write-line-diffs which adds red/green ANSI coloring to the +/- prefix.

(write-char-diffs chars type out)

A diff writer for sequences of characters (when a diff was generated with read-char), enclosing added characters in «...» brackets and removed characters in »...«.

(write-char-diffs/color chars type out)

A diff writer for sequences of characters (when a diff was generated with read-char), formatting added characters in green and removed characters in red.

(write-edits ls lcs [index writer out])

Utility to format the result of a diff with respect to a single input sequence ls. lcs is the annotated common sequence from diff or lcs-with-positions, and index is the index (0 or 1, default 1) of ls in the original call. Since we have no information about the other input, we can only format what is the same and what is different, formatting the differences as either added (if index is 0) or removed (if index is 1).

(edits->string ls lcs [type writer])

Equivalent to write-edits but collects the output to a string.

(edits->string/color ls lcs [type writer])

Equivalent to write-edits but collects the output to a string and uses a color-aware writer by default. Note with a character diff this returns the original input string as-is, with only ANSI escapes indicating what changed.