mirror of
https://github.com/evennia/evennia.git
synced 2026-03-19 22:36:31 +01:00
94 lines
2.4 KiB
Python
Executable file
94 lines
2.4 KiB
Python
Executable file
import re
|
|
"""
|
|
ANSI related stuff.
|
|
"""
|
|
ansi = {}
|
|
ansi["beep"] = "\07"
|
|
ansi["escape"] = "\033"
|
|
ansi["normal"] = "\033[0m"
|
|
|
|
ansi["underline"] = "\033[4m"
|
|
ansi["hilite"] = "\033[1m"
|
|
ansi["blink"] = "\033[5m"
|
|
ansi["inverse"] = "\033[7m"
|
|
ansi["inv_hilite"] = "\033[1;7m"
|
|
ansi["inv_blink"] = "\033[7;5m"
|
|
ansi["blink_hilite"] = "\033[1;5m"
|
|
ansi["inv_blink_hilite"] = "\033[1;5;7m"
|
|
|
|
# Foreground colors
|
|
ansi["black"] = "\033[30m"
|
|
ansi["red"] = "\033[31m"
|
|
ansi["green"] = "\033[32m"
|
|
ansi["yellow"] = "\033[33m"
|
|
ansi["blue"] = "\033[34m"
|
|
ansi["magenta"] = "\033[35m"
|
|
ansi["cyan"] = "\033[36m"
|
|
ansi["white"] = "\033[37m"
|
|
|
|
# Background colors
|
|
ansi["back_black"] = "\033[40m"
|
|
ansi["back_red"] = "\033[41m"
|
|
ansi["back_green"] = "\033[42m"
|
|
ansi["back_yellow"] = "\033[43m"
|
|
ansi["back_blue"] = "\033[44m"
|
|
ansi["back_magenta"] = "\033[45m"
|
|
ansi["back_cyan"] = "\033[46m"
|
|
ansi["back_white"] = "\033[47m"
|
|
|
|
# Formatting Characters
|
|
ansi["return"] = "\r\n"
|
|
ansi["tab"] = "\t"
|
|
ansi["space"] = " "
|
|
|
|
def parse_ansi(string, strip_ansi=False, strip_formatting=False):
|
|
"""
|
|
Parses a string, subbing color codes as needed.
|
|
"""
|
|
if strip_formatting:
|
|
char_return = ""
|
|
char_tab = ""
|
|
char_space = ""
|
|
else:
|
|
char_return = ansi["return"]
|
|
char_tab = ansi["tab"]
|
|
char_space = ansi["space"]
|
|
|
|
ansi_subs = [
|
|
(r'%r', char_return),
|
|
(r'%t', char_tab),
|
|
(r'%b', char_space),
|
|
(r'%cf', ansi["blink"]),
|
|
(r'%ci', ansi["inverse"]),
|
|
(r'%ch', ansi["hilite"]),
|
|
(r'%cn', ansi["normal"]),
|
|
(r'%cx', ansi["black"]),
|
|
(r'%cX', ansi["back_black"]),
|
|
(r'%cr', ansi["red"]),
|
|
(r'%cR', ansi["back_red"]),
|
|
(r'%cg', ansi["green"]),
|
|
(r'%cG', ansi["back_green"]),
|
|
(r'%cy', ansi["yellow"]),
|
|
(r'%cY', ansi["back_yellow"]),
|
|
(r'%cb', ansi["blue"]),
|
|
(r'%cB', ansi["back_blue"]),
|
|
(r'%cm', ansi["magenta"]),
|
|
(r'%cM', ansi["back_magenta"]),
|
|
(r'%cc', ansi["cyan"]),
|
|
(r'%cC', ansi["back_cyan"]),
|
|
(r'%cw', ansi["white"]),
|
|
(r'%cW', ansi["back_white"]),
|
|
]
|
|
|
|
for sub in ansi_subs:
|
|
p = re.compile(sub[0], re.DOTALL)
|
|
if strip_ansi:
|
|
string = p.sub("", string)
|
|
else:
|
|
string = p.sub(sub[1], string)
|
|
|
|
if strip_ansi:
|
|
return '%s' % (string)
|
|
else:
|
|
return '%s%s' % (string, ansi["normal"])
|
|
|