Wed, 20 Oct 2010 08:39:56 +0200
Updated Pygments to version 1.3.1.
684
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
2 | """ |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
3 | pygments.style |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
4 | ~~~~~~~~~~~~~~ |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
5 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
6 | Basic style object. |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
7 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
8 | :copyright: Copyright 2006-2010 by the Pygments team, see AUTHORS. |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
9 | :license: BSD, see LICENSE for details. |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
10 | """ |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
11 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
12 | from pygments.token import Token, STANDARD_TYPES |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
13 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
14 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
15 | class StyleMeta(type): |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
16 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
17 | def __new__(mcs, name, bases, dct): |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
18 | obj = type.__new__(mcs, name, bases, dct) |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
19 | for token in STANDARD_TYPES: |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
20 | if token not in obj.styles: |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
21 | obj.styles[token] = '' |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
22 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
23 | def colorformat(text): |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
24 | if text[0:1] == '#': |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
25 | col = text[1:] |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
26 | if len(col) == 6: |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
27 | return col |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
28 | elif len(col) == 3: |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
29 | return col[0]+'0'+col[1]+'0'+col[2]+'0' |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
30 | elif text == '': |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
31 | return '' |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
32 | assert False, "wrong color format %r" % text |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
33 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
34 | _styles = obj._styles = {} |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
35 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
36 | for ttype in obj.styles: |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
37 | for token in ttype.split(): |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
38 | if token in _styles: |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
39 | continue |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
40 | ndef = _styles.get(token.parent, None) |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
41 | styledefs = obj.styles.get(token, '').split() |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
42 | if not ndef or token is None: |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
43 | ndef = ['', 0, 0, 0, '', '', 0, 0, 0] |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
44 | elif 'noinherit' in styledefs and token is not Token: |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
45 | ndef = _styles[Token][:] |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
46 | else: |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
47 | ndef = ndef[:] |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
48 | _styles[token] = ndef |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
49 | for styledef in obj.styles.get(token, '').split(): |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
50 | if styledef == 'noinherit': |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
51 | pass |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
52 | elif styledef == 'bold': |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
53 | ndef[1] = 1 |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
54 | elif styledef == 'nobold': |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
55 | ndef[1] = 0 |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
56 | elif styledef == 'italic': |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
57 | ndef[2] = 1 |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
58 | elif styledef == 'noitalic': |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
59 | ndef[2] = 0 |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
60 | elif styledef == 'underline': |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
61 | ndef[3] = 1 |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
62 | elif styledef == 'nounderline': |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
63 | ndef[3] = 0 |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
64 | elif styledef[:3] == 'bg:': |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
65 | ndef[4] = colorformat(styledef[3:]) |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
66 | elif styledef[:7] == 'border:': |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
67 | ndef[5] = colorformat(styledef[7:]) |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
68 | elif styledef == 'roman': |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
69 | ndef[6] = 1 |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
70 | elif styledef == 'sans': |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
71 | ndef[7] = 1 |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
72 | elif styledef == 'mono': |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
73 | ndef[8] = 1 |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
74 | else: |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
75 | ndef[0] = colorformat(styledef) |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
76 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
77 | return obj |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
78 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
79 | def style_for_token(cls, token): |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
80 | t = cls._styles[token] |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
81 | return { |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
82 | 'color': t[0] or None, |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
83 | 'bold': bool(t[1]), |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
84 | 'italic': bool(t[2]), |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
85 | 'underline': bool(t[3]), |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
86 | 'bgcolor': t[4] or None, |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
87 | 'border': t[5] or None, |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
88 | 'roman': bool(t[6]) or None, |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
89 | 'sans': bool(t[7]) or None, |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
90 | 'mono': bool(t[8]) or None, |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
91 | } |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
92 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
93 | def list_styles(cls): |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
94 | return list(cls) |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
95 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
96 | def styles_token(cls, ttype): |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
97 | return ttype in cls._styles |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
98 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
99 | def __iter__(cls): |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
100 | for token in cls._styles: |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
101 | yield token, cls.style_for_token(token) |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
102 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
103 | def __len__(cls): |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
104 | return len(cls._styles) |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
105 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
106 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
107 | class Style(object, metaclass=StyleMeta): |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
108 | background_color = '#ffffff' |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
109 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
110 | #: highlight background color |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
111 | highlight_color = '#ffffcc' |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
112 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
113 | #: Style definitions for individual token types. |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
114 | styles = {} |