Как мне сослаться на пользовательский индекс, созданный в моем собственном расширении сфинкса?
Я работаю над расширением сфинкса, который включает в себя пользовательский индекс, как это:
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`
как ссылка на пользовательский индекс.