小能豆

有 reST Writer 吗?

py

是否有用于docutil.nodes树的reST Writer?我找不到,但也许我遗漏了一些显而易见的东西。或者自己写一个很容易?我想实现 reST 到 reST 的转换。


阅读 8

收藏
2024-10-28

共1个答案

小能豆

没有,而且除了简单的 ReST 标记之外,实现它是很困难的,甚至是不可能的。

ReST 角色和指令可以在解析时执行任意代码。具体来说,角色或指令可以创建任意类型、任意内容的节点并将其插入文档树中。因此,文档树和 ReST 源代码之间没有直接映射,因此不可能获得任意文档树的原始 ReST 源代码(或至少接近原始源代码)。

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

可以实现一个编写器,用于简单的标准 ReST 标记,即标题、段落、强调等。我不知道有任何实现,但自己做起来很简单。这可能足以满足您的目的,也可能不够。

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

2024-10-28