diff --git a/evennia/contrib/color_markups.py b/evennia/contrib/color_markups.py new file mode 100644 index 0000000000..66991e679b --- /dev/null +++ b/evennia/contrib/color_markups.py @@ -0,0 +1,238 @@ +""" +Color markups + +Contribution, Griatch 2017 + +Additional color markup styles for Evennia (extending or replacing the default |r, |234 etc). + + +Installation: + +Import the desired style variables from this module into mygame/server/conf/settings.py and add them +to these settings variables. Each are specified as a list, and multiple such lists can be added to +each variable to support multiple formats. Note that list order affects which regexes are applied +first. You must restart both Portal and Server for color tags to update. + +Assign to the following settings variables: + + COLOR_ANSI_EXTRA_MAP - a mapping between regexes and ANSI colors + COLOR_XTERM256_EXTRA_FG - regex for defining XTERM256 foreground colors + COLOR_XTERM256_EXTRA_BG - regex for defining XTERM256 background colors + COLOR_XTERM256_EXTRA_GFG - regex for defining XTERM256 grayscale foreground colors + COLOR_XTERM256_EXTRA_GBG - regex for defining XTERM256 grayscale background colors + COLOR_ANSI_BRIGHT_BG_EXTRA_MAP = ANSI does not support bright backgrounds; we fake + this by mapping ANSI markup to matching bright XTERM256 backgrounds + + COLOR_NO_DEFAULT - Set True/False. If False (default), extend the default markup, otherwise + replace it completely. + + +To add the {- "curly-bracket" style, add the following to your settings file, then reboot both +Server and Portal: + +from evennia.contrib import color_markups +COLOR_ANSI_EXTRA_MAP = color_markups.CURLY_COLOR_ANSI_EXTRA_MAP +COLOR_XTERM256_EXTRA_FG = color_markups.CURLY_COLOR_XTERM256_EXTRA_FG +COLOR_XTERM256_EXTRA_BG = color_markups.CURLY_COLOR_XTERM256_EXTRA_BG +COLOR_XTERM256_EXTRA_GFG = color_markups.CURLY_COLOR_XTERM256_EXTRA_GFG +COLOR_XTERM256_EXTRA_GBG = color_markups.CURLY_COLOR_XTERM256_EXTRA_GBG +COLOR_ANSI_BRIGHT_BG_EXTRA_MAP = color_markups.CURLY_COLOR_ANSI_BRIGHT_BG_EXTRA_MAP + + +To add the %c- "mux/mush" style, add the following to your settings file, then reboot both Server +and Portal: + +from evennia.contrib import color_markups +COLOR_ANSI_EXTRA_MAP = color_markups.MUX_COLOR_ANSI_EXTRA_MAP +COLOR_XTERM256_EXTRA_FG = color_markups.MUX_COLOR_XTERM256_EXTRA_FG +COLOR_XTERM256_EXTRA_BG = color_markups.MUX_COLOR_XTERM256_EXTRA_BG +COLOR_XTERM256_EXTRA_GFG = color_markups.MUX_COLOR_XTERM256_EXTRA_GFG +COLOR_XTERM256_EXTRA_GBG = color_markups.MUX_COLOR_XTERM256_EXTRA_GBG +COLOR_ANSI_BRIGHT_BGS_EXTRA_MAP = color_markups.CURLY_COLOR_ANSI_BRIGHT_BGS_EXTRA_MAP + + +""" + +# ANSI constants (copied from evennia.utils.ansi to avoid import) + +_ANSI_BEEP = "\07" +_ANSI_ESCAPE = "\033" +_ANSI_NORMAL = "\033[0m" + +_ANSI_UNDERLINE = "\033[4m" +_ANSI_HILITE = "\033[1m" +_ANSI_UNHILITE = "\033[22m" +_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 = " " + + +############################################################# +# +# {- style MUD markup (old Evennia default). This is +# basically identical to the default |-style except using +# a curly bracket instead. This was removed because {} +# are used in Python string formatting. +# +# {r, {R - bright/dark red foreground +# {[r, {[R - bright/dark red background +# {500, {[500 - XTERM256 red foreground/background +# {=w, {[=w - XTERM256 greyscale foreground/background +# +############################################################# + +CURLY_COLOR_ANSI_EXTRA_MAP = [ + (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_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), # light grey + (r'{X', _ANSI_HILITE + _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 +] + +CURLY_COLOR_XTERM256_EXTRA_FG = [r'\{([0-5])([0-5])([0-5])'] # |123 - foreground colour +CURLY_COLOR_XTERM256_EXTRA_BG = [r'\{\[([0-5])([0-5])([0-5])'] # |[123 - background colour +CURLY_COLOR_XTERM256_EXTRA_GFG = [r'\{=([a-z])'] # |=a - greyscale foreground +CURLY_COLOR_XTERM256_EXTRA_GBG = [r'\{\[=([a-z])'] # |[=a - greyscale background + +CURLY_COLOR_ANSI_XTERM256_BRIGHT_BG_EXTRA_MAP = [ + (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 +] + + +############################################################# +# +# %c - MUX/MUSH style markup. This was Evennia's first +# color markup style. It was phased out due to % being used +# in Python formatting operations. +# +# %ch%cr, %cr - bright/dark red foreground +# %ch%cR, %cR- bright/dark red background +# %c500, %c[500 - XTERM256 red foreground/background +# %c=w, %c[=w - XTERM256 greyscale foreground/background +# +############################################################# + +MUX_COLOR_ANSI_EXTRA_MAP = [ + (r'%cn', _ANSI_NORMAL), # reset + (r'%ch', _ANSI_HILITE), # highlight + (r'%r', _ANSI_RETURN), # line break + (r'%R', _ANSI_RETURN), # + (r'%t', _ANSI_TAB), # tab + (r'%T', _ANSI_TAB), # + (r'%b', _ANSI_SPACE), # space + (r'%B', _ANSI_SPACE), + (r'%cf', _ANSI_BLINK), # annoying and not supported by all clients + (r'%ci', _ANSI_INVERSE), # invert + + (r'%cr', _ANSI_RED), + (r'%cg', _ANSI_GREEN), + (r'%cy', _ANSI_YELLOW), + (r'%cb', _ANSI_BLUE), + (r'%cm', _ANSI_MAGENTA), + (r'%cc', _ANSI_CYAN), + (r'%cw', _ANSI_WHITE), + (r'%cx', _ANSI_BLACK), + + (r'%cR', _ANSI_BACK_RED), + (r'%cG', _ANSI_BACK_GREEN), + (r'%cY', _ANSI_BACK_YELLOW), + (r'%cB', _ANSI_BACK_BLUE), + (r'%cM', _ANSI_BACK_MAGENTA), + (r'%cC', _ANSI_BACK_CYAN), + (r'%cW', _ANSI_BACK_WHITE), + (r'%cX', _ANSI_BACK_BLACK) +] + +MUX_COLOR_XTERM256_EXTRA_FG = [r'%c([0-5])([0-5])([0-5])'] # %c123 - foreground colour +MUX_COLOR_XTERM256_EXTRA_BG = [r'%c\[([0-5])([0-5])([0-5])'] # %c[123 - background colour +MUX_COLOR_XTERM256_EXTRA_GFG = [r'%c=([a-z])'] # %c=a - greyscale foreground +MUX_COLOR_XTERM256_EXTRA_GBG = [r'%c\[=([a-z])'] # %c[=a - greyscale background + +MUX_COLOR_ANSI_XTERM256_BRIGHT_BG_EXTRA_MAP = [ + (r'%ch%cR', r'%c[500'), + (r'%ch%cG', r'%c[050'), + (r'%ch%cY', r'%c[550'), + (r'%ch%cB', r'%c[005'), + (r'%ch%cM', r'%c[505'), + (r'%ch%cC', r'%c[055'), + (r'%ch%cW', r'%c[555'), # white background + (r'%ch%cX', r'%c[222'), # dark grey background +]