PHPプロ!TIPS+

高機能なシンタックスハイライター、GeSHiを使ってみよう

Webサイトなどにソースコードを掲載するときは、見易さを考えればシンタックスハイライターの存在は欠かせません。PHPには、標準で関数としてhighlight_string()関数が用意されていますが、これはfontタグを使用するなどしているため、XHTMLのバリデーションを考えるとあまり使えたものではありません。

以前に本TIPSメーリングリストではPEARのText_Highlighterをご紹介いたしましたが、最近は一向に更新が進んでおらず、ベータ版のまま停止しています。しかしPHPには、これを遥かに上回る高機能なシンタックスハイライター「GeSHi」が存在します。今回は、このGeSHiについて簡単にご紹介したいと思います。

GeSHiは元々phpBBのモジュールとして作成されたライブラリで、XHMLの観点からも割とまともなソースコードを返します。ハイライト可能な言語はPHPにとどまらず、HTMLやC,C++からはじまりPascalやBash、LaTeX、VisualBASIC、Smalltalk、・・・などなど、実に80近い種類の言語ハイライトが可能です。

GeSHiのインストールは、基本的にtarボールもしくはzipファイルをダウンロードして適当なディレクトリへ展開するだけです。ダウンロードは以下のsourceforge.netのGeSHiプロジェクトページから行えます。

http://sourceforge.net/project/showfiles.php?group_id=114997&package_id=124605&release_id=489035

原稿執筆時点の最新版は1.0.7.18なので、これを使用します。使用方法としては、展開したディレクトリ内のgeshi.phpをインクルードし、GeSHiクラスを呼び出すだけです。以下は最も単純な、index.phpというファイル自身をハイライトして表示するサンプルです。これをindex.phpとして保存し、geshiを展開したディレクトリと同じ階層に配置してください。

<?php
require_once "geshi/geshi.php";
$source file_get_contents("index.php");

$geshi = new GeSHi($source"php"); 

echo 
$geshi->parse_code();
?>

GeSHiクラスのインスタンス作成の際に、ハイライトするソースコードの文字列と、その文字列に適用するシンタックスハイライトの種類を指定します。parse_codeメソッドを実行すると、ハイライトされたソースコードのHTMLが返されるので、これをechoしています。

ただ、結果表示はきれいではあるものの、やはりデフォルトではいくつか不満も残ります。 HTMLソースを見ればわかりますが、この状態ではタグに直接style指定が行われており、きちんとclass指定でCSSを記述したい場合にはあまり嬉しくありません。関数にwww.php.netの関数リファレンスへのリンクを自動的に付与してくれるのも便利ではありますが、これを取り除きたいとか、リンク先を変更したいという場合もあります。そこで、これらを変更してみましょう。

<?php
require_once "geshi/geshi.php";

$source file_get_contents("index.php");

$geshi = new GeSHi($source"php");

$geshi->set_url_for_keyword_group(3'http://www.phppro.jp/{FNAME}');

$geshi->enable_classes();
?>
<style type="text/css">
<!--
<?php
echo $geshi->get_stylesheet();
?>
-->
</style>
<?php
echo $geshi->parse_code();
?>

まず、set_url_for_keyword_groupメソッドは、関数に付与されるリンク先を[http://www.phppro.jp/ ]の関数リファレンスへと変更しています。ここで第2引数に渡す文字列を空文字列に変更することで、関数に付与されるリンクを取り除くことが可能です。

タグのstyle指定は、enable_classesメソッドを呼び出すことでclassによる指定に切り替えられます。このとき、get_stylesheetメソッドを使用すればこのCSSを返してくれるので、これをstyleタグの中でechoしています。最後に、parse_codeメソッドでハイライトされたソースコードを表示しています。

無論、上記で紹介した以外にも、行番号を付与する、全体を囲うブロックをpreタグからdivへ切り替える、などなど実にさまざまな機能を備えています。また、充実したドキュメントも存在しており、非常に見やすくハイライトされているので英語があまり得意でなくても直感的に使い方が学び取れると思います。インストールも展開するだけなので、レンタルサーバーでも気軽に使えますし、Web サイトやローカルサーバーなどでソースコードを表示する要件のある方は、ぜひ一度使用してみてはいかがでしょう。

GeSHi : http://qbnz.com/highlighter/

GeSHi Documentation : http://qbnz.com/highlighter/geshi-doc.html#case-caps

バックナンバーについて

TIPS-MLは、毎週金曜日に更新され、新しい記事が掲載されます。

Tipsꗗy[W 

Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)