import itertools import enum class Color(str, enum.Enum): RESET = "\033[0m" BLACK = "\033[30m" RED = "\033[31m" GREEN = "\033[32m" YELLOW = "\033[33m" BLUE = "\033[34m" MAGENTA = "\033[35m" CYAN = "\033[36m" GRAY = "\033[37m" WHITE = "\033[38m" class Diff: def __init__(self, c1: str, c2: str): self.prev = "" self.c1 = c1 self.c2 = c2 @staticmethod def get(s1: str, s2: str, color_same: str, color_diff: str, color_reset: str = Color.RESET): out = "" is_diff = None for c1, c2 in itertools.zip_longest(s1, s2): if c2 is None: break if c1 == c2: if is_diff != False: out += color_same is_diff = False out += c2 else: if is_diff != True: out += color_diff is_diff = True out += c2 out += color_reset return out def consume(self, s: str): print(self.get(self.prev, s, self.c1, self.c2)) self.prev = s