代码之家  ›  专栏  ›  技术社区  ›  Norman Ramsey

是否将diff转换为带删除线的降价?

  •  10
  • Norman Ramsey  · 技术社区  · 16 年前

    我想转换 diff (在降价文件上)到 降价 <strike> <em> 标签,以便我可以看到 已从文档的新版本中删除或添加。(这种 法律文件的处理非常常见。)

    期望输出示例:

    我们为什么要 我们 学习编程语言 ? 不是 为了。。。

    其中之一 困难在于diff的输出是面向行的,我想这样做。 看单个词的不同。有人有什么建议吗 要使用什么算法,或者要建立什么软件?

    3 回复  |  直到 12 年前
        1
  •  18
  •   Adam Rosenfield    16 年前

    使用 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
    
        2
  •  7
  •   Community Mohan Dere    9 年前

    使用 Markdown-Diff 将单词diff注释到原始文档中。IT格式 wdiff git --word-diff 的输出在markdown中,因此您可以使用最喜爱的markdown预览器或编译器来查看更改。(降价差异是我自己写的,灵感来自 Adam Rosenfield's answer )

        3
  •  0
  •   Fadrian Sudaman    16 年前

    您没有指定目标平台,但是假设您使用的是.NET,那么您肯定应该在codeproject上查看这篇文章。 http://www.codeproject.com/KB/recipes/diffengine.aspx

    diff引擎执行比较并返回逻辑对象,该对象可以对其应用自己的可视显示格式。我在几个项目中使用过它,其中一个项目是基于Web的文本比较,我们能够像上面所希望的那样介绍所有这些标记。我还使用新类扩展了引擎,以进行自定义行类型比较。