最終更新: 2008-11-10 (月) 05:36:57
このページをDeliciousに追加5 users このページをはてなブックマークに追加このページを含むはてなブックマーク このページをlivedoor クリップに追加このページを含むlivedoor クリップ このページをYahoo!ブックマークに追加このページを含むYahoo!ブックマーク

geshi.inc.php

サマリGeSHi を利用してソースコードを色分け表示する
リビジョン1.2
対応バージョン1.4.6 以降
作者revulo
ライセンスGPLv2

目次

概要

様々な言語のソースコードを、構文ハイライトして表示するプラグインです。

  • 内部で GeSHi (Generic Syntax Highlighter) を利用しています
  • スタイルシートや設定ファイルを用いて表示色などを設定できます
  • 100 種類以上の言語に対応しています (詳しくは GeSHi のページ を見て下さい)

サンプル

PHP のコードを構文ハイライトして表示した例を以下に示します。

  1. <?php
  2.  
  3. /**
  4.  * phphighlight.inc.php - Syntax highlighting using highlight_string() function
  5.  *
  6.  * @author      revulo
  7.  * @licence     http://www.gnu.org/licenses/gpl.html  GPLv2
  8.  * @link        http://www.revulo.com/PukiWiki/Plugin/PHPHighlight.html
  9.  */
  10.  
  11. function plugin_phphighlight_convert()
  12. {
  13.     $args   = func_get_args();
  14.     $source = rtrim(end($args));
  15.     $html   = highlight_string($source, true);
  16.  
  17.     $before = array(
  18.         ">\n<",
  19.         '<font color="',
  20.         'font>',
  21.         'code>',
  22.     );
  23.     $after = array(
  24.         '><',
  25.         '<span style="color: ',
  26.         'span>',
  27.         'pre>',
  28.     );
  29.     return str_replace($before, $after, $html);
  30. }
  31.  
  32. ?>

インストール

(ディレクトリ構成例)

 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.2.tar.gz

cache/geshi というディレクトリが作られるので、書き込み許可を与えて下さい。

$ chmod 777 cache/geshi

GeSHi 1.0.7.21 以降を用いる場合は、スタイルシートを別にダウンロードして、上書きコピーして下さい。

$ tar xvfz geshi_css-20081102.tar.gz
$ mv geshi-1.0.8.1/* skin/geshi/

GeSHi のページ からアーカイブをダウンロードし、 PukiWiki の plugin ディレクトリで展開します。 UNIX 環境で展開した場合は、誰でもファイルを読めるようにパーミッションを変更して下さい。

$ cd plugin
$ unzip geshi-1.0.8.1.zip
$ chmod -R 755 geshi
$ chmod 644 geshi/*.php geshi/*/*.php

あとは pukiwiki.ini.php の設定を以下のように変更して下さい。

define('PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK', 0);

なお、以前のバージョンからバージョンアップする場合は、以下の点に注意して下さい。

  • バージョン 1.2 から、キャッシュの保存場所が cache/geshi ディレクトリに変わりました。 cache ディレクトリに残っている 〜.geshi というファイルは、使わないので削除して構いません。

使い方

書式は次のようになっています。

#geshi(オプション){{
  ……
  ソースコード
  ……
}}

例えば、PHP 用の構文ハイライトをして行番号付きで表示するには、このように書きます。

#geshi(php,number){{
<?php
echo 'test';
?>
}}

オプションは次のようなものが指定できます。 複数のオプションを指定する場合は 「,」(カンマ) で区切って書いて下さい。 デフォルト値は、geshi.inc.php の PLUGIN_GESHI_DEFAULT_LANGUAGE などの値を設定することで変更できます。

  • 言語名 (デフォルト: 構文ハイライトなし)
    • 言語名 もしくは language=言語名 ‥‥ 言語を指定します。言語名は大文字でも小文字でも構いません
    • 言語名を指定しなかった場合は、単なる整形済みテキストとして表示されます
      (ただし PLUGIN_GESHI_DEFAULT_LANGUAGE が設定されていたら、その言語とみなして処理します)
  • number (デフォルト: off)
    • number もしくは number=on ‥‥ 行番号を表示します
    • number=off ‥‥ 行番号を非表示にします
  • start (デフォルト: 1)
    • start=数字 ‥‥ 行番号を表示する際の開始番号を指定します
  • cache (デフォルト: on) *1
    • cache もしくは cache=on ‥‥ キャッシュ機能を有効にします
    • cache=off ‥‥ キャッシュ機能を無効にします
    • cache=reset ‥‥ キャッシュを強制的に再作成します

設定

プラグインの設定

geshi.inc.php の先頭部分で以下の値を設定することで、動作をカスタマイズできます。

PLUGIN_GESHI_LIB_DIR
GeSHi がインストールされているディレクトリ
PLUGIN_GESHI_CONFIG_DIR
設定ファイルが置かれているディレクトリ
PLUGIN_GESHI_CSS_DIR
スタイルシートが置かれているディレクトリ (SKIN_DIR で始まるディレクトリにして下さい)
PLUGIN_GESHI_USE_CSS
スタイルシートを利用する (true, false のいずれか)
PLUGIN_GESHI_CACHE
キャッシュを使用するかどうかのデフォルト値 (true, false のいずれか)
PLUGIN_GESHI_DEFAULT_LANGUAGE
言語名が指定されなかった時のデフォルトの言語名
PLUGIN_GESHI_LINE_NUMBERS
行番号を表示するかどうかのデフォルト値 (true, false のいずれか)

スタイルシートの設定

