微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使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 <name1.surname1@domain.com>","Name2 Surname2 <name2.surname2@domain.com>",]
        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 举报,一经查实,本站将立刻删除。