ソースコードをWebサイト上で表示したいときなど、シンタックスに色を付けて 見やすく表示したいと思ったりしませんか?短いソースコードならば自分の手で HTMLの要素を駆使し行っても良いかもしれませんが、長いものになるとそう簡単 にはいきません。PHPにはそれを簡単に実現するための方法がいくつか用意され ています。今回はその中からPEAR::Text_Highlighterを紹介したいと思います。 ソースコードの中のシンタックスに色を付ける方法としてPHPには highlight_string()という関数があります。この関数を使用しても色を付けるこ とはできるのですが、PHP4ではHTMLのfont要素を用いて、PHP5の場合はstyle属 性を用いて色づけが行われたり、対象ソースコードがPHPだけだったりと、なか なか自由がききません。しかし、今回紹介するPEAR::Text_Highlighterを使うと それらの不満が解消され、さらに行番号を表示するといったこともできます。で は、早速使ってみましょう。

このPEAR::Text_Highlighterはまだベータということで

pear install Text_Highlighter-beta

で、インストールします。以下のソースコードをhighlighter.phpというファイ ル名で保存して実行してみてください。

<style type="text/css">
.hl-main {font-family: monospace;}
.hl-default { color: #000000; }
.hl-code { color: #7f7f33; }
.hl-brackets { color: #009966; }
.hl-comment { color: #7F7F7F; }
.hl-quotes { color: #00007F; }
.hl-string { color: #7F0000; }
.hl-identifier { color: #000000; }
.hl-reserved { color: #7F007F; }
.hl-inlinedoc { color: #0000FF; }
.hl-var { color: #0066FF; }
.hl-url { color: #FF0000; }
.hl-special { color: #0000FF; }
.hl-number { color: #007F00; }
.hl-inlinetags { color: #FF0000; }
</style>
<?php
require_once "Text/Highlighter.php";
require_once 
"Text/Highlighter/Renderer/Html.php";

$renderer = new Text_Highlighter_Renderer_Html(array("numbers" =>
HL_NUMBERS_LI"tabsize" => 4));

$hlHtml =& Text_Highlighter::factory("PHP");
$hlHtml->setRenderer($renderer);
$local_data file_get_contents("./highlighter.php");
echo 
$hlHtml->highlight($local_data);
?>

シンタックスに色が付き、且つ左側には行番号が表示されていると思います。

処理の流れを説明すると、まず、Text_Highlighter_Renderer_Htmlのインスタン スを作成します。このときオプションとして行番号の形式(numbers)とタブの幅 (tabsize)を指定しています。行番号の形式にはHL_NUMBERS_LIと HL_NUMBERS_OI、HL_NUMBERS_TABLEの三種類があり、それぞれ行番号を表示、行 番号なし、HTMLのtable要素を用いて行番号を表示、となっています。

次に色づけを行う対象のソースコードの形式は何なのか、Text_Highlighterのサ ブクラスを使ってその形式に応じたオブジェクトを作成します。今回はPHPの ソースコードに対して色づけを行うので、引数に"PHP"と指定しています。ちな みに、このPEAR::Text_Highlighterでサポートしている形式は、現在C++、CSS、 diff、DTD、HTML、Java、Javascript、MySQL、Perl、PHP、Python、Ruby、SQL、 XMLです。

あとはPHPのソースコードを読み込んで表示するだけになります。PEAR:: Text_Highlighterでは各シンタックスに対してCSSのクラスを使って色づけを行 うので、CSSを書く必要があります。この部分がちょっと大変かもしれません が、様々な形式に対して色づけを行うことができ、行番号や色のカスタマイズと いったことが簡単にできます。興味のある方は使ってみてはいかがでしょうか。

PEAR::Text_Highlighter : http://pear.php.net/package/Text_Highlighter/


(アシアル 熊谷裕志)

この記事は、アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。
同サイトでは、他にもPHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座など、PHP開発者をサポートする情報を掲載しています。