Como faço para converter páginas man do Linux em HTML sem usar o groff?

7

Eu gostaria de converter algumas páginas man do Linux em HTML sem usar o groff. Meu preconceito contra o groff é devido a alguns problemas de renderização do PNG que está me dando que parece estar localizado no Sabayon (como esses problemas não parecem ocorrer em minhas VMs do VirtualBox para outras distros). Eu percebo que isso é um bug, mas uma solução parece não estar no futuro próximo, então eu gostaria de perguntar se existem outras maneiras de converter páginas man do Linux em HTML. Usar as páginas HTML no link não é uma solução aceitável, pois algumas das páginas do manual em que estou interessado não estão lá (por exemplo, emerge(1) não está lá).

    
por Brenton Horne 02.12.2015 / 16:10

5 respostas

6

Existem muitas alternativas, como o roffit , troff , man2html . Há também navegadores de manpage online baseados em perl, como o manServer .

Meu favorito é pandoc , embora infelizmente ele não suporte a entrada ROFF por padrão (embora você provavelmente possa usá-lo se precisar encadear vários filtros de transformação juntos.

exemplo de man2html:

zcat /usr/share/man/man1/dd.1.gz \ 
    | man2html \
    | sudo tee /var/www/html/dd.html

exemplo roffit:

git clone git://github.com/bagder/roffit.git
cd roffit
zcat /usr/share/man/man1/dd.1.gz \
    | perl roffit \
    | sudo tee /var/www/html/dd-roffit.html

Outras ferramentas:

  • O troffcvt faz sobre a mesma coisa.
  • O 'real' troff - Vou experimentar o link . Eu suspeito que o schily tenha o OpenSolaris e os amigos em mente: -).
por 02.12.2015 / 16:20
5

Este primeiro trecho é um rasgo desavergonhado do site oficial :

mandoc is a suite of tools compiling mdoc, the roff macro language of choice for BSD manual pages, and man, the predominant historical language for UNIX manuals. It is small, ISO C, ISC-licensed, and quite fast. The main component of the toolset is the mandoc utility program, based on the libmandoc validating compiler, to format output for UNIX terminals (with support for wide-character locales), XHTML, HTML, PostScript, and PDF.

mandoc has predominantly been developed on OpenBSD and is both an OpenBSD and a BSD.lv project. We strive to support all interested free operating systems, in particular FreeBSD, NetBSD, DragonFly, illumos, Minix 3, and GNU/Linux, as well as all systems running the pkgsrc portable package build system. To support mandoc development, consider donating to the OpenBSD foundation.

pacman informa-me que o mdocml tamanho do pacote é 3.28mb instalado localmente e inclui os seguintes binários localizados /usr/bin :

/usr/bin/demandoc
/usr/bin/makewhatis
/usr/bin/mandoc
/usr/bin/mapropos
/usr/bin/mman
/usr/bin/mwhatis

Com isso, posso fazer:

mman -Thtml mman >/tmp/html
firefox file:///tmp/html

Vocêpodeaplicarsuasprópriasfolhasdeestiloscomoquiser.Todaadocumentaçãotambémé on-line . E tudo isso, como eu acho, é compilado com mandoc também.

    
por 02.12.2015 / 21:48
4

Em primeiro lugar, deve-se notar que há mais de um programa chamado man2html .

Um utilitário chamado man2html é originalmente um programa C escrito no final dos anos 90 por Richard Verhoeven na Universidade de Tecnologia de Eindhoven no final dos anos 90. O programa tem internals substancialmente peculiares. No entanto, ele tem a vantagem de funcionar com a origem da página de manual bruta, em vez de troff ou nroff output. Este programa foi adicionado ao homem de Frederico Lucifredi.

O programa compreende a semântica das macros man e mandoc e gera uma estrutura HTML razoável. Por exemplo, quando você usa parágrafos recuados, assim:

.IP word
Definition of
word.
.RS

o programa colocará uma lista de definições HTML.

Eu mantenho uma página de manual muito grande (a maioria de um megabyte de fonte e quase 400 páginas, quando convertida para PDF em tamanho de letra por groff ):

$ ls -l txr.1
-rw-rw-r-- 1 kaz kaz 980549 Jan  3 11:38 txr.1

Quando precisei converter isso em HTML, há cinco anos, a única coisa que encontrei que fez um trabalho razoável foi o programa man2html C, além de pós-processamento de sua saída para "temperar a gosto".

Eventualmente, eu queria um documento HTML de qualidade muito melhor, então comecei escrevendo troff macros. As limitações do programa C tornaram-se dolorosamente aparentes, então eu o forcei. No meu site git, você pode encontrar um git repo com 30 patches para man2html . Esses patches corrigem vários bugs e aprimoram o programa com uma capacidade muito melhor de interpretar macros de troff, condicionais, loops e outras construções. Eu também adicionei um M2 register por meio do qual você pode escrever código que detecta que ele está sendo executado em man2html e pode condicionalmente fazer algumas coisas de forma diferente (role para baixo para ver um exemplo). Além disso, adicionei um comando .M2SS que permite emitir uma seção de cabeçalho HTML personalizada.

Minha grande página de manual é hospedada aqui . Isso é produzido com man2html , pós-processado pelo meu programa genman.txr , que reorganiza as seções e adiciona hiperlinks em todo o documento. Ele também reescreve os links internos no índice para serem URLs estáveis (com base em hashing em vez de enumeração arbitrária) e torna o índice recolhível através 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 output:

       9.19.4 Macro defstruct

       Syntax:

                (defstruct {<name> | (<name> <arg>*)} <super>
                   <slot-specifier>*)

              The  defstruct  macro defines a new structure type and registers
              it under <name>, which must be a bindable symbol,  according  to
              the  bindable  function. Likewise, the name of every <slot> must
              also be a bindable symbol.

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:

