aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/Pygments/py3/pygments/__init__.py
blob: 958ecca008723dbc610dd8b8b0fb98b2ab2883c3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
""" 
    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-2021 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details. 
""" 
from io import StringIO, BytesIO
 
__version__ = '2.11.2'
__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 as err: 
        if (isinstance(err.args[0], str) and
            ('unbound method get_tokens' in err.args[0] or
             'missing 1 required positional argument' in err.args[0])):
            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 as err: 
        if (isinstance(err.args[0], str) and
            ('unbound method format' in err.args[0] or
             'missing 1 required positional argument' in err.args[0])):
            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)