PHPコードを行番号付きで色分け表示するプラグイン
PHPコードを行番号付きで色分け表示するプラグイン@Chameleon Cyberさん にトラックバックしています。
「WordPress のプラグインを作ろう」というドキュメントを書こうとしていたのですが、、困ったことが一点。
ソースをきれいにサイトに表示するにはどうすればいいか。
やっぱり色分けしたほうがいいよなーとか、行番号もあった方がいいとか、別画面起動はいやだなーなどと思っていたら、素晴らしいプラグインが登場!!
PHP Highligh String Ver.0.1.1
しばらく、Syntax Highlighter Enscriptプラグインを愛用していたのですが、これは行番号をつけてくれません。
そこで、Syntax Highlighter Enscriptと(たぶん)互換で、さらに行番号を出力してくれるプラグインを作ってみました。ただし、PHPコード専用です。
完璧です。 行番号付でかつ、コピーアンドペーストで行番号がくっついてきません。
文書中でコードの部分解説もしたかったので、行番号の開始行数を指定できるようにアドホックコードを追加してみました。
82 行目からの analyze_callback 関数に number 属性を取得できる処理を追加。
function analyze_callback($match) {
$attr = $match[1];
$code = $match[2];
$code = str_replace('\"', '"', $code);
$re_num = '/\s+number\s*=\s*["\']?([^"\']+)["\']?/xi';
if(preg_match($re_num, $attr, $number)) {
$start_number = $number[1];
} else {
$start_number = 1;
}
$re_lang = '/\s+lang\s*=\s*["\']?([^"\']+)["\']?/xi';
$num = preg_match($re_lang, $attr, $lang);
if ($num) {
$code = htmlunspecialchars($code);
$code = set_color($code, $lang[1], $start_number);
$attr = preg_replace($re_lang, '', $attr);
}
return "<pre$attr>$code</pre>";
}
31行目、set_color 関数を number をもらうようにして、
function set_color($code,$lang, $start_number) {
54 行目くらいで 最初の <? php ? と ?> を削除して、
array_shift($temp_array);
array_pop($temp_array);
56行目の ol タグに start 属性 で 開始行を指定しています。
$code = "<div class=\"code\"><ol start=\"$start_number\">". @join('', $temp_array) . "\n</ol></div>";
開始行については IE は 100以上指定できないようです。でも分かるから OK ということにしましょう。 🙂
上のソース表示は、早速 PHP Highligh String を使わせて頂いているものです。 いやあ、素晴らしい。
chameleon さんどうもありがとうございました。 感謝です。
追記。
(あ、\ マークが消えてしまっている.. あれ、どうすればいいんだ。。 明日ちょっとみてみます)
↑わかりました、正規表現文字がソース中にあると削除されてしまうようなので、事前にクオートすると良いようです!。
$code = highlight_string( $code, true );
$code = preg_quote($code, '/');
これで OK そうです。 🙂
PHP Highlight String Ver.0.1.2 で修正していただきました!。 しかも上の直し方は間違いです。。orz どうもありがとうございました!。
From: chameleon - 2005/7/25 Monday (Comment)
使ってくださってありがとうございます。
ひろまささんの「WordPress Search Word Highlight plugin for Multibyte version 1.0」、しっかり愛用しています。もう、「光り物」には目がありませんから。
記事見て、なるほどです。「途中からコードを見せたい」ことの方が多いと思いますから、これはうれしいです。(ちなみに、アップするファイル思いっきり間違えていて、消し忘れてダブっているコードとか残ったままでした。ごめんなさいです。今、恥じ入っています。)
これからもよろしくお願いします。
From: ひろまさ - 2005/7/25 Monday (Comment)
こちらこそどうもありがとうございました。内容がジャストミートでしたので乱舞してすぐ試させて頂きました。
ソース中に \ マークがあると消えてしまうという現象があったのですが、「$code = preg_quote($code, ‘/’);」で正規表現文字をクオートするとイイみたいです。良ければ、取り込んでやってください。
Highlight つながりになりました。 ぼくもめがないです。 🙂
こちらこそ今後ともよろしくお願いいたします。
From: chameleon - 2005/7/25 Monday (Comment)
おお、バグフィックスまでしていただいて重ね重ねありがとうございます。
気になるところが他にもいくつかありますので、ぼちぼち修正させていただきます。
さらに厚かましいお願いですが、ひろまささんの途中行番号表示化機能も、ご許可がいただけるのでしたら、取り込まさせていただきたいのですがいかがでしょうか。もちろん、ソース中にひろまささんのお知恵を思いっきりお借りした旨も、記述させていただきます。
よろしけれご返事下さい。では、また。
From: ひろまさ - 2005/7/25 Monday (Comment)
いえいえ、全然です。 🙂
>途中行番号表示化機能\r
おおお、こちらこそ是非是非お願いいたします。本家採用はとても嬉しいです。 ちなみに、ソースは書き直してしまってください。 ぼくのコードは変なの多いので。。 :-)
試験等ありましたらお手伝いいたします!