続・はてなダイアリーの書き方 はてダラ+秀丸+GeSHi
またまたわき道にそれて……はてダラの使い道を色々模索してみました。
普段使っているテキストエディタは秀丸なのですが、最近の秀丸ベータ版はアウトラインや一部テキストの折りたたみなど、便利で素敵な機能を提供してくれています。
はてダラを使えば、はてなダイアリーを秀丸で書けるので、こういった便利な機能を活用しない手はありませんよね。
というわけで、色々設定してみたらこのようになりました。
まずは、アウトライン。正規表現で解析ルールを指定できるので、行頭に1つ*(アスタリスク)がある行をレベル1、2つ*がある行をレベル2……としていけば、ちゃんとツリーで表示してくれました。整然とした はてな記法 のおかげですね。
そして「複数行コメント」色分け機能を使えば、文中の複数行にわたるソースコードや引用も色分けできます。さすがにvimやEmacsなどのように、ソースコードを言語にそって色分け……というのはできませんでした。
どうせだからはてな記法も色分けするようにして。
と、やっていったらこんな感じになりました。正規表現の良い勉強になりました。「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」と書いています。
これは、僕が書いたはてダラ用フィルタを使って、ソースコードを色分けする為のものです。色分けエンジンにGeSHi(PHP用のシンタックスマークアップモジュール)を使ったので、フィルタも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のページをご覧ください。メジャーな言語をほとんどカバーしてますね。(^_^;)