Text::VimColor を使って chalow のソース表示に色をつける
ソースコードを色付けする Perl モジュール Text::VimColor を使って chalow 表記の[src]... [/src]を色付けする方法.
- ソースコードを色付けする関数
これを chalow の適当なところに貼り付けておく.cl.conf でも OK.
tab 幅なんかはお好みで.
PHP ファイルの場合に特別な処理をしているのは,PHP の場合は PHP タグ (<?php ... ?>) に囲まれていないと
ソースに色をつけてくれない.そのためタグがついていない場合は一回タグをつけてあげてる.
ASP とかもそうだと思う.
sub highlight {
my ($filetype, $string) = @_;
my $add_php_tag = 0;
$filetype =~ s/^\s*(.*?)\s*$/$1/s;
$string =~ s/^\s*(.*?)\s*$/$1/s;
# PHP ファイルで PHP タグ (<?php...?>) がない場合は PHP タグを付加
if ($filetype eq 'php') {
if ($string !~ m/<\?/) {
$string = "<?php\n" . $string . "\n?>";
$add_php_tag = 1;
}
}
my $syntax = Text::VimColor->new(
filetype => $filetype,
string => $string,
);
my $html = $syntax->html;
chomp $html;
# PHP ファイルで PHP タグを付加した場合は PHP タグを削除する
if ($add_php_tag == 1) {
$html =~ s!^<span class="synSpecial"><\?php</span>\n!!m;
$html =~ s!^<span class="synSpecial">\?></span>!!m;
}
# tab を 4 つ分に
$html =~ s/\t/{' ' x 4}/ge;
# 2 つ以上のスペースを に
$html =~ s/( +)/{' ' x length($1)}/ge;
# 行末に <br /> を付加
$html =~ s/$/<br \/>/mg;
return $html;
}
- chalow を編集
chalow には以下のパッチをあてる.
--- chalow-orig 2005-08-21 07:35:31.000000000 +0200
+++ chalow 2006-01-13 23:47:34.806132000 +0100
@@ -13,6 +13,7 @@
use Time::Local; # for 曜日
use HTML::Template;
use ChangeLogReader;
+use Text::VimColor;
my $version = '1.0rc6';
@@ -1292,11 +1293,8 @@
### ソースエスケープ - "&" や "<" などを置換し pre を付ける
$num_of_escaped_src = 0;
- $$strp =~ s!\[src\](.*?)\[/src\]!
- $escaped_src{++$num_of_escaped_src} = $1,
- $escaped_src{$num_of_escaped_src} =~ s/&/&/g,
- $escaped_src{$num_of_escaped_src} =~ s/</</g,
- $escaped_src{$num_of_escaped_src} =~ s/>/>/g,
+ $$strp =~ s!\[src(.+?)?\](.*?)\[/src\]!
+ $escaped_src{++$num_of_escaped_src} = highlight($1, $2),
sprintf("\x6\x13%d\x3", $num_of_escaped_src)!gsmxe;
### プラグインエスケープ
@@ -1312,7 +1310,7 @@
### プラグインアンエスケープ - 実行!
$$strp =~ s|\x7\x13(\d+)\x3|eval($escaped_plugin{$1})|ge;
### ソースアンエスケープ - pre 追加
- $$strp =~ s|\x6\x13(\d+)\x3|<pre>$escaped_src{$1}</pre>|g;
+ $$strp =~ s|\x6\x13(\d+)\x3|<p class="code">$escaped_src{$1}</p>|g;
### HTML アンエスケープ
$$strp =~ s|\x5\x13(\d+)\x3|$escaped_string{$1}|g;
}
- 使い方
色付けするソースの種類がわからないといけないので,[src]記法を拡張した.
書式は
[src ソースの種類]
:
[/src]
ソースの種類を書く必要がある.これだけで OK.
ソースの種類は vim が理解できるもの.Vim 6.3 の場合は
/usr/local/share/vim/vim63/syntax
ここにあるものだと思う.ちなみに 408 種類ある.
そして,これに対応した css ファイルは
Text-VimColor-0.09/lib/Text/VimColor/light.css
にあるので,これを適当に編集して使う.
あと,Text::VimColor を読んでみると vim を起動していることがわかった.
なるほどね…
サンプルはこのサイト.