X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/f8d11c06c7084e9016cad67d70307c62f1265e51..ad64a2d9487bb320ea88efc58c8bd9cc42d9c71e:/scripts/nice_diff.py diff --git a/scripts/nice_diff.py b/scripts/nice_diff.py new file mode 100644 index 00000000..3de9ad4e --- /dev/null +++ b/scripts/nice_diff.py @@ -0,0 +1,57 @@ +import difflib +import re + +def read_whole(path): + with open(path) as f: + return f.readlines() + +DIFF_RE = re.compile(r"""\x00([+^-])""" ,re.UNICODE) +NAMES = { '+': 'added', '-': 'removed', '^': 'changed' } + +def diff_replace(match): + return """""" % NAMES[match.group(1)] + + +def filter_line(line): + return DIFF_RE.sub(diff_replace, line).replace('\x01', '') + +def group(diffs): + group_a = [] + group_b = [] + + a, b, _ = diffs.next() + group_a.append(a[1]) + group_b.append(b[1]) + + + for _ in range(10): + a, b, _ = diffs.next() + group_a.append(a[1]) + group_b.append(b[1]) + + while a[0] == '': + a, b, _ = diffs.next() + group_a.append(a[1]) + group_b.append(b[1]) + + yield group_a[:-1], group_b[:-1] + group_a, group_b = group_a[-1:], group_b[-1:] + +def join_to_html(diffs): + for group_a, group_b in group(diffs): + yield """ +
+
%s
+
%s
+
""" % ( + '\n'.join( filter_line(line) for line in group_a ), + '\n'.join( filter_line(line) for line in group_b ), + ) + +fa = read_whole("file_a") +fb = read_whole("file_b") + +print '\n'.join( repr(x) for x in difflib._mdiff(fa, fb) ) +print "**************************" +print '\n'.join( join_to_html( difflib._mdiff(fa, fb) ) ) +# print '\n'.join( repr(x) for x in group(difflib._mdiff(fa, fb)) )