Во-первых, следует отметить, что существует более одной программы man2html
.
Одной из названных утилит man2html
является программа на Си, первоначально написанная Ричардом Верхувеном в конце 1990-х годов в Технологическом университете Эйндховена. Программа имеет в значительной степени причудливые внутренности. Тем не менее, он имеет то преимущество , что она работает с сырьевым источником людей страницы, а не troff
или nroff
выходом. Эта программа была добавлена в набор Фредерико Люцифреди.
Программа понимает семантику man
и mandoc
макросов, и выводит разумную структуру HTML. Например, когда вы используете абзацы с отступом, например:
.IP слово
Значение
слово.
.RS
программа выдаст список определений HTML.
Я поддерживаю одну очень большую справочную страницу (большая часть мегабайта исходного кода и почти 400 страниц в длину, если преобразовать ее в формат PDF размером с букву groff
):
$ ls -l txr.1
-rw-rw-r-- 1 каз каз 980549 3 января 11:38 txr.1
Когда мне нужно было преобразовать это в HTML, около пяти лет назад, единственное, что я нашел, которое сделало разумную работу, - это man2html
программа на Си, плюс постобработка ее вывода в «сезон по вкусу».
В конце концов, я хотел получить HTML-документ гораздо лучшего качества, поэтому я начал писать troff
макросы. Ограничения программы на C стали до боли очевидными, поэтому я ее раздвоил. На моем git-сайте вы можете найти git-репо с 30 патчами для man2html . Эти патчи исправляют ряд ошибок и значительно улучшают программу, интерпретируя макросы troff, условные выражения, циклы и другие конструкции. Я также добавил M2
регистр, с помощью которого вы можете написать код, который обнаруживает, что он работает, man2html
и может условно делать некоторые вещи по-другому (прокрутите вниз для примера). Кроме того, я добавил .M2SS
команду, которая позволяет вам генерировать пользовательский раздел заголовка HTML.
Моя большая man-страница размещена здесь . Это производится с man2html
последующей обработкой моей genman.txr
программой, которая переставляет разделы и добавляет гиперссылки по всему документу. Он также переписывает внутренние ссылки в оглавлении в стабильные URL-адреса (на основе хеширования, а не произвольного перечисления) и делает оглавление разборным с помощью некоторого Javascript.
Точные команды, используемые моим Makefile
:
man2html txr.1 | ./txr genman.txr -> txr-manpage.html
TBL TXR.1 | pdfroff -man --no-toc -> txr-manpage.pdf
Для примера того, как выходные данные условно отличаются между HTML, и nroff
мы можем посмотреть на раздел man
вывода:
9.19.4 Макроструктура
Синтаксис:
(defstruct {<name> | (<name> <arg> *)} <super>
<Слот-спецификатор> *)
Макрос defstruct определяет новый тип структуры и регистры
это под <имя>, который должен быть привязываемым символом, в соответствии с
привязываемая функция. Аналогично, имя каждого <слота> должно
также быть привязываемым символом.
Выше обратите внимание, как обозначены параметры в <angle>
<brackets>
. В HTML-версии они выделены курсивом .
Секция синтаксиса появляется в исходном коде так:
.coNP Macro @ defstruct
.synb
.mets (defstruct >> {name | >> (name << arg *)} <супер
.mets \ \ << спецификатор слота *)
.syne
это все пользовательские макросы, определенные в одном документе. Под .mets
, < b
означает, b
мета-синтаксическая переменная. >> a b
средство a
- это конкретный синтаксис, следующий за которым - метасинтаксический b
без какого-либо промежуточного пространства, а <> a b c
средство b
- это метасинтаксический код a
и c
литералы.
Моя улучшенная версия man2html
понимает довольно сложный макрос, который реализует эти соглашения о разметке.
Также обратите внимание, что в руководстве есть автоматически пронумерованные разделы: все это делается с помощью кода troff, который man2html
понимает.
troff
? Это бесплатно.