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 troffou nroffsaída. Este programa foi adicionado à suíte de homens de Frederico Lucifredi.
O programa compreende a semântica do mane mandocmacros, 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 man2htmlprograma 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 troffmacros. 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 M2registro por meio do qual você pode escrever um código que detecta que está sendo executado man2htmle pode fazer algumas coisas condicionalmente de maneira diferente (role para baixo, por exemplo). Também adicionei um .M2SScomando 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.txrprograma, 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 nroffpodemos ver uma seção da mansaí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, < bmeios bé uma variável meta-sintática. >> a bmeios aé uma sintaxe concreta, ao lado da qual é a meta-sintática, bsem nenhum espaço intermediário, e <> a b cmeios bé uma meta-sintática triturada entre ae cliterais.
Minha versão aprimorada do man2htmlcompreende 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 man2htmlcompreende.
troff? É de graça.