サイトの外部リンクを別窓にする for Sphinx
ちょっと
Sphinx(rST)におけるリンクの考え方
Sphinxでの
それぞれのreference と
SphinxのHTMLビルドにおいて、リンク=a要素はどのように生成されるか
Sphinxで
htmlビルドを用いて StandaloneHTMLBuilderによる ビルドを 実行 ビルダーは
出力の ための 各種準備を 行い、 HTML5Translatorという ライターに 出力を 委譲
HTML5Translator には、visit_xxxx , depart_xxxx と
今回のreference ノードです。visit_reference とa 要素を
処理を継ぎ足して、無理矢理外部リンク化する
現在では、a 要素には、target="_blank" だけでなくrel="noreferer" をHTML5Translator.visit_reference のrel 属性の
その
def visit_reference(self, node):
atts = {"class": "reference"}
if node.get('internal') or 'refuri' not in node:
atts['class'] += ' internal'
else:
atts['class'] += ' external'
# overwritten
atts['target'] = '_blank'
atts["rel"] = "noreferrer"
もともとのHTML5Translator.visit_reference が
from sphinx.writers.html5 import HTML5Translator
# 中略
def setup(app):
app.add_node(
reference, True, html=(visit_reference, HTML5Translator.depart_reference)
)
reference ノードに
これで、target="_blank" 等が
ライブラリ化を躊躇している理由
それなりに
この
テスト・構造を
一切度 外視して 結果 のみを 優先したので、 想定外の ケースへの 対処を 何も していない も
う ちょっと マシな 実装が ありそうな 気が する (コードの コピペ実装すぎるので、 堅牢性が なさすぎる ) 優先順位が
低い
「マシな
※脚注