Mengubah keluaran berwarna menjadi html

58

Ada alat yang memberikan keluaran berwarna:

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

Pertanyaannya adalah: Bagaimana cara mengubah keluaran berwarna dari program sewenang-wenang menjadi file html berwarna?

Format output lain mungkin cocok juga (LaTeX akan bagus). Saya pikir html adalah titik awal yang baik, karena mudah untuk mengubahnya ke format lain.

(Untuk yang penasaran bagaimana menjaga kode warna terminal, silakan ikuti jawaban: https://unix.stackexchange.com/a/10832/9689 ... | unbuffer command_with_colours arg1 arg2 | ... - alat unbuffer adalah bagian dari harapan )

Grzegorz Wierzowiecki
sumber
1
Jika Anda suka dwdiff, Anda mungkin juga suka colordiff, pembungkus yang mewarnai keluaran diff. Saya telah alias diff = colordiff selama bertahun-tahun, tidak pernah punya masalah.
Jonathan Hartley

Jawaban:

34

Jawaban atas pertanyaan ini mungkin yang Anda inginkan.

Ini tautan ke alat-alat ini, yang melakukan konversi yang Anda cari:

pengguna17591
sumber
3
ahajuga tersedia di Ubuntu: sudo apt install aha. Tetapi perhatikan bahwa beberapa perintah akan menekan warna saat output berupa pipa. Jadi saat mengirim output ke aha, Anda mungkin perlu menambahkan opsi ke perintah Anda. Untuk lsatau grepitu akan terjadi --color=always.
mivk
19

Atau hanya skrip shell

https://github.com/pixelb/scripts/blob/master/scripts/ansi2html.sh

Detail lebih lanjut dari skrip ini http://pablomarin-garcia.blogspot.com/2011/04/converting-ansi-to-html-how-to-convert.html

Dreampuf
sumber
Selamat datang di Unix & Linux Stack Exchange! Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
slm
5

Anda dapat mencoba vimdengan plugin AnsiEsc.vim untuk melihat warna ANSI melalui kode melarikan diri, kemudian mengarahkan kembali ke output standar ke vim -(pastikan Anda telah mengaktifkan :syntax on). Kemudian mengkonversi file ke HTML dengan perintah vim: :TOhtml. File HTML yang dihasilkan harus memiliki output berwarna.


Untuk mengonversi kode sumber menjadi non-interaktif ke html, coba perintah berikut:

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

Sumber: :help g:html_no_progress(bagian dari :help TOhtml).

Catatan: Anda dapat menggunakan -alih-alih myfile.c, untuk mengkonversi kode dari input standar.

kenorb
sumber
Ini tidak berhasil untuk saya. Ini akan membantu jika Anda akan menjelaskan perintahnya.
Ken Ingram
Perintah ini telah dijelaskan dalam manual Vim, periksa oleh :help TOhtmlatau :help g:html_no_progress.
kenorb
Cara Anda menulis itu membingungkan. Gunakan plugin AnsiEsc.vim. Aktifkan dengan: sintaks aktif, dan kemudian Anda dapat melihat teks dengan gaya dalam format ANSI? Setelah itu, simpan file sebagai html menggunakan: TOhtml?
Ken Ingram
1
Jika Anda memiliki saran tentang cara meningkatkan langkah-langkah, jangan ragu untuk meningkatkan.
kenorb
2
Saya menawarkan mereka dalam komentar saya. Jika saya mengerti instruksi dengan benar. Saya kira Anda menyarankan saya mengedit jawabannya? Itu baik saja. Saya bisa melakukan itu.
Ken Ingram
4

Anda dapat menggunakan vim. Ini adalah bagian dari skrip yang saya gunakan untuk mengonversi keluaran berbeda ke 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

Setelah ini, saya menjalankan sed untuk mengubah CSS dan judul menjadi persis seperti yang saya inginkan.

* Sunting: Seharusnya saya menyebutkan bahwa untuk mendapatkan warna, Anda harus mengaktifkan penyorotan sintaks. Saya melakukannya di .vimrc saya, tetapi jika Anda ingin menambahkannya di sini hanya akan menjadi baris lain seperti

-c ':syntax on' \
pengguna17591
sumber
Baik. Jadi, bagaimana Anda ingin mengonversi output dari program arbitrer, katakanlah: grep?
Grzegorz Wierzowiecki
1
Ok, awalnya saya tidak mengerti. Jika Anda ingin mengonversi kode warna ANSI, maka jawabannya di sini mungkin yang Anda inginkan. Jika Anda hanya memerlukan peretasan cepat, maka membuat skrip sed dengan sekelompok baris yang menggantikan kode ANSI dengan HTML akan berhasil. Sesuatu seperti 's, ^ [\ [31m, <span style =' color: red '>, gs, ^ [\ [m, </span>, g' akan cepat dan kotor, tetapi mungkin cukup.
user17591
Bisakah Anda @ user17591 menempatkan tautan ini sebagai satu jawaban lagi? Saya ingin memilihnya sebagai jawaban atas pertanyaan saya, dan meningkatkan reputasi Anda.
Grzegorz Wierzowiecki
Baik. Saya menambahkan tautan langsung ke modul Perl sehingga setiap pengguna berikutnya akan dapat menemukannya dengan satu tingkat tipuan yang lebih sedikit, tetapi juga tautan ke pertanyaan / jawaban asli untuk atribusi.
user17591
@ user17591, solusi bagus! (+1) Saya baru saja menambahkan varian tindak lanjut vimshell berusia 2 tahun dari solusi Anda!
JJoao
3

ansi2html , di pypi.

Seseorang dapat memperoleh jumlah kenikmatan yang tidak moderat dari piping output shell biasa melalui lolcat kemudian melalui ansi2html. Sesuatu seperti:

… | lolcat -f | ansi2html -ip
scruss
sumber
+1 untuk keluaran LaTeX. Saya akan memberi Anda +1 untuk lolcatgagasan itu sendiri, tetapi saya terlalu sibuk tertawa.
Neil Mayhew
fyi, paket log berwarna Debian menginstal ansi2htmlexecutable biner yang tidak kompatibel
scruss
1

Pembaruan: Saya telah menambahkan perlmetode, menggunakan modul HTML :: FromANSI dari CPAN .. Untuk menginstalnya, cukup ekstrak ke direktori, dan jalankan, sebagai root: perl -MCPAN -e 'install HTML::FromANSI'dari direktori itu. Fitur khusus yang sesuai dengan permintaan Anda adalah skrip yang disebut ansi2html. Yang cukup menarik, ini menunjukkan hilangnya warna yang sama setelah overlay kpada nama file, seperti halnya skrip elisp-shell ... Berikut adalah contoh penggunaan:

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

Ini adalah output html. seperti yang terlihat di Firefox:

masukkan deskripsi gambar di sini


Berikut adalah metode menggunakan skrip emacs elisp-shell ... misalnya, yang disebut htmlize ... Emacs tidak perlu dijalankan.

Saya awalnya mengujinya pada latar belakang hitam, tetapi saya perhatikan bahwa karena alasan tertentu, latar belakang putih tidak cocok dengan salah satu Kode Escape yang diperkenalkan \e[K, yang tampaknya ERASE_LINE (Hapus garis keluaran terminal saat ini) . Saya telah menambahkan baris untuk menghapus Kode Escape ini. Sekarang berfungsi untuk latar belakang putih.

Berikut adalah contoh keluaran yang disorot warna dari lsyang disalurkan ke grepuntuk penyorotan warna lebih lanjut.

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

ini elsip-shellskripnya.

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

Berikut adalah contoh dari output html, di Firefox ... Jika saya punya waktu, saya akan melihat lebih jauh ke masalah kode ANSI overlay. di mana merah ktumpang tindih dengan nama file hijau, tapi itu hanya ada karena tes regex yang dipilih dengan tergesa-gesa untuk grep ... (mungkin itu adalah sesuatu yang \e[Kmempengaruhi ...

masukkan deskripsi gambar di sini

Peter.O
sumber
Terdengar bagus. Akan lebih bagus jika ada alat yang lebih kecil untuk tugas ini (emacs membutuhkan ~ 100MB).
Grzegorz Wierzowiecki
1

Bagi mereka yang memiliki perintah yang ditulis dengan asumsi bahwa output yang disalurkan tidak akan pernah berwarna (misalnya beberapa kerangka kerja pengujian), Anda mungkin merasa berguna untuk menggunakan utilitas skrip untuk menyimpan output ansi terlebih dahulu. Ini kemudian dapat didorong ke aha atau utilitas lain yang disebutkan.

Andrew Stretton
sumber
1

Ini hanya tindak lanjut dari solusi @ user17591 - skrip vim :

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

chmod itu dan

Penggunaan: htmlvim file(untuk menghasilkan file.html)

Joao
sumber