将差异转换为带有删除线的Markdown?

10
我想将Markdown文件在使用diff命令后的输出结果转换为带有<strike><em>标签的Markdown格式,以便查看文档新版本中删除或添加了哪些内容。这种处理方式在法律文件中非常常见。
期望的输出示例:

为什么我们要我们学习编程语言 而不是不是为了...

然而,这个问题的难点在于diff命令的输出是基于行的,而我想查看单词级别的差异。请问是否有什么算法或软件可以实现这一点?
3个回答

18

使用wdiff。它已经可以对单词进行比较,这正是您要寻找的功能;将其输出转换为markdown只需要几个简单的正则表达式。

例如:

$ 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
使用Markdown-Diff可以使单词差异在原始文档中得到注释。它将wdiffgit --word-diff的输出格式化为Markdown,因此您可以使用喜爱的Markdown预览器或编译器来查看更改。(Markdown-Diff是我自己编写的,受Adam Rosenfield's answer启发。)

0

您没有指定目标平台,但是假设您正在使用.NET,您应该绝对查看CodeProject上的这篇文章。

http://www.codeproject.com/KB/recipes/diffengine.aspx

差异引擎执行比较并返回逻辑对象,您可以将自己的视觉显示格式应用于它。我在几个项目中使用过它,其中之一是基于Web的文本比较,我们能够引入所有您想要的标记。我还使用新类扩展了引擎以进行自定义行类型比较。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接