Em primeiro lugar, deve-se notar que há mais de um programa chamado man2html
.
Um utilitário chamado man2html
é um programa C originalmente escrito no final dos anos 90 por Richard Verhoeven na Universidade de Tecnologia de Eindhoven no final dos anos 90. O programa possui internos substancialmente peculiares. No entanto, tem a vantagem de que ele funciona com o código fonte da página homem cru, em vez de troff
ou nroff
saída. Este programa foi adicionado à suíte de homens de Frederico Lucifredi.
O programa compreende a semântica do man
e mandoc
macros, e produz uma estrutura HTML razoável. Por exemplo, quando você usa parágrafos recuados, assim:
Palavra .IP
Definição de
palavra.
.RS
o programa publicará uma lista de definições HTML.
Eu mantenho uma página de manual muito grande (a maioria com um megabyte de origem e quase 400 páginas, quando convertida em PDF em tamanho Carta groff
):
$ ls -l txr.1
-rw-rw-r-- 1 kaz kaz 980549 3 de janeiro às 11:38 txr.1
Quando eu precisei converter isso para HTML, há cinco anos, a única coisa que achei que fez um trabalho razoável foi o man2html
programa C, além do pós-processamento de sua saída para "temperar a gosto".
Eventualmente, eu queria um documento HTML de qualidade muito melhor, então comecei a escrever troff
macros. As limitações do programa C se tornaram dolorosamente aparentes, então eu bifurei. No meu site git, você pode encontrar um repositório git com 30 patches para man2html . Esses patches corrigem vários bugs e aprimoram o programa com uma capacidade muito melhorada de interpretar macros, condicionais, loops e outras construções. Também adicionei um M2
registro por meio do qual você pode escrever um código que detecta que está sendo executado man2html
e pode fazer algumas coisas condicionalmente de maneira diferente (role para baixo, por exemplo). Também adicionei um .M2SS
comando que permite emitir uma seção de cabeçalho HTML personalizada.
Minha grande página de manual está hospedada aqui . Isso é produzido com man2html
, pós-processado pelo meu genman.txr
programa, que reorganiza as seções e adiciona hiperlinks ao longo do documento. Ele também reescreve os links internos no índice para ser URLs estáveis (com base no hash e não na enumeração arbitrária) e torna o índice recolhível por meio de algum Javascript.
Os comandos exatos usados pelo meu Makefile
:
man2html txr.1 | ./txr genman.txr -> txr-manpage.html
tbl txr.1 | pdfroff -man --no-toc -> txr-manpage.pdf
Para um exemplo de como a saída é condicionalmente diferente entre HTML e nroff
podemos ver uma seção da man
saída:
9.19.4 Desfiguração de macro
Sintaxe:
(defstruct {<name> | (<name> <arg> *)} <super>
<especificador de slot> *)
A macro defstruct define um novo tipo de estrutura e registra
sob <name>, que deve ser um símbolo vinculável, de acordo com
a função vinculável. Da mesma forma, o nome de cada <slot> deve
também ser um símbolo vinculável.
Acima, observe como os parâmetros são indicados em <angle>
<brackets>
. Na versão HTML, eles aparecem em itálico .
A seção de sintaxe aparece no código-fonte assim:
Macro .coNP @ defstruct
.synb
.mets (defstruct >> {name | >> (nome << arg *)} <super
.mets \ \ << especificador de slot *)
.syne
que são todas as macros personalizadas definidas no mesmo documento. Sob .mets
, < b
meios b
é uma variável meta-sintática. >> a b
meios a
é uma sintaxe concreta, ao lado da qual é a meta-sintática, b
sem nenhum espaço intermediário, e <> a b c
meios b
é uma meta-sintática triturada entre a
e c
literais.
Minha versão aprimorada do man2html
compreende a macro bastante complicada que implementa essas convenções de marcação.
Além disso, observe como o manual numerou automaticamente as seções: tudo isso é feito pelo código de troff, que man2html
compreende.
troff
? É de graça.