最終更新: 2008-01-02 (水) 12:31:07
このページをDeliciousに追加 このページをはてなブックマークに追加 このページをlivedoor クリップに追加 このページをYahoo!ブックマークに追加

highlighter.inc.php

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

目次

概要

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

  • 内部で PEAR::Text_Highlighter を利用しています
  • スタイルシートによって表示色などを設定することができます
  • 以下の17種類の言語に対応しています
    • ABAP
    • CPP
    • CSS
    • diff
    • DTD
    • HTML
    • Java
    • JavaScript
    • MySQL
    • Perl
    • PHP
    • Python
    • Ruby
    • SH
    • SQL
    • VBScript
    • XML

サンプル

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. ?>

インストール

highlighter.inc.php プラグインのアーカイブファイルをダウンロードし、 PukiWiki をインストールしてあるディレクトリで展開します。

$ tar xvfz highlighter-1.2.tar.gz

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

$ chmod 777 cache/highlighter

PEAR::Text_Highlighter のページ からアーカイブをダウンロードし、PukiWiki の plugin ディレクトリで展開します。 ディレクトリ名は Text にリネームしておいて下さい。

$ cd plugin
$ tar xvfz Text_Highlighter-0.7.1.tgz
$ mv Text_Highlighter-0.7.1 Text

PEAR がインストールされていない場合は、 plugin/Text/Highlighter.php の以下の行をコメントアウトして下さい。

require_once 'PEAR.php';

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

define('PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK', 0);

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

  • バージョン 1.2 から、キャッシュの保存場所が cache/highlighter ディレクトリに変わりました。 cache ディレクトリに残っている 〜.highlighter というファイルは、使わないので削除して構いません。
  • バージョン 1.2 から、スタイルシートを自動的に読み込むようになりました。 スキンのスタイルシートに @import "./highlighter.css"; のように書く必要はありません。

使い方

プラグインの書式は次のようになっています。

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

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

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

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

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

設定

プラグインの設定

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

PLUGIN_HIGHLIGHTER_LIB_DIR
PEAR::Text_Highlighter がインストールされているディレクトリ
PLUGIN_HIGHLIGHTER_CSS_URI
使用するスタイルシートの URL
PLUGIN_HIGHLIGHTER_CACHE
キャッシュを使用するかどうかのデフォルト値 (true, false のいずれか)
PLUGIN_HIGHLIGHTER_DEFAULT_LANGUAGE
言語名が指定されなかった時のデフォルトの言語名
PLUGIN_HIGHLIGHTER_LINE_NUMBERS
行番号を表示するかどうかのデフォルト値 (true, false のいずれか)

スタイルシートの設定

このサイトで用いているスタイルシートを revulo.css という名前で同梱してあります。 これを参考にスタイルシートを編集したり、 そのまま PLUGIN_HIGHLIGHTER_CSS_URI で指定して使ったりして下さい。

仕様

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

  • ブラウザによっては、コピー&ペーストが正常に行えません
  • start オプションを用いると XHTML 1.1 準拠でなくなります
  • Windows 版 Safari で見ると何も表示されない
    (Mac OS X 版 Safari でどうなのかは知りません。誰か確認して報告して下さい。)

どうやら Safari は、<object> タグで囲まれたテキストを表示してくれないようです。 とりあえずの対処法を挙げておきます。

  • highlighter.inc.php の <object> タグを追加している箇所を、以下のように変更する
    (ただし、XHTML には準拠しなくなります。)
--- highlighter.inc.php.orig
+++ highlighter.inc.php
@@ -166,5 +166,5 @@

         $html = '<pre class="highlighter number ' . htmlspecialchars($options['language'])
-              . '"><code><object>' . $html . '</object></code></pre>';
+              . '">' . $html . '</pre>';
     } else {
         $html = $highlighter->highlight($source);

ダウンロード

  • highlighter-1.2.tar.gz
    • プラグイン本体
    • スタイルシート
      • PEAR::Text_Highlighter 標準のスタイルシート
      • このサイトで用いているスタイルシート

履歴

バージョン日付更新内容
1.22008/01/02・スタイルシートを自動的に読み込むように改良
・キャッシュの保存場所を cache/highlighter ディレクトリに変更
・PEAR::Text_Highlighter 0.7.1 以降を必須に
1.12007/08/04・タイムスタンプを変更しない編集の時もキャッシュが更新されるように改良
・プレビュー時にはキャッシュを使用しないように変更
・行番号表示に PEAR::Text_Highlighter 0.7.0 以降の機能を用いるように変更
1.02007/02/12プラグインの引数でオプションを指定できるように
0.72007/02/04行番号を表示する機能を追加
0.62007/01/25色設定を調整。highlight_string() を利用する機能は別プラグインに分離
0.52007/01/14キャッシュ機能を追加
0.22007/01/01組み込み関数の highlight_string() を利用するオプションを追加
0.12006/10/11暫定公開

備考

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

プラグイン名使用ライブラリ
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:1, Today:1, Yesterday:0)
トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   最終更新のRSS