SVN::TracWiki というツールをつくってみました。svn repos はこちら。
何をするものかというと、Subversion の post-commit スクリプトとして動作して、コミットされたファイルからテキストを抽出、そのファイルの実体へのリンクを付加して、Trac の Wiki へ自動ポストするというもの。
具体的な例としては、PowerPoint ファイルをコミットしたら、そのファイルからテキストのみを抽出して Wiki へ自動ポスト。こんな感じで。
これで何がうれしいかというと、Subversion で管理している PowerPoint ファイルを、Trac 上で検索ができるようになります。こんな感じですね。元ファイルへのリンクもあるので、検索して元ファイルを開いて読む、ってことが簡単にできます。
例によって YAMLで設定 and プラガブル。ファイルからテキストを抽出する部分がプラグインになっていて、簡単に拡張できるようにしています。
現在は PowerPoint 用フィルタプラグインしかないのですが、以下の様なコードになっていて、フィルタ対象ファイルの MIME タイプを register() で指定、テキスト抽出ルーチンを filter() に記述、という感じで書きます。
package SVN::TracWiki::Plugin::Filter::PowerPoint; use strict; use warnings; use base qw( SVN::TracWiki::Plugin::Filter ); use Encode; sub register { my $self = shift; $self->register_mime_types( qw! application/vnd.ms-powerpoint !); } sub filter { my ( $self, $file ) = @_; my $html = `/usr/local/bin/ppthtml $file`; my $text = $self->strip_html($html); $text = Encode::decode('utf8', $text); $text = Encode::encode('utf8', $text); return $text; } 1;
とりあえず動くようになっただけで、いけてない部分盛りだくさんですが、こんなのつくってみました、ってことで。