使Sphinx角色像内联指令一样工作 导入和常见功能指令角色应用设置

问题描述

问题

我想要一个狮身人面像role,其功能类似于内联directive。也就是说,role的{​​{1}}被其返回值 inline 代替,同时仍由狮身人面像进行后处理(例如,将raw_text链接添加到电子邮件地址)。这应该提高mailto源的可读性,因为它不会掩盖.rst指令(就像sectionauthor那样)。

但是,我没有设法得到

directive

呈现均匀,.. mydirective:: .. sectionauthor:: :myrole:`0` 输出进行后处理:

Rendered output

这有可能吗?是否可以在role之间(例如``之间)进行不带文本的角色调用

代码

导入和常见功能

:myrole:``

指令

import textwrap

import sphinx.util
from docutils import nodes
from docutils.statemachine import StringList
from sphinx.util.docutils import SphinxDirective,SphinxRole


def get_contibutors():
        contributors = [  # Calculated per file,not static
            "Name1 Surname1 <[email protected]>","Name2 Surname2 <[email protected]>",]
        return contributors

角色

由于class MyDirective(SphinxDirective): has_content = False optional_arguments = 0 def run(self): contributors = get_contributors() contributors = "\n ".join(contributors) new_content = textwrap.dedent( """\ .. sectionauthor:: {contributors} """ ).format(contributors=contributors) new_content = StringList(new_content.splitlines(),source="") node = nodes.Element() sphinx.util.nested_parse_with_titles(self.state,new_content,node) return node.children / nested_parse_with_titles()类缺少stateSphinxRole不可用,因此该角色无法产生可后处理的输出

Role

应用设置

class MyRole(SphinxRole):
    def run(self) -> tuple[list[Node],list[system_message]]:
        contributors = get_contributors()
        contributors = ",".join(contributors)

        new_content = contributors
        new_content = StringList(new_content.splitlines(),source="")

        # Cmt: The following cannot be used,as `SphinxRole` has no `state`:
        # node = nodes.Element()
        # sphinx.util.nested_parse_with_titles(self.state,node)

        # Cmt: The only thing I found that at least prints the output is:
        node = nodes.Text(new_content)

        return [node],[]

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)