3

Sphinx ドキュメント ユーティリティの簡単な拡張機能があります (使用しているバージョンは Sphinx-1.1.3-py2.6 です)。Doug Hellmann によるこの優れた例と非常によく似ています。最終的な HTML にrel='bar'属性を追加するにはどうすればよいですか?鬼ごっこ?

これを行うにはいくつかの方法があるようですが、簡単な方法が見つかりませんでした。アドバイスやヒントをいただければ幸いです。

参照ノードは次の方法で作成されます。

node = nodes.reference(rawtext, utils.unescape(text),
            internal=False,
            refuri=ref,
            classes=['foocss'],
            rel='bar',
            **options)

ただし、rel='bar'属性は、最終的な HTML マークアップから取り除かれます。ソースを調べてみると、 sphinx/writers/html.pyHTMLTranslatorクラスにたどり着きました。以下は、visit_reference メソッドの一部です。

# 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))

追加の属性は処理されません。もしかしたら、他のパーツに交換できるかもしれません。その点で有用なものは見つかりませんでした。

だから、私はできる:

  • 参照ノードのすべての機能を再実装するカスタム ノードを作成します。小さな追加のためのかなりの作業。
  • sphinx/writers/html.pyの *visit_reference* メソッドを上書きします。より高速ですが、将来の Sphinx の更新に関しては悪いです。
  • 事後 link タグに jQuery で rel 属性を追加します。まあ、きれいでもない。

明白でエレガントな解決策が欠けていると確信しています。

ありがとう!

4

1 に答える 1

0

でこれを行うことができましたdownload_reference。を使用して、メソッドapp.add_nodeをオーバーライドします。visit_...

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))

フルエクステンションはこちら

于 2013-02-17T21:07:09.640 に答える