我有一个 Sphinx 文档实用程序的简单扩展(我使用的版本是Sphinx-1.1.3-py2.6)。非常喜欢this https://doughellmann.com/posts/defining-custom-roles-in-sphinx/道格·赫尔曼(Doug Hellmann)的一个很好的例子。我怎样才能添加一个rel='bar'
属性到最终的 HTML<a ...>
tag?
参考节点以这种方式创建:
node = nodes.reference(rawtext, utils.unescape(text),
internal=False,
refuri=ref,
classes=['foocss'],
rel='bar',
**options)
但是,那rel='bar'
属性从最终的 HTML 标记中删除。寻找源头让我sphinx/writers/html.py
和HTMLTranslator
班级。这是访问参考方法的一部分:
# overwritten
def visit_reference(self, node):
atts = {'class': 'reference'}
<snip>
if 'reftitle' in node:
atts['title'] = node['reftitle']
self.body.append(self.starttag(node, 'a', '', **atts))
不处理附加属性。也许它们可以在其他部分被替换。我在这方面找不到任何有用的东西。
所以,我可以:
- 创建一个自定义节点,它重新实现参考节点的所有功能。少量添加需要相当多的工作。
- 覆盖
visit_reference
中的方法sphinx/writers/html.py
。速度更快,但对于未来的 Sphinx 更新来说很糟糕。
- 之后使用 jQuery 将 rel 属性添加到链接标记中。嗯,也不漂亮。
我设法做到了这一点download_reference
. Using app.add_node
我覆盖visit_...
method:
import posixpath
from sphinx.writers.html import HTMLTranslator
from sphinx.addnodes import download_reference
def visit_download_reference(self, node):
if node.hasattr('filename'):
self.body.append(
'<a class="reference download internal" href="%s" %s>' %
(posixpath.join(self.builder.dlpath, node['filename']), 'rel="%s"' % node['rel'] if node.get('rel', None) else ''))
self.context.append('</a>')
else:
self.context.append('')
def setup(app):
app.add_node(download_reference, html=(visit_download_reference, HTMLTranslator.depart_download_reference))
完整的扩展在这里 http://pastebin.com/pMhKnTkv
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)