リポジトリブラウザを作ってみる 2.GeSHiでシンタックスハイライトしてみた

前回に続いて、Subversionリポジトリブラウザを作る話。
listとinfoはそれなりに出来た。
今回は、catの話。
 
PearのVersionControl_SVNは余りにも使いづらい。
execするクラスを自分で作る事にした。
 

変数に格納された文字列がテキストかバイナリかを調べる

PeclのFileinfoで簡単に調べられるらしい。
 

Fileinfoインストール
yum install file
sudo pecl install fileinfo
echo 'extension=fileinfo.so' > /etc/php.d/fileinfo.ini
service httpd reload

 

ソース
<?php
if ($argc<2) {
    echo "no param\n";
    exit();
}
$finfo = new finfo(FILEINFO_MIME, "/usr/share/misc/magic");
if (!$finfo) {
    echo "fileinfo データベースのオープンに失敗しました\n";
    exit();
}

/* 指定したファイルの mime タイプを取得します */
$str = file_get_contents($argv[1]);
var_dump($finfo->buffer($str));

 
今回は関係ないけど、画像を調べる時は"identify"が使えそう。
 

GeSHiでハイライトする

調べた結果、GeSHiはかなりの種類のファイルに対応しているらしい。
 

GeSHiをインストール

ここからダウンロード。
GeSHi - Generic Syntax Highlighter - Browse Files at SourceForge.net
クリックしやすい場所にある「geshi-dev」の最新版で試してておかしいなぁと小一時間悩んだ。
下の方にある「geshi」を開いてその中の最新をダウンロード。
解凍してinclude pathにコピー。
 

ソース
<?php
$file_path = 'xxx';
$source = file_get_contents($file_path);
$extension = pathinfo($file_path, PATHINFO_EXTENSION);

$geshi = new GeSHi($source, $extension);
$source = $geshi->parse_code();

 
actionscript.phpをas.phpシンボリックリンク貼った。
 

List/Info/Catは出来た

まだまだ仮だけど。
verboseオプションの付いたlistの結果をパースするのが面倒だった。
verboseがついてても、年は取得できないみたい。
それともsvnの仕様…?