///|
fn print_edits(edits : Array[@diff.EditOp]) -> Unit {
for edit in edits {
match edit {
Equal(character) => println("Equal(\{character})")
Delete(character) => println("Delete(\{character})")
Insert(character) => println("Insert(\{character})")
}
}
}
///|
fn main {
let old_text = "Moon😀 diff"
let new_text = "Moon🌕 patch"
let edits = @diff.diff(old_text, new_text)
print_edits(@diff.compact(edits))
let summary = @diff.stats(edits)
println(
"equal=\{summary.equal_count}, deleted=\{summary.delete_count}, inserted=\{summary.insert_count}",
)
println("old round-trip: \{@diff.reconstruct_old(edits)}")
println("new round-trip: \{@diff.reconstruct_new(edits)}")
match @diff.apply(@diff.compact(edits), old_text) {
Ok(result) => println("applied: \{result}")
Err(_) => println("apply failed")
}
match @diff.apply(@diff.invert(edits), new_text) {
Ok(result) => println("reverted: \{result}")
Err(_) => println("revert failed")
}
println("")
println(
@diff.unified_diff_standard(
"one\ntwo\nthree\n", "one\n2\nthree\n", "before.txt", "after.txt", 1,
),
)
}