【发布时间】:2019-06-06 17:28:55
【问题描述】:
我正在自动生成 reStructuredText 文件,这些文件由 Sphinx 呈现为多种格式,包括 HTML。 reStructuredText 文件有时包含 HTML 特殊字符,例如 HTML 构建器无法转义的 <,从而导致无效的 HTML 输出。这使我无法自动化文档生成过程,迫使我手动修复输出文件。这个问题的一个具体例子是:
<div class="line">
<code class="docutils literal notranslate">
<span class="pre">public</span>
</code>
<span class="xref std std-ref">heap(
</span>
</div>
它出现在heap(<) 文本片段上。当前必须手动将输出固定为:
<div class="line">
<code class="docutils literal notranslate">
<span class="pre">public</span>
</code>
<a class="reference internal" href="heap_1.html#heap-1">
<span class="std std-ref">heap(<)</span>
</a>
</div>
我在 HTML 构建器的 Sphinx 文档中找不到任何解决此问题的方法。有什么解决方法吗?修复原文中的问题不是一种选择(文本是必须编译干净的源代码;像&lt; 这样的转义字符会破坏其编译)。对应的reStructuredText文件片段为:
| **Extends:**
| ``public`` :ref:`heap(<) <heap/1>`
从 XML 文件片段自动生成:
<extends>
<name><![CDATA[heap(<)]]></name>
<functor><![CDATA[heap/1]]></functor>
<scope>public</scope>
<file><![CDATA[heap_1]]></file>
</extends>
【问题讨论】:
-
literal blocks 或 code blocks 是否适用于您的方案?
-
@StevePiercy 否。在上面的示例中,我有一个名为
hep(<)的参数对象。指向对象文档的链接将对象名称作为链接的文本。但是 HTML 构建器在&lt;字符上卡住了。 -
您能否粘贴一个您从中生成 HTML 的 reST 样本?看起来您在上面的两个代码示例中只粘贴了
make html的输出。每当我尝试段落、内联文字、文字块或代码块语法时,&lt;总是被 HTML 编码为&lt;并正确显示。 -
如何在 ReST 标记中转义
&lt;字符?像这样:heap(\<). -
@mzjn
.rst文件是自动生成的。预处理所有生成的内容以转义仅用于 HTML 输出的特殊字符的计算成本很高(这里的上下文是为编程语言 Logtalk 的所有 API 生成文档)。这种转义不应该是 HTML 构建器本身的任务吗?
标签: html xml python-sphinx documentation-generation cross-reference