Во-первых, следует отметить, что существует более одной программы 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? Это бесплатно.