Convertendo saída colorida em html

46

Existem ferramentas que fornecem saída colorida:

dwdiff -c File1 File2 # word level diff
grep --color=always # we all know this guy
...

A pergunta é: Como converter a saída colorida do programa arbitrário em arquivo html colorido?

Outros formatos de saída também podem ser adequados (o LaTeX seria ótimo). Eu acho que html é um bom ponto de partida, pois é fácil convertê-lo para outros formatos.

(Para curiosos como manter os códigos de cores do terminal, por favor, siga a resposta: link ... | unbuffer command_with_colours arg1 arg2 | ... - ferramenta unbuffer faz parte de esperar )

    
por Grzegorz Wierzowiecki 07.08.2012 / 20:53

8 respostas

27

A resposta para esta pergunta é provavelmente o que você quer.

Links para essas ferramentas, que fazem a conversão que você está procurando:

por 13.08.2012 / 16:20
17

Ou apenas um script de shell

link

Mais detalhes deste script link

    
por 29.08.2013 / 10:36
5

Você pode usar o vim. Isso é parte de um script que eu uso para converter a saída do diff em HTML.

vim -n \
    -c ':%s%^+  %+++    ' \
    -c ':%s%^-  %---    ' \
    -c ':%s%^   %       ' \
    -c ':set nu' \
    -c ':let html_use_css=1' \
    -c ':so $VIMRUNTIME/syntax/2html.vim' \
    -c ':wq' -c ':qa!' $input > /dev/null 2> /dev/null

Depois disso, eu corro sed para mudar o CSS e o título para ser exatamente o que eu quero que eles sejam.

* Edit: Eu deveria ter mencionado que para obter cores, você precisa ter o destaque da sintaxe ativado. Eu faço isso no meu .vimrc, mas se você quiser adicionar aqui, seria apenas outra linha como

-c ':syntax on' \
    
por 07.08.2012 / 21:38
4

Você pode experimentar o vim com o plug-in AnsiEsc.vim para visualizar as cores ANSI por meio do escape códigos, em seguida, redirecionar a saída padrão para vim - , ativar :syntax on e converter o arquivo para html pelo comando vim: :TOhtml . O arquivo html gerado deve ter saída colorida.

Para converter código-fonte não interativamente em html, tente o seguinte comando:

vim -E -s -c "let g:html_no_progress=1" -c "syntax on" -c "set ft=c" -c "runtime syntax/2html.vim" -cwqa myfile.c

Ou use - em vez de myfile.c para converter o código da entrada padrão.

    
por 18.02.2015 / 14:30
3

ansi2html , em pypi.

Pode-se derivar quantidades imoderadas de prazer da produção regular de shell através de lolcat e depois através de ansi2html. Alguma coisa como:

… | lolcat -f | ansi2html -ip
    
por 15.08.2016 / 18:26
1

Atualizar: adicionei um método perl , usando module HTML :: FromANSI from CPAN .. Para instalá-lo, basta extraí-lo para um diretório e executar, como root: perl -MCPAN -e 'install HTML::FromANSI' desse diretório. O recurso específico para atender à sua solicitação é um script chamado ansi2html . Curiosamente, ele mostra a mesma perda de cor após a sobreposição do k nos nomes dos arquivos, assim como o script elisp-shell ... Aqui está um exemplo de uso:

ls -l --color=always /bin/*k* | 
 grep --color=always "k\|x\|2010" |
  ansi2html  >/tmp/example.html
firefox /tmp/example.html

Aqui está a saída html. como visto no Firefox:

Aquiestáummétodousandoumscriptemacs elisp-shell ... para o exemplo, chamado htmlize ... O Emacs não precisa estar rodando.

Eu testei originalmente em um fundo preto, mas notei que, por algum motivo, um fundo branco não funciona bem com um dos códigos de escape introduzidos, \e[K , que parece ser ERASE_LINE (Apagar a linha atual de saída do terminal) . Eu adicionei uma linha para remover este código de escape. Agora funciona para um fundo branco.

Este é um exemplo de saída destacada em cores de ls sendo canalizada para grep para realce de cor adicional.

ls -l --color=always /bin/*k* | 
 grep --color=always "k\|x\|2010" >/tmp/example
htmlize /tmp/example
firefox /tmp/example.html

este é o script elsip-shell .

#!/bin/sh
":"; exec /usr/bin/emacs -Q --script "$0" -- "$@" # -*-emacs-lisp-*-
(require 'ansi-color) (require 'htmlize)
(find-file (setq path-in (cadr argv)))
(ansi-color-apply-on-region (point-min) (point-max))
(switch-to-buffer (buffer-name (htmlize-buffer)))
(write-file (concat path-in ".html"))

Aqui está um exemplo da saída html, no Firefox ... Se eu tiver tempo, analisarei mais detalhadamente o problema dos códigos ANSI sobrepostos. onde os k s vermelhos se sobrepõem aos nomes dos arquivos verdes, mas isso está lá apenas por causa de um regex de teste escolhido apressadamente para grep ... (talvez isso seja algo que \e[K influencia ...

    
por 08.08.2012 / 13:09
1

Este é apenas um acompanhamento da @ user17591 solution - script do vim :

#!/usr/bin/vim -ns
:%s%^+  %+++
:%s%^-  %---
:%s%^   %
:set nu
:let html_use_css=1
:so $VIMRUNTIME/syntax/2html.vim
:wq
:qa!

chmod e

Uso: htmlvim file (para produzir file.html)

    
por 27.01.2015 / 00:16
0

Para aqueles que têm um comando escrito na suposição de que a saída canalizada nunca terá cor (por exemplo, algumas estruturas de teste), talvez seja útil usar o utilitário de script para salvar primeiro a saída ansi. Isso pode ser empurrado para aha ou para os outros utilitários mencionados.

    
por 26.01.2015 / 21:13