Mercurial > diff-colorize
diff diff-colorize.py @ 28:58221373fc6f draft default tip
python3: port to Python 3
Pleasantly few changes required.
author | Augie Fackler <raf@durin42.com> |
---|---|
date | Thu, 14 Jul 2022 10:20:03 -0400 |
parents | 5f17911c4fe6 |
children |
line wrap: on
line diff
--- a/diff-colorize.py +++ b/diff-colorize.py @@ -3,6 +3,7 @@ import sys import os import fileinput +import functools has_256_color = (os.environ.get('TERM', None) == 'xterm-256color') @@ -48,7 +49,7 @@ def interleave(*sequences): def zip_pad(*iterables, **kw): "Downloaded from http://code.activestate.com/recipes/497007/" - from itertools import izip, chain + from itertools import chain if kw: assert len(kw) == 1 pad = kw["pad"] @@ -62,13 +63,14 @@ def interleave(*sequences): while 1: yield pad iterables = [chain(seq, pad_iter()) for seq in iterables] - return izip(*iterables) + return zip(*iterables) for objects in zip_pad(*sequences): for obj in objects: if obj is not None: yield obj +@functools.total_ordering class Substring(object): def __init__(self, a, a_start, a_stop, b, b_start, b_stop): self.a = a @@ -93,8 +95,8 @@ class Substring(object): def __hash__(self): return hash(self.substring()) - def __cmp__(self, other): - return cmp(self.a_start, other.a_start) + def __lt__(self, other): + return self.a_start < other.a_start def __eq__(self, other): return self.substring() == other.substring() def __str__(self): @@ -114,11 +116,11 @@ Clarified and slightly modified (to use """ a_len = len(a) b_len = len(b) - lengths = [[0] * (b_len + 1) for i in xrange(a_len + 1)] + lengths = [[0] * (b_len + 1) for i in range(a_len + 1)] substrings = set() greatest_length = current_run_length = 0 - for a_idx in xrange(a_len): - for b_idx in xrange(b_len): + for a_idx in range(a_len): + for b_idx in range(b_len): if a[a_idx] == b[b_idx]: current_run_length = lengths[a_idx][b_idx] + 1 lengths[a_idx+1][b_idx+1] = current_run_length @@ -140,7 +142,7 @@ def common_subsequence(a, b): "Returns all common substrings between a and b, which can be any finite indexable sliceable sequences, as Substring objects. Determines this by recursively calling itself on slices of a and b before and after each longest common substring." # Inspired by http://en.wikibooks.org/w/index.php?title=Algorithm_Implementation/Strings/Longest_common_subsequence&oldid=1912924#Python def LCS_length_matrix(a, b): - matrix = [[0] * (len(b) + 1) for i in xrange(len(a) + 1)] + matrix = [[0] * (len(b) + 1) for i in range(len(a) + 1)] for i, a_ch in enumerate(a): for j, b_ch in enumerate(b): if a_ch == b_ch: