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.
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.
The Diff Match and Patch libraries offer robust algorithms to perform the operations required for synchronizing plain text.
- Compare two blocks of plain text and efficiently return a list of differences.
- Diff Demo
- Given a search string, find its best fuzzy match in a block of plain text. Weighted for both accuracy and location.
- Match Demo
- Apply a list of patches onto plain text. Use best-effort to apply patch even when the underlying text doesn't match.
- Patch Demo
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.