evennia/src/imc2/imc_ansi.py

60 lines
No EOL
2.5 KiB
Python

from src import ansi
from src.ansi import BaseParser, ANSITable
class IMCANSIParser(BaseParser):
"""
This parser is per the IMC2 specification.
"""
def __init__(self):
self.ansi_subs = [
# Random
(r'~Z', ANSITable.ansi["normal"]),
# Dark Grey
(r'~D', ANSITable.ansi["hilite"] + ANSITable.ansi["black"]),
(r'~z', ANSITable.ansi["hilite"] + ANSITable.ansi["black"]),
# Grey/reset
(r'~w', ANSITable.ansi["normal"]),
(r'~d', ANSITable.ansi["normal"]),
(r'~!', ANSITable.ansi["normal"]),
# Bold/hilite
(r'~L', ANSITable.ansi["hilite"]),
# White
(r'~W', ANSITable.ansi["normal"] + ANSITable.ansi["hilite"]),
# Dark Green
(r'~g', ANSITable.ansi["normal"] + ANSITable.ansi["green"]),
# Green
(r'~G', ANSITable.ansi["hilite"] + ANSITable.ansi["green"]),
# Dark magenta
(r'~p', ANSITable.ansi["normal"] + ANSITable.ansi["magenta"]),
(r'~m', ANSITable.ansi["normal"] + ANSITable.ansi["magenta"]),
# Magenta
(r'~M', ANSITable.ansi["hilite"] + ANSITable.ansi["magenta"]),
(r'~P', ANSITable.ansi["hilite"] + ANSITable.ansi["magenta"]),
# Black
(r'~x', ANSITable.ansi["normal"] + ANSITable.ansi["black"]),
# Cyan
(r'~c', ANSITable.ansi["normal"] + ANSITable.ansi["cyan"]),
# Dark Yellow (brown)
(r'~Y', ANSITable.ansi["hilite"] + ANSITable.ansi["yellow"]),
# Yellow
(r'~y', ANSITable.ansi["normal"] + ANSITable.ansi["yellow"]),
# Dark Blue
(r'~B', ANSITable.ansi["normal"] + ANSITable.ansi["blue"]),
# Blue
(r'~C', ANSITable.ansi["hilite"] + ANSITable.ansi["blue"]),
# Dark Red
(r'~r', ANSITable.ansi["normal"] + ANSITable.ansi["red"]),
# Red
(r'~R', ANSITable.ansi["normal"] + ANSITable.ansi["red"]),
# Dark Blue
(r'~b', ANSITable.ansi["normal"] + ANSITable.ansi["blue"]),
## Formatting
(r'\\r', ANSITable.ansi["normal"]),
(r'\\n', ANSITable.ansi["return"]),
]
def parse_ansi(*args, **kwargs):
"""
Shortcut to use the IMC2 ANSI parser.
"""
return ansi.parse_ansi(parser=IMCANSIParser(), *args, **kwargs)