it-swarm-eu.dev

Převod barevného výstupu na html

Existují nástroje poskytující barevný výstup:

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

Otázka zní: Jak převést jejich barevný výstup libovolného programu na barevný soubor html?

Vhodné by byly i jiné výstupní formáty (LaTeX by byl skvělý). Myslím, že html je dobrým výchozím bodem, protože je snadné jej převést do jiných formátů.

(Chcete-li vědět, jak uchovávat barevné kódy terminálu, postupujte podle odpovědi: https://unix.stackexchange.com/a/10832/9689... | unbuffer command_with_colours arg1 arg2 | ... - nástroj nbuffer je součástí očekávat )

62

Odpověď na tato otázka je pravděpodobně to, co chcete.

Odkazuje na tyto nástroje, které provádějí konverzi, kterou hledáte:

41
user17591
20
Dreampuf

Vyzkoušejte vim s AnsiEsc.vim pluginem pro zobrazení barev ANSI pomocí únikových kódů, poté přesměrujte na standardní výstup na vim - (ujistěte se, že jste aktivovali :syntax on). Poté soubor převeďte do HTML příkazem vim: :TOhtml. Generovaný soubor HTML by měl mít barevný výstup.


Chcete-li zdrojový kód neinteraktivní převést na html, zkuste následující příkaz:

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

Zdroj: :help g:html_no_progress (část :help TOhtml).

Poznámka: Můžete použít - místo myfile.c, pro převod kódu ze standardního vstupu.

6
kenorb

Můžete použít vim. Toto je část skriptu, který používám k převodu rozdílového výstupu do 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

Poté jsem spustil sed, abych změnil CSS a název přesně tak, jak chci.

* Úpravy: Měl jsem zmínit, že pro získání barvy je třeba zapnout zvýraznění syntaxe. Dělám to ve svém .vimrc, ale pokud byste to chtěli přidat sem, byla by to jen další řádka

-c ':syntax on' \
4
user17591

ansi2html , na pypi.

Jeden může odvodit nemoderované množství požitku z potrubí pravidelného Shell výstupu přes lolcat pak přes ansi2html. Něco jako:

… | lolcat -f | ansi2html -ip
4
scruss

Pro ty, kteří mají příkaz psaný za předpokladu, že piped výstup nebude mít nikdy barvu (např. Některé testovací rámce), může být užitečné použít skriptový nástroj k prvnímu uložení výstupu ansi. To pak lze přenést na aha nebo na jiné zmíněné nástroje.

1
Andrew Stretton

Aktualizace: Přidal jsem metodu Perl pomocí modul HTML :: FromANSI z CPAN .. Chcete-li ji nainstalovat, stačí ji rozbalit do a spusťte jako root: Perl -MCPAN -e 'install HTML::FromANSI' z tohoto adresáře. Konkrétní funkcí, která vyhovuje vašemu požadavku, je skript nazvaný ansi2html. Je zajímavé, že po překrytí k v názvech souborů ukazuje stejnou ztrátu barvy, jako skript elisp-Shell ... Zde je příklad použití:

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

Zde je výstup html. jak je vidět ve Firefoxu:

enter image description here


Zde je metoda používající emacsskript elisp-Shell ... například s názvem htmlize ... Emacs ano nemusí být spuštěn.

Původně jsem to testoval na černém pozadí, ale všiml jsem si, že z nějakého důvodu bílé pozadí nehraje dobře s jedním ze zavedených Escape Codes, \e[K, Který se zdá být ERASE_LINE ( Vymažte aktuální řádek terminálového výstupu). Přidal jsem řádek k odstranění tohoto kódu Escape. Nyní pracuje na bílém pozadí.

Zde je příklad barevně zvýrazněného výstupu z kanálu ls do potrubí grep pro další barevné zvýraznění.

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

toto je skript elsip-Shell.

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

Zde je ukázka výstupu html ve Firefoxu ... Pokud dostanu čas, podívám se dále na problém překrývajících se kódů ANSI. kde červené ks překrývají zelené názvy souborů, ale to je pouze kvůli spěšně zvolenému testovacímu regexu pro grep ... (možná to něco ovlivňuje \e[K ...

enter image description here

1
Peter.O

Toto je jen následek řešení @ user17591 - skriptování vim:

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

chmod to a

Použití: htmlvim file (vytvořit soubor.html)

1
JJoao