バージョン 1.2 以降では、外部スタイルシートを利用できるようになりました。 skin/geshi ディレクトリにあるスタイルシートを自動的に読み込みます。

  • default.css があれば読み込みます
  • (言語名).css があればそれも読み込みます
  • (言語名).css に書かれた設定は、default.css の設定よりも優先されます

全言語に共通の設定をする場合は、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-left: 0.5em;
	border-left: 1px solid #bbb;
}

各言語用の設定をする場合は、default.css を直接書き換えても良いですが、 (言語名).css にその言語の分の設定をコピーして、そちらを編集することをお勧めします。 PHP 用スタイルシートのサンプルを php.css.sample という名前で同梱してあるので、参考にして下さい。 このファイルを php.css にリネームすると表示が変わります。

 

スタイルシートに登場する .kw1 などのクラス名は、大体このような意味になっています。

  • kw ‥‥ キーワード
  • co ‥‥ コメント
  • es ‥‥ エスケープキャラクタ
  • br ‥‥ 括弧
  • st ‥‥ 文字列
  • nu ‥‥ 数字
  • me ‥‥ メソッド
  • sy ‥‥ 記号
  • re ‥‥ 正規表現
  • sc ‥‥ その他の部分

ある部分の色を変更するのに、どのクラスのスタイルを設定し直せば良いのかは、 HTML のソースを見て対応を調べて下さい。

設定ファイルによる設定

バージョン 0.7 以降では、 sonots さんのパッチ を取り込み、 plugin/geshi_config ディレクトリの設定ファイルによって各種設定ができるようになりました。

  • default.php があれば読み込みます
  • (言語名).php があればそれも読み込みます
  • (言語名).php に書かれた設定は、default.php の設定よりも優先されます

設定ファイルでは、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 のマニュアル を見て下さい。 参考までに、有用そうな設定の例をいくつか挙げておきます。

  • $geshi->enable_strict_mode();
  • $geshi->set_header_type(GESHI_HEADER_DIV);

また、設定ファイルを用いて、各言語の色分けの設定をすることも可能です。 PHP 用の設定ファイルのサンプルを php.php.sample という名前で同梱してあるので、参考にして下さい。 このファイルを php.php にリネームすると表示が変わります。

 

各言語用の設定ファイルを自分で作る場合は、 GeSHi のアーカイブに含まれている perl.php や java.php を plugin/geshi_config ディレクトリにコピーし、それを編集して下さい。 同梱されている php.php.sample のように、一部分だけを切り出しても構いません。 なお、KEYWORD の 1 といった項目が何を指すかは言語によって異なるので、 その辺りは各言語のファイルの中を見て判断して下さい。

仕様

現在のところ、行番号を表示した場合に以下のような問題があります。

  • ブラウザによっては、コピー&ペーストが正常に行えません
  • start オプションを用いると XHTML 1.1 準拠でなくなります
  • Windows 版 Safari で見ると何も表示されない (Safari 3.1 以降では修正されているようです)

ダウンロード

  • geshi-1.3alpha3.tar.gz (掲示板 にて公開中)
  • geshi-1.2.tar.gz
    • プラグイン本体
    • スタイルシート (GeSHi 1.0.7.20 用)
      • GeSHi 標準のスタイルシート
      • PHP 用スタイルシートのサンプル
    • 設定ファイル
      • デフォルト設定用の設定ファイル
      • PHP 用の設定ファイルのサンプル

更新履歴

プラグイン本体の履歴

  • Version 1.2 (2008/01/01)
    • 外部スタイルシートを利用する機能を追加
    • キャッシュの保存場所を cache/geshi ディレクトリに変更
  • Version 1.1 (2007/08/04)
    • タイムスタンプを変更しない編集の時もキャッシュが更新されるように改良
    • プレビュー時にはキャッシュを使用しないように変更
  • Version 1.0 (2007/02/12)
    • プラグインの引数でオプションを指定できるように
  • Version 0.7 (2007/02/04)
    • sonots さんのパッチを取り込み、行番号表示と設定ファイルの機能を追加
  • Version 0.6 (2007/01/25)
    • 色設定を調整。highlight_string() を利用する機能は別プラグインに分離
  • Version 0.5 (2007/01/14)
    • キャッシュ機能を追加
  • Version 0.2 (2007/01/01)
    • 組み込み関数の highlight_string() を利用するオプションを追加
  • Version 0.1 (2006/10/11)
    • 暫定公開

スタイルシートの履歴

  • 2008/11/02 版
    • GeSHi 1.0.8.1 以降用のスタイルシートを追加
  • 2008/08/09 版
    • GeSHi 1.0.8 用のスタイルシートを追加
  • 2008/06/09 版
    • GeSHi 1.0.7.22 用のスタイルシートを追加
  • 2008/04/14 版
    • SYMBOLS の部分に対する設定が抜けていたのを追加
  • 2008/04/13 版
    • GeSHi 1.0.7.21 用のスタイルシートを追加

備考

同様の機能を持つプラグインが他にもあるのでまとめておきます。

プラグイン名使用ライブラリ
geshi.inc.phpGeSHi (PHP)
highlighter.inc.phpPEAR::Text_Highlighter (PHP)
prettify.inc.phpgoogle-code-prettify (JavaScript)
shjs.inc.phpSHJS (JavaScript)
codehighlight.inc.php独自に実装 (PHP)
highlight.inc.phpSyntaxHighlighter (JavaScript)
*1 バージョン 1.1 以降では cache=on のままにしておけば特に問題ないはずです。

(Counter:5420, Today:11, Yesterday:7)
トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   最終更新のRSS