理系学生日記

おまえはいつまで学生気分なのか

Perl モジュールのソースリーディングを iPhone 上で行ってみることにした

id:syou6162 さんのエントリ で,FileMagnet という (iPod touch|iPhone) アプリを知りました.どうもこれ,誤解を恐れずに言うと iPhone を普通のハードディスクみたいにして使えるようになるアプリみたいです.Mac から iPhone に WiFi 経由でファイルを転送し,そのファイルが html とか pdf とかだと,iPhone 上でオフラインにも関わらずそれらを閲覧することができる優れ物.有料 (600 円) だけど. これは便利!! とか思って,ちょっと遊んだりしてたんですけど,これ使ったら iPhone 上でソースリーディングとかできるんじゃね?

http://d.hatena.ne.jp/tokuhirom/20080719/1216423454 というエントリもあったし,Plagger のソースを読んでみようと思いたって,こんなスクリプトを書いた.もともとモジュールで使用されている全モジュールとそのパスを一覧表示する - 理系学生日記 も,これがしたかったからテストしてみた感じです. モジュールの名前を引数として受け取って,そのモジュールが読み込んでいる各モジュールのソースを,シンタックスハイライトした html に出力する.最初カレントディレクトリに全 html を出力させたら猛烈に html ファイルが多くなったので,-d でディレクトリを指定できるようにした.で,ディレクトリごと iPhone に送ればおk. ちょっくらこれで,ソースリーディング試してみる!

|perl|

!/usr/bin/perl

use strict; use warnings; use Text::VimColor; use Getopt::Std; use File::Path; use File::Basename;

my %opt; getopt( 'd', \%opt ); $opt{d} ||= '.';

my $module = shift || die "usage: $0 package\n"; unless ( eval "require $module" ) { die "error: $@"; }

for my $module ( keys %INC ) { my $syntax = Text::VimColor->new( file => $INC{$module}, html_full_page => 1, );

my $filename = "$opt{d}/$module.html";
my $dirname  = (fileparse( $filename ))[1];
mkpath( [$dirname] );

open my $fh, '>', $filename
    or die "cannot open '$filename': $!";
print {$fh} $syntax->html;
close $fh
    or die "cannot close '$filename': $!";

} ||<