1
# -*- coding: utf-8 -*-
8
:copyright: Copyright 2006-2010 by the Pygments team, see AUTHORS.
9
:license: BSD, see LICENSE for details.
12
from pygments.token import Token, STANDARD_TYPES
15
class StyleMeta(type):
17
def __new__(mcs, name, bases, dct):
18
obj = type.__new__(mcs, name, bases, dct)
19
for token in STANDARD_TYPES:
20
if token not in obj.styles:
21
obj.styles[token] = ''
23
def colorformat(text):
29
return col[0]+'0'+col[1]+'0'+col[2]+'0'
32
assert False, "wrong color format %r" % text
34
_styles = obj._styles = {}
36
for ttype in obj.styles:
37
for token in ttype.split():
40
ndef = _styles.get(token.parent, None)
41
styledefs = obj.styles.get(token, '').split()
42
if not ndef or token is None:
43
ndef = ['', 0, 0, 0, '', '', 0, 0, 0]
44
elif 'noinherit' in styledefs and token is not Token:
45
ndef = _styles[Token][:]
49
for styledef in obj.styles.get(token, '').split():
50
if styledef == 'noinherit':
52
elif styledef == 'bold':
54
elif styledef == 'nobold':
56
elif styledef == 'italic':
58
elif styledef == 'noitalic':
60
elif styledef == 'underline':
62
elif styledef == 'nounderline':
64
elif styledef[:3] == 'bg:':
65
ndef[4] = colorformat(styledef[3:])
66
elif styledef[:7] == 'border:':
67
ndef[5] = colorformat(styledef[7:])
68
elif styledef == 'roman':
70
elif styledef == 'sans':
72
elif styledef == 'mono':
75
ndef[0] = colorformat(styledef)
79
def style_for_token(cls, token):
80
t = cls._styles[token]
82
'color': t[0] or None,
85
'underline': bool(t[3]),
86
'bgcolor': t[4] or None,
87
'border': t[5] or None,
88
'roman': bool(t[6]) or None,
89
'sans': bool(t[7]) or None,
90
'mono': bool(t[8]) or None,
96
def styles_token(cls, ttype):
97
return ttype in cls._styles
100
for token in cls._styles:
101
yield token, cls.style_for_token(token)
104
return len(cls._styles)
108
__metaclass__ = StyleMeta
110
#: overall background color (``None`` means transparent)
111
background_color = '#ffffff'
113
#: highlight background color
114
highlight_color = '#ffffcc'
116
#: Style definitions for individual token types.