Zunächst ist zu beachten, dass mehr als ein Programm aufgerufen wird man2html
.
Ein Dienstprogramm namens man2html
ist ein C-Programm, das ursprünglich Ende der 90er Jahre von Richard Verhoeven an der Technischen Universität Eindhoven Ende der 90er Jahre geschrieben wurde. Das Programm hat im Wesentlichen skurrile Interna. Es hat jedoch den Vorteil, dass es mit der Roh-Manpage-Quelle und nicht mit troff
oder der nroff
Ausgabe funktioniert . Dieses Programm wurde zu Frederico Lucifredis Man Suite hinzugefügt.
Das Programm versteht die Semantik von man
und mandoc
Makros und gibt eine vernünftige HTML-Struktur aus. Zum Beispiel, wenn Sie eingerückte Absätze wie folgt verwenden:
.IP Wort
Definition von
Wort.
.RS
Das Programm erstellt eine HTML-Definitionsliste.
Ich verwalte eine sehr große Manpage (fast ein Megabyte Quellenseite und fast 400 Seiten lang, wenn sie von in PDF im Letter-Format konvertiert wird groff
):
$ ls -l txr.1
-rw-rw-r-- 1 kaz kaz 980549 3. Januar 11:38 txr.1
Als ich dies vor etwa fünf Jahren in HTML konvertieren musste, fand ich nur das man2html
C-Programm und die Nachbearbeitung seiner Ausgabe auf "Season to Taste".
Schließlich wollte ich ein HTML-Dokument von viel besserer Qualität, also fing ich an, troff
Makros zu schreiben . Die Einschränkungen des C-Programms wurden schmerzlich deutlich, also gabelte ich es. Auf meiner Git-Seite findest du ein Git-Repo mit 30 Patches für man2html . Diese Patches beheben eine Reihe von Fehlern und erweitern das Programm um eine wesentlich verbesserte Fähigkeit, Troff-Makros, Bedingungen, Schleifen und andere Konstrukte zu interpretieren. Ich habe auch ein M2
Register hinzugefügt , mit dem Sie Code schreiben können, der erkennt, dass er ausgeführt wird, man2html
und einige Dinge bedingt anders ausführen kann (scrollen Sie für ein Beispiel nach unten). Außerdem habe ich einen .M2SS
Befehl hinzugefügt, mit dem Sie einen benutzerdefinierten HTML-Header-Abschnitt ausgeben können.
Meine große Manpage wird hier gehostet . Dies wird mit man2html
meinem genman.txr
Programm erstellt, nachbearbeitet , das die Abschnitte neu anordnet und Hyperlinks im gesamten Dokument hinzufügt. Außerdem werden die internen Links im Inhaltsverzeichnis als stabile URLs umgeschrieben (basierend auf Hashing und nicht auf willkürlicher Aufzählung) und das Inhaltsverzeichnis über Javascript zusammenklappbar gemacht.
Die genauen Befehle von my Makefile
:
man2html txr.1 | ./txr genman.txr -> txr-manpage.html
tbl txr.1 | pdfroff -man --no-toc -> txr-manpage.pdf
Ein Beispiel dafür, wie sich die Ausgabe zwischen HTML und anderen Bedingungen bedingt unterscheidet, nroff
ist ein Abschnitt der man
Ausgabe:
9.19.4 Makroabbau
Syntax:
(defstruct {<name> | (<name> <arg> *)} <super>
<Steckplatzspezifizierer> *)
Das Defstruct-Makro definiert einen neuen Strukturtyp und Register
es unter <Name>, das ein verbindliches Symbol sein muss, gemäß
die bindbare Funktion. Ebenso muss der Name jedes <Slots> sein
auch ein bindbares Symbol sein.
Beachten Sie oben, wie Parameter in bezeichnet werden <angle>
<brackets>
. In der HTML-Version werden sie kursiv dargestellt .
Der Syntaxabschnitt wird im Quellcode folgendermaßen angezeigt:
.coNP Macro @ defstruct
.synb
.mets (defstruct >> {name | >> (name << arg *)} <super
.mets \ \ << Slot-Spezifizierer *)
.syne
Dies sind alle benutzerdefinierten Makros, die im selben Dokument definiert sind. Unter .mets
, < b
Mittel b
ist eine Meta-syntaktische Variable. >> a b
means a
ist eine konkrete Syntax, neben der sich die Metasyntaktik b
ohne Zwischenraum befindet, und <> a b c
means b
ist eine Metasyntaktik, die zwischen a
und c
Literalen zusammengesetzt ist.
Meine verbesserte Version von man2html
versteht das ziemlich komplizierte Makro, das diese Markup-Konventionen implementiert.
Beachten Sie auch, wie das Handbuch automatisch Abschnitte nummeriert hat: Dies geschieht alles durch troff-Code, der man2html
versteht.
troff
? Es ist frei.