| """ |
| Pygments |
| ~~~~~~~~ |
| |
| Pygments is a syntax highlighting package written in Python. |
| |
| It is a generic syntax highlighter for general use in all kinds of software |
| such as forum systems, wikis or other applications that need to prettify |
| source code. Highlights are: |
| |
| * a wide range of common languages and markup formats is supported |
| * special attention is paid to details, increasing quality by a fair amount |
| * support for new languages and formats are added easily |
| * a number of output formats, presently HTML, LaTeX, RTF, SVG, all image |
| formats that PIL supports, and ANSI sequences |
| * it is usable as a command-line tool and as a library |
| * ... and it highlights even Brainfuck! |
| |
| The `Pygments master branch`_ is installable with ``easy_install Pygments==dev``. |
| |
| .. _Pygments master branch: |
| https://github.com/pygments/pygments/archive/master.zip#egg=Pygments-dev |
| |
| :copyright: Copyright 2006-2022 by the Pygments team, see AUTHORS. |
| :license: BSD, see LICENSE for details. |
| """ |
| from io import StringIO, BytesIO |
| |
| __version__ = '2.13.0' |
| __docformat__ = 'restructuredtext' |
| |
| __all__ = ['lex', 'format', 'highlight'] |
| |
| |
| def lex(code, lexer): |
| """ |
| Lex ``code`` with ``lexer`` and return an iterable of tokens. |
| """ |
| try: |
| return lexer.get_tokens(code) |
| except TypeError: |
| # Heuristic to catch a common mistake. |
| from pip._vendor.pygments.lexer import RegexLexer |
| if isinstance(lexer, type) and issubclass(lexer, RegexLexer): |
| raise TypeError('lex() argument must be a lexer instance, ' |
| 'not a class') |
| raise |
| |
| |
| def format(tokens, formatter, outfile=None): # pylint: disable=redefined-builtin |
| """ |
| Format a tokenlist ``tokens`` with the formatter ``formatter``. |
| |
| If ``outfile`` is given and a valid file object (an object |
| with a ``write`` method), the result will be written to it, otherwise |
| it is returned as a string. |
| """ |
| try: |
| if not outfile: |
| realoutfile = getattr(formatter, 'encoding', None) and BytesIO() or StringIO() |
| formatter.format(tokens, realoutfile) |
| return realoutfile.getvalue() |
| else: |
| formatter.format(tokens, outfile) |
| except TypeError: |
| # Heuristic to catch a common mistake. |
| from pip._vendor.pygments.formatter import Formatter |
| if isinstance(formatter, type) and issubclass(formatter, Formatter): |
| raise TypeError('format() argument must be a formatter instance, ' |
| 'not a class') |
| raise |
| |
| |
| def highlight(code, lexer, formatter, outfile=None): |
| """ |
| Lex ``code`` with ``lexer`` and format it with the formatter ``formatter``. |
| |
| If ``outfile`` is given and a valid file object (an object |
| with a ``write`` method), the result will be written to it, otherwise |
| it is returned as a string. |
| """ |
| return format(lex(code, lexer), formatter, outfile) |