2015/12/06

ターミナルの色つき出力を HTML 変換するツール書いた

cat で色々な物をシンタックスハイライト出来る ccat に html 出力機能を入れた。

上の記事を読んで、なるほど、色つきの標準出力を HTML 変換する汎用ツールに切り出したら便利そうということで、Perl はコマンドラインツールになってないだけでそれをやるモジュールは存在したのでさくっと書いてみました。

App::Term2HTMLterm2html コマンドが同梱されてます。

$ 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="">-&gt;{inline_style} ? (inline_style =&gt; 1) : (),
</span><span class="magenta">lib/App/Term2HTML.pm</span><span class="cyan">:</span><span class="">        print join(&#39;&#39;, &#39;&lt;style&gt;&#39;, $h-&gt;css, &#39;&lt;/style&gt;&#39;, &quot;\n&quot;) if !$</span><span class="bold white on_red">config</span><span class="">-&gt;{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="">        &#39;is|inline-style&#39; =&gt; \$</span><span class="bold white on_red">config</span><span class="">-&gt;{inline_style},
</span></pre>

python だと ansi2html というツールがある様子。

サイト内検索