1# -*- coding: utf-8 -*-
2"""
3    pygments.plugin
4    ~~~~~~~~~~~~~~~
5
6    Pygments setuptools plugin interface. The methods defined
7    here also work if setuptools isn't installed but they just
8    return nothing.
9
10    lexer plugins::
11
12        [pygments.lexers]
13        yourlexer = yourmodule:YourLexer
14
15    formatter plugins::
16
17        [pygments.formatters]
18        yourformatter = yourformatter:YourFormatter
19        /.ext = yourformatter:YourFormatter
20
21    As you can see, you can define extensions for the formatter
22    with a leading slash.
23
24    syntax plugins::
25
26        [pygments.styles]
27        yourstyle = yourstyle:YourStyle
28
29    filter plugin::
30
31        [pygments.filter]
32        yourfilter = yourfilter:YourFilter
33
34
35    :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS.
36    :license: BSD, see LICENSE for details.
37"""
38LEXER_ENTRY_POINT = 'pygments.lexers'
39FORMATTER_ENTRY_POINT = 'pygments.formatters'
40STYLE_ENTRY_POINT = 'pygments.styles'
41FILTER_ENTRY_POINT = 'pygments.filters'
42
43def iter_entry_points(group_name):
44    try:
45        import pkg_resources
46    except ImportError:
47        return []
48
49    return pkg_resources.iter_entry_points(group_name)
50
51def find_plugin_lexers():
52    for entrypoint in iter_entry_points(LEXER_ENTRY_POINT):
53        yield entrypoint.load()
54
55
56def find_plugin_formatters():
57    for entrypoint in iter_entry_points(FORMATTER_ENTRY_POINT):
58        yield entrypoint.name, entrypoint.load()
59
60
61def find_plugin_styles():
62    for entrypoint in iter_entry_points(STYLE_ENTRY_POINT):
63        yield entrypoint.name, entrypoint.load()
64
65
66def find_plugin_filters():
67    for entrypoint in iter_entry_points(FILTER_ENTRY_POINT):
68        yield entrypoint.name, entrypoint.load()
69