有reST作家吗?

时间:2012-12-10 15:50:47

标签: python restructuredtext docutils

docutil.nodes树有 reST Writer 吗?我找不到一个,但也许我错过了一些明显的东西。或者自己写一个是微不足道的?我想实现reST-to-reST转换。

1 个答案:

答案 0 :(得分:5)

没有,除了微不足道的ReST标记之外,实现一个很难,如果不是不可能的话。

ReST角色和指令可以在解析时执行任意代码。特别是角色或指令可以创建具有任意内容的任意类型的节点并将其插入到文档树中。因此,文档树和ReST源代码之间没有直接映射,因此无法获得原始的ReST源代码 - 或者至少是一些接近的 - 用于任意文档树。

真实世界的例子是来自Sphinx的各种指令,例如py:class。这些指令将pending_xref个节点插入到文档树中,这些节点在以后的某个时间点被解析为真正的交叉引用。但是,没有单个指令对应于pending_xref节点,因此没有直接对应于包含此类节点的文档树的ReST源。

可以实现用于简单标准ReST标记的编写器,即标题,段落,强调等。我不知道有任何实现,但这对你自己来说是微不足道的。这可能会或可能不足以达到您的目的。

如果您的文档包含角色,指令或替换,则无法完成ReST-to-ReST转换。但是,您可以通过首先取消注册所有角色和指令来排序作弊,然后注册捕获所有角色和指令的函数,并在文档树中保留它们。基于这样的树,您可以恢复源(或至少接近这个)。然而,替换会丢失,因为这些替换在解析的早期阶段应用,并且不会出现在结果树中。