Thu, 23 May 2013 19:58:41 +0200
Fixes for pygments: version independent metaclass creation and library selection.
808
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
2 | """ |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
3 | pygments.style |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
4 | ~~~~~~~~~~~~~~ |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
5 | |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
6 | Basic style object. |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
7 | |
2426
da76c71624de
Updated to Pygments 1.6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1705
diff
changeset
|
8 | :copyright: Copyright 2006-2013 by the Pygments team, see AUTHORS. |
808
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
9 | :license: BSD, see LICENSE for details. |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
10 | """ |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
11 | |
2525
8b507a9a2d40
Script changes: Future import added, super calls modified and unicode behavior for str.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
2426
diff
changeset
|
12 | from __future__ import unicode_literals # __IGNORE_WARNING__ |
8b507a9a2d40
Script changes: Future import added, super calls modified and unicode behavior for str.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
2426
diff
changeset
|
13 | |
808
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
14 | from pygments.token import Token, STANDARD_TYPES |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
15 | |
2669
11a6696ff868
Fixes for pygments: version independent metaclass creation and library selection.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
2525
diff
changeset
|
16 | def with_metaclass(meta, base=object): |
11a6696ff868
Fixes for pygments: version independent metaclass creation and library selection.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
2525
diff
changeset
|
17 | """ |
11a6696ff868
Fixes for pygments: version independent metaclass creation and library selection.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
2525
diff
changeset
|
18 | Python independent version to create a base class with a metaclass. |
11a6696ff868
Fixes for pygments: version independent metaclass creation and library selection.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
2525
diff
changeset
|
19 | Taken from six 1.3.0 (http://pythonhosted.org/six) |
11a6696ff868
Fixes for pygments: version independent metaclass creation and library selection.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
2525
diff
changeset
|
20 | """ |
11a6696ff868
Fixes for pygments: version independent metaclass creation and library selection.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
2525
diff
changeset
|
21 | return meta("NewBase", (base,), {}) |
11a6696ff868
Fixes for pygments: version independent metaclass creation and library selection.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
2525
diff
changeset
|
22 | |
808
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
23 | |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
24 | class StyleMeta(type): |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
25 | |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
26 | def __new__(mcs, name, bases, dct): |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
27 | obj = type.__new__(mcs, name, bases, dct) |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
28 | for token in STANDARD_TYPES: |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
29 | if token not in obj.styles: |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
30 | obj.styles[token] = '' |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
31 | |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
32 | def colorformat(text): |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
33 | if text[0:1] == '#': |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
34 | col = text[1:] |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
35 | if len(col) == 6: |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
36 | return col |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
37 | elif len(col) == 3: |
2426
da76c71624de
Updated to Pygments 1.6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1705
diff
changeset
|
38 | return col[0]*2 + col[1]*2 + col[2]*2 |
808
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
39 | elif text == '': |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
40 | return '' |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
41 | assert False, "wrong color format %r" % text |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
42 | |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
43 | _styles = obj._styles = {} |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
44 | |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
45 | for ttype in obj.styles: |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
46 | for token in ttype.split(): |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
47 | if token in _styles: |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
48 | continue |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
49 | ndef = _styles.get(token.parent, None) |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
50 | styledefs = obj.styles.get(token, '').split() |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
51 | if not ndef or token is None: |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
52 | ndef = ['', 0, 0, 0, '', '', 0, 0, 0] |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
53 | elif 'noinherit' in styledefs and token is not Token: |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
54 | ndef = _styles[Token][:] |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
55 | else: |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
56 | ndef = ndef[:] |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
57 | _styles[token] = ndef |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
58 | for styledef in obj.styles.get(token, '').split(): |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
59 | if styledef == 'noinherit': |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
60 | pass |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
61 | elif styledef == 'bold': |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
62 | ndef[1] = 1 |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
63 | elif styledef == 'nobold': |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
64 | ndef[1] = 0 |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
65 | elif styledef == 'italic': |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
66 | ndef[2] = 1 |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
67 | elif styledef == 'noitalic': |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
68 | ndef[2] = 0 |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
69 | elif styledef == 'underline': |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
70 | ndef[3] = 1 |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
71 | elif styledef == 'nounderline': |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
72 | ndef[3] = 0 |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
73 | elif styledef[:3] == 'bg:': |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
74 | ndef[4] = colorformat(styledef[3:]) |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
75 | elif styledef[:7] == 'border:': |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
76 | ndef[5] = colorformat(styledef[7:]) |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
77 | elif styledef == 'roman': |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
78 | ndef[6] = 1 |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
79 | elif styledef == 'sans': |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
80 | ndef[7] = 1 |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
81 | elif styledef == 'mono': |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
82 | ndef[8] = 1 |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
83 | else: |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
84 | ndef[0] = colorformat(styledef) |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
85 | |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
86 | return obj |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
87 | |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
88 | def style_for_token(cls, token): |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
89 | t = cls._styles[token] |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
90 | return { |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
91 | 'color': t[0] or None, |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
92 | 'bold': bool(t[1]), |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
93 | 'italic': bool(t[2]), |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
94 | 'underline': bool(t[3]), |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
95 | 'bgcolor': t[4] or None, |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
96 | 'border': t[5] or None, |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
97 | 'roman': bool(t[6]) or None, |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
98 | 'sans': bool(t[7]) or None, |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
99 | 'mono': bool(t[8]) or None, |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
100 | } |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
101 | |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
102 | def list_styles(cls): |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
103 | return list(cls) |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
104 | |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
105 | def styles_token(cls, ttype): |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
106 | return ttype in cls._styles |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
107 | |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
108 | def __iter__(cls): |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
109 | for token in cls._styles: |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
110 | yield token, cls.style_for_token(token) |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
111 | |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
112 | def __len__(cls): |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
113 | return len(cls._styles) |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
114 | |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
115 | |
2669
11a6696ff868
Fixes for pygments: version independent metaclass creation and library selection.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
2525
diff
changeset
|
116 | class Style(with_metaclass(StyleMeta, object)): |
808
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
117 | background_color = '#ffffff' |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
118 | |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
119 | #: highlight background color |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
120 | highlight_color = '#ffffcc' |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
121 | |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
122 | #: Style definitions for individual token types. |
8f85926125ef
Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
684
diff
changeset
|
123 | styles = {} |