|
|
@ -1,14 +1,19 @@
|
|
|
|
"""Handle chained inputs."""
|
|
|
|
"""Handle chained inputs."""
|
|
|
|
from typing import Dict, List, Optional
|
|
|
|
from typing import Dict, List, Optional
|
|
|
|
|
|
|
|
|
|
|
|
_COLOR_MAPPING = {"blue": 51, "yellow": 229, "pink": 219, "green": 85}
|
|
|
|
_TEXT_COLOR_MAPPING = {
|
|
|
|
|
|
|
|
"blue": "36;1",
|
|
|
|
|
|
|
|
"yellow": "33;1",
|
|
|
|
|
|
|
|
"pink": "38;5;200",
|
|
|
|
|
|
|
|
"green": "32;1",
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_color_mapping(
|
|
|
|
def get_color_mapping(
|
|
|
|
items: List[str], excluded_colors: Optional[List] = None
|
|
|
|
items: List[str], excluded_colors: Optional[List] = None
|
|
|
|
) -> Dict[str, str]:
|
|
|
|
) -> Dict[str, str]:
|
|
|
|
"""Get mapping for items to a support color."""
|
|
|
|
"""Get mapping for items to a support color."""
|
|
|
|
colors = list(_COLOR_MAPPING.keys())
|
|
|
|
colors = list(_TEXT_COLOR_MAPPING.keys())
|
|
|
|
if excluded_colors is not None:
|
|
|
|
if excluded_colors is not None:
|
|
|
|
colors = [c for c in colors if c not in excluded_colors]
|
|
|
|
colors = [c for c in colors if c not in excluded_colors]
|
|
|
|
color_mapping = {item: colors[i % len(colors)] for i, item in enumerate(items)}
|
|
|
|
color_mapping = {item: colors[i % len(colors)] for i, item in enumerate(items)}
|
|
|
@ -20,8 +25,8 @@ def print_text(text: str, color: Optional[str] = None, end: str = "") -> None:
|
|
|
|
if color is None:
|
|
|
|
if color is None:
|
|
|
|
print(text, end=end)
|
|
|
|
print(text, end=end)
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
color_str = _COLOR_MAPPING[color]
|
|
|
|
color_str = _TEXT_COLOR_MAPPING[color]
|
|
|
|
print(f"\u001b[48;5;{color_str}m{text}\x1b[0m", end=end)
|
|
|
|
print(f"\u001b[{color_str}m\033[1;3m{text}\u001b[0m", end=end)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ChainedInput:
|
|
|
|
class ChainedInput:
|
|
|
@ -29,14 +34,14 @@ class ChainedInput:
|
|
|
|
|
|
|
|
|
|
|
|
def __init__(self, text: str, verbose: bool = False):
|
|
|
|
def __init__(self, text: str, verbose: bool = False):
|
|
|
|
"""Initialize with verbose flag and initial text."""
|
|
|
|
"""Initialize with verbose flag and initial text."""
|
|
|
|
self.verbose = verbose
|
|
|
|
self._verbose = verbose
|
|
|
|
if self.verbose:
|
|
|
|
if self._verbose:
|
|
|
|
print_text(text, None)
|
|
|
|
print_text(text, None)
|
|
|
|
self._input = text
|
|
|
|
self._input = text
|
|
|
|
|
|
|
|
|
|
|
|
def add(self, text: str, color: Optional[str] = None) -> None:
|
|
|
|
def add(self, text: str, color: Optional[str] = None) -> None:
|
|
|
|
"""Add text to input, print if in verbose mode."""
|
|
|
|
"""Add text to input, print if in verbose mode."""
|
|
|
|
if self.verbose:
|
|
|
|
if self._verbose:
|
|
|
|
print_text(text, color)
|
|
|
|
print_text(text, color)
|
|
|
|
self._input += text
|
|
|
|
self._input += text
|
|
|
|
|
|
|
|
|
|
|
|