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.formatter |
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 | Base formatter class. |
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 | import codecs |
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 | from pygments.util import get_bool_opt |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
15 | from pygments.styles import get_style_by_name |
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 | __all__ = ['Formatter'] |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
18 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
19 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
20 | def _lookup_style(style): |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
21 | if isinstance(style, str): |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
22 | return get_style_by_name(style) |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
23 | return style |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
24 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
25 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
26 | class Formatter(object): |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
27 | """ |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
28 | Converts a token stream to text. |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
29 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
30 | Options accepted: |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
31 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
32 | ``style`` |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
33 | The style to use, can be a string or a Style subclass |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
34 | (default: "default"). Not used by e.g. the |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
35 | TerminalFormatter. |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
36 | ``full`` |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
37 | Tells the formatter to output a "full" document, i.e. |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
38 | a complete self-contained document. This doesn't have |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
39 | any effect for some formatters (default: false). |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
40 | ``title`` |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
41 | If ``full`` is true, the title that should be used to |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
42 | caption the document (default: ''). |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
43 | ``encoding`` |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
44 | If given, must be an encoding name. This will be used to |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
45 | convert the Unicode token strings to byte strings in the |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
46 | output. If it is "" or None, Unicode strings will be written |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
47 | to the output file, which most file-like objects do not |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
48 | support (default: None). |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
49 | ``outencoding`` |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
50 | Overrides ``encoding`` if given. |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
51 | """ |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
52 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
53 | #: Name of the formatter |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
54 | name = None |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
55 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
56 | #: Shortcuts for the formatter |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
57 | aliases = [] |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
58 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
59 | #: fn match rules |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
60 | filenames = [] |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
61 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
62 | #: If True, this formatter outputs Unicode strings when no encoding |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
63 | #: option is given. |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
64 | unicodeoutput = True |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
65 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
66 | def __init__(self, **options): |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
67 | self.style = _lookup_style(options.get('style', 'default')) |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
68 | self.full = get_bool_opt(options, 'full', False) |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
69 | self.title = options.get('title', '') |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
70 | self.encoding = options.get('encoding', None) or None |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
71 | self.encoding = options.get('outencoding', None) or self.encoding |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
72 | self.options = options |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
73 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
74 | def get_style_defs(self, arg=''): |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
75 | """ |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
76 | Return the style definitions for the current style as a string. |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
77 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
78 | ``arg`` is an additional argument whose meaning depends on the |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
79 | formatter used. Note that ``arg`` can also be a list or tuple |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
80 | for some formatters like the html formatter. |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
81 | """ |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
82 | return '' |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
83 | |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
84 | def format(self, tokensource, outfile): |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
85 | """ |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
86 | Format ``tokensource``, an iterable of ``(tokentype, tokenstring)`` |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
87 | tuples and write it into ``outfile``. |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
88 | """ |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
89 | if self.encoding: |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
90 | # wrap the outfile in a StreamWriter |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
91 | outfile = codecs.lookup(self.encoding)[3](outfile) |
2f29a0b6e1c7
Updated Pygments to version 1.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
12
diff
changeset
|
92 | return self.format_unencoded(tokensource, outfile) |