Project: Diff

14 Jul 2011

Diff is a Fantom library to find differences between two sequences of objects of any type (e.g. strings, text files line-by-line, etc). As a pure Fantom library, it can be compiled into Java or JavaScript.

Based on the C# library by Matthias Hertel.

Examples

Find differences between simple strings:

using diff

class DiffExample
{
  static Void main(Str[] args) {
    echo("*** Strings from wiki page (http://en.wikipedia.org/wiki/Diff) ***")
    sa := "abcdfghjqz"
    sb := "abcdefgijkrxyz"
    echo("String A: $sa")
    echo("String B: $sb")
    echo(Diff.run(sa, sb))
    
    echo("\n*** List of numbers ***")
    la := [1, 2, 3, 4]
    lb := [3, 4, 1, 2]
    echo("List A: $la")
    echo("List B: $lb")
    echo(Diff.run(la, lb))
    
    echo("\n*** Example, when setting minimal flag results in shorter deltas ***")
    echo("  (setting minimal flag may decrease performance dramatically)")
    ma := "aa"
    mb := "ba"
    echo("String A: $ma")
    echo("String B: $mb")
    echo("Without minimal flag set: " + Diff.run(ma, mb))
    echo("With minimal flag set: " + Diff.run(ma, mb, true))
  }
  
}

File differences between text files:

using diff

class FileExample
{
  static Void main(Str[] args) {
    if (2 > args.size) {
      echo("Compares two files line by line")
      echo("Usage: fan FileDiff.fan <file A> <file B>")
      return
    }
    inA := File(`${args[0]}`).in
    inB := File(`${args[1]}`).in
    deltas := Diff.run(inA, inB)
    deltas.each { echo("$it.a => $it.b") }
  }
}