是否可以用另一个指令替换一个指令

时间:2016-09-27 11:08:58

标签: python-sphinx restructuredtext

我想创建一个将一个指令转换为另一个指令的替换(或类似)。

例如:

在我们基于sphinx的文档中,我们使用Admonitions创建了某些注释和警告框。

但是,如果我们使用

.. note:: This is a Note

方框的标题是注意,而这是一个注释成为第一段。

相比之下,这个指令

.. admonition:: This is a Note
   :class: note

生成一个带有所需标题的记事框。

为了让其他编辑更容易,我想创建一个替换,用第二个替换第一个。

在狮身人面像中有什么可以做的吗?

1 个答案:

答案 0 :(得分:2)

是的,可以做到。您必须向Sphinx添加自定义指令。使用以下代码创建一个Python模块(如mydirectives.py旁边的conf.py):

import os
import os.path
import re
import subprocess

import docutils.core
import docutils.nodes
import docutils.parsers.rst

class AbstractDirective(docutils.parsers.rst.Directive):
    has_content = True
    required_arguments = 0
    optional_arguments = 0
    option_spec = {}
    final_argument_whitespace = False

    node_class = docutils.nodes.container

    def run(self):
        self.assert_has_content()
        text = '\n'.join(self.content)
        admonition_node = self.node_class(rawsource=text)
        self.state.nested_parse(self.content, self.content_offset,
                                admonition_node)
        admonition_node.set_class("abstract")
        return [admonition_node]


def setup(app):
    app.add_directive('abstract', AbstractDirective)

必须有一些方法来添加标题。也许你需要添加一个 标题节点自己。缺乏文档,最好看看 source for admonitions 你会对这些文档有所了解。

使用自定义文本节点,您应该能够编写自己的注释指令。