4

检查两个帖子版本(原始版本和编辑版本)之间的帖子更改(编辑/添加/删除的文本)的最佳方法是什么?

我正在使用Markdown,所以我不确定使用difflib.HtmlDiff是否是个好主意。我的目标是用绿色背景标记添加的文本,用红色背景标记删除的文本,类似于github所做的。

4

3 回答 3

5

试试ghdiffGitHub 风格的 HTML,用于统一差异。它在 PyPI 上,但目前在 GitHub 上有更好的文档。你需要pip install ghdiff

简单的用法,假设降价在markdown1and中markdown2

import ghdiff
diff_as_html = ghdiff.diff(markdown1,markdown2)

这是一个更明确的演示。假设您有这两个降价字符串:

md1 = '''
# Hello world

I am text

* No really

'''

md2 = '''
# Hi world

I am text

* No really

'''

我们可以对这些进行差异

import ghdiff
diff_as_html = ghdiff.diff(md1,md2)

渲染后,它看起来像这样:

ghdiff

这是 IPython Notebook 中的原始和渲染:

原始并在 IPython 笔记本中渲染

于 2013-09-12T22:02:15.403 回答
0

我使用自己在几分钟内编写的脏代码作为第一种方法。我也比较了降价本身。

我也在寻找最好的方法。

def canvis_html( before, after ):
    d = ''.join(
                  ndiff(
                    before.splitlines(1),
                    after.splitlines(1)
                        )
                     )

    estils = {'+':'color:green;', '-':'color:red;text-decoration:line-through;',}
    new = u""
    previous_zone = 'new'    
    for l in d.splitlines(1):
        l=l+u"  "
        zona = l[0]
        if zona in ( '+', '-'):
            if zona != previous_zone:
                #si havia obert una zona la tanco
                if previous_zone != 'new': new += u"</span>"
                #colorejo segons la zona  
                new += u"<span style='{estil};'>".format( estil = estils[zona])
                previous_zone = zona
            new += l[1:] 
        elif l.startswith( '?' ):
            pass
        else:
            new += l[1:]

    return new

在这里您可以看到编辑结果,如您所见,如果您应该自己编码,这只是一个起点。

于 2013-09-12T21:50:16.593 回答
0

尝试 DiffMerge:

http://www.sourcegear.com/diffmerge/

效果很好!

在此处输入图像描述

于 2013-09-12T21:37:52.523 回答