c000b13cec5bf3495e880203d3e2290fcf3d7e0b
[redakcja.git] / apps / wiki / nice_diff.py
1 # -*- coding: utf-8 -*-
2 #
3 # This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later.
4 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.  
5 #
6 import difflib
7 import re
8
9 from django.template.loader import render_to_string
10 from django.utils.html import escape as html_escape
11
12 DIFF_RE = re.compile(r"""\x00([+^-])""" ,re.UNICODE)
13 NAMES = { '+': 'added', '-': 'removed', '^': 'changed' }
14
15 def diff_replace(match):
16         return """<span class="diff_mark diff_mark_%s">""" %  NAMES[match.group(1)]
17
18 def filter_line(line):
19         return  DIFF_RE.sub(diff_replace, html_escape(line)).replace('\x01', '</span>')
20
21 def html_diff_table(la, lb):
22         return render_to_string("wiki/diff_table.html", {
23                 "changes": [(a[0],filter_line(a[1]),
24                                          b[0],filter_line(b[1]),
25                                          change) for a, b, change in difflib._mdiff(la, lb)]
26         }); 
27                                                                                 
28         
29 __all__ = ['html_diff_table']