如何使用 docutils 和 pygments 控制短/长标签名称?

Posted

技术标签:

【中文标题】如何使用 docutils 和 pygments 控制短/长标签名称?【英文标题】:How to control short/long tag names with docutils and pygments? 【发布时间】:2015-06-24 21:25:20 【问题描述】:

我有两个 python 代码,一个使用 docutils,另一个使用 pygments。两个代码都处理 java 源文件以突出显示源代码。 pygments 直接读取 java 源文件,docutils 读取 RST 文件,其中包含包含 java sn-ps 的代码块指令。

问题在于 pygments 使用 短标签名称 而 docutils 使用 长标签名称。我不知道如何告诉其中一个使用短/长它们以便让这两种工具使用相同的语法。

我构建了以下最小示例:

from pygments import highlight
from pygments.lexers import JavaLexer
from pygments.formatters import htmlFormatter

# Here we read directly java with the Java Lexer
formatter = HtmlFormatter()
source1 = highlight("if (o.equals(\"test\") ;", JavaLexer(), formatter)
print source1

from docutils.core import publish_parts

# Here we read a RST file containing a code-block directive that includes java
extra_settings = 'initial_header_level': 4, 'doctitle_xform' : 0
source2 = publish_parts(".. code-block:: java\n\n    if (o.equals(\"test\") ;", writer_name='html',settings_overrides=extra_settings)['html_body']
print source2

给出以下输出:

<div class="highlight"><pre><span class="k">if</span> <span class="o">(</span><span class="n">o</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="s">&quot;test&quot;</span><span class="o">)</span> <span class="o">;</span>
</pre></div>

<div class="document">
<pre class="code java literal-block">
<span class="keyword">if</span> <span class="operator">(</span><span class="name">o</span><span class="operator">.</span><span class="name attribute">equals</span><span class="operator">(</span><span class="literal string">&quot;test&quot;</span><span class="operator">)</span> <span class="operator">;</span>
</pre>
</div>

它表明对于“if”,pygments 使用标签“class='k'”,而 docutils 使用标签“class='keyword'”。

如何更改其中之一以获得相同的标签名称?

【问题讨论】:

【参考方案1】:

请尝试在 extra_settings 中添加“syntax_highlight”选项。

extra_settings = 
    'initial_header_level': 4,
    'doctitle_xform' : 0,
    'syntax_highlight': 'short'  # Possible values: 'long', 'short', 'none'
 

【讨论】:

这非常有用,docutils 文档严重缺乏

以上是关于如何使用 docutils 和 pygments 控制短/长标签名称?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 pycharm 的命令以将 rst 转换为 html

如何更改 Pygments 中特定行的背景?

如何在 Heroku 上使用 Pygments.rb?

如何在 Jekyll/Pygments 中突出显示 CSHTML

如何在 Pygments 中使用 Dracula 主题作为样式?

python安装Django需要环境