ソースコードの色付けについて調べていたらよさそうなperlモジュールを見つけたので使ってみました。
CAPNを
「syntax highlight」で検索したら簡単に見つかりました。
同様の機能をもつモジュールが多数登録されていますが、その中でも「Syntax::Highlight::Engine::Kate::*」というモジュールはプラグインでC、Perl、PythonとメジャーどころからAWK、Tcl_Tk、Prolog・・・と日本国内ローカルなものは除いておよそ思いつく言語にほとんど対応しています。
星も4つ半付いているので問題なさそうです。
サンプルを元に簡単なスクリプトを書いてみます。
サンプルではfontタグを付加しているところをspanに置き換えて、CSSでデザインをカスタマイズできるようにしました。
■スクリプト
■cssのサンプル
使い方
./hilight.pl {ソースファイル}
■上記スクリプトを表示
00001 #!/usr/bin/perl
00002 use strict;
00003 use warnings;
00004 use Syntax::Highlight::Engine::Kate::Perl;
00005
00006 my $hl = new Syntax::Highlight::Engine::Kate::Perl(
00007 substitutions => {
00008 “<“ => “<“,
00009 “>“ => “>“,
00010 “&“ => “&“,
00011 “ “ => “ “,
00012 “\t“ => “ “,
00013 “\n“ => “<BR>\n“,
00014 },
00015 format_table => {
00016 Alert => [‘<span class=”code_perl_Alert”>‘, ‘</span>‘],
00017 BaseN => [‘<span class=”code_perl_BaseN”>‘, ‘</span>‘],
00018 BString => [‘<span class=”code_perl_BString”>‘, ‘</span>‘],
00019 Char => [‘<span class=”code_perl_Char”>‘, ‘</span>‘],
00020 Comment => [‘<span class=”code_perl_Comment”>‘, ‘</span>‘],
00021 DataType => [‘<span class=”code_perl_DataType”>‘, ‘</span>‘],
00022 DecVal => [‘<span class=”code_perl_DecVal”>‘, ‘</span>‘],
00023 Error => [‘<span class=”code_perl_Error”>‘, ‘</span>‘],
00024 Float => [‘<span class=”code_perl_Float”>‘, ‘</span>‘],
00025 Function => [‘<span class=”code_perl_Function”>‘, ‘</span>‘],
00026 IString => [‘<span class=”code_perl_IString”>‘, ‘</span>‘],
00027 Keyword => [‘<span class=”code_perl_Keyword”>‘, ‘</span>‘],
00028 Normal => [‘<span class=”code_perl_Normal”>‘, ‘</span>‘],
00029 Operator => [‘<span class=”code_perl_Operator”>‘, ‘</span>‘],
00030 Others => [‘<span class=”code_perl_Others”>‘, ‘</span>‘],
00031 RegionMarker => [‘<span class=”code_perl_RegionMarker”>‘, ‘</span>‘],
00032 Reserved => [‘<span class=”code_perl_Reserved”>‘, ‘</span>‘],
00033 String => [‘<span class=”code_perl_String”>‘, ‘</span>‘],
00034 Variable => [‘<span class=”code_perl_Variable”>‘, ‘</span>‘],
00035 Warning => [‘<span class=”code_perl_Warning”>‘, ‘</span>‘],
00036 },
00037 );
00038
00039 my $cnt=1;
00040 print qq|<div class=”code_perl”>\n|;
00041 while (my $in = <>) {
00042 printf (qq|<span class=”code_perl_Line_Number”>%05d</span> %s\n| ,$cnt ,$hl->highlightText($in));
00043 $cnt++;
00044 }
00045 print qq|</div>\n|;
00046
デザインがダサいのはモジュールのせいではなく私のせいなので適当にcssを修正してください。
HTMLのタグの代わりにエスケープシーケンスを付加するようにすればコンソール上で色付きの表示できるかと思います。
今回はperlのコードで試しましたが各種言語対応できるように拡張子を判別してプラグインを切り替えるようにしたりしたら面白いかもしれません。