Перейти к содержимому

Подробно о правилах рендеринга

На этой странице подробно описаны правила рендеринга EpoCanvas Docs: через какие этапы обработки проходит Markdown-файл, во что превращается каждый синтаксис и какой синтаксис не поддерживается. Прочтите её один раз перед написанием документации — это позволит избежать большинства проблем с вёрсткой.


Конвейер рендеринга: от .md-файла до страницы на сайте

Схема конвейера рендеринга Markdown в EpoCanvas Docs: полный процесс из 5 шагов — от сканирования исходников Markdown, разбора AST по GFM и подсветки кода до сборки макета из 7 кастомных компонентов, генерации статического HTML и индекса Pagefind

Рисунок: 5 шагов конвейера рендеринга Markdown. Шаги выполняются по порядку на этапе сборки; результат сборки — чисто статические файлы, без накладных расходов клиентского фреймворка во время выполнения.

От сохранения до появления перед читателем Markdown-файл проходит следующие пять этапов:

  1. Сбор контента: при запуске или сборке Astro сканирует каталог src/content/docs/, регистрирует каждый файл .md / .mdx как запись контента и проверяет Frontmatter (отсутствие title сразу вызывает ошибку).
  2. Компиляция Markdown: основной текст компилятором Markdown (с расширениями GFM) преобразуется в HTML. Расширенный синтаксис — таблицы, списки задач, зачёркивание и т.д. — срабатывает на этом шаге.
  3. Подсветка блоков кода: все кодовые ограждения обрабатывает Expressive Code, создавая блоки кода с подсветкой синтаксиса, панелью заголовка, номерами строк и кнопкой копирования.
  4. Применение макета сайта: скомпилированный HTML вставляется в каркас страницы Starlight — верхняя панель, левое оглавление и правое оглавление страницы рендерятся кастомными компонентами из src/components/starlight/.
  5. Генерация индекса и статических файлов: при pnpm run build Pagefind обходит все итоговые страницы и извлекает полнотекстовый индекс; чистый HTML в каталоге dist/ можно размещать на любом статическом сервере.

Правила Frontmatter

  • title обязателен; при его отсутствии сборка завершается ошибкой InvalidInputError;
  • description рекомендуется заполнять: он показывается в результатах поисковых систем и в карточках при обмене ссылками;
  • Frontmatter должен быть корректным YAML-блоком в самом начале файла; все три дефиса в разделителях обязательны.

Правила заголовков

ПравилоПояснение
Не пишите заголовок первого уровня # в основном текстеtitle из Frontmatter уже отрендерен как крупный заголовок страницы; ещё один # в тексте даст два крупных заголовка
Основной текст начинается с заголовка второго уровня #### и ### автоматически попадают в правое «оглавление страницы»
#### и глубже не попадают в оглавлениеБолее глубокие уровни рендерятся только как стили основного текста
Текст заголовка превращается в якорьЯкорь китайского заголовка — сами китайские символы, например #标题规则

Правила выносок (Asides)

Выноски используют синтаксис тройного двоеточия Starlight и поддерживают 4 типа:

:::note
Дополнительное пояснение.
:::
:::tip
Небольшой приём для повышения эффективности.
:::
:::caution
Риск, на который стоит обратить внимание, или операция, в которой легко ошибиться.
:::
:::danger
Предупреждение о высокой опасности: потеря данных или необратимые операции.
:::

После типа можно добавить собственный заголовок: :::tip[Быстрая установка].

Реальный вид четырёх цветных выносок после рендеринга

Рисунок: реальное отображение четырёх выносок, записанных по приведённому выше синтаксису; скриншот со страницы Примеры выносок, блоков кода и диаграмм.


Правила блоков кода

Кодовые ограждения (три обратных апострофа) рендерит Expressive Code; поддерживаются следующие аннотации (пишутся после обратных апострофов первой строки):

АннотацияНазначениеПример
Идентификатор языкаОпределяет схему подсветки синтаксиса```ts
title="..."Показывает панель заголовка с именем файла```ts title=“src/config/site.ts”
{2} / {2-4}Подсвечивает указанные строки```ts {2}
lang="diff" или diffПоказывает добавленные и удалённые строки в красно-зелёном сравнении```diff
bash / sh и другие терминальные языкиРендерится с рамкой в стиле терминала```bash

К каждому блоку кода автоматически добавляется кнопка копирования одним нажатием; текст кода попадает в поисковый индекс Pagefind, поэтому ключевые слова из кода можно находить поиском напрямую.


Правила изображений

  • Изображения хранятся в едином каталоге public/images/canvas/ и подключаются абсолютным путём: ![описание](/images/canvas/ui-docs-reading.png);
  • архитектурные и процессные схемы — в векторном формате .svg, скриншоты интерфейса — в сжатом .png;
  • описание обязательно к заполнению: это альтернативный текст на случай неудачной загрузки изображения и основа для доступности;
  • в текущей версии рендеринг диаграмм Mermaid не встроен: ограждение ```mermaid отобразится как обычный блок кода с исходным кодом. Если нужна блок-схема, сначала экспортируйте SVG в mermaid.live или подобном инструменте, а затем вставьте её как изображение.

Правила ссылок

  • Внутренние ссылки: указывайте полный путь, начинающийся и заканчивающийся на /, например /canvas/deployment/. После изменения пути документа старый путь нужно зарегистрировать в таблице redirects в astro.config.mjs;
  • Якорные ссылки: /canvas/rendering/#правила-блоков-кода ведёт сразу к нужному разделу этой страницы;
  • Внешние ссылки: достаточно указать полный URL; в основном тексте они отображаются цветом темы.

Прочее поведение рендеринга

СинтаксисРезультат рендеринга
**жирный**, *курсив*, ~~зачёркнутый~~Соответствующее начертание текста
встроенный кодКапсула моноширинным шрифтом цвета темы
Запись Ctrl+KОбозначение клавиш в стиле клавиатурных клавиш
Таблицы GFMТаблицы данных с рамкой и подсветкой при наведении
Список задач - [x]Визуальные чекбоксы (в отключённом состоянии)
Сноски [^сноска]Верхний индекс в основном тексте + список сносок внизу страницы, с переходами по клику в обе стороны
Цитата Markdown >Вертикальная линия цвета темы слева + светлый фон
Разделитель ---Тонкая линия через всю область основного текста