blosxom plugin: ufyu

Markdownが微妙に誤作動したりとか、実はあまり書きやすくはない(読みやすいけど)とかいうことに気づいた一年半ほど前に、Wiki記法に近いけど空行をマークアップのトリガにする形のufyuというフォーマッタを作った。特に小難しいことはしていないので、出来ないことは出来ないし、出来ることは出来るみたいなアレですが、まぁそこそこ使い勝手は良い(自分の好みで作ったから)ので、このblogを書く時に使ってたりします(アップロードするときにHTMLに変換しちゃうけど)。名前の由来はかなり秘密。今考えるとかなりサムイ。

blosxomのプラグインということに(コード的にも)なってますけど、実際に自分ではそういう形では使ってないので動作の保障はしない。プラグインのロードされる順番などパッと思いつく問題がいくつかあるし。僕はrun.plという標準入力からテキストを読み標準出力にHTMLを吐くラッパー・スクリプトで常用している。こちらの方の動作は大体保障。

Lorem Ipsumなのでちょっと読みづらいけど、test.txtのような感じでかなりテキトウに書けちゃうと思う。一般的なメールの書き方で書くことができることに加えて、Wikiっぽい記法ルールが少しあるという形。気を付けるのは空行がとても重要だということで、そこがちょっと自由さに欠けていてアレだと思う。読みやすさは折り返し表示が出来るエディタならそこそこ(私見)。書きやすさの上でも読みやすさの上でも、適当なところ(72文字目とか)で改行されただけ(空行は挟まない)の場合は、良きに計らえちゃったりしたら良いかなとは思う。

唯一に近い設定は$anchor_setsで、これは[[mode:text:param]]という形式で書くリンクを作成するための定義。例として、

my $anchor_sets = {
  a      => '%s',
  google => 'http://www.google.com/search?ie=UTF-8&lr=&q=%es',
  amazon => 'http://www.amazon.co.jp/exec/obidos/ASIN/%s/hail2unet-22/ref=nosim',
  cpan   => 'http://search.cpan.org/search?module=%s',
};

と作ってあるけど、わかりづらい。%sはparamそのままで、%esはparamをURLエスケープするよとかそんな感じ。amazonモードを使いたい場合は、

[[amazon:Hoobastank - Every Man For Himself:B000EXO9YG]]

と書くと、

<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B000EXO9YG/hail2unet-22/ref=nosim">Hoobastank - Every Man For Himself</a>

となる。定義は一応無限なので何でも作れる。ただ、自分のサイトとリンクを張る先のサイトとの文字コードの違いが吸収できないという欠点が(今気づいた)。

typesterさんがPerlのモジュールとしてText::Ufyuとか作ってたりとかも。もう使ってなさそうだけど。単純なループと正規表現で出来ているので、$anchor_setsをJSONかなんかにすればJavaScriptにもすぐ移植できそう。