mirror of
https://github.com/chubin/cheat.sh.git
synced 2026-06-20 05:06:44 +02:00
142 lines
3.6 KiB
Python
142 lines
3.6 KiB
Python
"""
|
|
Colorize internal cheat sheets.
|
|
Will be merged with panela later.
|
|
"""
|
|
|
|
import re
|
|
|
|
from colorama import Fore, Back, Style
|
|
import colored
|
|
|
|
PALETTES = {
|
|
0: {
|
|
1: Fore.WHITE,
|
|
2: Style.DIM,
|
|
},
|
|
1: {
|
|
1: Fore.CYAN,
|
|
2: Fore.GREEN,
|
|
3: colored.fg("orange_3"),
|
|
4: Style.DIM,
|
|
5: Style.DIM,
|
|
},
|
|
2: {
|
|
1: Fore.RED,
|
|
2: Style.DIM,
|
|
},
|
|
}
|
|
|
|
|
|
def _reverse_palette(code):
|
|
return {1: Fore.BLACK + _back_color(code), 2: Style.DIM}
|
|
|
|
|
|
def _back_color(code):
|
|
if code == 0 or (isinstance(code, str) and code.lower() == "white"):
|
|
return Back.WHITE
|
|
if code == 1 or (isinstance(code, str) and code.lower() == "cyan"):
|
|
return Back.CYAN
|
|
if code == 2 or (isinstance(code, str) and code.lower() == "red"):
|
|
return Back.RED
|
|
|
|
return Back.WHITE
|
|
|
|
|
|
def colorize_internal(text, palette_number=1):
|
|
"""
|
|
Colorize `text`, use `palette`
|
|
"""
|
|
|
|
palette = PALETTES[palette_number]
|
|
palette_reverse = _reverse_palette(palette_number)
|
|
|
|
def _process_text(text):
|
|
text = text.group()[1:-1]
|
|
factor = 1
|
|
if text.startswith("-"):
|
|
text = text[1:]
|
|
factor = -1
|
|
stripped = text.lstrip("0123456789")
|
|
return (text, stripped, factor)
|
|
|
|
def _extract_color_number(text, stripped, factor=1):
|
|
return int(text[: len(text) - len(stripped)]) * factor
|
|
|
|
def _colorize_curlies_block(text):
|
|
text, stripped, factor = _process_text(text)
|
|
color_number = _extract_color_number(text, stripped, factor)
|
|
|
|
if stripped.startswith("="):
|
|
stripped = stripped[1:]
|
|
|
|
reverse = color_number < 0
|
|
if reverse:
|
|
color_number = -color_number
|
|
|
|
if reverse:
|
|
stripped = palette_reverse[color_number] + stripped + Style.RESET_ALL
|
|
else:
|
|
stripped = palette[color_number] + stripped + Style.RESET_ALL
|
|
|
|
return stripped
|
|
|
|
def _colorize_headers(text):
|
|
if text.group(0).endswith("\n"):
|
|
newline = "\n"
|
|
else:
|
|
newline = ""
|
|
|
|
color_number = 3
|
|
return palette[color_number] + text.group(0).strip() + Style.RESET_ALL + newline
|
|
|
|
text = re.sub("{.*?}", _colorize_curlies_block, text)
|
|
text = re.sub("#(.*?)\n", _colorize_headers, text)
|
|
return text
|
|
|
|
|
|
def colorize_internal_firstpage_v1(answer):
|
|
"""
|
|
Colorize "/:firstpage-v1".
|
|
Legacy.
|
|
"""
|
|
|
|
def _colorize_line(line):
|
|
if line.startswith("T"):
|
|
line = colored.fg("grey_62") + line + colored.attr("reset")
|
|
line = re.sub(
|
|
r"\{(.*?)\}",
|
|
colored.fg("orange_3") + r"\1" + colored.fg("grey_35"),
|
|
line,
|
|
)
|
|
return line
|
|
|
|
line = re.sub(
|
|
r"\[(F.*?)\]",
|
|
colored.bg("black") + colored.fg("cyan") + r"[\1]" + colored.attr("reset"),
|
|
line,
|
|
)
|
|
line = re.sub(
|
|
r"\[(g.*?)\]",
|
|
colored.bg("dark_gray")
|
|
+ colored.fg("grey_0")
|
|
+ r"[\1]"
|
|
+ colored.attr("reset"),
|
|
line,
|
|
)
|
|
line = re.sub(
|
|
r"\{(.*?)\}", colored.fg("orange_3") + r"\1" + colored.attr("reset"), line
|
|
)
|
|
line = re.sub(
|
|
r"<(.*?)>", colored.fg("cyan") + r"\1" + colored.attr("reset"), line
|
|
)
|
|
return line
|
|
|
|
lines = answer.splitlines()
|
|
answer_lines = lines[:9]
|
|
answer_lines.append(colored.fg("grey_35") + lines[9] + colored.attr("reset"))
|
|
for line in lines[10:]:
|
|
answer_lines.append(_colorize_line(line))
|
|
answer = "\n".join(answer_lines) + "\n"
|
|
|
|
return answer
|