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