2010-03-05 27 views
9

Ich mag die Ausgabe von diff (auf einer Markdown-Datei) Abschriften mit <strike> und <em> Tags konvertieren, so dass ich sehen kann, was von oder auf eine neue Version eines Dokuments hinzugefügt entfernt. (Diese Art von Behandlung ist für juristische Dokumente sehr häufig.)Konvertieren von Diff zu Markdown mit Durchstreichen?

Beispiel erhoffte für die Ausgabe:

Warum tun wir Wir Studie Programmiersprachen ? nicht Nicht, um ...

Einer der vielen Schwierigkeiten ist, dass diff der Ausgangsleitung orientiert ist, wo ich in einzelne Wörter sehen Unterschiede wollen . Hat jemand Vorschläge wie zu welchem ​​Algorithmus zu verwenden, oder welche Software zu bauen?

Antwort

17

Verwenden Sie wdiff. Es wird bereits der Wort-für-Wort-Vergleich durchgeführt, nach dem Sie suchen. Um seine Ausgabe in Markdown zu konvertieren, sollten nur ein paar einfache reguläre Ausdrücke verwendet werden.

Zum Beispiel:

$ 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 

Edit: Eigentlich hat, wdiff einige Optionen, die es noch einfacher machen:

$ 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 
0

Sie sind nicht am Zielplattform angeben, aber unter der Annahme, wenn Sie .NET verwenden Sie sollten auf jeden Fall diesen Artikel auf CodeProject überprüfen http://www.codeproject.com/KB/recipes/diffengine.aspx

Die Diff-Engine führt einen Vergleich durch und gibt Ihnen den l zurück ologisches Objekt, das Ihre eigene visuelle Darstellung formatieren kann. Ich habe es in mehreren Projekten verwendet, von denen einer ein webbasierter Textvergleich war und wir konnten all diese Markups einführen, wie Sie es oben gewünscht haben. Ich habe auch die Engine mit neuen Klassen erweitert, um benutzerdefinierte Linientypvergleiche durchzuführen.

6

Verwenden Sie Markdown-Diff, um das Wort diff zu Ihrem Originaldokument zu kommentieren. Es formatiert die Ausgabe wdiff oder git --word-diff in Markdown, so dass Sie Ihre bevorzugten Markdown-Vorschau oder Compiler verwenden können, um Änderungen zu überprüfen. (Markdown-Diff wurde von mir selbst geschrieben, inspiriert von Adam Rosenfield's answer.)

Verwandte Themen