问题描述
问题
我想要一个狮身人面像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 <[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()
类缺少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 (将#修改为@)