Coverage for lib/lottie/utils/linediff.py: 0%
29 statements
« prev ^ index » next coverage.py v7.2.2, created at 2023-03-20 16:17 +0100
« prev ^ index » next coverage.py v7.2.2, created at 2023-03-20 16:17 +0100
1from io import StringIO
2from difflib import SequenceMatcher
3from ..exporters import prettyprint
6def difflines_str(a, b, widtha=None, widthb=None):
7 lines_a = a.splitlines()
8 lines_b = b.splitlines()
9 ia = 0
10 ib = 0
12 if widtha is None:
13 widtha = max(map(len, lines_a))
14 if widthb is None:
15 widthb = max(map(len, lines_b))
17 for ja, jb, size in SequenceMatcher(None, lines_a, lines_b, False).get_matching_blocks():
18 sideprinter(lines_a[ia:ja], lines_b[ib:jb], widtha, widthb, "\x1b[31m>", "=", "<\x1b[m")
19 ia = ja+size
20 ib = jb+size
21 sideprinter(lines_a[ja:ia], lines_b[jb:ib], widtha, widthb, "\x1b[m ", "|", " \x1b[m")
24def sideprinter(left, right, widtha=40, widthb=40, prefix="", infix=" | ", suffix=""):
25 if len(left) > len(right):
26 right += [""] * (len(left) - len(right))
27 else:
28 left += [""] * (len(right) - len(left))
29 for l, r in zip(left, right):
30 print("".join([prefix, l[:widtha].ljust(widtha), infix, r[:widthb].ljust(widthb), suffix]))
33def difflines(a, b, widtha=None, widthb=None):
34 ioa = StringIO()
35 prettyprint(a, ioa)
36 iob = StringIO()
37 prettyprint(b, iob)
38 difflines_str(ioa.getvalue(), iob.getvalue(), widtha, widthb)