サマリ | GeSHi を利用してソースコードを色分け表示する |
---|---|
リビジョン | 1.3 |
対応バージョン | 1.4.6 以降 |
作者 | revulo |
ライセンス | GPLv2 |
様々な言語のソースコードを、構文ハイライトして表示するプラグインです。
PHP のコードを構文ハイライトして表示した例を以下に示します。
(ディレクトリ構成例)
pukiwiki/ ├ cache/ | └ geshi/ ‥‥ 変換した HTML ファイルのキャッシュ用ディレクトリ | ├ plugin/ | ├ geshi/ ‥‥ GeSHi のファイルを展開したディレクトリ | ├ geshi_config/ ‥‥ 設定ファイル用ディレクトリ | | ├ default.php ‥‥ 全言語に共通の設定 | | └ php.php.sample ‥‥ PHP 用の設定ファイルのサンプル | | (php.php にリネームすると色が変わります) | └ geshi.inc.php ‥‥ プラグイン本体 | └ skin/ └ geshi/ ‥‥ スタイルシート用ディレクトリ ├ default.css ‥‥ 各言語のデフォルトの設定 └ php.css.sample ‥‥ PHP 用スタイルシートのサンプル (php.css にリネームすると色が変わります)
geshi.inc.php プラグインのアーカイブファイルをダウンロードし、 PukiWiki をインストールしてあるディレクトリで展開します。
$ tar xvfz geshi-1.3.tar.gz
cache/geshi というディレクトリが作られるので、書き込み許可を与えて下さい。
$ chmod 777 cache/geshi
GeSHi のページ からアーカイブをダウンロードし、 PukiWiki の plugin ディレクトリで展開します。
$ cd plugin $ unzip geshi-1.0.8.2.zip
UNIX 環境では、パーミッションが原因で動作しない場合があります。 その場合は、誰でもファイルを読めるようにパーミッションを変更して下さい。
$ chmod -R 755 geshi $ chmod 644 geshi/*.php geshi/*/*.php
あとは pukiwiki.ini.php の設定を以下のように変更して下さい。
define('PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK', 0);
以前のバージョンからバージョンアップする場合は、以下の点に注意して下さい。
書式は次のようになっています。
#geshi(オプション){{ …… ソースコード …… }}
例えば、PHP 用の構文ハイライトをして行番号付きで表示するには、このように書きます。
#geshi(php,number){{ <?php echo 'test'; ?> }}
または、file オプションを使って、
#geshi(javascript, file=http://www.revulo.com/pukiwiki/skin/ajaxtree/ajaxtree.js)
のように、ソースコードをファイルから読み込んで表示することもできます。
オプションは次のようなものが指定できます。 複数のオプションを指定する場合は 「,」(カンマ) で区切って書いて下さい。 デフォルト値は、geshi.inc.php の PLUGIN_GESHI_DEFAULT_LANGUAGE などの値を設定することで変更できます。
geshi.inc.php の先頭部分で以下の値を設定することで、動作をカスタマイズできます。
バージョン 1.2 以降では、外部スタイルシートを利用できるようになりました。 skin/geshi ディレクトリにあるスタイルシートを自動的に読み込みます。
全言語に共通の設定をする場合は、default.css に追記して下さい。 例えば当サイトでは、default.css に次のように書いて背景色などを設定しています。
pre.geshi, pre.geshi li { background: #f7f7f7; /* ソースコードの部分の背景色 */ } pre.number { background: #e7e7ef; /* 行番号の背景色 */ } pre.geshi li { margin: 0; /* ボーダーや位置を微調整 */ margin-left: 3.5em; padding: 0 0.5em; border-left: solid 1px #bbb; }
各言語用の設定をする場合は、default.css を直接書き換えても良いですが、 (言語名).css にその言語の分の設定をコピーして、そちらを編集することをお勧めします。 PHP 用スタイルシートのサンプルを php.css.sample という名前で同梱してあるので、参考にして下さい。 このファイルを php.css にリネームすると表示が変わります。
スタイルシートに登場する .kw1 などのクラス名は、大体このような意味になっています。
ある部分の色を変更するのに、どのクラスのスタイルを設定し直せば良いのかは、 HTML のソースを見て対応を調べて下さい。
バージョン 0.7 以降では、 sonots さんのパッチ を取り込み、 plugin/geshi_config ディレクトリの設定ファイルによって各種設定ができるようになりました。
設定ファイルでは、GeSHi クラスのメソッドやプロパティが利用できます。 例えば、スタイルシートを利用しない設定にした場合でも、 default.php に次のように書くと背景色を指定できます。
<?php // 行番号を表示する場合 if ($geshi->line_numbers) { // 行番号の背景色 $geshi->set_overall_style('background: #e7e7ef;', true); // ソースコードの部分の背景色 $geshi->set_code_style('background: #f7f7f7;', true); } // 行番号を表示しない場合 else { // 全体の背景色 $geshi->set_overall_style('background: #f7f7f7;', true); } ?>
他にもいろいろな設定ができますが、何が設定できるのかは GeSHi のマニュアル を見て下さい。 参考までに、有用そうな設定の例をいくつか挙げておきます。
また、設定ファイルを用いて、各言語の色分けの設定をすることも可能です。 PHP 用の設定ファイルのサンプルを php.php.sample という名前で同梱してあるので、参考にして下さい。 このファイルを php.php にリネームすると表示が変わります。
各言語用の設定ファイルを自分で作る場合は、 GeSHi のアーカイブに含まれている perl.php や java.php を plugin/geshi_config ディレクトリにコピーし、それを編集して下さい。 同梱されている php.php.sample のように、一部分だけを切り出しても構いません。 なお、KEYWORD の 1 といった項目が何を指すかは言語によって異なるので、 その辺りは各言語のファイルの中を見て判断して下さい。
アーカイブに同梱されているスタイルシートは、GeSHi 1.0.8.2 用に作成したものです。 そのため、より新しいバージョンの GeSHi と組み合わせると、表示がおかしくなる場合があります。 その場合には、スタイルシートを新たに作成して下さい。
スタイルシートは、GeSHi のアーカイブの contrib ディレクトリに含まれている cssgen2.php を使って作ります。 このファイルにブラウザからアクセスするか、コマンドラインから以下のように実行して下さい。
$ php cssgen2.php > default.css
後は、geshi-1.3.tar.gz に含まれている default.css から、 pre.geshi や table.geshi の設定をコピー&ペーストしてくれば完成です。
しかし、実は cssgen2.php が作成するスタイルシートはムダが多いです。 共通部分をまとめたスタイルシートが作りたい場合は、 当サイトで配布している cssgen2.php の改造版を利用して下さい。
標準の設定では、行番号を表示した場合にいくつかの問題があります。
GeSHi 1.0.8.1 以降で実装された GESHI_HEADER_PRE_TABLE の機能を用いると、これらの問題を解消できます。 具体的には、plugin/geshi_config/default.php に以下の設定を追加します。
$geshi->set_header_type(GESHI_HEADER_PRE_TABLE);
一応、これで表示はされますが、もう少し見映えを良くしたい場合は、 skin/geshi/default.css に次のような設定を追加してみて下さい。
table.geshi { margin: 1em; border: solid 1px #bbb; border-collapse: collapse; background: #f7f7f7; } table.geshi td { padding: 0.5em !important; width: 100%; } table.geshi .ln { border-right: solid 1px #bbb; width: auto; background: #e7e7ef; } table.geshi pre { border: none; line-height: 1.3 !important; overflow: auto; white-space: pre; word-wrap: normal; } table.geshi .ln pre { overflow: visible; }
これで、かなり見た目が整います。 ただし、ソースコードの1行の文字数が多すぎると、IE や Safari では表示が崩れるので注意して下さい。
同様の機能を持つプラグインが他にもあるのでまとめておきます。
プラグイン名 | 使用ライブラリ |
geshi.inc.php | GeSHi (PHP) |
highlighter.inc.php | PEAR::Text_Highlighter (PHP) |
prettify.inc.php | google-code-prettify (JavaScript) |
shjs.inc.php | SHJS (JavaScript) |
codehighlight.inc.php | 独自に実装 (PHP) |
highlight.inc.php | SyntaxHighlighter (JavaScript) |