/src/comms/imc2lib/imc2_ansi.py
Python | 60 lines | 38 code | 7 blank | 15 comment | 1 complexity | 23d6482c5a7aabb5106f8bc88afae717 MD5 | raw file
Possible License(s): BSD-3-Clause
- """
- ANSI parser - this adds colour to text according to
- special markup strings.
- This is a IMC2 complacent version.
- """
- import re
- from src.utils import ansi
- class IMCANSIParser(ansi.ANSIParser):
- """
- This parser is per the IMC2 specification.
- """
- def __init__(self):
- normal = ansi.ANSI_NORMAL
- hilite = ansi.ANSI_HILITE
- self.ansi_map = [
- (r'~Z', normal), # Random
- (r'~x', normal + ansi.ANSI_BLACK), # Black
- (r'~D', hilite + ansi.ANSI_BLACK), # Dark Grey
- (r'~z', hilite + ansi.ANSI_BLACK),
- (r'~w', normal + ansi.ANSI_WHITE), # Grey
- (r'~W', hilite + ansi.ANSI_WHITE), # White
- (r'~g', normal + ansi.ANSI_GREEN), # Dark Green
- (r'~G', hilite + ansi.ANSI_GREEN), # Green
- (r'~p', normal + ansi.ANSI_MAGENTA), # Dark magenta
- (r'~m', normal + ansi.ANSI_MAGENTA),
- (r'~M', hilite + ansi.ANSI_MAGENTA), # Magenta
- (r'~P', hilite + ansi.ANSI_MAGENTA),
- (r'~c', normal + ansi.ANSI_CYAN), # Cyan
- (r'~y', normal + ansi.ANSI_YELLOW), # Dark Yellow (brown)
- (r'~Y', hilite + ansi.ANSI_YELLOW), # Yellow
- (r'~b', normal + ansi.ANSI_BLUE), # Dark Blue
- (r'~B', hilite + ansi.ANSI_BLUE), # Blue
- (r'~C', hilite + ansi.ANSI_BLUE),
- (r'~r', normal + ansi.ANSI_RED), # Dark Red
- (r'~R', hilite + ansi.ANSI_RED), # Red
- ## Formatting
- (r'~L', hilite), # Bold/hilite
- (r'~!', normal), # reset
- (r'\\r', normal),
- (r'\\n', ansi.ANSI_RETURN),
- ]
- # prepare regex matching
- self.ansi_sub = [(re.compile(sub[0], re.DOTALL), sub[1])
- for sub in self.ansi_map]
- # prepare matching ansi codes overall
- self.ansi_regex = re.compile("\033\[[0-9;]+m")
- ANSI_PARSER = IMCANSIParser()
- def parse_ansi(string, strip_ansi=False, parser=ANSI_PARSER):
- """
- Shortcut to use the IMC2 ANSI parser.
- """
- return parser.parse_ansi(string, strip_ansi=strip_ansi)