iPhone はソース・リーディングのお供ですが,基本的にはシンタックス・ハイライトの機能はありません *1.そこで Text::VimColor を使ってシンタックス・ハイライト済みの HTML を生成後 iPhone に転送してやり,iPhone からはブラウジング機能を持つアプリで閲覧するという解決策があります.
前も同じようなのを書きましたが,今後の方針としてクソスクリプトであっても blog に晒すということが決まりましたのでとりあえず.
Text::VimColor はコンストラクタに filetype を渡すことで,どの言語のシンタックス・ハイライトを適用するかを指定できますが,試してみたところ,それをせずともかなりの確率で適切な言語を選択してくれます*2.
オープンソースプロジェクトには C や Perl,シェルスクリプトなど多種多様な言語が使われる場合もありますが,とりあえずは大丈夫かと.
$ ./make-iphone source-dir new-dir
こんな感じで実行すると,source-dir の中身がシンタックス・ハイライトされたファイルが,元のディレクトリ構造を保ったまま new-dir に格納される.後は Air Sharing とかで iPhone に転送してやればいい
#!/opt/local/bin/perl use strict; use warnings; use Text::VimColor; use File::Find::Rule; use File::Copy qw(copy); use Path::Class qw(file dir); use File::Path qw(make_path); # html 化したくないファイルの拡張子を指定 my @ignores = qw(html gif pdf ps jpe?g gz tar); die "[usage] $0 dir newdir" unless @ARGV == 2; my ($dir, $newdir) = @ARGV; make_path( $newdir ) unless -e $newdir and -d _; my $re_ignore = '\.(:?' . join( '|', @ignores ) . ')$'; my @paths = File::Find::Rule->file()->in( $dir ); for my $path (@paths) { my $file = file( $path ); my $dir = dir( $newdir, $file->dir->relative( $dir ) )->stringify; make_path( $dir ) unless -e $dir and -d _; my $name = file( $dir, $file->basename )->stringify; $name .= ".html" unless $name =~ /$re_ignore/o; print "$path =====> $name\n"; if ( $file->basename =~ /$re_ignore/o ) { copy( $path, $name ); next; } # Text::VimColor の異常終了によって,スクリプトまで終了してしまうのを防ぐ eval { my $syntax = Text::VimColor->new( file => $path, html_full_page => 1 ); open my $fh, '>', $name or die "cannot create '$name': $!"; print {$fh} $syntax->html; }; }
余談ですが,いつのまにか File::Path の mkpath が legacy になってました.v2.00 からは make_path を使うようです.