style.py
117 lines
| 3.7 KiB
| text/x-python
|
PythonLexer
Jeandet Alexis
|
r0 | # -*- coding: utf-8 -*- | ||
""" | ||||
pygments.style | ||||
~~~~~~~~~~~~~~ | ||||
Basic style object. | ||||
:copyright: Copyright 2006-2012 by the Pygments team, see AUTHORS. | ||||
:license: BSD, see LICENSE for details. | ||||
""" | ||||
from pygments.token import Token, STANDARD_TYPES | ||||
class StyleMeta(type): | ||||
def __new__(mcs, name, bases, dct): | ||||
obj = type.__new__(mcs, name, bases, dct) | ||||
for token in STANDARD_TYPES: | ||||
if token not in obj.styles: | ||||
obj.styles[token] = '' | ||||
def colorformat(text): | ||||
if text[0:1] == '#': | ||||
col = text[1:] | ||||
if len(col) == 6: | ||||
return col | ||||
elif len(col) == 3: | ||||
return col[0]+'0'+col[1]+'0'+col[2]+'0' | ||||
elif text == '': | ||||
return '' | ||||
assert False, "wrong color format %r" % text | ||||
_styles = obj._styles = {} | ||||
for ttype in obj.styles: | ||||
for token in ttype.split(): | ||||
if token in _styles: | ||||
continue | ||||
ndef = _styles.get(token.parent, None) | ||||
styledefs = obj.styles.get(token, '').split() | ||||
if not ndef or token is None: | ||||
ndef = ['', 0, 0, 0, '', '', 0, 0, 0] | ||||
elif 'noinherit' in styledefs and token is not Token: | ||||
ndef = _styles[Token][:] | ||||
else: | ||||
ndef = ndef[:] | ||||
_styles[token] = ndef | ||||
for styledef in obj.styles.get(token, '').split(): | ||||
if styledef == 'noinherit': | ||||
pass | ||||
elif styledef == 'bold': | ||||
ndef[1] = 1 | ||||
elif styledef == 'nobold': | ||||
ndef[1] = 0 | ||||
elif styledef == 'italic': | ||||
ndef[2] = 1 | ||||
elif styledef == 'noitalic': | ||||
ndef[2] = 0 | ||||
elif styledef == 'underline': | ||||
ndef[3] = 1 | ||||
elif styledef == 'nounderline': | ||||
ndef[3] = 0 | ||||
elif styledef[:3] == 'bg:': | ||||
ndef[4] = colorformat(styledef[3:]) | ||||
elif styledef[:7] == 'border:': | ||||
ndef[5] = colorformat(styledef[7:]) | ||||
elif styledef == 'roman': | ||||
ndef[6] = 1 | ||||
elif styledef == 'sans': | ||||
ndef[7] = 1 | ||||
elif styledef == 'mono': | ||||
ndef[8] = 1 | ||||
else: | ||||
ndef[0] = colorformat(styledef) | ||||
return obj | ||||
def style_for_token(cls, token): | ||||
t = cls._styles[token] | ||||
return { | ||||
'color': t[0] or None, | ||||
'bold': bool(t[1]), | ||||
'italic': bool(t[2]), | ||||
'underline': bool(t[3]), | ||||
'bgcolor': t[4] 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, | ||||
} | ||||
def list_styles(cls): | ||||
return list(cls) | ||||
def styles_token(cls, ttype): | ||||
return ttype in cls._styles | ||||
def __iter__(cls): | ||||
for token in cls._styles: | ||||
yield token, cls.style_for_token(token) | ||||
def __len__(cls): | ||||
return len(cls._styles) | ||||
class Style(object): | ||||
__metaclass__ = StyleMeta | ||||
#: overall background color (``None`` means transparent) | ||||
background_color = '#ffffff' | ||||
#: highlight background color | ||||
highlight_color = '#ffffcc' | ||||
#: Style definitions for individual token types. | ||||
styles = {} | ||||