Fix isolated unittests for color markup. Issues with module reloading.
This commit is contained in:
parent
536bb28470
commit
9f03e4a3f4
5 changed files with 214 additions and 197 deletions
|
|
@ -691,6 +691,14 @@ class CmdColorTest(COMMAND_DEFAULT_CLASS):
|
||||||
# this is used by the parent
|
# this is used by the parent
|
||||||
account_caller = True
|
account_caller = True
|
||||||
|
|
||||||
|
# the slices of the ANSI_PARSER lists to use for retrieving the
|
||||||
|
# relevant color tags to display. Replace if using another schema.
|
||||||
|
# This command can only show one set of markup.
|
||||||
|
slice_bright_fg = slice(7, 15) # from ANSI_PARSER.ansi_map
|
||||||
|
slice_dark_fg = slice(15, 23) # from ANSI_PARSER.ansi_map
|
||||||
|
slice_dark_bg = slice(-8, None) # from ANSI_PARSER.ansi_map
|
||||||
|
slice_bright_bg = slice(None, None) # from ANSI_PARSER.ansi_xterm256_bright_bg_map
|
||||||
|
|
||||||
def table_format(self, table):
|
def table_format(self, table):
|
||||||
"""
|
"""
|
||||||
Helper method to format the ansi/xterm256 tables.
|
Helper method to format the ansi/xterm256 tables.
|
||||||
|
|
@ -716,14 +724,16 @@ class CmdColorTest(COMMAND_DEFAULT_CLASS):
|
||||||
ap = ansi.ANSI_PARSER
|
ap = ansi.ANSI_PARSER
|
||||||
# ansi colors
|
# ansi colors
|
||||||
# show all ansi color-related codes
|
# show all ansi color-related codes
|
||||||
col1 = ["%s%s|n" % (code, code.replace("|", "||")) for code, _ in ap.ansi_map[48:56]]
|
bright_fg = ["%s%s|n" % (code, code.replace("|", "||"))
|
||||||
col2 = ["%s%s|n" % (code, code.replace("|", "||")) for code, _ in ap.ansi_map[56:64]]
|
for code, _ in ap.ansi_map[self.slice_bright_fg]]
|
||||||
col3 = ["%s%s|n" % (code.replace("\\", ""), code.replace("|", "||").replace("\\", ""))
|
dark_fg = ["%s%s|n" % (code, code.replace("|", "||"))
|
||||||
for code, _ in ap.ansi_map[-8:]]
|
for code, _ in ap.ansi_map[self.slice_dark_fg]]
|
||||||
col4 = ["%s%s|n" % (code.replace("\\", ""), code.replace("|", "||").replace("\\", ""))
|
dark_bg = ["%s%s|n" % (code.replace("\\", ""), code.replace("|", "||").replace("\\", ""))
|
||||||
for code, _ in ap.ansi_bright_bgs[-8:]]
|
for code, _ in ap.ansi_map[self.slice_dark_bg]]
|
||||||
col2.extend(["" for _ in range(len(col1)-len(col2))])
|
bright_bg = ["%s%s|n" % (code.replace("\\", ""), code.replace("|", "||").replace("\\", ""))
|
||||||
table = utils.format_table([col1, col2, col4, col3])
|
for code, _ in ap.ansi_xterm256_bright_bg_map[self.slice_bright_bg]]
|
||||||
|
dark_fg.extend(["" for _ in range(len(bright_fg)-len(dark_fg))])
|
||||||
|
table = utils.format_table([bright_fg, dark_fg, bright_bg, dark_bg])
|
||||||
string = "ANSI colors:"
|
string = "ANSI colors:"
|
||||||
for row in table:
|
for row in table:
|
||||||
string += "\n " + " ".join(row)
|
string += "\n " + " ".join(row)
|
||||||
|
|
|
||||||
|
|
@ -992,69 +992,77 @@ from evennia.contrib import color_markups
|
||||||
from evennia.utils import ansi
|
from evennia.utils import ansi
|
||||||
|
|
||||||
|
|
||||||
#class TestColorMarkup(EvenniaTest):
|
class TestColorMarkup(EvenniaTest):
|
||||||
#
|
|
||||||
# def test_default_markup(self):
|
def test_default_markup(self):
|
||||||
# reload(ansi)
|
reload(ansi)
|
||||||
# self.assertEqual(ansi.parse_ansi("A |rred test"), 'A \x1b[1m\x1b[31mred test')
|
self.assertEqual(ansi.parse_ansi("A |rred test"), 'A \x1b[1m\x1b[31mred test')
|
||||||
# self.assertEqual(ansi.parse_ansi("A {rred test"), 'A {rred test')
|
self.assertEqual(ansi.parse_ansi("A {rred test"), 'A {rred test')
|
||||||
# self.assertEqual(ansi.parse_ansi("A %crred test"), "A %crred test")
|
self.assertEqual(ansi.parse_ansi("A %crred test"), "A %crred test")
|
||||||
#
|
|
||||||
# def tearDown(self):
|
@override_settings(
|
||||||
# reload(ansi)
|
COLOR_ANSI_EXTRA_MAP=[],
|
||||||
#
|
COLOR_XTERM256_EXTRA_FG=[],
|
||||||
# @override_settings(
|
COLOR_XTERM256_EXTRA_BG=[],
|
||||||
# COLOR_ANSI_EXTRA_MAP=color_markups.CURLY_COLOR_ANSI_EXTRA_MAP,
|
COLOR_XTERM256_EXTRA_GFG=[],
|
||||||
# COLOR_XTERM256_EXTRA_FG=color_markups.CURLY_COLOR_XTERM256_EXTRA_FG,
|
COLOR_XTERM256_EXTRA_GBG=[],
|
||||||
# COLOR_XTERM256_EXTRA_BG=color_markups.CURLY_COLOR_XTERM256_EXTRA_BG,
|
COLOR_ANSI_XTERM256_BRIGHT_BG_EXTRA_MAP=[],
|
||||||
# COLOR_XTERM256_EXTRA_GFG=color_markups.CURLY_COLOR_XTERM256_EXTRA_GFG,
|
COLOR_NO_DEFAULT=False)
|
||||||
# COLOR_XTERM256_EXTRA_GBG=color_markups.CURLY_COLOR_XTERM256_EXTRA_GBG,
|
def tearDown(self):
|
||||||
# COLOR_ANSI_BRIGHT_BG_EXTRA_MAP=color_markups.CURLY_COLOR_ANSI_BRIGHT_BG_EXTRA_MAP)
|
reload(ansi)
|
||||||
# def test_curly_markup(self):
|
|
||||||
# reload(ansi) # this is important since the module is initialized
|
@override_settings(
|
||||||
# self.assertEqual(ansi.parse_ansi("A |rred test"), 'A \x1b[1m\x1b[31mred test')
|
COLOR_ANSI_EXTRA_MAP=color_markups.CURLY_COLOR_ANSI_EXTRA_MAP,
|
||||||
# self.assertEqual(ansi.parse_ansi("A {rred test"), 'A \x1b[1m\x1b[31mred test')
|
COLOR_XTERM256_EXTRA_FG=color_markups.CURLY_COLOR_XTERM256_EXTRA_FG,
|
||||||
# self.assertEqual(ansi.parse_ansi("A {[Rred test"), 'A \x1b[41mred test')
|
COLOR_XTERM256_EXTRA_BG=color_markups.CURLY_COLOR_XTERM256_EXTRA_BG,
|
||||||
# self.assertEqual(ansi.parse_ansi("A |500red test"), 'A \x1b[1m\x1b[31mred test')
|
COLOR_XTERM256_EXTRA_GFG=color_markups.CURLY_COLOR_XTERM256_EXTRA_GFG,
|
||||||
# self.assertEqual(ansi.parse_ansi("A {500red test"), 'A \x1b[1m\x1b[31mred test')
|
COLOR_XTERM256_EXTRA_GBG=color_markups.CURLY_COLOR_XTERM256_EXTRA_GBG,
|
||||||
# self.assertEqual(ansi.parse_ansi("A {[500red test"), 'A \x1b[41mred test')
|
COLOR_ANSI_XTERM256_BRIGHT_BG_EXTRA_MAP=color_markups.CURLY_COLOR_ANSI_XTERM256_BRIGHT_BG_EXTRA_MAP)
|
||||||
# self.assertEqual(ansi.parse_ansi("A {=hgray test"), 'A \x1b[1m\x1b[30mgray test')
|
def test_curly_markup(self):
|
||||||
# self.assertEqual(ansi.parse_ansi("A {[=hgray test"), 'A \x1b[40mgray test')
|
reload(ansi) # this is important since the module is initialized
|
||||||
# self.assertEqual(ansi.parse_ansi("A %crred test"), "A %crred test")
|
self.assertEqual(ansi.parse_ansi("A |rred test"), 'A \x1b[1m\x1b[31mred test')
|
||||||
# # fake ansi bright background
|
self.assertEqual(ansi.parse_ansi("A {rred test"), 'A \x1b[1m\x1b[31mred test')
|
||||||
# self.assertEqual(ansi.parse_ansi("A {[rred test"), 'A \x1b[41mred test')
|
self.assertEqual(ansi.parse_ansi("A {[Rred test"), 'A \x1b[41mred test')
|
||||||
#
|
self.assertEqual(ansi.parse_ansi("A |500red test"), 'A \x1b[1m\x1b[31mred test')
|
||||||
# @override_settings(
|
self.assertEqual(ansi.parse_ansi("A {500red test"), 'A \x1b[1m\x1b[31mred test')
|
||||||
# COLOR_ANSI_EXTRA_MAP=color_markups.MUX_COLOR_ANSI_EXTRA_MAP,
|
self.assertEqual(ansi.parse_ansi("A {[500red test"), 'A \x1b[41mred test')
|
||||||
# COLOR_XTERM256_EXTRA_FG=color_markups.MUX_COLOR_XTERM256_EXTRA_FG,
|
self.assertEqual(ansi.parse_ansi("A {=hgray test"), 'A \x1b[1m\x1b[30mgray test')
|
||||||
# COLOR_XTERM256_EXTRA_BG=color_markups.MUX_COLOR_XTERM256_EXTRA_BG,
|
self.assertEqual(ansi.parse_ansi("A {[=hgray test"), 'A \x1b[40mgray test')
|
||||||
# COLOR_XTERM256_EXTRA_GFG=color_markups.MUX_COLOR_XTERM256_EXTRA_GFG,
|
self.assertEqual(ansi.parse_ansi("A %crred test"), "A %crred test")
|
||||||
# COLOR_XTERM256_EXTRA_GBG=color_markups.MUX_COLOR_XTERM256_EXTRA_GBG,
|
# fake ansi bright background
|
||||||
# COLOR_ANSI_BRIGHT_BG_EXTRA_MAP=color_markups.MUX_COLOR_ANSI_BRIGHT_BG_EXTRA_MAP)
|
self.assertEqual(ansi.parse_ansi("A {[rred test"), 'A \x1b[41mred test')
|
||||||
# def test_mux_markup(self):
|
|
||||||
# reload(ansi)
|
@override_settings(
|
||||||
# self.assertEqual(ansi.parse_ansi("A |rred test"), 'A \x1b[1m\x1b[31mred test')
|
COLOR_ANSI_EXTRA_MAP=color_markups.MUX_COLOR_ANSI_EXTRA_MAP,
|
||||||
# self.assertEqual(ansi.parse_ansi("A %ch%crred test"), 'A \x1b[1m\x1b[31mred test')
|
COLOR_XTERM256_EXTRA_FG=color_markups.MUX_COLOR_XTERM256_EXTRA_FG,
|
||||||
# self.assertEqual(ansi.parse_ansi("A %ch%crred test"), 'A \x1b[1m\x1b[31mred test')
|
COLOR_XTERM256_EXTRA_BG=color_markups.MUX_COLOR_XTERM256_EXTRA_BG,
|
||||||
# self.assertEqual(ansi.parse_ansi("A |500red test"), 'A \x1b[1m\x1b[31mred test')
|
COLOR_XTERM256_EXTRA_GFG=color_markups.MUX_COLOR_XTERM256_EXTRA_GFG,
|
||||||
# self.assertEqual(ansi.parse_ansi("A %c500red test"), 'A \x1b[1m\x1b[31mred test')
|
COLOR_XTERM256_EXTRA_GBG=color_markups.MUX_COLOR_XTERM256_EXTRA_GBG,
|
||||||
# self.assertEqual(ansi.parse_ansi("A %c[500red test"), 'A \x1b[41mred test')
|
COLOR_ANSI_XTERM256_BRIGHT_BG_EXTRA_MAP=color_markups.MUX_COLOR_ANSI_XTERM256_BRIGHT_BG_EXTRA_MAP)
|
||||||
# self.assertEqual(ansi.parse_ansi("A %c=hgray test"), 'A \x1b[1m\x1b[30mgray test')
|
def test_mux_markup(self):
|
||||||
# self.assertEqual(ansi.parse_ansi("A %c[=hgray test"), 'A \x1b[40mgray test')
|
reload(ansi)
|
||||||
# self.assertEqual(ansi.parse_ansi("A {rred test"), "A {rred test")
|
self.assertEqual(ansi.parse_ansi("A |rred test"), 'A \x1b[1m\x1b[31mred test')
|
||||||
# # fake ansi bright background
|
self.assertEqual(ansi.parse_ansi("A %ch%crred test"), 'A \x1b[1m\x1b[31mred test')
|
||||||
# self.assertEqual(ansi.parse_ansi("A %ch%cRred test"), 'A \x1b[41mred test')
|
self.assertEqual(ansi.parse_ansi("A %ch%crred test"), 'A \x1b[1m\x1b[31mred test')
|
||||||
#
|
self.assertEqual(ansi.parse_ansi("A |500red test"), 'A \x1b[1m\x1b[31mred test')
|
||||||
# @override_settings(
|
self.assertEqual(ansi.parse_ansi("A %c500red test"), 'A \x1b[1m\x1b[31mred test')
|
||||||
# COLOR_ANSI_EXTRA_MAP=color_markups.MUX_COLOR_ANSI_EXTRA_MAP,
|
self.assertEqual(ansi.parse_ansi("A %c[500red test"), 'A \x1b[41mred test')
|
||||||
# COLOR_XTERM256_EXTRA_FG=color_markups.MUX_COLOR_XTERM256_EXTRA_FG,
|
self.assertEqual(ansi.parse_ansi("A %c=hgray test"), 'A \x1b[1m\x1b[30mgray test')
|
||||||
# COLOR_XTERM256_EXTRA_BG=color_markups.MUX_COLOR_XTERM256_EXTRA_BG,
|
self.assertEqual(ansi.parse_ansi("A %c[=hgray test"), 'A \x1b[40mgray test')
|
||||||
# COLOR_XTERM256_EXTRA_GFG=color_markups.MUX_COLOR_XTERM256_EXTRA_GFG,
|
self.assertEqual(ansi.parse_ansi("A {rred test"), "A {rred test")
|
||||||
# COLOR_XTERM256_EXTRA_GBG=color_markups.MUX_COLOR_XTERM256_EXTRA_GBG,
|
# fake ansi bright background
|
||||||
# COLOR_ANSI_BRIGHT_BG_EXTRA_MAP=color_markups.MUX_COLOR_ANSI_BRIGHT_BG_EXTRA_MAP,
|
self.assertEqual(ansi.parse_ansi("A %ch%cRred test"), 'A \x1b[41mred test')
|
||||||
# COLOR_NO_DEFAULT=True)
|
|
||||||
# def test_override(self):
|
@override_settings(
|
||||||
# reload(ansi)
|
COLOR_ANSI_EXTRA_MAP=color_markups.MUX_COLOR_ANSI_EXTRA_MAP,
|
||||||
# self.assertEqual(ansi.parse_ansi("A |rred test"), "A |rred test")
|
COLOR_XTERM256_EXTRA_FG=color_markups.MUX_COLOR_XTERM256_EXTRA_FG,
|
||||||
# self.assertEqual(ansi.parse_ansi("A {rred test"), "A {rred test")
|
COLOR_XTERM256_EXTRA_BG=color_markups.MUX_COLOR_XTERM256_EXTRA_BG,
|
||||||
# self.assertEqual(ansi.parse_ansi("A %ch%crred test"), 'A \x1b[1m\x1b[31mred test')
|
COLOR_XTERM256_EXTRA_GFG=color_markups.MUX_COLOR_XTERM256_EXTRA_GFG,
|
||||||
|
COLOR_XTERM256_EXTRA_GBG=color_markups.MUX_COLOR_XTERM256_EXTRA_GBG,
|
||||||
|
COLOR_ANSI_XTERM256_BRIGHT_BG_EXTRA_MAP=color_markups.MUX_COLOR_ANSI_XTERM256_BRIGHT_BG_EXTRA_MAP,
|
||||||
|
COLOR_NO_DEFAULT=True)
|
||||||
|
def test_override(self):
|
||||||
|
reload(ansi)
|
||||||
|
self.assertEqual(ansi.parse_ansi("A |rred test"), "A |rred test")
|
||||||
|
self.assertEqual(ansi.parse_ansi("A {rred test"), "A {rred test")
|
||||||
|
self.assertEqual(ansi.parse_ansi("A %ch%crred test"), 'A \x1b[1m\x1b[31mred test')
|
||||||
|
|
|
||||||
|
|
@ -354,7 +354,7 @@ COLOR_XTERM256_EXTRA_GBG = []
|
||||||
# ANSI does not support bright backgrounds, so Evennia fakes this by mapping it to
|
# ANSI does not support bright backgrounds, so Evennia fakes this by mapping it to
|
||||||
# XTERM256 backgrounds where supported. This is a list of tuples that maps the wanted
|
# XTERM256 backgrounds where supported. This is a list of tuples that maps the wanted
|
||||||
# regex to a valid XTERM256 background tag, such as `(r'{[r', r'{[500')`.
|
# regex to a valid XTERM256 background tag, such as `(r'{[r', r'{[500')`.
|
||||||
COLOR_ANSI_BRIGHT_BG_EXTRA_MAP = []
|
COLOR_ANSI_XTERM256_BRIGHT_BG_EXTRA_MAP = []
|
||||||
# If set True, the above color settings *replace* the default |-style color markdown
|
# If set True, the above color settings *replace* the default |-style color markdown
|
||||||
# rather than extend it.
|
# rather than extend it.
|
||||||
COLOR_NO_DEFAULT = False
|
COLOR_NO_DEFAULT = False
|
||||||
|
|
|
||||||
|
|
@ -87,6 +87,125 @@ class ANSIParser(object):
|
||||||
an extra | for Merc-style codes
|
an extra | for Merc-style codes
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
# Mapping using {r {n etc
|
||||||
|
|
||||||
|
ansi_map = [
|
||||||
|
|
||||||
|
# alternative |-format
|
||||||
|
|
||||||
|
(r'|n', ANSI_NORMAL), # reset
|
||||||
|
(r'|/', ANSI_RETURN), # line break
|
||||||
|
(r'|-', ANSI_TAB), # tab
|
||||||
|
(r'|_', ANSI_SPACE), # space
|
||||||
|
(r'|*', ANSI_INVERSE), # invert
|
||||||
|
(r'|^', ANSI_BLINK), # blinking text (very annoying and not supported by all clients)
|
||||||
|
(r'|u', ANSI_UNDERLINE), # underline
|
||||||
|
|
||||||
|
(r'|r', ANSI_HILITE + ANSI_RED),
|
||||||
|
(r'|g', ANSI_HILITE + ANSI_GREEN),
|
||||||
|
(r'|y', ANSI_HILITE + ANSI_YELLOW),
|
||||||
|
(r'|b', ANSI_HILITE + ANSI_BLUE),
|
||||||
|
(r'|m', ANSI_HILITE + ANSI_MAGENTA),
|
||||||
|
(r'|c', ANSI_HILITE + ANSI_CYAN),
|
||||||
|
(r'|w', ANSI_HILITE + ANSI_WHITE), # pure white
|
||||||
|
(r'|x', ANSI_HILITE + ANSI_BLACK), # dark grey
|
||||||
|
|
||||||
|
(r'|R', ANSI_UNHILITE + ANSI_RED),
|
||||||
|
(r'|G', ANSI_UNHILITE + ANSI_GREEN),
|
||||||
|
(r'|Y', ANSI_UNHILITE + ANSI_YELLOW),
|
||||||
|
(r'|B', ANSI_UNHILITE + ANSI_BLUE),
|
||||||
|
(r'|M', ANSI_UNHILITE + ANSI_MAGENTA),
|
||||||
|
(r'|C', ANSI_UNHILITE + ANSI_CYAN),
|
||||||
|
(r'|W', ANSI_UNHILITE + ANSI_WHITE), # light grey
|
||||||
|
(r'|X', ANSI_UNHILITE + ANSI_BLACK), # pure black
|
||||||
|
|
||||||
|
# hilight-able colors
|
||||||
|
(r'|h', ANSI_HILITE),
|
||||||
|
(r'|H', ANSI_UNHILITE),
|
||||||
|
|
||||||
|
(r'|!R', ANSI_RED),
|
||||||
|
(r'|!G', ANSI_GREEN),
|
||||||
|
(r'|!Y', ANSI_YELLOW),
|
||||||
|
(r'|!B', ANSI_BLUE),
|
||||||
|
(r'|!M', ANSI_MAGENTA),
|
||||||
|
(r'|!C', ANSI_CYAN),
|
||||||
|
(r'|!W', ANSI_WHITE), # light grey
|
||||||
|
(r'|!X', ANSI_BLACK), # pure black
|
||||||
|
|
||||||
|
# normal ANSI backgrounds
|
||||||
|
(r'|[R', ANSI_BACK_RED),
|
||||||
|
(r'|[G', ANSI_BACK_GREEN),
|
||||||
|
(r'|[Y', ANSI_BACK_YELLOW),
|
||||||
|
(r'|[B', ANSI_BACK_BLUE),
|
||||||
|
(r'|[M', ANSI_BACK_MAGENTA),
|
||||||
|
(r'|[C', ANSI_BACK_CYAN),
|
||||||
|
(r'|[W', ANSI_BACK_WHITE), # light grey background
|
||||||
|
(r'|[X', ANSI_BACK_BLACK) # pure black background
|
||||||
|
]
|
||||||
|
|
||||||
|
ansi_xterm256_bright_bg_map = [
|
||||||
|
# "bright" ANSI backgrounds using xterm256 since ANSI
|
||||||
|
# standard does not support it (will
|
||||||
|
# fallback to dark ANSI background colors if xterm256
|
||||||
|
# is not supported by client)
|
||||||
|
|
||||||
|
# |-style variations
|
||||||
|
(r'|[r', r'|[500'),
|
||||||
|
(r'|[g', r'|[050'),
|
||||||
|
(r'|[y', r'|[550'),
|
||||||
|
(r'|[b', r'|[005'),
|
||||||
|
(r'|[m', r'|[505'),
|
||||||
|
(r'|[c', r'|[055'),
|
||||||
|
(r'|[w', r'|[555'), # white background
|
||||||
|
(r'|[x', r'|[222')] # dark grey background
|
||||||
|
|
||||||
|
# xterm256. These are replaced directly by
|
||||||
|
# the sub_xterm256 method
|
||||||
|
|
||||||
|
if settings.COLOR_NO_DEFAULT:
|
||||||
|
ansi_map = settings.COLOR_ANSI_EXTRA_MAP
|
||||||
|
xterm256_fg = settings.COLOR_XTERM256_EXTRA_FG
|
||||||
|
xterm256_bg = settings.COLOR_XTERM256_EXTRA_BG
|
||||||
|
xterm256_gfg = settings.COLOR_XTERM256_EXTRA_GFG
|
||||||
|
xterm256_gbg = settings.COLOR_XTERM256_EXTRA_GBG
|
||||||
|
ansi_xterm256_bright_bg_map = settings.COLOR_ANSI_XTERM256_BRIGHT_BG_EXTRA_MAP
|
||||||
|
else:
|
||||||
|
xterm256_fg = [r'\|([0-5])([0-5])([0-5])'] # |123 - foreground colour
|
||||||
|
xterm256_bg = [r'\|\[([0-5])([0-5])([0-5])'] # |[123 - background colour
|
||||||
|
xterm256_gfg = [r'\|=([a-z])'] # |=a - greyscale foreground
|
||||||
|
xterm256_gbg = [r'\|\[=([a-z])'] # |[=a - greyscale background
|
||||||
|
ansi_map += settings.COLOR_ANSI_EXTRA_MAP
|
||||||
|
xterm256_fg += settings.COLOR_XTERM256_EXTRA_FG
|
||||||
|
xterm256_bg += settings.COLOR_XTERM256_EXTRA_BG
|
||||||
|
xterm256_gfg += settings.COLOR_XTERM256_EXTRA_GFG
|
||||||
|
xterm256_gbg += settings.COLOR_XTERM256_EXTRA_GBG
|
||||||
|
ansi_xterm256_bright_bg_map += settings.COLOR_ANSI_XTERM256_BRIGHT_BG_EXTRA_MAP
|
||||||
|
|
||||||
|
mxp_re = r'\|lc(.*?)\|lt(.*?)\|le'
|
||||||
|
|
||||||
|
# prepare regex matching
|
||||||
|
brightbg_sub = re.compile(r"|".join([r"(?<!\|)%s" % re.escape(tup[0])
|
||||||
|
for tup in ansi_xterm256_bright_bg_map]), re.DOTALL)
|
||||||
|
xterm256_fg_sub = re.compile(r"|".join(xterm256_fg), re.DOTALL)
|
||||||
|
xterm256_bg_sub = re.compile(r"|".join(xterm256_bg), re.DOTALL)
|
||||||
|
xterm256_gfg_sub = re.compile(r"|".join(xterm256_gfg), re.DOTALL)
|
||||||
|
xterm256_gbg_sub = re.compile(r"|".join(xterm256_gbg), re.DOTALL)
|
||||||
|
|
||||||
|
# xterm256_sub = re.compile(r"|".join([tup[0] for tup in xterm256_map]), re.DOTALL)
|
||||||
|
ansi_sub = re.compile(r"|".join([re.escape(tup[0]) for tup in ansi_map]), re.DOTALL)
|
||||||
|
mxp_sub = re.compile(mxp_re, re.DOTALL)
|
||||||
|
|
||||||
|
# used by regex replacer to correctly map ansi sequences
|
||||||
|
ansi_map_dict = dict(ansi_map)
|
||||||
|
ansi_xterm256_bright_bg_map_dict = dict(ansi_xterm256_bright_bg_map)
|
||||||
|
|
||||||
|
# prepare matching ansi codes overall
|
||||||
|
ansi_re = r"\033\[[0-9;]+m"
|
||||||
|
ansi_regex = re.compile(ansi_re)
|
||||||
|
|
||||||
|
# escapes - these double-chars will be replaced with a single
|
||||||
|
# instance of each
|
||||||
|
ansi_escapes = re.compile(r"(%s)" % "|".join(ANSI_ESCAPES), re.DOTALL)
|
||||||
def sub_ansi(self, ansimatch):
|
def sub_ansi(self, ansimatch):
|
||||||
"""
|
"""
|
||||||
Replacer used by `re.sub` to replace ANSI
|
Replacer used by `re.sub` to replace ANSI
|
||||||
|
|
@ -113,7 +232,7 @@ class ANSIParser(object):
|
||||||
processed (str): The processed match string.
|
processed (str): The processed match string.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
return self.ansi_bright_bgs_map.get(ansimatch.group(), "")
|
return self.ansi_xterm256_bright_bg_map_dict.get(ansimatch.group(), "")
|
||||||
|
|
||||||
def sub_xterm256(self, rgbmatch, use_xterm256=False, color_type="fg"):
|
def sub_xterm256(self, rgbmatch, use_xterm256=False, color_type="fg"):
|
||||||
"""
|
"""
|
||||||
|
|
@ -336,127 +455,6 @@ class ANSIParser(object):
|
||||||
|
|
||||||
return parsed_string
|
return parsed_string
|
||||||
|
|
||||||
# Mapping using {r {n etc
|
|
||||||
|
|
||||||
hilite = ANSI_HILITE
|
|
||||||
unhilite = ANSI_UNHILITE
|
|
||||||
|
|
||||||
ansi_map = [
|
|
||||||
|
|
||||||
# alternative |-format
|
|
||||||
|
|
||||||
(r'|n', ANSI_NORMAL), # reset
|
|
||||||
(r'|/', ANSI_RETURN), # line break
|
|
||||||
(r'|-', ANSI_TAB), # tab
|
|
||||||
(r'|_', ANSI_SPACE), # space
|
|
||||||
(r'|*', ANSI_INVERSE), # invert
|
|
||||||
(r'|^', ANSI_BLINK), # blinking text (very annoying and not supported by all clients)
|
|
||||||
(r'|u', ANSI_UNDERLINE), # underline
|
|
||||||
|
|
||||||
(r'|r', hilite + ANSI_RED),
|
|
||||||
(r'|g', hilite + ANSI_GREEN),
|
|
||||||
(r'|y', hilite + ANSI_YELLOW),
|
|
||||||
(r'|b', hilite + ANSI_BLUE),
|
|
||||||
(r'|m', hilite + ANSI_MAGENTA),
|
|
||||||
(r'|c', hilite + ANSI_CYAN),
|
|
||||||
(r'|w', hilite + ANSI_WHITE), # pure white
|
|
||||||
(r'|x', hilite + ANSI_BLACK), # dark grey
|
|
||||||
|
|
||||||
(r'|R', unhilite + ANSI_RED),
|
|
||||||
(r'|G', unhilite + ANSI_GREEN),
|
|
||||||
(r'|Y', unhilite + ANSI_YELLOW),
|
|
||||||
(r'|B', unhilite + ANSI_BLUE),
|
|
||||||
(r'|M', unhilite + ANSI_MAGENTA),
|
|
||||||
(r'|C', unhilite + ANSI_CYAN),
|
|
||||||
(r'|W', unhilite + ANSI_WHITE), # light grey
|
|
||||||
(r'|X', unhilite + ANSI_BLACK), # pure black
|
|
||||||
|
|
||||||
# hilight-able colors
|
|
||||||
(r'|h', hilite),
|
|
||||||
(r'|H', unhilite),
|
|
||||||
|
|
||||||
(r'|!R', ANSI_RED),
|
|
||||||
(r'|!G', ANSI_GREEN),
|
|
||||||
(r'|!Y', ANSI_YELLOW),
|
|
||||||
(r'|!B', ANSI_BLUE),
|
|
||||||
(r'|!M', ANSI_MAGENTA),
|
|
||||||
(r'|!C', ANSI_CYAN),
|
|
||||||
(r'|!W', ANSI_WHITE), # light grey
|
|
||||||
(r'|!X', ANSI_BLACK), # pure black
|
|
||||||
|
|
||||||
# normal ANSI backgrounds
|
|
||||||
(r'|[R', ANSI_BACK_RED),
|
|
||||||
(r'|[G', ANSI_BACK_GREEN),
|
|
||||||
(r'|[Y', ANSI_BACK_YELLOW),
|
|
||||||
(r'|[B', ANSI_BACK_BLUE),
|
|
||||||
(r'|[M', ANSI_BACK_MAGENTA),
|
|
||||||
(r'|[C', ANSI_BACK_CYAN),
|
|
||||||
(r'|[W', ANSI_BACK_WHITE), # light grey background
|
|
||||||
(r'|[X', ANSI_BACK_BLACK) # pure black background
|
|
||||||
]
|
|
||||||
|
|
||||||
ansi_bright_bgs = [
|
|
||||||
# "bright" ANSI backgrounds using xterm256 since ANSI
|
|
||||||
# standard does not support it (will
|
|
||||||
# fallback to dark ANSI background colors if xterm256
|
|
||||||
# is not supported by client)
|
|
||||||
|
|
||||||
# |-style variations
|
|
||||||
(r'|[r', r'|[500'),
|
|
||||||
(r'|[g', r'|[050'),
|
|
||||||
(r'|[y', r'|[550'),
|
|
||||||
(r'|[b', r'|[005'),
|
|
||||||
(r'|[m', r'|[505'),
|
|
||||||
(r'|[c', r'|[055'),
|
|
||||||
(r'|[w', r'|[555'), # white background
|
|
||||||
(r'|[x', r'|[222')] # dark grey background
|
|
||||||
|
|
||||||
# xterm256. These are replaced directly by
|
|
||||||
# the sub_xterm256 method
|
|
||||||
|
|
||||||
if settings.COLOR_NO_DEFAULT:
|
|
||||||
ansi_map = settings.COLOR_ANSI_EXTRA_MAP
|
|
||||||
xterm256_fg = settings.COLOR_XTERM256_EXTRA_FG
|
|
||||||
xterm256_bg = settings.COLOR_XTERM256_EXTRA_BG
|
|
||||||
xterm256_gfg = settings.COLOR_XTERM256_EXTRA_GFG
|
|
||||||
xterm256_gbg = settings.COLOR_XTERM256_EXTRA_GBG
|
|
||||||
ansi_bright_bgs = settings.COLOR_ANSI_BRIGHT_BG_EXTRA_MAP
|
|
||||||
else:
|
|
||||||
xterm256_fg = [r'\|([0-5])([0-5])([0-5])'] # |123 - foreground colour
|
|
||||||
xterm256_bg = [r'\|\[([0-5])([0-5])([0-5])'] # |[123 - background colour
|
|
||||||
xterm256_gfg = [r'\|=([a-z])'] # |=a - greyscale foreground
|
|
||||||
xterm256_gbg = [r'\|\[=([a-z])'] # |[=a - greyscale background
|
|
||||||
ansi_map += settings.COLOR_ANSI_EXTRA_MAP
|
|
||||||
xterm256_fg += settings.COLOR_XTERM256_EXTRA_FG
|
|
||||||
xterm256_bg += settings.COLOR_XTERM256_EXTRA_BG
|
|
||||||
xterm256_gfg += settings.COLOR_XTERM256_EXTRA_GFG
|
|
||||||
xterm256_gbg += settings.COLOR_XTERM256_EXTRA_GBG
|
|
||||||
ansi_bright_bgs += settings.COLOR_ANSI_BRIGHT_BG_EXTRA_MAP
|
|
||||||
|
|
||||||
mxp_re = r'\|lc(.*?)\|lt(.*?)\|le'
|
|
||||||
|
|
||||||
# prepare regex matching
|
|
||||||
brightbg_sub = re.compile(r"|".join([r"(?<!\|)%s" % re.escape(tup[0]) for tup in ansi_bright_bgs]), re.DOTALL)
|
|
||||||
xterm256_fg_sub = re.compile(r"|".join(xterm256_fg), re.DOTALL)
|
|
||||||
xterm256_bg_sub = re.compile(r"|".join(xterm256_bg), re.DOTALL)
|
|
||||||
xterm256_gfg_sub = re.compile(r"|".join(xterm256_gfg), re.DOTALL)
|
|
||||||
xterm256_gbg_sub = re.compile(r"|".join(xterm256_gbg), re.DOTALL)
|
|
||||||
|
|
||||||
# xterm256_sub = re.compile(r"|".join([tup[0] for tup in xterm256_map]), re.DOTALL)
|
|
||||||
ansi_sub = re.compile(r"|".join([re.escape(tup[0]) for tup in ansi_map]), re.DOTALL)
|
|
||||||
mxp_sub = re.compile(mxp_re, re.DOTALL)
|
|
||||||
|
|
||||||
# used by regex replacer to correctly map ansi sequences
|
|
||||||
ansi_map_dict = dict(ansi_map)
|
|
||||||
ansi_bright_bgs_map = dict(ansi_bright_bgs)
|
|
||||||
|
|
||||||
# prepare matching ansi codes overall
|
|
||||||
ansi_re = r"\033\[[0-9;]+m"
|
|
||||||
ansi_regex = re.compile(ansi_re)
|
|
||||||
|
|
||||||
# escapes - these double-chars will be replaced with a single
|
|
||||||
# instance of each
|
|
||||||
ansi_escapes = re.compile(r"(%s)" % "|".join(ANSI_ESCAPES), re.DOTALL)
|
|
||||||
|
|
||||||
ANSI_PARSER = ANSIParser()
|
ANSI_PARSER = ANSIParser()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ except ImportError:
|
||||||
from .ansi import ANSIString
|
from .ansi import ANSIString
|
||||||
from evennia import utils
|
from evennia import utils
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
class ANSIStringTestCase(TestCase):
|
class ANSIStringTestCase(TestCase):
|
||||||
def checker(self, ansi, raw, clean):
|
def checker(self, ansi, raw, clean):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue