続・はてなダイアリーの書き方 はてダラ+秀丸+GeSHi

またまたわき道にそれて……はてダラの使い道を色々模索してみました。
普段使っているテキストエディタ秀丸なのですが、最近の秀丸ベータ版はアウトラインや一部テキストの折りたたみなど、便利で素敵な機能を提供してくれています。
はてダラを使えば、はてなダイアリー秀丸で書けるので、こういった便利な機能を活用しない手はありませんよね。
というわけで、色々設定してみたらこのようになりました。

まずは、アウトライン。正規表現で解析ルールを指定できるので、行頭に1つ*(アスタリスク)がある行をレベル1、2つ*がある行をレベル2……としていけば、ちゃんとツリーで表示してくれました。整然とした はてな記法 のおかげですね。
そして「複数行コメント」色分け機能を使えば、文中の複数行にわたるソースコードや引用も色分けできます。さすがにvimEmacsなどのように、ソースコードを言語にそって色分け……というのはできませんでした。
どうせだからはてな記法も色分けするようにして。
と、やっていったらこんな感じになりました。正規表現の良い勉強になりました。「hw.hilight」などの名前を付けて保存して、秀丸(6.00β20)のファイルタイプ別設定画面で読み込みます。(はてダラ用の設定を作っておくといいかも)

347,(?<![\(\)])\(\(.+?\)\)(?![\(\)])
59,(([abdfir]:)?id|g|question|idea|graph|map|isbn|asin|jan|ean):[a-z0-9:]+
153,</?[a-z]+.*?>
217,\[\[[^\[\]]+?\]\]
217,\[([^\[\])]+?:[^\[\]]+?|)\]
411,^\|.+\|$
283,^\++
157,^\*\*\*
93,^\*\*
29,^\*
91,^=====?$
283,^:.+?:
283,^-+
/<HilightMulti>
/0004,00000002,00,00,00010001,"^>\\|$",00010001,"^\\|<$"
/0019,00000002,00,00,00010001,"^>\\|\\|",00010001,"^\\|\\|<$"
/0007,00000002,00,00,00010001,"^>>$",00010001,"^<<$"
/0003,00000002,00,00,00000000,"<!--",00000000,"-->"
/<TreeWord>
/0000,0002,0000,00000000,00010511,"(?<=^\\*)[^\\*]+$",""
/0001,0002,0000,00000000,00010511,"(?<=^\\*\\*)[^\\*]+$",""
/0002,0002,0000,00000000,00010511,"(?<=^\\*\\*\\*)[^\\*]+$",""

読み込んだ後は、[表示とカラー]→[複数行コメント] で「ユーザー定義」にチェックを入れてくださいね。強調定義だけですので、色の設定はお好きにどうぞ。
上のスクリーンショットを見て気づいた方もいらっしゃるかもしれませんが、本来のはてな記法と食い違う部分があります。それは、ソースコードを書くのに使っている「>||」「||<」という記法で、本来は「>||」だけの行であるべき所を「>||perl」と書いています。
これは、僕が書いたはてダラ用フィルタを使って、ソースコードを色分けする為のものです。色分けエンジンにGeSHiPHP用のシンタックスマークアップモジュール)を使ったので、フィルタもPHPで書きました。本当はPerlで書いてみたかったのですが、まだレベル不足のようです……。(-_-;)
フィルタはこんな感じです(汚くてすいません)。実行にはPHP(パスの通ったフォルダにphp.exe)+GeSHiが必要です。

<?php
// hwcolor.php
 
// GeSHi ライブラリをインクルード(パスは適切なものに設定してください)
include_once "geshi/geshi.php";
 
// パラメータチェック
if ($argc != 2) {
	echo "Usage: php hwcolor.php <FileName>\n";
	echo "Example: php hwcolor.php 2006-04-28.txt\n";
	exit();
}
 
// 読み込み
$text = file_get_contents($argv[1]);
if (!$text) exit();
 
// GeSHi オブジェクト作成(使いまわすのでソース・言語指定なし)
$geshi =& new GeSHi("", "");
// 設定
$geshi->set_header_type(GESHI_HEADER_PRE); // <pre>を使う
$geshi->enable_classes();                  // スタイルシートで色分け
$geshi->set_encoding("UTF-8");             // エンコーディング
 
$pattern = '/>\|\|([a-zA-Z_-]+)\r\n(.+?)\r\n\|\|</s';
 
// 置換用コールバック関数
function color_source_block($matches) {
	global $geshi;
	$geshi->set_language($matches[1]);
	$geshi->set_source($matches[2]);
	$geshi->set_overall_class("sourcecode");
 
	return "><code class=\"$matches[1]\">\n"
	     . $geshi->parse_code()
	     . "\n</code><";
}
 
// 処理
echo preg_replace_callback($pattern, "color_source_block", $text);
?>

適当に改造・設定して「hwcolor.php」などで保存しておき、はてダラの設定ファイル config.txt でアップロードの際にフィルタを通すように設定をします。(以下は D:\dev\php\hwcolor.php として保存した場合)

filter:php D:\dev\php\hwcolor.php %s

使い方は簡単で、日記の文中に書く「>||」の後ろに言語名を付けるだけで、その言語で色分けしてくれます。(上のPHPスクリプトは「>||php」で色分けしてます)
対応している言語はGeSHiのページをご覧ください。メジャーな言語をほとんどカバーしてますね。(^_^;)