插件¶
如果您想在不攻击源代码的情况下扩展Pygments,但是想使用lexer/formatter/style/filter查找函数 (lexers.get_lexer_by_name et al.), you can use setuptools entrypoints添加新的lexer、格式化程序或样式,就像它们在pygments核心中一样。
这意味着您可以将荧光笔模块与 pygmentize 脚本,它依赖于上述函数。
插件发现¶
在运行时,发现插件优先使用Python的标准库模块 importlib.metadata ,在Python3.8和更高版本中可用。在早期的Python版本中,Pygments尝试使用 importlib_metadata 后端口(如果可用)。如果不可用,则尝试在旧版本上进行回退 pkg_resources 模块。最后,如果 pkg_resources
不可用,则根本不会加载任何插件。请注意 pkg_resources
随一起分发的 setuptools ,因此在大多数Python环境中都可用。然而, pkg_resources
远远慢于 importlib.metadata
或其 importlib_metadata
后端口。因此,如果在版本早于3.8的Python下运行Pygments,建议安装 importlib-metadata
。Pygments定义了一个 plugins
额外打包,这样您就可以确保它的安装具有最好的插件支持(即 importlib-metadata
如果您运行的是早于3.8的版本,则还会安装),方法是指定 pygments[plugins]
作为要求,例如,使用 pip
:
$ python -m pip install --user pygments[plugins]
通过入口点定义插件¶
以下是Pygments了解的安装工具入口点列表:
pygments.lexers
这个入口点用于向Pygments核心添加新的lexer。入口点值的名称并不重要,Pygments从类定义中提取所需的元数据:
[pygments.lexers] yourlexer = yourmodule:YourLexer请注意,您必须定义
name
,aliases
和filename
属性,以便您可以从命令行使用荧光笔:class YourLexer(...): name = 'Name Of Your Lexer' aliases = ['alias'] filenames = ['*.ext']
pygments.formatters
您可以使用此入口点向Pygment添加新的格式化程序。入口点项的名称是格式化程序的名称。如果在名称前面加上斜线,则它将用作文件名模式:
[pygments.formatters] yourformatter = yourmodule:YourFormatter /.ext = yourmodule:YourFormatter
pygments.styles
To add a new style you can use this entrypoint. 入口点的名称是样式的名称:
[pygments.styles] yourstyle = yourmodule:YourStyle
pygments.filters
使用此入口点注册新的筛选器。入口点的名称是筛选器的名称:
[pygments.filters] yourfilter = yourmodule:YourFilter
如何使用入口点¶
此文档不解释如何使用这些入口点,因为它包含在 setuptools documentation . 该页面应该涵盖编写插件所需的所有内容。
延伸核心¶
如果您编写了一个开源的Pygments插件,请告知我们。我们很有可能将其添加到Pygments分布中。