Ich möchte einige Linux-Manpages ohne Verwendung von groff in HTML konvertieren. Mein Vorurteil gegen groff ist auf einige PNG-Rendering-Probleme zurückzuführen , die Sabayon zu bieten scheint (da diese Probleme auf meinen VirtualBox-VMs für andere Distributionen nicht auftreten). Mir ist klar, dass dies ein Fehler ist, aber eine Lösung scheint nicht in naher Zukunft zu sein. Daher möchte ich fragen, ob es andere Möglichkeiten gibt, Linux-Manpages in HTML zu konvertieren. Die Verwendung der HTML-Seiten unter http://linux.die.net/man ist keine akzeptable Lösung, da einige der Manpages, an denen ich interessiert bin, nicht vorhanden sind (z. B. emerge(1)
nicht vorhanden sind).
man
conversion
html
BH2017
quelle
quelle
troff
? Es ist frei.warning: can't find font `b'
Nachricht zu finden und zu beheben. Dies kann die Ursache sein, da die erstellten PNG-Dateien in der Regel nur Text in grafischem Format sind. Möglicherweise fehlt ein Schriftpaket, das installiert werden muss.Antworten:
Es gibt viele Alternativen wie roffit , troff , man2html . Es gibt auch Perl-basierte Online-Manpage-Browser wie manServer .
Mein Favorit ist
pandoc
, obwohl es leider standardmäßig keine ROFF-Eingabe unterstützt (obwohl Sie es wahrscheinlich verwenden können, wenn Sie mehrere Transformationsfilter miteinander verketten müssen.man2html Beispiel:
roffit Beispiel:
Andere Werkzeuge:
troff
- Ich werde http://heirloom.sourceforge.net/doctools.html ausprobieren . Ich vermute, schily hat OpenSolaris und Freunde im Sinn :-).quelle
man2html
Beispiel in die HTML-Datei umleiten ? Und warum in eine Datei umleiten/var/www/html
? Es ist kein Webserver erforderlich. Leiten Sie einfach zu einer lokalen Datei um, und Sie können Ihren Browser darauf verweisen. Haben Sie auch Ihreman2html
Ausgabe überprüft ? Ich habe es auf meinem Arch versucht und es erzeugt keine formatierte Ausgabe..bz2
Format anstelle von..gz
Könnten Sie Ihre Antwort möglicherweise entsprechend umschreiben? Ändern Sie beispielsweise die zcat-Zeilen mit Zeilen, die mit bzip2-komprimierten Manpages funktionieren.Dieses erste Stück ist ein schamloser Rip von der offiziellen Website :
pacman
mdocml
Informiert mich, dass meine lokal installierte Paketgröße 3,28 MB beträgt und die folgenden/usr/bin
Binärdateien enthält:Damit kann ich machen:
Sie können Ihre eigenen Stylesheets nach Belieben anwenden. Die gesamte Dokumentation ist ebenfalls online . Und all das wird, wie ich denke, auch zusammengestellt
mandoc
.quelle
mandoc
.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 mittroff
oder dernroff
Ausgabe funktioniert . Dieses Programm wurde zu Frederico Lucifredis Man Suite hinzugefügt.Das Programm versteht die Semantik von
man
undmandoc
Makros und gibt eine vernünftige HTML-Struktur aus. Zum Beispiel, wenn Sie eingerückte Absätze wie folgt verwenden: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
):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 einM2
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
meinemgenman.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
:Ein Beispiel dafür, wie sich die Ausgabe zwischen HTML und anderen Bedingungen bedingt unterscheidet,
nroff
ist ein Abschnitt derman
Ausgabe: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:
Dies sind alle benutzerdefinierten Makros, die im selben Dokument definiert sind. Unter
.mets
,< b
Mittelb
ist eine Meta-syntaktische Variable.>> a b
meansa
ist eine konkrete Syntax, neben der sich die Metasyntaktikb
ohne Zwischenraum befindet, und<> a b c
meansb
ist eine Metasyntaktik, die zwischena
undc
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.quelle
Da OpenSolaris als OSS verfügbar gemacht wurde, gibt es eine kostenlose
troff
.Eine Reihe von portierten Quellen finden Sie hier:
http://heirloom.sourceforge.net/doctools.html
aber Heirloom ist ein totes Projekt seit ungefähr. 2007. Vielleicht möchten Sie überprüfen
https://github.com/nt-roff/heirloom-doctools
wo einige Leute das tote Erbstückprojekt fortsetzen.
Zusammen mit
man2html
troff können Sie automatisch schöne HTML-Manpages erstellen.Siehe zB die SchilliX-Manpages:
http://schillix.sourceforge.net/man/
mit der Schily Bourne Shell:
http://schillix.sourceforge.net/man/man1/bosh.1.html
Ich bin damit zufrieden und mit den richtigen Optionen erhalten Sie verknüpfte Manpages mit anderen Dokumentationen derselben Gruppe. Ich benutze zB diesen Befehl:
Das ist Teil des make-Dateisystems in den Schily-Tools. Notieren Sie sich die Dateien
../conf/pre.html
und../conf/post.html
das schily makefilesystem, die für den Titel und andere benötigt werden. Vielleicht möchten Sie diese vier Ihre Bedürfnisse ändern.Eine
man2thml
Erweiterung ist Teil der Schily-Tools (siehe unten auf derbosh
Manpage).BTW: eine lustige Informationen: Der gesamte
troff
Quellcode sowie alle Quellen für alle Hilfsprogramme wiesoelim
,tbl
, ... plus dieman
Programmquelle ist nur die Hälfte der Code , den Sie für das müssenmandoc
Programm undmandoc
hat nur eine sehr begrenztetbl
Unterstützung , die Pausen meisten Solaris Mann Seiten.Wenn Sie Unterstützung für
mandoc
formatierte Troff-Quellen von FreeBSD und ähnlichem benötigen , habe ich eine Reihe von Mandoc-Makros erstellt, die für diese funktionierentroff
. Überprüfen Sie die SchilliX-Quellen unter: https://sourceforge.net/p/schillix-on/schillix-on/ci/default/tree/usr/src/cmd/troff/troff.d/tmac.d/ Der betreffende Code ist in den Dateienandoc
unddoc*
.Die
man
Programmquellen in SchilliX-ON wurden geändert, umnroff -mandoc
statt aufzurufennroff -man
.quelle
heirloom-doctools
. Musste fummelnmk.config
:-).Die Probleme von OP mit PNG-Dateien stimmen mit meiner Erfahrung mit groff für die xterm-Handbuchseite und die Dokumentation der Kontrollsequenzen überein. Das Problem ist, dass groff versucht, Tabellen als aus der PDF-Datei ausgeschnittenes Bild zu rendern , und dass es seit mehreren Jahren fehlerhaft ist . Während ich das Perl-Skript man2html seit den 1990er Jahren für die Dokumentation von ncurses verwendet habe, war es für andere Programme einfacher, Ad-hoc-HTML- und PDF-Dateien mit groff zu generieren. PDF-Dateien funktionieren einwandfrei; die HTML-Dateien nicht.
Gleichzeitig hatte das Perl-Skript seine eigenen Probleme.
Da beides nicht verschwand (und weil die vorgeschlagenen Alternativen keine Verbesserung darstellten, weil Abhängigkeiten hinzugefügt oder andere Einschränkungen eingeführt wurden), löste ich das Problem, indem ich Verbesserungen an man2html vornahm (zusätzlich zu denen, die ich im Laufe mehrerer vorgenommen hatte) Jahre) und fügte für jedes Programm eine neue Konfigurationsskriptoption hinzu, um die Verwendung von groff als Standard-Manpage-zu-HTML-Konverter zu ermöglichen, aber man2html zu verwenden, wenn ich die Option einstelle. Nachdem ich dies getan hatte, entfernte ich dieses Jahr alle von groff generierten HTML-Dateien von meiner Website . Auf der Website gibt es eine "man2html" -Seite, die dies dokumentiert. Das eigentliche Skript ist auf meiner Seite mit verschiedenen Skripten verfügbar .
Einige der Vorschläge und Kommentare scheinen nicht bemerkt zu haben, dass es (mindestens) zwei Programme mit dem Namen man2html gibt:
Das C-Programm führt seine eigene Formatierung durch und ist nicht auf nroff / groff / Whatever angewiesen. Es kann eine Manpage von der Standardeingabe oder als tatsächliche Datei lesen (unter anderem - siehe Handbuchseite ). Mit einer nroff-Syntax-Handbuchseite "foo.1" können Sie sie mit einem der folgenden Befehle formatieren:
Das Perl-Skript liest formatierte Handbuchseiten, z. B. von
nroff
(für die OP-Frage ist es ein Wrappergroff
). Sie könnten es so verwenden:Ich habe untersucht, ob ich das C-Programm als Alternative zum Perl-Skript verwenden kann, habe es aber verworfen, weil
Im Übrigen werden die in dieser Datei verwendeten Mehrfachumleitungen behandelt (was ein Problem mit Legacy-Troff darstellt - der Grund, warum in den Installationsanweisungen von ncurses die Verwendung von groff in den letzten 20 Jahren empfohlen wurde).
quelle
man2html
Nroff-Ausgabe wird als Eingabe verwendet. Sie können daher keine Manpage-Quelldatei als Eingabe angeben.man2html
du sprichst.