Реализация Оперативного Преобразования (не JavaScript)
Я рассчитываю реализовать многопользовательское операционное преобразование только для текстовых изменений на стороне сервера на веб-сайте.
Есть ли не-JavaScript реализация, которую вы можете порекомендовать?
5 ответов
Рассмотрим Google-Diff-Match-Patch - библиотеки Diff, Match и Patch для простого текста:
"Библиотеки Diff Match и Patch предлагают надежные алгоритмы для выполнения операций, необходимых для синхронизации простого текста".
Разница: сравнить два блока простого текста и эффективно вернуть список различий.
Diff Demo Match: по строке поиска найдите лучшее нечеткое совпадение в блоке простого текста. Взвешены как по точности, так и по местоположению.
Match Demo Patch: применить список патчей к простому тексту. Приложите все усилия, чтобы применить исправление, даже если основной текст не совпадает.
Демо-версия патча В настоящее время доступно на Java, JavaScript, C++, C#, Objective C, Lua и Python. Независимо от языка каждая библиотека имеет одинаковый API и одинаковые функциональные возможности. Все версии также имеют комплексные тестовые комплекты.
Вы можете найти это здесь.
OpenCoweb является популярной реализацией OT. Существует несколько реализаций сервера, написанных на разных языках.
Рассмотрим Py-Infinote.
py-infinote - это порт JInfinote для Python, предлагающий протокол совместного редактирования текста (adOPTed), который можно использовать для написания многопользовательских текстовых редакторов для совместной работы. Py-infinote используется в проекте HWIOS.
Простая справочная реализация, которую я буду улучшать в ближайшие несколько месяцев, добавляя более сложные вещи;
Теперь оно имеет:
- простые текстовые операции; сохранить, вставить, удалить и их преобразования друг против друга
- аннотации над текстом и преобразованиями
- генерация изменений и применение их к тексту
Это еще одна довольно интересная реализация, интегрирующая операционное преобразование google wave с jedit: