Конвертировать diff в уценку с зачеркнутым? - PullRequest
10 голосов
/ 05 марта 2010

Я хотел бы преобразовать вывод diff (в файле уценки) в Уценка с тегами <strike> и <em>, чтобы я мог видеть, что имеет был удален или добавлен в новую версию документа. (Этот вид обращение очень распространено для юридических документов.)

Пример ожидаемого вывода:

Почему мы Мы изучаем языки программирования ? не Не , чтобы ...

Один из многих Трудность в том, что вывод diff ориентирован на строки, где я хочу увидеть различия в отдельных словах. У кого-нибудь есть предложения как какой алгоритм использовать или какое программное обеспечение использовать?

Ответы [ 3 ]

18 голосов
/ 05 марта 2010

Используйте wdiff . Это уже делает пословное сравнение, которое вы ищете; преобразование его вывода в уценку должно занять всего несколько простых регулярных выражений.

Например:

$ cat foo
Why do we study programming languages?  Not in order to
$ cat bar
We study programming languages not in order to
$ wdiff foo bar
[-Why do we-]{+We+} study programming [-languages?  Not-] {+languages not+} in order to
$ wdiff foo bar | sed 's|\[-|<em>|g;s|-]|</em>|g;s|{+|<strike>|g;s|+}|</strike>|g'
<em>Why do we</em><strike>We</strike> study programming <em>languages?  Not</em> <strike>languages not</strike> in order to

Редактировать: На самом деле, wdiff имеет некоторые опции, которые делают его еще проще:

$ wdiff -w '<em>' -x '</em>' -y '<strike>' -z '</strike>' foo bar
<em>Why do we</em><strike>We</strike> study programming <em>languages?  Not</em> <strike>languages not</strike> in order to
7 голосов
/ 21 ноября 2013

Используйте Markdown-Diff , чтобы добавить слово diff к исходному документу. Он форматирует wdiff или git --word-diff вывод в Markdown, так что вы можете использовать ваш любимый просмотрщик Markdown или компилятор для просмотра изменений. (Markdown-Diff был написан мной, вдохновленный ответом Адама Розенфилда .)

0 голосов
/ 05 марта 2010

Вы не указали целевую платформу, но при условии, что если вы используете .NET, вам обязательно стоит проверить эту статью на CodeProject http://www.codeproject.com/KB/recipes/diffengine.aspx

Механизм сравнения выполняет сравнение и возвращает вам логический объект, который может применить к нему собственное форматирование визуального отображения. Я использовал его в нескольких проектах, одним из которых было сравнение текста на веб-основе, и мы смогли ввести все эти разметки, как вы хотели выше. Я также расширил движок новыми классами для сравнения пользовательских типов линий.

...