如何在 javascript 中使用人类可读的差异突出显示来呈现文本差异

Bar*_*vds 5 javascript diff node.js

我需要以人类可读的格式(例如:非机器优化)打印文本(代码)的内联差异。

我的平台是 Javascript(主要的 node.js,浏览器)。我有自己的打印机/造型器,但在生成正确的差异更改时遇到问题。

重要的是人类直觉的变化:因此对每行变化的强烈偏见,以及非常低的随机碎片字母。

看起来不错的非 JS diff 渲染器的例子是 Tortoise SVN/GIT 中的那个和 github.com 上的 diff 渲染器。我相信 github 上的那个读取了“标准”补丁格式,但我确信需要更多的逻辑才能将其转换为漂亮的内联差异。

我试过的一些模块:

  1. diff( https://npmjs.org/package/diff ) 经典,但它具有不自然的行和单词或字符差异的混合。(这用于mocha但它是有缺陷的)

  2. chardiff( https://npmjs.org/package/chardiff ) 基于diff,但它有一个为人类可读性设计的语义过滤器:它看起来更好,但仍然提供碎片化的单字母更改(经典 diff 不会)。

  3. diff-match-patchhttp://code.google.com/p/google-diff-match-patch),这是有希望的,但仍然不是 100%(仍然有一些违反直觉的差异)。

我想我需要使用这些模块之一作为组件(每行等)自己组装一些东西,但我不确定如何去做。

这是一个已解决的问题吗?