3

我正在使用JekyllPygmentsMarkdown转换为静态 html 页面。内容是为GitHub 页面准备的。为了显示代码示例(本示例中的 shell 命令),我将以下部分添加到文件中:

{% highlight sh %}
$ ls -1a
.
..
README
{% endhighlight %}

该参数sh是指配置词法分析器的shell。您还可以选择其他词法分析器,例如console突出显示文本。

我注意到一些基本命令,例如lsshell 词法分析器没有突出显示。这也可以在lexer 的源代码中看到。以下摘录显示了 shell 词法分析器的关键字定义(在 BashLexer 类中找到)。

...
'basic': [
    (r'\b(if|fi|else|while|do|done|for|then|return|function|case|'
     r'select|continue|until|esac|elif)\s*\b',
     Keyword),
    (r'\b(alias|bg|bind|break|builtin|caller|cd|command|compgen|'
     r'complete|declare|dirs|disown|echo|enable|eval|exec|exit|'
     r'export|false|fc|fg|getopts|hash|help|history|jobs|kill|let|'
     r'local|logout|popd|printf|pushd|pwd|read|readonly|set|shift|'
     r'shopt|source|suspend|test|time|times|trap|true|type|typeset|'
     r'ulimit|umask|unalias|unset|wait)\s*\b(?!\.)',
     Name.Builtin),
    (r'#.*\n', Comment),
    (r'\\[\w\W]', String.Escape),
    (r'(\b\w+)(\s*)(=)', bygroups(Name.Variable, Text, Operator)),
    (r'[\[\]{}()=]', Operator),
    (r'<<-?\s*(\'?)\\?(\w+)[\w\W]+?\2', String),
    (r'&&|\|\|', Operator),
],
...

有没有办法扩展关键字列表,或者你能推荐另一个词法分析器吗?

4

1 回答 1

4

您可以通过编写自己的词法分析器来添加新的关键字,通过子类化另一个词法分析器,将关键字添加到 Pygments 词法分析器。有关更多信息,请参阅pygments 文档。我制作了一个子类化词法分析器,它向 C++ 词法分析器添加了几个关键字,可以在这个 Github repo中看到。

我不确定如何添加除EXTRA_KEYWORDS.

于 2014-04-05T10:23:16.540 回答