diff options
Diffstat (limited to 'pygments/style.py')
| -rw-r--r-- | pygments/style.py | 50 |
1 files changed, 45 insertions, 5 deletions
diff --git a/pygments/style.py b/pygments/style.py index 7a272b53..bc318354 100644 --- a/pygments/style.py +++ b/pygments/style.py @@ -11,11 +11,31 @@ from pygments.token import Token, STANDARD_TYPES from pygments.util import add_metaclass -from pygments.console import codes -ansilist = ['#ansi'+x for x in codes.keys() if x] +_ansimap = { + ## + '#ansiblack': '000000', + '#ansidarkred': '7f0000', + '#ansidarkgreen': '007f00', + '#ansibrown': '7f7fe0', + '#ansidarkblue': '00007f', + '#ansipurple': '7f007f', + '#ansiteal': '007f7f', + '#ansilightgray': 'e5e5e5', + ### normal + '#ansidarkgray': '555555', + '#ansired': 'ff0000', + '#ansigreen': '00ff00', + '#ansiyellow': 'ffff00', + '#ansiblue': '0000ff', + '#ansifuchsia': 'ff00ff', + '#ansiturquoise': '00ffff', + '#ansiwhite': 'ffffff', + } +ansilist = list(_ansimap.keys()) + class StyleMeta(type): def __new__(mcs, name, bases, dct): @@ -35,7 +55,13 @@ class StyleMeta(type): return col[0]*2 + col[1]*2 + col[2]*2 elif text == '': return '' - assert False, "wrong color format %r" % text + didyoumean = '' + if 'ansi' in text: + import difflib + possibility = difflib.get_close_matches(text, ansilist, 1) + if possibility: + didyoumean = '. Did you mean {} ?'.format(possibility[0]) + assert False, "wrong color format %r%s" % (text, didyoumean) _styles = obj._styles = {} @@ -84,16 +110,30 @@ class StyleMeta(type): def style_for_token(cls, token): t = cls._styles[token] + ansicolor = None + color = t[0] + if color.startswith('#ansi'): + ansicolor = color + color = _ansimap[color] + bgansicolor = None + bgcolor = t[4] + if bgcolor.startswith('#ansi'): + bgansicolor = bgcolor + bgcolor = _ansimap[bgcolor] + return { - 'color': t[0] or None, + 'color': color or None, 'bold': bool(t[1]), 'italic': bool(t[2]), 'underline': bool(t[3]), - 'bgcolor': t[4] or None, + 'bgcolor': bgcolor or None, 'border': t[5] or None, 'roman': bool(t[6]) or None, 'sans': bool(t[7]) or None, 'mono': bool(t[8]) or None, + 'ansicolor': ansicolor, + 'bgansicolor': bgansicolor, + } def list_styles(cls): |
