Mercurial > kallithea
changeset 5176:c417ef1f43b1
diffs: avoid conflicts between inline diff mechanism and special markup
It would sometimes emit markup like
<pre><ins><u</ins> <ins>class</ins><ins>=</ins><ins>"cr</ins><ins>"></u></ins></pre>
instead of
<pre><ins><u class="cr"></u></ins></pre>
author | Mads Kiilerich <madski@unity3d.com> |
---|---|
date | Tue, 09 Jun 2015 22:50:20 +0200 |
parents | 18b0e4d1ae58 |
children | f47d6187095f |
files | kallithea/lib/diffs.py kallithea/tests/fixtures/markuptest.diff kallithea/tests/models/test_diff_parsers.py |
diffstat | 3 files changed, 48 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/kallithea/lib/diffs.py Tue Jun 09 22:50:20 2015 +0200 +++ b/kallithea/lib/diffs.py Tue Jun 09 22:50:20 2015 +0200 @@ -193,8 +193,8 @@ (?:^\+\+\+[ ](b/(?P<b_file>.+?)|/dev/null)\t?(?:\n|$))? """, re.VERBOSE | re.MULTILINE) - #used for inline highlighter word split - _token_re = re.compile(r'()(>|<|&|<u>\t</u>| <i></i>|\W+?)') + # Used for inline highlighter word split, must match the substitutions in _escaper + _token_re = re.compile(r'()(&|<|>|<u>\t</u>|<u class="cr"></u>| <i></i>|\W+?)') _escape_re = re.compile(r'(&)|(<)|(>)|(\t)|(\r)|(?<=.)( \n| $)')
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/tests/fixtures/markuptest.diff Tue Jun 09 22:50:20 2015 +0200 @@ -0,0 +1,17 @@ +diff --git a/f b/f +--- a/f ++++ b/f +@@ -51,5 +51,12 @@ + begin(); + ++ int foo; ++ int bar; ++ int baz; ++ int space; ++ int tab; ++ + +- #define MAX_STEPS (48) ++ ++ #define MAX_STEPS (64) +
--- a/kallithea/tests/models/test_diff_parsers.py Tue Jun 09 22:50:20 2015 +0200 +++ b/kallithea/tests/models/test_diff_parsers.py Tue Jun 09 22:50:20 2015 +0200 @@ -275,3 +275,32 @@ data = [(x['filename'], x['operation'], x['stats']) for x in diff_proc_d] expected_data = DIFF_FIXTURES[diff_fixture] self.assertListEqual(expected_data, data) + + def test_diff_markup(self): + diff = fixture.load_resource('markuptest.diff', strip=False) + diff_proc = DiffProcessor(diff) + diff_proc_d = diff_proc.prepare() + chunks = diff_proc_d[0]['chunks'] + self.assertFalse(chunks[0]) + #from pprint import pprint; pprint(chunks[1]) + l = ['\n'] + for d in chunks[1]: + l.append('%(action)-7s %(new_lineno)3s %(old_lineno)3s %(line)r\n' % d) + s = ''.join(l) + print s + self.assertEqual(s, r''' +context ... ... u'@@ -51,5 +51,12 @@\n' +unmod 51 51 u'<u>\t</u>begin();\n' +unmod 52 52 u'<u>\t</u>\n' +add 53 u'<u>\t</u>int foo;<u class="cr"></u>\n' +add 54 u'<u>\t</u>int bar; <u class="cr"></u>\n' +add 55 u'<u>\t</u>int baz;<u>\t</u><u class="cr"></u>\n' +add 56 u'<u>\t</u>int space; <i></i>' +add 57 u'<u>\t</u>int tab;<u>\t</u>\n' +add 58 u'<u>\t</u>\n' +unmod 59 53 u' <i></i>' +del 54 u'<u>\t</u><del>#define MAX_STEPS (48)</del>\n' +add 60 u'<u>\t</u><ins><u class="cr"></u></ins>\n' +add 61 u'<u>\t</u>#define MAX_STEPS (64)<u class="cr"></u>\n' +unmod 62 55 u'\n' +''')