Zunächst ist zu beachten, dass mehr als ein Programm aufgerufen wird man2html.
Ein Dienstprogramm namens man2htmlist 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 troffoder der nroffAusgabe funktioniert . Dieses Programm wurde zu Frederico Lucifredis Man Suite hinzugefügt.
Das Programm versteht die Semantik von manund mandocMakros 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 man2htmlC-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, troffMakros 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 M2Register hinzugefügt , mit dem Sie Code schreiben können, der erkennt, dass er ausgeführt wird, man2htmlund einige Dinge bedingt anders ausführen kann (scrollen Sie für ein Beispiel nach unten). Außerdem habe ich einen .M2SSBefehl hinzugefügt, mit dem Sie einen benutzerdefinierten HTML-Header-Abschnitt ausgeben können.
Meine große Manpage wird hier gehostet . Dies wird mit man2htmlmeinem genman.txrProgramm 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, nroffist ein Abschnitt der manAusgabe:
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, < bMittel bist eine Meta-syntaktische Variable. >> a bmeans aist eine konkrete Syntax, neben der sich die Metasyntaktik bohne Zwischenraum befindet, und <> a b cmeans bist eine Metasyntaktik, die zwischen aund cLiteralen zusammengesetzt ist.
Meine verbesserte Version von man2htmlversteht 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 man2htmlversteht.
troff? Es ist frei.