ターミナルの色つき出力を HTML 変換するツール書いた
cat で色々な物をシンタックスハイライト出来る ccat に html 出力機能を入れた。
上の記事を読んで、なるほど、色つきの標準出力を HTML 変換する汎用ツールに切り出したら便利そうということで、Perl はコマンドラインツールになってないだけでそれをやるモジュールは存在したのでさくっと書いてみました。
App::Term2HTML に term2html コマンドが同梱されてます。
$ grep --color=always -r 'config' lib | term2html
<style>.black { color: #000; }.blue { color: #55c; }.bold { font-weight: bold; }.bright_black { color: #555; }.bright_blue { color: #99f; }.bright_cyan { color: #6dd; }.bright_green { color: #6d6; }.bright_magenta { color: #f6f; }.bright_red { color: #f66; }.bright_white { color: #fff; }.bright_yellow { color: #dd6; }.concealed { visibility: hidden; }.cyan { color: #0cc; }.dark { opacity: 0.7; }.green { color: #2c2; }.magenta { color: #d3d; }.on_black { background-color: #000; }.on_blue { background-color: #55c; }.on_bright_black { background-color: #555; }.on_bright_blue { background-color: #99f; }.on_bright_cyan { background-color: #6dd; }.on_bright_green { background-color: #6d6; }.on_bright_magenta { background-color: #f6f; }.on_bright_red { background-color: #f66; }.on_bright_white { background-color: #fff; }.on_bright_yellow { background-color: #dd6; }.on_cyan { background-color: #0cc; }.on_green { background-color: #2c2; }.on_magenta { background-color: #d3d; }.on_red { background-color: #f33; }.on_white { background-color: #bbb; }.on_yellow { background-color: #bb0; }.red { color: #f33; }.underline { text-decoration: underline; }.white { color: #bbb; }.yellow { color: #bb0; }</style>
<pre><span class="magenta">lib/App/Term2HTML.pm</span><span class="cyan">:</span><span class=""> my $</span><span class="bold white on_red">config</span><span class=""> = {};
</span><span class="magenta">lib/App/Term2HTML.pm</span><span class="cyan">:</span><span class=""> _merge_opt($</span><span class="bold white on_red">config</span><span class="">, @argv);
</span><span class="magenta">lib/App/Term2HTML.pm</span><span class="cyan">:</span><span class=""> _main($</span><span class="bold white on_red">config</span><span class="">);
</span><span class="magenta">lib/App/Term2HTML.pm</span><span class="cyan">:</span><span class=""> my $</span><span class="bold white on_red">config</span><span class=""> = shift;
</span><span class="magenta">lib/App/Term2HTML.pm</span><span class="cyan">:</span><span class=""> $</span><span class="bold white on_red">config</span><span class="">->{inline_style} ? (inline_style => 1) : (),
</span><span class="magenta">lib/App/Term2HTML.pm</span><span class="cyan">:</span><span class=""> print join('', '<style>', $h->css, '</style>', "\n") if !$</span><span class="bold white on_red">config</span><span class="">->{inline_style};
</span><span class="magenta">lib/App/Term2HTML.pm</span><span class="cyan">:</span><span class=""> my ($</span><span class="bold white on_red">config</span><span class="">, @argv) = @_;
</span><span class="magenta">lib/App/Term2HTML.pm</span><span class="cyan">:</span><span class=""> 'is|inline-style' => \$</span><span class="bold white on_red">config</span><span class="">->{inline_style},
</span></pre>
python だと ansi2html というツールがある様子。