Diff, Match and Patch Library
http://code.google.com/p/google-diff-match-patch/
Neil Fraser
This library is currently available in seven different ports, all using the same API.
Every version includes a full set of unit tests.
C++:
- Ported by Mike Slemmer.
- Currently requires the Qt library.
C#:
- Ported by Matthaeus G. Chajdas.
Dart:
- The Dart language is still growing and evolving, so this port is only as
stable as the underlying language.
Java:
- Included is both the source and a Maven package.
JavaScript:
- diff_match_patch_uncompressed.js is the human-readable version.
Users of node.js should 'require' this uncompressed version since the
compressed version is not guaranteed to work outside of a web browser.
- diff_match_patch.js has been compressed using Google's internal JavaScript compressor.
Non-Google hackers who wish to recompress the source can use:
http://dean.edwards.name/packer/
Lua:
- Ported by Duncan Cross.
- Does not support line-mode speedup.
Objective C:
- Ported by Jan Weiss.
- Includes speed test (this is a separate bundle for other languages).
Python:
- Two versions, one for Python 2.x, the other for Python 3.x.
- Runs 10x faster under PyPy than CPython.
Demos:
- Separate demos for Diff, Match and Patch in JavaScript.
This library implements Myer's diff algorithm which is generally considered to be the best general-purpose diff. A layer of pre-diff speedups and post-diff cleanups surround the diff algorithm, improving both performance and output quality.
This library also implements a Bitap matching algorithm at the heart of a flexible matching and patching strategy.
http://neil.fraser.name/software/diff_match_patch/bitap.ps
[pre-diff speedups and post-diff cleanups] https://neil.fraser.name/writing/diff/
matching and patching strategy[http://neil.fraser.name/writing/patch/]