11

カスタム Sphinx ドメイン内で、別のドメイン内の別のノードへの参照を作成したいと考えています。例えば:

.. py:class:: foo.bar

   Lorem ipsum.

.. example:directive:: baz -> foo.bar

   Sit amet, sit.

example:directive::の「メソッド」はPython クラスであるbaztype の何かを返すと言います。foo.barそのため、それを他の説明と相互参照したいと思いpy:class:: foo.barます。

from sphinx.directives import ObjectDescription

class ExampleDescription(ObjectDescription):
    def handle_signature(self, sig, signode):

        # lots of parsing and node creation here

        # parsed_annotation = "foo.bar"
        signode += addnodes.desc_returns(parsed_annotation, parsed_annotation)

カスタム ドメイン内で、ディレクティブを解析して要素を構築していexampleますが、メソッドをサブクラス化することで、ドメイン内の相互参照でさえ問題なく動作しますsphinx.domains.Domain:resolve_xrefhandle_signature後で別のドメインのノードに解決されるメソッドにノードをプログラムで挿入する方法がわかりません。どういうわけかインスタンス化する必要がありますsphinx.domains.python.PyXRefRoleか?

HTML で期待される結果は次のようになります。

<dl>
  <dt>
    <code>baz</code>
    →
    <a href="example.html#py.class.foo.bar">
      <code>foo.bar</code>
    </a>
  </dt>
</dl>
4

0 に答える 0