Question

I'm looking to implement multi-user operational transform just for plain-text based changes on the server-side on a web-site.

Is there a non-javascript implementation that you can recommend?

Was it helpful?

Solution

Consider Google-Diff-Match-Patch - Diff, Match and Patch libraries for Plain Text:

"The Diff Match and Patch libraries offer robust algorithms to perform the operations required for synchronizing plain text."

Diff: Compare two blocks of plain text and efficiently return a list of differences.

Diff Demo Match: Given a search string, find its best fuzzy match in a block of plain text. Weighted for both accuracy and location.

Match Demo Patch: Apply a list of patches onto plain text. Use best-effort to apply patch even when the underlying text doesn't match.

Patch Demo Currently available in Java, JavaScript, C++, C#, Objective C, Lua and Python. Regardless of language, each library features the same API and the same functionality. All versions also have comprehensive test harnesses.

You can find it here.

OTHER TIPS

Consider Py-infinote.

py-infinote is a python port of JInfinote, offering a collaborative text-editing protocol(adOPTed) which can be used to write multi-user collaborative text editors. Py-infinote is used in the HWIOS project.

https://github.com/sveith/jinfinote

This is another quite interesting implementation integrating google wave's operational transform with jedit:

https://github.com/djspiewak/cccp

OpenCoweb is a popular OT implementation. There are several server implementations written in different languages.

Simple reference implementation which I will be improving next few months by adding more complex stuff;

Now it has:

  • simple text operations; retain, insert, delete and their transformations against each other
  • annotations over text and transformations
  • generation of changes and applying them to text

https://github.com/slevental/operational-transformation

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top