如何配置用于的分隔符:menuselection:?

时间:2015-09-25 00:52:16

标签: python-sphinx restructuredtext

我正在使用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?)?

1 个答案:

答案 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.