如何解决使Sphinx角色像内联指令一样工作 导入和常见功能指令角色应用设置
问题
我想要一个狮身人面像role
,其功能类似于内联directive
。也就是说,role
的{{1}}被其返回值 inline 代替,同时仍由狮身人面像进行后处理(例如,将raw_text
链接添加到电子邮件地址)。这应该提高mailto
源的可读性,因为它不会掩盖.rst
指令(就像sectionauthor
那样)。
但是,我没有设法得到
directive
呈现均匀,.. mydirective::
.. sectionauthor::
:myrole:`0`
的输出不进行后处理:
这有可能吗?是否可以在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()
类缺少state
,SphinxRole
不可用,因此该角色无法产生可后处理的输出。
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 举报,一经查实,本站将立刻删除。