# -*- coding: utf-8 -*- line endings: unix -*-
#------------------------------------------------------------------------------
# miniboa/colors.py
# Copyright 2009 Jim Storch
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain a
# copy of the License at http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#------------------------------------------------------------------------------
# Changes made by pR0Ps.CM[at]gmail[dot]com on 18/07/2012
# -Updated for use with Python 3.x
# -Repackaged into a single file to simplify distribution
# -Other misc fixes and changes
#
# Report any bugs in this implementation to me (email above)
#------------------------------------------------------------------------------
# Additional changes by Quixadhal on 2014.06.16
# -Re-split code into multiple files, for ease of maintenance
# -Rewrote terminal system
#
# Pinkfish style color codes are now available, as used in various
# LPMUD systems, as well as the I3 intermud network.
#
# Briefly, a color token is surrounded by the special symbol %^, which
# acts as a seperator for multiple tokens in a row. So, an example like
#
# A %^RED%^red apple%^RESET%^ and a %^BOLD%^BLUE%^blue ball%^RESET%^.
#
# Would result in "red apple" and "blue ball" being colored, and
# "blue ball" would also be in bold.
#
# Some terminals will amke that actual bold, others will make it a
# brighter blue color.
#
# The replacement is dependant on the terminal type passed in, which
# defaults to ANSI, but can be "unknown" to strip colors, or
# "i3" or "imc2" for the intermud networks, or "mxp" for that.
#------------------------------------------------------------------------------
"""
Split off the color codes themselves into a seperate module
to make it easier to edit the actual terminal code
"""
_TERMINAL_TYPES = ['unknown', 'ansi', 'imc2', 'i3', 'mxp']
_COLOR_TOKENS = ['BOLD', 'FLASH', 'ITALIC', 'RESET', 'REVERSE', 'STRIKETHRU', 'UNDERLINE',
'CLEARLINE', 'CURS_DOWN', 'CURS_LEFT', 'CURS_RIGHT', 'CURS_UP',
'ENDTERM', 'HOME', 'INITTERM', 'RESTORE', 'SAVE',
'BLACK', 'RED', 'GREEN', 'ORANGE',
'BLUE', 'MAGENTA', 'CYAN', 'GREY',
'DARKGREY', 'LIGHTRED', 'LIGHTGREEN', 'YELLOW',
'LIGHTBLUE', 'PINK', 'LIGHTCYAN', 'WHITE',
'B_BLACK', 'B_RED', 'B_GREEN', 'B_ORANGE',
'B_BLUE', 'B_MAGENTA', 'B_CYAN', 'B_GREY',
'B_DARKGREY', 'B_LIGHTRED', 'B_LIGHTGREEN', 'B_YELLOW',
'B_LIGHTBLUE', 'B_PINK', 'B_LIGHTCYAN', 'B_WHITE']
_COLOR_MAP = {}
for k in _TERMINAL_TYPES:
_COLOR_MAP[k] = {}
for k in _COLOR_TOKENS:
_COLOR_MAP['unknown'][k] = ''
_COLOR_MAP['ansi'] = {
'BOLD' : "\033[1m",
'FLASH' : "\033[5m",
'ITALIC' : "\033[3m",
'RESET' : "\033[0m",
'REVERSE' : "\033[7m",
'STRIKETHRU' : "\033[9m",
'UNDERLINE' : "\033[4m",
'CLEARLINE' : "\033[L\033[G",
'CURS_DOWN' : "\033[B",
'CURS_LEFT' : "\033[D",
'CURS_RIGHT' : "\033[C",
'CURS_UP' : "\033[A",
'ENDTERM' : "",
'HOME' : "\033[H",
'INITTERM' : "\033[H\033[2J",
'RESTORE' : "\033[u",
'SAVE' : "\033[s",
'BLACK' : "\033[30m",
'RED' : "\033[31m",
'GREEN' : "\033[32m",
'ORANGE' : "\033[33m",
'BLUE' : "\033[34m",
'MAGENTA' : "\033[35m",
'CYAN' : "\033[36m",
'GREY' : "\033[37m",
'DARKGREY' : "\033[1;30m",
'LIGHTRED' : "\033[1;31m",
'LIGHTGREEN' : "\033[1;32m",
'YELLOW' : "\033[1;33m",
'LIGHTBLUE' : "\033[1;34m",
'PINK' : "\033[1;35m",
'LIGHTCYAN' : "\033[1;36m",
'WHITE' : "\033[1;37m",
'B_BLACK' : "\033[40m",
'B_RED' : "\033[41m",
'B_GREEN' : "\033[42m",
'B_ORANGE' : "\033[43m",
'B_BLUE' : "\033[44m",
'B_MAGENTA' : "\033[45m",
'B_CYAN' : "\033[46m",
'B_GREY' : "\033[47m",
'B_DARKGREY' : "\033[40m",
'B_LIGHTRED' : "\033[41m",
'B_LIGHTGREEN' : "\033[42m",
'B_YELLOW' : "\033[43m",
'B_LIGHTBLUE' : "\033[44m",
'B_PINK' : "\033[45m",
'B_LIGHTCYAN' : "\033[46m",
'B_WHITE' : "\033[47m"
}
_COLOR_MAP['imc2'] = {
'BOLD' : "~L",
'FLASH' : "~\$",
'ITALIC' : "~i",
'RESET' : "~!",
'REVERSE' : "~v",
'STRIKETHRU' : "~s",
'UNDERLINE' : "~u",
'CLEARLINE' : "",
'CURS_DOWN' : "",
'CURS_LEFT' : "",
'CURS_RIGHT' : "",
'CURS_UP' : "",
'ENDTERM' : "",
'HOME' : "",
'INITTERM' : "",
'RESTORE' : "",
'SAVE' : "",
'BLACK' : "~x",
'RED' : "~r",
'GREEN' : "~g",
'ORANGE' : "~y",
'BLUE' : "~b",
'MAGENTA' : "~p",
'CYAN' : "~c",
'GREY' : "~w",
'DARKGREY' : "~z",
'LIGHTRED' : "~R",
'LIGHTGREEN' : "~G",
'YELLOW' : "~Y",
'LIGHTBLUE' : "~B",
'PINK' : "~P",
'LIGHTCYAN' : "~C",
'WHITE' : "~W",
'B_BLACK' : "^x",
'B_RED' : "^r",
'B_GREEN' : "^g",
'B_ORANGE' : "^O",
'B_BLUE' : "^b",
'B_MAGENTA' : "^p",
'B_CYAN' : "^c",
'B_GREY' : "^w",
'B_DARKGREY' : "^z",
'B_LIGHTRED' : "^R",
'B_LIGHTGREEN' : "^G",
'B_YELLOW' : "^Y",
'B_LIGHTBLUE' : "^B",
'B_PINK' : "^P",
'B_LIGHTCYAN' : "^C",
'B_WHITE' : "^W",
}
_COLOR_MAP['i3'] = {
'BOLD' : "%^BOLD%^",
'FLASH' : "%^FLASH%^",
'ITALIC' : "%^ITALIC%^",
'RESET' : "%^RESET%^",
'REVERSE' : "%^REVERSE%^",
'STRIKETHRU' : "%^STRIKETHRU%^",
'UNDERLINE' : "%^UNDERLINE%^",
'CLEARLINE' : "%^CLEARLINE%^",
'CURS_DOWN' : "%^CURS_DOWN%^",
'CURS_LEFT' : "%^CURS_LEFT%^",
'CURS_RIGHT' : "%^CURS_RIGHT%^",
'CURS_UP' : "%^CURS_UP%^",
'ENDTERM' : "%^ENDTERM%^",
'HOME' : "%^HOME%^",
'INITTERM' : "%^INITTERM%^",
'RESTORE' : "%^RESTORE%^",
'SAVE' : "%^SAVE%^",
'BLACK' : "%^BLACK%^",
'RED' : "%^RED%^",
'GREEN' : "%^GREEN%^",
'ORANGE' : "%^ORANGE%^",
'BLUE' : "%^BLUE%^",
'MAGENTA' : "%^MAGENTA%^",
'CYAN' : "%^CYAN%^",
'GREY' : "%^WHITE%^",
'DARKGREY' : "%^BOLD%^BLACK%^",
'LIGHTRED' : "%^BOLD%^RED%^",
'LIGHTGREEN' : "%^BOLD%^GREEN%^",
'YELLOW' : "%^YELLOW%^",
'LIGHTBLUE' : "%^BOLD%^BLUE%^",
'PINK' : "%^BOLD%^MAGENTA%^",
'LIGHTCYAN' : "%^BOLD%^CYAN%^",
'WHITE' : "%^BOLD%^WHITE%^",
'B_BLACK' : "%^B_BLACK%^",
'B_RED' : "%^B_RED%^",
'B_GREEN' : "%^B_GREEN%^",
'B_ORANGE' : "%^B_ORANGE%^",
'B_BLUE' : "%^B_BLUE%^",
'B_MAGENTA' : "%^B_MAGENTA%^",
'B_CYAN' : "%^B_CYAN%^",
'B_GREY' : "%^B_WHITE%^",
'B_DARKGREY' : "%^B_BLACK%^",
'B_LIGHTRED' : "%^B_RED%^",
'B_LIGHTGREEN' : "%^B_GREEN%^",
'B_YELLOW' : "%^B_YELLOW%^",
'B_LIGHTBLUE' : "%^B_BLUE%^",
'B_PINK' : "%^B_MAGENTA%^",
'B_LIGHTCYAN' : "%^B_CYAN%^",
'B_WHITE' : "%^B_WHITE%^",
}
_COLOR_MAP['mxp'] = {
'BOLD' : "<BOLD>",
'FLASH' : "<FONT COLOR=BLINK>",
'ITALIC' : "<ITALIC>",
'RESET' : "<RESET>",
'REVERSE' : "<FONT COLOR=INVERSE>",
'STRIKETHRU' : "<STRIKEOUT>",
'UNDERLINE' : "<UNDERLINE>",
'CLEARLINE' : "",
'CURS_DOWN' : "",
'CURS_LEFT' : "",
'CURS_RIGHT' : "",
'CURS_UP' : "",
'ENDTERM' : "",
'HOME' : "",
'INITTERM' : "",
'RESTORE' : "",
'SAVE' : "",
'BLACK' : "<COLOR FORE=\"#000000\">",
'RED' : "<COLOR FORE=\"#bb0000\">",
'GREEN' : "<COLOR FORE=\"#00bb00\">",
'ORANGE' : "<COLOR FORE=\"#bbbb00\">",
'BLUE' : "<COLOR FORE=\"#0000bb\">",
'MAGENTA' : "<COLOR FORE=\"#bb00bb\">",
'CYAN' : "<COLOR FORE=\"#00bbbb\">",
'GREY' : "<COLOR FORE=\"#bbbbbb\">",
'DARKGREY' : "<COLOR FORE=\"#555555\">",
'LIGHTRED' : "<COLOR FORE=\"#ff5555\">",
'LIGHTGREEN' : "<COLOR FORE=\"#55ff55\">",
'YELLOW' : "<COLOR FORE=\"#ffff55\">",
'LIGHTBLUE' : "<COLOR FORE=\"#5555ff\">",
'PINK' : "<COLOR FORE=\"#ff55ff\">",
'LIGHTCYAN' : "<COLOR FORE=\"#55ffff\">",
'WHITE' : "<COLOR FORE=\"#ffffff\">",
'B_BLACK' : "<COLOR BACK=\"#000000\">",
'B_RED' : "<COLOR BACK=\"#bb0000\">",
'B_GREEN' : "<COLOR BACK=\"#00bb00\">",
'B_ORANGE' : "<COLOR BACK=\"#bbbb00\">",
'B_BLUE' : "<COLOR BACK=\"#0000bb\">",
'B_MAGENTA' : "<COLOR BACK=\"#bb00bb\">",
'B_CYAN' : "<COLOR BACK=\"#00bbbb\">",
'B_GREY' : "<COLOR BACK=\"#bbbbbb\">",
'B_DARKGREY' : "<COLOR BACK=\"#555555\">",
'B_LIGHTRED' : "<COLOR BACK=\"#ff5555\">",
'B_LIGHTGREEN' : "<COLOR BACK=\"#55ff55\">",
'B_YELLOW' : "<COLOR BACK=\"#ffff55\">",
'B_LIGHTBLUE' : "<COLOR BACK=\"#5555ff\">",
'B_PINK' : "<COLOR BACK=\"#ff55ff\">",
'B_LIGHTCYAN' : "<COLOR BACK=\"#55ffff\">",
'B_WHITE' : "<COLOR BACK=\"#ffffff\">",
}