Директивы

Директивы — специальные конструкции, начинающиеся с символа @ и вставленные отдельными абзацами. Директивы могут принимать аргументы, подобно программам в командной строке.

Собирака распознаёт директивы и её аргументы на одном из ранних этапов сборки, однако генерация контента, который подставится вместо директивы, происходит в конце сборки. Это позволяет генерировать контент на основе более полной информации как о текущей, так и обо всех других страницах документации.

@toc #

@toc [--local|--combined] [--depth DEPTH] [--format FORMAT]

Сгенерировать оглавление: иерархический список ссылок на разделы документации. В качестве текста ссылки на каждую страницу используется свойство toc_title или title из её метаданных или заголовок первого уровня.

В зависимости от переданных опций, в список войдут:

  • по умолчанию — ссылки на дочерние страницы;
  • с опцией --local — ссылки на подразделы текущей страницы;
  • с опцией --combined — ссылки на подразделы текущей страницы и на дочерние страницы.

Опция --depth определяет максимальную глубину оглавления. Например, @toc --depth 1 сгенерирует ссылки на страницы или разделы строго одним уровнем ниже текущего.

Опция --format определяет формат отображения номера каждого раздела. Эта опция работает только в документах с включённой автонумерацией.

Пример. Ниже показано сквозное оглавление (@toc --combined): в него включены ссылки как на страницы, так и на их конкретные подзаголовки.

├── windows.md           →  Установка в Windows
├── windows.md#download  →    Скачайте установщик
├── windows.md#run       →    Запустите установщик
├── macos.md             →  Установка в macOS
├── macos.md#download    →    Скачайте установщик
├── macos.md#run         →    Запустите установщик
├── linux.md             →  Установка в Linux
├── linux.md#download    →    Скачайте установщик
└── linux.md#run         →    Запустите установщик

@manual-toc #

@manual-toc [--local|--combined] [--depth DEPTH] [--ordered] [--unique]

Директива предназначена для использования вместо @toc в тех случаях, когда вы хотите представить оглавление в каком-либо нестандартном виде. В отличие от @toc, она не генерирует никакого текста самостоятельно, а лишь проверяет, может ли выполнять роль оглавления текст, который идёт после неё. В документации, которую вы сейчас читаете, такой подход используется в нескольких местах, например, во вводной части статьи Ссылки.

Это позволяет давать читателю ссылки на разделы в любом виде: в виде абзаца с произвольным текстом, в виде списка с пояснениями у каждого пункта, в виде таблицы и так далее. Единственное обязательное требование к такому оглавлению: оно обязано содержать те же ссылки, которые были бы сгенерированы с помощью @toc.

Поддерживаются два варианта написания директивы. От выбора варианта зависит, на какой участок текста распространяется её действие.

  • @manual-toc — проверяется ровно один ближайший блочный элемент: это может быть один абзац, один список, одна таблица и т.п.
  • @@manual-toc — проверяются все элементы от текущего места до места нахождения специальной закрывающей директивы @@ (см. пример ниже).

Опции --local, --combined и --depth имеют тот же смысл, что у @toc. Каждая из этих опций влияет на набор ссылок, которые Собирака ожидает увидеть в оглавлении и отсутствие которых будет считаться ошибкой.

Если указана опция --ordered, то Собирака проверит, чтобы все ссылки шли в правильном порядке.

Если указана опция --unique, то Собирака проверит, чтобы каждая из ожидаемых ссылок была указана ровно один раз.

Пример. Ниже показана заготовка статьи с тремя подразделами и вводным абзацем, в котором находятся ссылки на каждый подраздел. Если по мере развития документации автор добавит в статью новые разделы, но забудет добавить ссылки во вводный абзац, Собирака сообщит об ошибке.

# Управление пользователями

@@manual-toc --local --ordered --unique

Через интерфейс администратора можно [создавать](#create), [редактировать](#edit) и [удалять](#delete) пользователей.

@@

## Создание пользователей {#create}
## Редактирование пользователей {#edit}
## Удаление пользователей {#delete}

@class #

@class NAME

Присвоить класс NAME следующему блочному элементу: абзацу, таблице, изображению и т.п. Сам по себе класс никак не влияет на отображение в финальном документе, но разработчик расширения может получить класс в коде Python через конструкцию RT.CLASSES[id(elem)] и выполнить ту или иную логику в соответствии с ним.

Например, предположим, что вы хотите применить определённый стиль к таблице терминов и определений. Для этого назначьте класс этой таблице, как показано ниже. После этого в process_table() проверьте значение RT.CLASSES[id(table)], и если оно равно 'TermsAndDefinitions', выполните нужные действия (установите ширину столбцов, выделите первый столбец жирным и т.п.).

@class TermsAndDefinitions

| Термин      | Определение                                             |
|-------------|---------------------------------------------------------|
| Сепульки    | Важный элемент цивилизации ардритов с планеты Энтеропия |
| Сепуление   | Занятие ардритов с планеты Энтеропия                    |
| Сепулькарии | Устройства для сепуления                                |