2010-03-05 11 views
9

me gustaría convertir la salida de diff (en un archivo de rebajas) a de rebajas con <strike> y <em> etiquetas, de modo que pueda ver lo que ha sido retirado de o añadido a una nueva versión de un documento. (Este tipo de tratamiento es muy común en los documentos legales.)¿Convert diff a markdown con ponchado?

Ejemplo de la producción esperada:

¿Por qué nos Nosotros, los lenguajes de programación estudio? no No con el fin de ...

Una de las muchas dificultades es que la salida del diff es la línea orientado, donde quiero ver las diferencias en las palabras individuales. ¿Alguien tiene sugerencias como sobre qué algoritmo usar o sobre qué software construir?

Respuesta

17

Use wdiff. Ya hace la comparación palabra por palabra que está buscando; convertir su salida a markdown debería tomar solo unas pocas expresiones regulares simples.

Por ejemplo:

$ 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 

Editar: En realidad, wdiff tiene algunas opciones que lo hacen aún más fácil:

$ 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

Usted aún especificar la plataforma de destino, pero asumiendo que si está utilizando .NET definitivamente debería verificar este artículo en CodeProject http://www.codeproject.com/KB/recipes/diffengine.aspx

El motor diff realiza la comparación y le devuelve el l objeto óptico que puede aplicarle su propio formato de pantalla visual. Lo he usado en varios proyectos, uno de los cuales era una comparación de texto basada en la web y pudimos introducir todos los márgenes de ganancia como quería antes. También amplié el motor con nuevas clases para hacer comparaciones de tipos de línea personalizados.

6

Use Markdown-Diff para tener la palabra diff anotada en su documento original. Da formato a la salida wdiff o git --word-diff en Markdown, por lo que puede usar su vista previa de Markdown o compilador favoritos para revisar los cambios. (Markdown-Diff fue escrito por mí mismo, inspirado en Adam Rosenfield's answer.)