it-swarm.com.de

Konvertieren farbiger Ausgaben in HTML

Es gibt Tools, die eine farbige Ausgabe ermöglichen:

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

Die Frage ist: Wie konvertiere ich die farbige Ausgabe eines beliebigen Programms in eine farbige HTML-Datei?

Andere Ausgabeformate könnten ebenfalls geeignet sein (LaTeX wäre großartig). Ich denke, HTML ist ein guter Ausgangspunkt, da es einfach ist, es in andere Formate zu konvertieren.

(Für neugierige Informationen zum Beibehalten von Terminal-Farbcodes folgen Sie bitte der Antwort: https://unix.stackexchange.com/a/10832/9689... | unbuffer command_with_colours arg1 arg2 | ... - tool npuffer ist Teil von erwarten )

62

Die Antwort auf diese Frage ist wahrscheinlich das, was Sie wollen.

Es enthält Links zu diesen Tools, die die von Ihnen gesuchte Konvertierung durchführen:

41
user17591
20
Dreampuf

Sie können vim mit dem Plugin AnsiEsc.vim versuchen, ANSI-Farben über Escape-Codes anzuzeigen, und dann zur Standardausgabe zu vim - umleiten (stellen Sie sicher, dass Sie :syntax on aktiviert haben). Konvertieren Sie dann die Datei mit dem Befehl vim in HTML: :TOhtml. Die generierte HTML-Datei sollte eine farbige Ausgabe haben.


Versuchen Sie den folgenden Befehl, um den Quellcode nicht interaktiv in HTML zu konvertieren:

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

Quelle: :help g:html_no_progress (Teil von :help TOhtml).

Hinweis: Sie können - anstelle von myfile.c verwenden, um Code aus der Standardeingabe zu konvertieren.

6
kenorb

Sie können vim verwenden. Dies ist Teil eines Skripts, mit dem ich die Diff-Ausgabe in HTML konvertiere.

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

Danach führe ich sed aus, um das CSS und den Titel so zu ändern, dass sie genau das sind, was ich möchte.

* Bearbeiten: Ich hätte erwähnen sollen, dass die Syntaxhervorhebung aktiviert sein muss, um Farbe zu erhalten. Ich mache das in meiner .vimrc, aber wenn Sie es hier hinzufügen möchten, wäre es nur eine andere Zeile wie

-c ':syntax on' \
4
user17591

ansi2html , auf pypi.

Man kann übermäßig viel Freude daran haben, die reguläre Shell-Ausgabe über lolcat und dann über ansi2html zu leiten. Etwas wie:

… | lolcat -f | ansi2html -ip
4
scruss

Für diejenigen, die einen Befehl haben, der unter der Annahme geschrieben wurde, dass die Pipeline-Ausgabe niemals Farbe hat (z. B. einige Test-Frameworks), kann es nützlich sein, das Skript-Dienstprogramm zu verwenden, um zuerst die Ansi-Ausgabe zu speichern. Dies kann dann an aha oder die anderen genannten Dienstprogramme weitergeleitet werden.

1
Andrew Stretton

Update: Ich habe eine Perl -Methode hinzugefügt, die Modul HTML :: FromANSI von CPAN verwendet .. Um sie zu installieren, extrahieren Sie es einfach in ein Verzeichnis und führen Sie es als root aus: Perl -MCPAN -e 'install HTML::FromANSI' aus diesem Verzeichnis. Die spezielle Funktion für Ihre Anfrage ist ein Skript namens ansi2html. Interessanterweise zeigt es nach dem überlagerten k in den Dateinamen den gleichen Farbverlust wie das Skript elisp-Shell ... Hier ist ein Anwendungsbeispiel:

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

Hier ist die HTML-Ausgabe. wie in Firefox gesehen:

enter image description here


Hier ist eine Methode mit einem emacs elisp-Shell-Skript ... für das Beispiel mit dem Namen htmlize ... Emacs muss nicht laufen.

Ich habe es ursprünglich auf einem schwarzen Hintergrund getestet, aber ich habe festgestellt, dass ein weißer Hintergrund aus irgendeinem Grund mit einem der eingeführten Escape-Codes nicht gut funktioniert, \e[K, das scheint ERASE_LINE zu sein (Löscht die aktuelle Zeile der Terminalausgabe) . Ich habe eine Zeile hinzugefügt, um diesen Escape-Code zu entfernen. Es funktioniert jetzt für einen weißen Hintergrund.

Hier ist ein Beispiel für eine farblich hervorgehobene Ausgabe von ls, die zur weiteren Farbhervorhebung an grep weitergeleitet wird.

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

dies ist das elsip-Shell Skript.

#!/bin/sh
":"; exec /usr/bin/emacs -Q --script "$0" -- "[email protected]" # -*-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"))

Hier ist ein Beispiel für die HTML-Ausgabe in Firefox ... Wenn ich Zeit habe, werde ich mich eingehender mit dem Problem der überlagerten ANSI-Codes befassen. wo die roten ks die grünen Dateinamen überlappen, aber das ist nur da wegen eines eilig gewählten Test-Regex für grep ... (vielleicht ist das etwas \e[K Einflüsse ...

enter image description here

1
Peter.O

Dies ist nur eine Fortsetzung der @ user17591-Lösung - vim scripting:

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

chmod es und

Verwendungszweck: htmlvim file (um file.html zu erstellen)

1
JJoao