Как мне сослаться на пользовательский индекс, созданный в моем собственном расширении сфинкса?

Я работаю над расширением сфинкса, который включает в себя пользовательский индекс, как это:

from sphinx.domains import Index

class MyIndex(Index):
    """
    Index subclass to provide the Python module index.
    """

    name = 'funcindex'
    localname = 'Function Index'
    shortname = 'functions'

    def generate(self, docnames=None):

        collapse = False        
        content = []
        for o in self.domain.data['objects']:
            dirtype, name = o
            docname, anchor = self.domain.data['objects'][o]
            entries = [name, 0, docname, anchor, '','','']
            letter = name[0]
            content.append((letter, [entries]))
        return (content, collapse)

def setup(app):
    app.add_index_to_domain('std', MyIndex)

Как мне ссылаться на этот индекс? Так как список значений, которые sphinx генерирует по умолчанию, выглядит следующим образом:

Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

Как добавить свой собственный MyIndex к этому списку? Сфинкс генерирует файл std-funcindex.html и выглядит хорошо. Что мне не хватает, так это способ ссылки на этот файл. Я попробовал все комбинации ниже, но они не работали:

:ref:`funcindex`
:ref:`std-funcindex`
:ref:`std_funcindex`

1 ответ

Решение

К сожалению, в текущей версии Sphinx (1.2.3) метка не добавляется при использовании add_index_to_domain, Следующий код сделает это вручную (продолжая пример из вопроса):

def setup(app):
    app.add_index_to_domain('std', MyIndex)
    StandardDomain.initial_data['labels']['funcindex'] = ('std-funcindex', '', 'Function Index')
    StandardDomain.initial_data['anonlabels']['funcindex'] = ('std-funcindex', '')

Это позволяет

:ref:`funcindex`

как ссылка на пользовательский индекс.

Другие вопросы по тегам