web-dev-qa-db-fra.com

Conversion de la sortie colorée en html

Il existe des outils fournissant une sortie colorée:

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

La question est: Comment convertir leur sortie colorée d'un programme arbitraire en fichier html coloré?

D'autres formats de sortie pourraient également convenir (LaTeX serait génial). Je pense que le HTML est un bon point de départ, car il est facile de le convertir dans d'autres formats.

(Pour savoir comment conserver les codes de couleur des terminaux, veuillez suivre la réponse: https://unix.stackexchange.com/a/10832/9689... | unbuffer command_with_colours arg1 arg2 | ... - tool nbuffer fait partie de expect )

62

La réponse à cette question est probablement ce que vous voulez.

Il est lié à ces outils, qui effectuent la conversion que vous recherchez:

41
user17591
20
Dreampuf

Vous pouvez essayer vim avec le plugin AnsiEsc.vim pour afficher les couleurs ANSI via les codes d'échappement, puis rediriger vers la sortie standard vers vim - (assurez-vous d'avoir activé :syntax on). Convertissez ensuite le fichier en HTML par la commande vim: :TOhtml. Le fichier HTML généré doit avoir une sortie colorée.


Pour convertir le code source de manière non interactive en html, essayez la commande suivante:

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

La source: :help g:html_no_progress (partie de :help TOhtml).

Remarque: vous pouvez utiliser - à la place du myfile.c, pour convertir le code de l'entrée standard.

6
kenorb

Vous pouvez utiliser vim. Cela fait partie d'un script que j'utilise pour convertir la sortie diff en 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

Après cela, j'ai exécuté sed pour changer le CSS et le titre pour qu'ils soient exactement ce que je veux qu'ils soient.

* Modifier: j'aurais dû mentionner que pour obtenir la couleur, vous devez activer la coloration syntaxique. Je le fais dans mon .vimrc, mais si vous vouliez l'ajouter ici, ce serait juste une autre ligne comme

-c ':syntax on' \
4
user17591

ansi2html , sur pypi.

On peut tirer des plaisirs immodérés de la sortie régulière de Shell via lolcat puis via ansi2html. Quelque chose comme:

… | lolcat -f | ansi2html -ip
4
scruss

Pour ceux qui ont une commande écrite en supposant que la sortie canalisée n'aura jamais de couleur (par exemple, certains frameworks de test), il peut être utile d'utiliser l'utilitaire de script pour enregistrer d'abord la sortie ansi. Cela peut ensuite être poussé vers aha ou les autres utilitaires mentionnés.

1
Andrew Stretton

Mise à jour: J'ai ajouté une méthode Perl, en utilisant module HTML :: FromANSI de CPAN .. Pour l'installer, il suffit de l'extraire dans un répertoire et de l'exécuter en tant que root: Perl -MCPAN -e 'install HTML::FromANSI' à partir de ce répertoire. La particularité de répondre à votre demande est un script appelé ansi2html. Chose intéressante, il montre la même perte de couleur après la superposition k dans les noms de fichiers, tout comme le script elisp-Shell ... Voici un exemple d'utilisation:

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

Voici la sortie html. comme vu dans Firefox:

enter image description here


Voici une méthode utilisant un emacs script elisp-Shell ... pour l'exemple, appelé htmlize ... Emacs n'a pas besoin d'être en cours d'exécution.

Je l'ai testé à l'origine sur un fond noir, mais j'ai remarqué que pour une raison quelconque, un fond blanc ne fonctionne pas bien avec l'un des codes d'échappement introduits, \e[K, qui semble être ERASE_LINE (Effacer la ligne actuelle de sortie du terminal) . J'ai ajouté une ligne pour supprimer ce code d'échappement. Cela fonctionne maintenant pour un fond blanc.

Voici un exemple de sortie en surbrillance de couleur de ls en cours de redirection vers grep pour un surlignage de couleur supplémentaire.

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

c'est le elsip-Shell script.

#!/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"))

Voici un exemple de la sortie html, dans Firefox ... Si j'ai le temps, je vais approfondir le problème des codes ANSI superposés. où les k rouges chevauchent les noms de fichiers verts, mais ce n'est là qu'en raison d'une expression de test choisie à la hâte pour grep ... (c'est peut-être quelque chose \e[K influences ...

enter image description here

1
Peter.O

Ceci est juste un suivi de la solution @ user17591 - scriptage vim:

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

chmod et

Utilisation: htmlvim file (pour produire file.html)

1
JJoao