plugin.py 1.8 KB

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