使用Sphinx进行自定义语法高亮

13

我想创建一个可以在Sphinx环境中使用的自定义语法高亮显示程序,这可行吗?如果可以,我该如何处理?

1个回答

21

背景

Sphinx (http://sphinx-doc.org/) 在内部使用 Pygments (http://pygments.org/) 作为语法高亮器。Pygments 支持添加自定义的语法高亮器 (lexer),具体描述请参见http://pygments.org/docs/lexerdevelopment/

示例用法

我将尝试在 Pygments 中定义一个新的自定义 lexer,并在 conf.py Sphinx 配置文件中初始化该新的自定义 lexer。以下是一个可以帮助你入门的小例子:

from pygments.lexer import RegexLexer
from pygments import token
from sphinx.highlighting import lexers

class BCLLexer(RegexLexer):
    name = 'MYLANG'

    tokens = {
        'root': [
            (r'MyKeyword', token.Keyword),
            (r'[a-zA-Z]', token.Name),
            (r'\s', token.Text)
        ]
    }

lexers['MYLANG'] = BCLLexer(startinline=True)

我尝试按照您的建议使词法分析器工作,但是 Sphinx 告诉我它找不到该词法分析器。您能否给出一个简短的示例,说明如何将词法分析器包含到 conf.py 文件中? - NOhs
好的,我想通了。既然这是你的答案,你想要添加一个MWE吗?还是如果我创建一个带有MWE的答案就可以了? - NOhs
@MrZ:什么是 MWE?如果有遗漏的东西,我更愿意在此基础上进行扩展回答,但如果您认为创建新答案是更好的解决方案,也请随意。 - Robert Lujo
@MrZ:谢谢。像我说的,无论您喜欢什么,都可以自由地扩展或创建新的内容。 - Robert Lujo
我进行了扩展。我只是不确定SO是否会接受大的更改作为“编辑”。 - NOhs
1
“startinline” 在这里似乎没有任何作用。它似乎是 PhpLexer 类的一个选项,但是对于 RegexLexer,这个关键字参数未被定义。 - Waleed Khan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接