#!/usr/bin/env python3
+# © Copyright 2021-2022, Scott Gasch
+
"""A bunch of color names mapped into RGB tuples and some methods for
setting the text color, background, etc... using ANSI escape
-sequences."""
+sequences.
+
+"""
+import contextlib
import difflib
import io
import logging
import re
import sys
from abc import abstractmethod
-from typing import Any, Callable, Dict, Iterable, Optional, Tuple
+from typing import Any, Callable, Dict, Iterable, Literal, Optional, Tuple
from overrides import overrides
import logging_utils
import string_utils
-
logger = logging.getLogger(__name__)
# https://en.wikipedia.org/wiki/ANSI_escape_code
return bg_24bit(red, green, blue)
-class StdoutInterceptor(io.TextIOBase):
- """An interceptor for data written to stdout. Use as a context.
+class StdoutInterceptor(io.TextIOBase, contextlib.AbstractContextManager):
+ """An interceptor for data written to stdout. Use as a context."""
- """
def __init__(self):
super().__init__()
self.saved_stdout: io.TextIO = None
sys.stdout = self
return self
- def __exit__(self, *args) -> Optional[bool]:
+ def __exit__(self, *args) -> Literal[False]:
sys.stdout = self.saved_stdout
print(self.buf)
- return None
+ return False
class ProgrammableColorizer(StdoutInterceptor):
something (usually add color to) the match.
"""
+
def __init__(
self,
patterns: Iterable[Tuple[re.Pattern, Callable[[Any, re.Pattern], str]]],
if __name__ == '__main__':
+
def main() -> None:
import doctest