summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/pygments/formatter.py
diff options
context:
space:
mode:
Diffstat (limited to 'venv/lib/python3.11/site-packages/pygments/formatter.py')
-rw-r--r--venv/lib/python3.11/site-packages/pygments/formatter.py124
1 files changed, 124 insertions, 0 deletions
diff --git a/venv/lib/python3.11/site-packages/pygments/formatter.py b/venv/lib/python3.11/site-packages/pygments/formatter.py
new file mode 100644
index 0000000..87183ab
--- /dev/null
+++ b/venv/lib/python3.11/site-packages/pygments/formatter.py
@@ -0,0 +1,124 @@
+"""
+ pygments.formatter
+ ~~~~~~~~~~~~~~~~~~
+
+ Base formatter class.
+
+ :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+import codecs
+
+from pygments.util import get_bool_opt
+from pygments.styles import get_style_by_name
+
+__all__ = ['Formatter']
+
+
+def _lookup_style(style):
+ if isinstance(style, str):
+ return get_style_by_name(style)
+ return style
+
+
+class Formatter:
+ """
+ Converts a token stream to text.
+
+ Formatters should have attributes to help selecting them. These
+ are similar to the corresponding :class:`~pygments.lexer.Lexer`
+ attributes.
+
+ .. autoattribute:: name
+ :no-value:
+
+ .. autoattribute:: aliases
+ :no-value:
+
+ .. autoattribute:: filenames
+ :no-value:
+
+ You can pass options as keyword arguments to the constructor.
+ All formatters accept these basic options:
+
+ ``style``
+ The style to use, can be a string or a Style subclass
+ (default: "default"). Not used by e.g. the
+ TerminalFormatter.
+ ``full``
+ Tells the formatter to output a "full" document, i.e.
+ a complete self-contained document. This doesn't have
+ any effect for some formatters (default: false).
+ ``title``
+ If ``full`` is true, the title that should be used to
+ caption the document (default: '').
+ ``encoding``
+ If given, must be an encoding name. This will be used to
+ convert the Unicode token strings to byte strings in the
+ output. If it is "" or None, Unicode strings will be written
+ to the output file, which most file-like objects do not
+ support (default: None).
+ ``outencoding``
+ Overrides ``encoding`` if given.
+
+ """
+
+ #: Full name for the formatter, in human-readable form.
+ name = None
+
+ #: A list of short, unique identifiers that can be used to lookup
+ #: the formatter from a list, e.g. using :func:`.get_formatter_by_name()`.
+ aliases = []
+
+ #: A list of fnmatch patterns that match filenames for which this
+ #: formatter can produce output. The patterns in this list should be unique
+ #: among all formatters.
+ filenames = []
+
+ #: If True, this formatter outputs Unicode strings when no encoding
+ #: option is given.
+ unicodeoutput = True
+
+ def __init__(self, **options):
+ """
+ As with lexers, this constructor takes arbitrary optional arguments,
+ and if you override it, you should first process your own options, then
+ call the base class implementation.
+ """
+ self.style = _lookup_style(options.get('style', 'default'))
+ self.full = get_bool_opt(options, 'full', False)
+ self.title = options.get('title', '')
+ self.encoding = options.get('encoding', None) or None
+ if self.encoding in ('guess', 'chardet'):
+ # can happen for e.g. pygmentize -O encoding=guess
+ self.encoding = 'utf-8'
+ self.encoding = options.get('outencoding') or self.encoding
+ self.options = options
+
+ def get_style_defs(self, arg=''):
+ """
+ This method must return statements or declarations suitable to define
+ the current style for subsequent highlighted text (e.g. CSS classes
+ in the `HTMLFormatter`).
+
+ The optional argument `arg` can be used to modify the generation and
+ is formatter dependent (it is standardized because it can be given on
+ the command line).
+
+ This method is called by the ``-S`` :doc:`command-line option <cmdline>`,
+ the `arg` is then given by the ``-a`` option.
+ """
+ return ''
+
+ def format(self, tokensource, outfile):
+ """
+ This method must format the tokens from the `tokensource` iterable and
+ write the formatted version to the file object `outfile`.
+
+ Formatter options can control how exactly the tokens are converted.
+ """
+ if self.encoding:
+ # wrap the outfile in a StreamWriter
+ outfile = codecs.lookup(self.encoding)[3](outfile)
+ return self.format_unencoded(tokensource, outfile)