Разработка документации

Разработка этой документации ведётся с помощью системы документирования Sphinx, которую используют многие другие open-source проекты.

Как развернуть проект документации

Установка Sphinx и вспомогательных пакетов

Для сборки документации из исходников (получение красивой html-версии) необходимо установить сам Sphinx, sphinx-autobuild (для авто-обновления сборки) и тему оформления. Если коротко, то нужно в консоли вызвать следующие команды:

sudo pip install Sphinx
sudo pip install sphinx-autobuild
sudo pip install guzzle_sphinx_theme

Чекаут проекта и команда сборки

Проект документации лежит в папке docs проекта lc-front. Развернуть его локально и получить готовую сборку очень просто:

cd path/to/libicraft/lc-front/docs
sphinx-build -a . _build/ && sphinx-autobuild . _build/

После этого можно открыть в браузере http://127.0.0.1:8000/ и увидеть результат. Страница будет автоматически обновляться при изменении исходников.

Если нужна просто одноразовая сборка, можно воспользоваться упрощённым способом — находясь в папке проекта, запустить команду:

make html

Редактирование исходных файлов и фиксация изменений

Для редактирования исходников можно использовать любой текстовый редактор, но будет удобнее, если он поддерживает подсветку синтаксиса для файлов reST.

  • Для Intellij Idea существует плагин с базовой поддержкой подсветки: ReStructuredText Support.
  • Чуть лучше выглядит подсветка в плагине для Sublime Text: Restructured​Text Improved.

Фиксация изменений производится так же, как и для любого исходника в git-репозитории.

sphinx-autobuild

В процессе написания документации удобно использовать sphinx-autobuild — инструмент, который “слушает” изменения в исходниках документации, автоматически пересобирает проект, раздаёт его через свой локальный веб-сервер и автоматически перезагружает открытую в браузере страницу после каждой пересборки. Таким образом, не нужно каждый раз жать F5 после изменений, чтобы посмотреть результат.

sphinx-autobuild -i ".git/*" -i ".idea/*" . _build/

Для запуска используется опция -i для того, чтобы утилита не учитывала изменения в файлах IDE и репозитории git.

Предупреждение

При изменениях в файлах темы (например, в style.css) sphinx-autobuild не всегда срабатывает корректно. В таких случаях, чтобы увидеть результат изменений, следует полностью пересобрать проект. Помогает следующая команда:

sphinx-build -a . _build/ && sphinx-autobuild -i ".git/*" -i ".idea/*" . _build/

Краткий экскурс и полезные ссылки по Sphinx

Основная идея работы со Sphinx — редактировать простые текстовые файлы со специальной разметкой, которая определяет форматирование, структуру и взаимосвязи разных кусков документации, а затем запустить сборщик, который из этих файлов сгенерирует красивый html, pdf или другой поддерживаемый формат по желанию.

Формат исходных файлов называется reStructuredText (расширение файлов .rst). Чтобы его изучить, полезно почитать следующее:

Структура документации

В корневой папке проекта присутствуют только два исходных файла документации:

  • Стартовая страница index.rst.
  • Главное корневое оглавление contents.rst, которое определяет структуру всей документации.

Документация делится на разделы, исходные файлы каждого из которых лежат в отдельной папке. В папке раздела должен быть создан файл index.rst с оглавлением (директивой toctree), в котором перечислены все файлы с контентом из этого раздела и индексные файлы додразделов (если есть). Ссылка на файл index.rst раздела добавляется в toctree главного оглавления проекта в файле contents.rst.

Подробнее об организации структуры с помощью директивы toctree можно почитать в соответствующем разделе документации Sphinx.

“Код-стайл” для исходных файлов документации .rst

Максимальная ширина строки в исходном файле - 120 символов. Всё, что длиннее, должно переноситься.

Форматирование заголовков

  • Для заголовка целого раздела документации (папки) в файлах index.rst используем #### сверху и снизу.
  • Заголовок главы, т.е. отдельного файла .rst с контентом форматируем с ***** сверху и снизу.
  • Для заголовков частей внутри файла используем одинарное “подчёркивание” снизу следующими символами в порядке возрастания глубины:
    1. ===============
    2. ---------------
    3. ^^^^^^^^^^^^^^^
    4. """""""""""""""

Если идёт текст, а дальше заголовок, то ставим перед ним две пробельные строки. Если заголовок, а затем сразу заголовок следующего уровня, то одну пробельную строку.

intro/index.rst
1
2
3
4
5
6
7
#######################
Заголовок раздела/папки
#######################

.. toctree::

  bla-bla
intro/content-chapter.rst
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
***************
Заголовок файла
***************

Первый уровень внутри файла
===========================

Текст


Второй уровень
--------------

Третий
^^^^^^

Текст


Четвёртый
"""""""""

Текст

Доработка/изменение внешнего вида документации

В качестве основы для внешнего вида используется тема Sphinx guzzle_sphinx_theme с некоторыми исправлениями. Для доработки темы в папке _themes создана новая тема под названием libicraft, которая унаследована от guzzle (это прописано в файле _themes/libicraft/theme.conf). В файле _themes/libicraft/static/style.css прописаны некоторые исправления адаптивной вёрстки и улучшения внешнего вида (шрифтов) темы. Есть доработки и в html-шаблонах темы, которые лежат в папке _themes/libicraft. Состав боковой панели для разных типов страниц настоен с помощью конфигурационной переменной html_sidebars в файле conf.py.

Возможности кастомизации внешнего вида документации в Sphinx довольно широки. Об этом можно почитать тут:

Альтернативные темы Sphinx, на которые стоит обратить внимание:

Про красивые шрифты

В процессе доработки темы оформления обнаружились полезные ресурсы на тему того, где и как брать красивые шрифты для текста:

Примеры документаций, написанных на Sphinx, в которые можно подглядывать