eric6/ThirdParty/Pygments/pygments/formatter.py

Tue, 15 Sep 2020 19:09:05 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 15 Sep 2020 19:09:05 +0200
changeset 7701
25f42e208e08
parent 7547
21b0534faebc
child 7983
54c5cfbb1e29
permissions
-rw-r--r--

Pygments: updated to 2.7.0.

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

eric ide

mercurial