diff options
| author | Scott Gasch <[email protected]> | 2021-07-28 22:13:43 -0700 |
|---|---|---|
| committer | Scott Gasch <[email protected]> | 2021-07-28 22:13:43 -0700 |
| commit | 4faa994d32223c8d560d9dad0ca90a3f7eb10d6a (patch) | |
| tree | 1200e5615d94247a120b98a4ddceb2cd6674e0af /ansi.py | |
| parent | c79ecbf708a63a54a9c3e8d189b65d4794930082 (diff) | |
Money, Rate, CentCount and a bunch of bugfixes.
Diffstat (limited to 'ansi.py')
| -rwxr-xr-x | ansi.py | 36 |
1 files changed, 35 insertions, 1 deletions
@@ -1,9 +1,12 @@ #!/usr/bin/env python3 +from abc import abstractmethod import difflib +import io import logging +import re import sys -from typing import Dict, Optional, Tuple +from typing import Any, Callable, Dict, Iterable, Optional, Tuple logger = logging.getLogger(__name__) @@ -1846,6 +1849,37 @@ def bg(name: Optional[str] = "", return bg_24bit(red, green, blue) +class StdoutInterceptor(io.TextIOBase): + def __init__(self): + self.saved_stdout: Optional[io.TextIOBase] = None + self.buf = '' + + @abstractmethod + def write(self, s): + pass + + def __enter__(self) -> None: + self.saved_stdout = sys.stdout + sys.stdout = self + return None + + def __exit__(self, *args) -> bool: + sys.stdout = self.saved_stdout + print(self.buf) + return None + + +class ProgrammableColorizer(StdoutInterceptor): + def __init__(self, patterns: Iterable[Tuple[re.Pattern, Callable[[Any, re.Pattern], str]]]): + super().__init__() + self.patterns = [_ for _ in patterns] + + def write(self, s: str): + for pattern in self.patterns: + s = pattern[0].sub(pattern[1], s) + self.buf += s + + if __name__ == '__main__': def main() -> None: name = " ".join(sys.argv[1:]) |
