Создаём man-страницы

Рано или поздно при создании инструментов командной строки возникает необходимость составления пользовательской документации. Традиционно такой документацией является «мануал» - страница с подсказками, отображаемая по команде man. Такие страницы пишутся на специальном языке разметки, который понимают *roff программы. Но он совершенно непригоден для редактирования человеком. Существует несколько проектов, решающих эту проблему, но здесь я расскажу о POD.

POD - Plain Old Documentation специальный язык разметки, располагающийся в комментариях к программам на perl. Но его можно использовать даже если проект написан на чём-то ещё.

Рассмотрим простейший пример документации к команде mkdir, написанный на perldoc. Для начала английскую версию. Основными элементами являются заголовки:

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

Этого вполне хватит чтобы составить приличную документацию. Иногда документацию хотелось бы иметь на русском языке. Для этого самой первой строкой нужно поставить =encoding utf-8 и писать на русском.

Теперь надо это как-то скомпилировать. Сначала преобразуем в формат *roff:

$ pod2man -c "User commands" -n mkdir -s 1 -r "GNU coreutils 8.17" en/mkdir.pod > en/mkdir.1

Рассмотрим аргументы:

Чтобы посмотреть страничку достаточно ввести команду:

$ nroff -Tutf8 -mandoc en/mkdir.1 | less

Собственно, касательно простой man страницы это всё. Но если инструмент должен также работать и под Windows, то там *roff страница особо не поможет. Для этого можно конвертировать её в pdf:

groff -Tps -mandoc en/mkdir.1 > en/mkdir.ps && ps2pdf en/mkdir.ps en/mkdir.pdf && rm en/mkdir.ps

Это выдаст весьма красивую документацию. Для русской версии документа есть некоторые особенности. Так, указание кодировки в файле должно быть обязательно. Для генерации *roff файла нужно вводить:

$ pod2man --utf8 -c "User commands" -n mkdir -s 1 -r "GNU coreutils 8.17"

как видно, добавилась опция --utf8. Далее для просмотра следует ввести:

$ groff -Dutf8 -Tutf8 -mandoc ru/mkdir.1 | less

А вот с созданием pdf всё несколько сложнее. Если ввести:

$ groff -Dutf8 -Tps -mandoc ru/mkdir.1 > ru/mkdir.ps && ps2pdf ru/mkdir.ps ru/mkdir.pdf && rm ru/mkdir.ps

то groff будет ругаться на неизвестные юникодовые символы и создаст pdf в кракозябрах. Это связано с тем, что ему не хватает юникодовых шрифтов, но подцепить из у меня так и не получилось.