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