GeSHi – Generic Syntax Highlighterはプログラムソースを修飾語などにきれいに色付けした状態でhtmlソースとして出力してくれるPHPパッケージ。対応言語が豊富で、ActionScriptやObjective-Cも対応している。GeSHiを使ったWebサービスが見当たらないのはプロジェクトライセンスがGPLのためなのかな。
使い方
- sourceforge.netからパッケージをダウンロード。パッケージ全体をPHPが動作する環境に配置する。
- パッケージで定義されているGsShiクラスにhtml化したいソースファイルのストリング内容とパースしたい言語を引数に渡してパースさせる。
- パース内容を出力させたものがhtml化されたソースコードになる。
ActionScript 3.0の場合
例えばTest.asの中身を表示したい場合、PHPファイルに以下のように記述して実行。
<?php include('geshi.php'); //Language $lang = 'actionscript3'; //Raw source code $path = 'Test.as'; $src = file_get_contents($path); $geshi = new GeSHi($src, $lang); $geshi->enable_keyword_links(false); echo $geshi->parse_code(); ?>
上記PHPファイル実行時の出力内容は以下の通り。Flex Builderと全く同じ見た目が出力される。インデントがちょっと深いぐらい?
package { import flash.display.Sprite; /** * Test.as */ public class Test extends Sprite{ /** * Constructor */ public function Test(){ this.init(); } protected function init():void{ trace("Hello"); } } }
Objective-Cの場合
例えばTestAppDelegate.mの中身を表示したい場合、PHPファイルに以下のように記述して実行。
<?php include('geshi.php'); //Language $lang = 'objc'; //Raw source code $path = 'TestAppDelegate.m'; $src = file_get_contents($path); $geshi = new GeSHi($src, $lang); $geshi->enable_keyword_links(false); echo $geshi->parse_code(); ?>
上記PHPファイル実行時の出力は以下の通り。まあアリ?
// // TestAppDelegate.m // Test // // Created by boreal-kiss.com on 09/02/08. // Copyright boreal-kiss.com 2009. All rights reserved. // #import "TestAppDelegate.h" #import "TestViewController.h" @implementation TestAppDelegate @synthesize window; @synthesize viewController; - (void)applicationDidFinishLaunching:(UIApplication *)application { // Override point for customization after app launch [window addSubview:viewController.view]; [window makeKeyAndVisible]; } - (void)dealloc { [viewController release]; [window release]; [super dealloc]; } @end
その他
パッケージデフォルトだとSpriteやintなんかに変なURLのリンクがくっつくので、以下の設定でキーワードへのURLリンクを無効にしておくとよい。
$geshi->enable_keyword_links(false);
出力された内容をそのままブログなんかにコピー&ペーストしたいのであれば、以下のように出力内容を設定してやるとよい。出力内容がhtmlタグの形で表示される。
//echo $geshi->parse_code(); echo '<pre>'; echo htmlspecialchars($geshi->parse_code()); echo '</pre>';