我正在使用Sphinx为我的项目生成HTML文档。在内联标记下,Sphinx文档讨论了:menuselection:,用于使用标记标记一系列菜单选择:
:menuselection:`Start --> Programs`
这导致以下HTML:
<span class="menuselection">Start ‣ Programs</span>
即。 -->
被转换为小三角形,我已经确定它是U + 2023,三角形BULLET。
这一切都很好,但我想使用不同的角色而不是三角形。我已经搜索了Sphinx包和主题包(sphinx-bootstrap-theme)对于'menuselection',三角形角色以及其他一些东西,但是没有找到任何替代{{1}的东西。转到-->
(无论如何,对我来说没什么好看的)。但必须在我的.rst源和html之间进行转换。
我的问题是:具体是做什么转换(sphinx core?HTML writer?Theme JS?)?
答案 0 :(得分:3)
转换在sphinx.roles.menusel_role()
函数中完成。您可以使用不同的分隔符来创建自己的此函数版本,并将其注册以供使用。
将以下内容添加到项目的conf.py:
from docutils import nodes, utils
from docutils.parsers.rst import roles
from sphinx.roles import _amp_re
def patched_menusel_role(typ, rawtext, text, lineno, inliner, options={}, content=[]):
text = utils.unescape(text)
if typ == 'menuselection':
text = text.replace('-->', u'\N{RIGHTWARDS ARROW}') # Here is the patch
spans = _amp_re.split(text)
node = nodes.emphasis(rawtext=rawtext)
for i, span in enumerate(spans):
span = span.replace('&&', '&')
if i == 0:
if len(span) > 0:
textnode = nodes.Text(span)
node += textnode
continue
accel_node = nodes.inline()
letter_node = nodes.Text(span[0])
accel_node += letter_node
accel_node['classes'].append('accelerator')
node += accel_node
textnode = nodes.Text(span[1:])
node += textnode
node['classes'].append(typ)
return [node], []
# Use 'patched_menusel_role' function for processing the 'menuselection' role
roles.register_local_role("menuselection", patched_menusel_role)
构建html时,请务必先make clean
,以便使用修补程序重新解析更新后的conf.py.