Перетворення кольорового виводу в HTML


58

Є інструменти, що забезпечують кольоровий вихід:

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

Питання в тому, як перетворити їх кольоровий вихід довільної програми в кольоровий HTML-файл?

Можливо, також підходять інші формати виводу (LaTeX - це чудово). Я думаю, що html є гарною відправною точкою, оскільки його легко конвертувати в інші формати.

(Для цікавого, як зберегти кінцеві коди кольорів, будь ласка, дотримуйтесь відповіді: https://unix.stackexchange.com/a/10832/9689 ... | unbuffer command_with_colours arg1 arg2 | ... - інструмент розпалування є частиною очікування )


1
Якщо вам подобається dwdiff, можливо, вам також сподобається colordiff, обгортка, яка забарвлює вихід диференціалу. Я псевдонімила diff = colordiff роками, ніколи не виникала жодних проблем.
Джонатан Хартлі

Відповіді:


34

Відповідь на це питання , мабуть, те, що ви хочете.

Він посилається на ці інструменти, які здійснюють конверсію, яку ви шукаєте:


3
ahaтакож доступний в Ubuntu : sudo apt install aha. Але зауважте, що деякі команди придушуватимуть кольори, коли на виході є труба. Тому при надсиланні виводу на aha, можливо, вам доведеться додати параметри до своїх команд. Бо lsабо grepбуло б --color=always.
mivk

19

Або просто сценарій оболонки

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

Детальніше про цей сценарій http://pablomarin-garcia.blogspot.com/2011/04/converting-ansi-to-html-how-to-convert.html


Ласкаво просимо до Unix & Linux Stack Exchange! Хоча це теоретично може відповісти на питання, бажано було б сюди включити істотні частини відповіді та надати посилання для довідки.
slm

5

Ви можете спробувати vimза допомогою плагіна AnsiEsc.vim переглянути кольори ANSI через коди евакуації, а потім перенаправити на стандартний вихід на vim -(переконайтеся, що ви активовані :syntax on). Потім перетворити файл в HTML з допомогою Vim команди: :TOhtml. Створений HTML-файл повинен мати кольоровий вихід.


Щоб конвертувати вихідний код неінтерактивно в HTML, спробуйте виконати таку команду:

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

Джерело: :help g:html_no_progress(частина :help TOhtml).

Примітка: Ви можете використовувати -замість myfile.c, щоб конвертувати код із стандартного вводу.


Це не спрацювало для мене. Це допоможе, якщо ви поясните команду.
Кен Інграм

Ця команда була роз'яснена в посібнику Vim, перевірте :help TOhtmlабо :help g:html_no_progress.
kenorb

Те, як ви написали, є заплутаним. Використовуйте плагін AnsiEsc.vim. Активуйте його за допомогою синтаксису, і тоді ви зможете побачити текст, належним чином оформлений у форматі ANSI? Після цього збережіть файл у форматі html за допомогою: TOhtml?
Кен Інграм

1
Якщо у вас є якісь пропозиції щодо вдосконалення кроків, сміливо вдосконалюйтесь.
kenorb

2
Я запропонував їх у своєму коментарі. Якби я правильно зрозумів інструкцію Я думаю, ви пропонуєте змінити відповідь? Що добре. Я можу зробити це.
Кен Інграм

4

Можна використовувати vim. Це частина сценарію, який я використовую для перетворення різного виводу в 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

Після цього я запускаю sed, щоб змінити CSS і назву, щоб бути саме такою, якою я їх хочу.

* Редагувати: я мав би згадати, що для отримання кольору потрібно увімкнути підсвічування синтаксису. Я роблю це у своєму .vimrc, але якби ви хотіли додати його сюди, це був би просто інший рядок

-c ':syntax on' \

Гаразд. То як би ви хотіли перетворити вихід довільної програми, скажімо так: grep?
Grzegorz Wierzowiecki

1
Гаразд, я спочатку не зрозумів. Якщо ви хочете перетворити кольори ANSI кольорів, то тут відповідь , ймовірно, те, що ви хочете. Якщо вам просто потрібен швидкий злом, то спрацювання створення sed сценарію з купою рядків, які заміняють ANSI-коди на HTML. Щось на зразок 's, ^ [\ [31m, <span style =' color: red '>, gs, ^ [\ [m, </span>, g' було б швидким і брудним, але, можливо, достатнім.
користувач17591

Чи можете ви @ user17591 поставити це посилання як ще одну відповідь? Я хотів би вибрати його як відповідь на моє запитання та підвищити вашу репутацію.
Grzegorz Wierzowiecki

Гаразд. Я додав пряме посилання на модуль Perl, так що будь-який наступний користувач зможе знайти його з одним меншим рівнем непрямості, а також посиланням на вихідний питання / відповідь для атрибуції.
користувач17591

@ user17591, приємне рішення! (+1) Я лише закінчую додавання 2-річного варіанту подальших варіантів вашого рішення!
JJoao

3

ansi2html , на піпі.

Неможливо отримати насолоду від звичайних трубопровідних оболонок через lolcat, а потім через ansi2html. Щось на зразок:

… | lolcat -f | ansi2html -ip

+1 для виходу LaTeX. Я дав би вам +1 за lolcatідею, але я надто зайнятий сміхом.
Ніл Мейхью

fyi, у пакеті кольорових журналів Debian встановлюється несумісний ansi2htmlдвійковий виконуваний файл
scruss

1

Оновлення: я додав perlметод, використовуючи модуль HTML :: FromANSI від CPAN .. Щоб встановити його, просто витягніть його до каталогу та запустіть як root: perl -MCPAN -e 'install HTML::FromANSI'з цього каталогу. Особливістю для вашого запиту є сценарій, який називається ansi2html. Цікаво, що він показує таку ж втрату кольору після накладених kфайлів, як і сценарій elisp-shell ... Ось приклад використання:

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

Ось вихід HTML. як видно у Firefox:

введіть тут опис зображення


Ось метод, що використовує сценарій elisp-shell emacs emacs ... наприклад, під назвою htmlize ... Emacs не потрібно запускати.

Я спочатку перевіряв його на чорному тлі, але помітив, що з якоїсь причини білий фон не дуже добре поєднується з одним із введених кодів Escape \e[K, який, здається, є ERASE_LINE (Стерти поточний рядок вихідного терміналу) . Я додав рядок для видалення цього коду втечі. Зараз він працює для білого тла.

Ось приклад виділеного кольором виводу від lsтрубопроводу до grepподальшого виділення кольорів.

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

це 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"))

Ось зразок виводу html у Firefox ... Якщо у мене з’явиться час, я детальніше перегляну проблему з накладеними кодами ANSI. де червоний kперекриває зелені назви файлів, але це є лише через поспішно обраний тестовий регекс для grep ... (можливо, це щось \e[Kвпливає ...

введіть тут опис зображення


Звучить красиво. Було б чудово, якби для цього завдання був менший інструмент (emacs займає ~ 100 Мб).
Grzegorz Wierzowiecki

1

Для тих, хто має команду, написану з припущенням, що конвеєрний вихід ніколи не буде кольоровим (наприклад, деякі тестові рамки), вам може бути корисним використовувати утиліту скрипта для першого збереження виводу ansi. Потім це може бути натиснуто на ага або інші згадані утиліти.


1

Це лише продовження рішення @ user17591 - сценарій vim :

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

chmod це і

Використання: htmlvim file(для створення file.html)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.