aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/Pygments/py3/pygments/plugin.py
blob: b80be5e6d104ad7822e3a4bf030d36625cbeb800 (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
""" 
    pygments.plugin 
    ~~~~~~~~~~~~~~~ 
 
    Pygments setuptools plugin interface. The methods defined 
    here also work if setuptools isn't installed but they just 
    return nothing. 
 
    lexer plugins:: 
 
        [pygments.lexers] 
        yourlexer = yourmodule:YourLexer 
 
    formatter plugins:: 
 
        [pygments.formatters] 
        yourformatter = yourformatter:YourFormatter 
        /.ext = yourformatter:YourFormatter 
 
    As you can see, you can define extensions for the formatter 
    with a leading slash. 
 
    syntax plugins:: 
 
        [pygments.styles] 
        yourstyle = yourstyle:YourStyle 
 
    filter plugin:: 
 
        [pygments.filter] 
        yourfilter = yourfilter:YourFilter 
 
 
    :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details. 
""" 
LEXER_ENTRY_POINT = 'pygments.lexers' 
FORMATTER_ENTRY_POINT = 'pygments.formatters' 
STYLE_ENTRY_POINT = 'pygments.styles' 
FILTER_ENTRY_POINT = 'pygments.filters' 
 
 
def iter_entry_points(group_name):
    try:
        import pkg_resources
    except (ImportError, OSError):
        return []

    return pkg_resources.iter_entry_points(group_name)


def find_plugin_lexers(): 
    for entrypoint in iter_entry_points(LEXER_ENTRY_POINT):
        yield entrypoint.load() 
 
 
def find_plugin_formatters(): 
    for entrypoint in iter_entry_points(FORMATTER_ENTRY_POINT):
        yield entrypoint.name, entrypoint.load() 
 
 
def find_plugin_styles(): 
    for entrypoint in iter_entry_points(STYLE_ENTRY_POINT):
        yield entrypoint.name, entrypoint.load() 
 
 
def find_plugin_filters(): 
    for entrypoint in iter_entry_points(FILTER_ENTRY_POINT):
        yield entrypoint.name, entrypoint.load()