【发布时间】:2012-12-10 15:50:46
【问题描述】:
docutil.nodes 树有 reST Writer 吗?我找不到一个,但也许我错过了一些明显的东西。还是自己写一个微不足道?我想实现 reST-to-reST 转换。
【问题讨论】:
标签: python restructuredtext docutils
docutil.nodes 树有 reST Writer 吗?我找不到一个,但也许我错过了一些明显的东西。还是自己写一个微不足道?我想实现 reST-to-reST 转换。
【问题讨论】:
标签: python restructuredtext docutils
没有,而且很难,如果不是不可能实现一个超越微不足道的 ReST 标记。
ReST 角色和指令可以在解析时执行任意代码。特别是角色或指令可以创建任意类型的节点并将任意内容插入到文档树中。因此,文档树和 ReST 源代码之间没有直接映射,因此不可能获得任意文档树的原始 ReST 源代码——或者至少是接近的东西。
一个真实的例子是来自Sphinx 的各种指令,例如py:class。这些指令将pending_xref 节点插入到文档树中,这些节点稍后会解析为真正的交叉引用。但是,没有一个指令对应于 pending_xref 节点,因此没有直接对应于包含此类节点的文档树的 ReST 源。
可以为简单的标准 ReST 标记实现编写器,即标题、段落、强调等。我不知道任何实现,但这对你自己来说是微不足道的。对于您的目的而言,这可能足够,也可能不够。
如果您的文档包含角色、指令或替换,则不可能进行完整的 ReST 到 ReST 转换。但是,您可以通过首先取消注册所有角色和指令,然后注册一个函数来捕获所有角色和指令并将它们按字面意思保存在文档树中来进行某种欺骗。基于这样的树,您可以恢复源(或至少接近此)。但是,替换会丢失,因为这些替换是在解析的早期阶段应用的,并且不会出现在生成的树中。
【讨论】: