Как перерисовать определенные описания объектов с помощью Sphinx docs? - PullRequest
0 голосов
/ 22 февраля 2019

Используя Sphinx с поддержкой домена ObjectDescription s Я могу создать для них необычную документацию.Например:

.. py:function:: pyfunc()

   Describes a Python function.

Это хорошо отображает контент, и это очень хорошо работает с индексами модулей, ссылками и так далее.Круто, пока!

Теперь, допустим, у меня есть эта директива в исходном документе src/mymodule/functions.rst, и у меня есть набор текста в src/guide/getting-started.rst, я могу ссылаться на такие объекты, как

:py:func:`pyfunc`

Тоже круто!

Теперь мой актуальный вопрос;Могу ли я также попросить автора Sphinx перерисовать тот же фрагмент документации для этого объекта?Чтобы избавить пользователя от необходимости переходить со страницы «Начало работы», где я просто хочу снова включить один фрагмент контента.

Что я пытался сделать:

  • Просто скопируйте содержимое.Это приводит к предупреждению о том, что объект определяется несколько раз, наносит ущерб индексу и в результате ссылки не указывают на «авторитетное» место в вашем проекте, если ему не повезло.Не все в порядке.
  • Документируйте каждый объект в отдельном файле, а затем используйте .. include:: rel/path/to/pyfunc.rst в каждом документе, где я хочу его визуализировать.Поскольку эти включения являются буквальными на уровне ReST, это приводит к тем же недостаткам, что и опция выше.: - (

Таким образом, я ищу решение, в котором я бы сказал, чтобы средство визуализации / записи Sphinx просто перерисовывало содержимое ссылки вместо создания ссылки. Оно не должнодобавьте его в индекс для простого повторного рендеринга.

У меня все в порядке с пользовательским расширением или пользовательским решением для конкретного домена - я уже использую свой собственный пользовательский домен, но я просто использовал общийПриведенный выше домен Python в качестве известного примера.


Контекст для варианта использования: я создаю домен Protobuf. Сообщения и перечисления Protobuf многократно используются, и я хотел бы показатьконтекст часто используемых объектов, встроенный на страницах, где это полезно для читателя. Это означает, что он повторяется для всего проекта специально, где он считается полезным, а не перемещается все время. Однако только справочная страница должна быть «авторитетной»".

1 Ответ

0 голосов
/ 22 июля 2019

Я успешно справился с грязным взломом: злоупотреблял ролевой логикой XRef.Перекрестные ссылки в Sphinx отображаются динамически (например, Table 23), создавая произвольные «узлы».По:

  • сохранению копии родительского узла во время синтаксического анализа в пользовательском домене
  • регистрации пользовательской роли Sphinx / ReST XRef для отображения всего набора узлов (сохраненный родительский узел)
  • перезапуск ReferencesResolver в другой раз

... это в основном то, что мне нужно.Но, черт, это довольно уродливо.

Рабочий пример, который я реализовал в Расширении Protobuf Domain .

...