.coNP Macro @ defstruct
.synb
.mets (defstruct >> { name | >> ( name << arg *)} < super
.mets \ \  << slot-specifier *)
.syne

, que são todas as macros personalizadas definidas no mesmo documento. Em .mets , < b significa b é uma variável meta-sintática. >> a b significa a é uma sintaxe concreta, ao lado da qual é a meta-sintática b sem nenhum espaço intermediário e <> a b c significa b é uma metassintática triturada entre a e c literais.

Minha versão aprimorada de man2html entende a macro bastante complicada que implementa essas convenções de marcação.

Além disso, observe como o manual tem seções numeradas automaticamente: isso é feito pelo código troff, que man2html entende.

    
por 04.01.2016 / 17:55
1

Desde que o OpenSolaris foi disponibilizado como OSS, existe um troff livre.

Um conjunto de fontes portadas está aqui:

link

mas o Heirloom é um projeto morto desde aprox. 2007. Você pode gostar de verificar

link

onde algumas pessoas continuam o projeto da herança morta.

Juntamente com man2html , o troff permite que você crie automaticamente páginas de manual em html.

Ver, por exemplo, as páginas de manual do SchilliX:

link

com o Schily Bourne Shell:

link

Estou feliz com isso e, com as opções certas, você recebe páginas de manual vinculadas a outra documentação do mesmo grupo. Eu uso, e. este comando:

soelim sh.1 | tbl | nroff -u1 -Tlp -man - | col -x | \
                        (sed -e 's/XXX/sh.1/g' ../conf/pre.html; \
                        man2html  -cgiurl '../man$section$subsection/$title.$section$subsection.html' -compress -nodepage; \
                        cat ../conf/post.html) | \
                        egrep -v 'HTML|BODY'> sh.1.html

que faz parte do sistema de criação de arquivos nas ferramentas schily. Observe os arquivos ../conf/pre.html e ../conf/post.html do sistema de criação schily que são necessários para o título e outros. Você pode gostar de mudar essas quatro necessidades.

Um man2thml aprimorado faz parte das ferramentas do schily (veja a parte inferior da página bosh man).

BTW: uma informação engraçada: todo o código-fonte troff mais todas as fontes para todos os programas auxiliares como soelim , tbl , ... mais a fonte do programa man é apenas metade do código necessário para o programa mandoc e mandoc tem apenas um suporte tbl muito limitado que quebra a maioria das páginas do manual do Solaris.

Se você precisa de suporte para mandoc fontes troff formatadas do FreeBSD e similares, criei um conjunto de macros mandoc que funcionam para troff . Verifique as fontes SchilliX em: link O código em questão está nos arquivos andoc e doc* .

As fontes do programa man no SchilliX-ON foram alteradas para chamar nroff -mandoc em vez de nroff -man .

    
por 02.12.2015 / 16:53
0

Os problemas do OP com arquivos PNG combinam com minha experiência usando o groff para a página de manual do xterm e documentação de seqüências de controle. O problema é que o groff está tentando renderizar tabelas como uma imagem recortada do arquivo PDF, e que ela está com problemas há vários anos. Embora eu tenha usado o script manlHTML Perl desde a década de 1990 para a documentação do ncurses, para outros programas achei mais simples gerar arquivos html e pdf ad hoc usando o groff. Arquivos PDF funcionam bem; os arquivos html não.

Ao mesmo tempo, o script Perl teve seus próprios problemas.

Como nenhum dos dois estava indo embora (e porque as alternativas sugeridas não foram uma melhoria, devido à adição de dependências ou à introdução de outras limitações), resolvi o problema fazendo melhorias no man2html (além daquelas que eu havia feito durante o vários anos) e adicionamos uma nova opção de script de configuração para cada programa para permitir o uso do groff como uma página de manual padrão para o conversor html, mas usando man2html quando eu configuro a opção. Tendo feito isso, eu removi todos os arquivos html gerados pelo groff deste ano do meu site . Há uma página "man2html" no site que documenta isso; o script atual está disponível na minha página de diversos scripts .

Algumas das sugestões e comentários parecem não ter notado que existem (pelo menos) dois programas chamados man2html:

  • o script Perl de Earl Hood (linkado por @criveti-mihai ) e
  • um programa C originalmente escrito por Richard Verhoeven (e assumido no exemplo dado por @ criveti-mihai ).

O programa C faz sua própria formatação, não depende de nroff / groff / whatever. Ele pode ler uma manpage da entrada padrão, ou como um arquivo real (entre outras coisas - veja o seu página de manual ). Dada uma página de manual da nroff-syntax "foo.1", você poderia formatá-la usando qualquer um destes comandos:

man2html - <foo.1 >foo.1.html
cat foo.1 |man2html - >foo.1.html
man2html foo.1 >foo.1.html

O script Perl lê as páginas de manual formatadas , por exemplo, de nroff (que para a pergunta do OP é um wrapper para groff ). Você poderia usá-lo assim:

nroff -man foo.1 |man2html >foo.1.html

Eu investiguei usando o programa C como uma alternativa ao script Perl, mas descartei porque

  • não faz um trabalho bom de formatar a saída. Em uma verificação rápida com o arquivo terminfo.5 do ncurses, posso ver erros na formatação da saída.
  • o programa C tem uma noção incorporada das macros manpages que não cobrem os vários casos (incluindo escrever novas macros) que eu preciso para as páginas de manual no meu site.

Incidentalmente, ele lida com os múltiplos redirecionamentos usados neste arquivo (o que é um problema com o legado troff - a razão pela qual as instruções de instalação do ncurses recomendaram o uso do groff nos últimos 20 anos).

    
por 03.12.2015 / 02:49