diff_match_patch: создание параллельного представления

#java #diff

#java #разница

Вопрос:

Я использую google-diff-match-patch в своем Java-приложении для создания различий. Я использую метод diff_prettyHtml для генерации HTML-вывода diff.

Однако я хотел бы иметь два разных вывода, чтобы я мог разместить их рядом, чтобы пользователю было немного легче видеть различия. (Например, как это делает Eclipse.)

Есть ли что-нибудь в этой библиотеке, что я могу использовать для достижения этого? Как бы вы это сделали? (Я бы не стал использовать другую библиотеку, если это возможно.)

Ответ №1:

Предполагая, что вы не пытаетесь дифференцировать HTML, и в этом случае я бы предложил использовать DaisyDiff, то, что вы, вероятно, захотите сделать с помощью diff-match-patch, — это разделение строк, которое описано на вики-странице проекта. В основном это включает в себя генерацию массива хэш-кодов, по одному для каждой строки слева и справа, и отслеживание этих хэш-кодов относительно строк на карте, а затем запуск этих массивов с помощью алгоритма diffing. Затем вы используете вывод diff в сочетании с картой для регидратации выделения слева и справа по мере необходимости.

Комментарии:

1. Кстати, я написал библиотеку-оболочку, чтобы помочь с «презентационной работой», необходимой для использования diff_match_patch : github.com/arnab/jQuery . PrettyTextDiff

Ответ №2:

Я попытался реализовать другой подход в Python:

http://code.activestate.com/recipes/577784-line-based-side-by-side-diff/

Неудачные тестовые примеры приветствуются.