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>';
Read More