From fffef5e79470759bf3c8f9d2d90dce32702da14e Mon Sep 17 00:00:00 2001 From: jaseg Date: Mon, 27 Sep 2021 18:50:33 +0200 Subject: Diff export --- paper/diffinator.py | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) (limited to 'paper/diffinator.py') diff --git a/paper/diffinator.py b/paper/diffinator.py index 5ba4fdc..be856e6 100644 --- a/paper/diffinator.py +++ b/paper/diffinator.py @@ -2,6 +2,7 @@ import re import subprocess +import string import click @@ -21,9 +22,11 @@ def generate_git_tex_diff(texfile, bibliography, revision): bib_proc = subprocess.run(['git', 'diff', f'-U{bib_lines+1}', '--word-diff', '--color=always', revision, bibliography], check=True, capture_output=True) - - addition_re = re.compile('\033\\[32m\\{\\+(.*?)([^\\\\]%.*?)?\\+\\}\033\\[m') - deletion_re = re.compile('\033\\[31m\\[-(.*?)([^\\\\]%.*?)?\\-]\033\\[m') + ADDITION_RE_R = '\033\\[32m\\{\\+(.*?)([^\\\\]%.*?)?\\+\\}\033\\[m' + DELETION_RE_R = '\033\\[31m\\[-(.*?)([^\\\\]%.*?)?\\-]\033\\[m' + addition_re = re.compile(ADDITION_RE_R) + deletion_re = re.compile(DELETION_RE_R) + combined_re = re.compile(f'{DELETION_RE_R}{ADDITION_RE_R}') csi_re = re.compile('\033\\[.*?m') bibtex_entry_def_re = re.compile('@.*?{(.*?),') @@ -57,6 +60,26 @@ def generate_git_tex_diff(texfile, bibliography, revision): line = line.rstrip() if document_started: # diff results in preamble + + def suppress_small_changes(match): + old, _1, new, _2 = match.groups() + + new_chars = list(new) + for char in old: + if char not in string.ascii_letters: + continue + + if char not in new_chars: + return match.group(0) # return original text + + new_chars.remove(char) + + if any(char in string.ascii_letters for char in new_chars): + return match.group(0) # return original text + + return new + + line = combined_re.sub(suppress_small_changes, line) line = addition_re.sub(r' \\color{diffgreen}\1 \\color{black}', line) line = deletion_re.sub(r' \\color{diffred}\1 \\color{black}', line) @@ -67,9 +90,8 @@ def generate_git_tex_diff(texfile, bibliography, revision): print('\\definecolor{diffgreen}{HTML}{1e8449}') print('\\definecolor{diffred}{HTML}{cb4335}') - line = addition_re.sub(r'\1', line) - line = deletion_re.sub(r'\1', line) + line = deletion_re.sub(r'', line) line = csi_re.sub('', line) print(line) -- cgit