En primer lugar, debe tenerse en cuenta que hay más de un programa llamado man2html
.
Una utilidad llamada man2html
es un programa en C originalmente escrito a fines de la década de 1990 por Richard Verhoeven en la Universidad Tecnológica de Eindhoven a fines de la década de 1990. El programa tiene partes internas sustancialmente extravagantes. Sin embargo, tiene la ventaja de que funciona con la fuente de página del manual de crudo, en lugar de troff
o nroff
salida. Este programa se agregó a la suite de hombre de Frederico Lucifredi.
El programa entiende la semántica de la man
y mandoc
macros, y emite una estructura HTML razonable. Por ejemplo, cuando usa párrafos sangrados, así:
Palabra .IP
Definicion de
palabra.
.RS
el programa publicará una lista de definiciones HTML.
Mantengo una página de manual muy grande (la mayoría de un megabyte de fuente, y casi 400 páginas de largo, cuando se convierte a PDF de tamaño carta por groff
):
$ ls -l txr.1
-rw-rw-r-- 1 kaz kaz 980549 3 de enero 11:38 txr.1
Cuando necesitaba convertir esto a HTML, hace unos cinco años, lo único que encontré que hizo un trabajo razonable fue el man2html
programa C, más el procesamiento posterior de su salida a "temporada al gusto".
Eventualmente, quería un documento HTML de mejor calidad, así que comencé a escribir troff
macros. Las limitaciones del programa C se volvieron dolorosamente aparentes, así que lo bifurqué. En mi sitio de git, puede encontrar un repositorio de git con 30 parches para man2html . Estos parches corrigen una serie de errores y mejoran el programa con una capacidad mucho mejor para interpretar macros de troff, condicionales, bucles y otras construcciones. También agregué un M2
registro mediante el cual puede escribir código que detecta que se está ejecutando man2html
y puede hacer condicionalmente algunas cosas de manera diferente (desplácese hacia abajo para ver un ejemplo). Además, agregué un .M2SS
comando que le permite emitir una sección de encabezado HTML personalizado.
Mi página de manual grande está alojada aquí . Esto se produce con man2html
postprocesado por mi genman.txr
programa, que reorganiza las secciones y agrega hipervínculos en todo el documento. También reescribe los enlaces internos en la tabla de contenido para que sean URL estables (basadas en hashing en lugar de enumeración arbitraria) y hace que la tabla de contenido se pueda contraer mediante algún Javascript.
Los comandos exactos utilizados por mi Makefile
:
man2html txr.1 | ./txr genman.txr -> txr-manpage.html
tbl txr.1 | pdfroff -man --no-toc -> txr-manpage.pdf
Para ver un ejemplo de cómo la salida es condicionalmente diferente entre HTML y nroff
podemos ver una sección de la man
salida:
9.19.4 Macrodestrucción
Sintaxis:
(defstruct {<name> | (<name> <arg> *)} <super>
<slot-specifier> *)
La macro defstruct define un nuevo tipo de estructura y registra
debajo de <nombre>, que debe ser un símbolo enlazable, de acuerdo con
La función enlazable. Del mismo modo, el nombre de cada <slot> debe
también sea un símbolo enlazable.
Arriba, observe cómo se denotan los parámetros <angle>
<brackets>
. En la versión HTML, aparecen en cursiva .
La sección de sintaxis aparece en el código fuente de esta manera:
.coNP Macro @ defstruct
.synb
.mets (defstruct >> {nombre | >> (nombre << arg *)} <super
.mets \ \ << especificador de ranura *)
.syne
que son todas las macros personalizadas definidas en el mismo documento. Debajo .mets
, < b
medias b
es una variable meta-sintáctica. >> a b
significa a
es una sintaxis concreta, junto a la cual está la meta-sintaxis b
sin ningún espacio intermedio, y <> a b c
significa b
es una meta- sintaxis crujida entre a
y c
literales.
Mi versión mejorada de man2html
comprende la macro bastante complicada que implementa estas convenciones de marcado.
Además, tenga en cuenta cómo el manual ha numerado automáticamente las secciones: todo esto se hace por código troff, que man2html
comprende.
troff
? Es gratis.