2006年 09月 11日

tt

blosxom のテンプレートを TT に置き換えるやつをいろいろ試してる。一つのファイルにしてしまって [% FOREACH entry IN entries %] みたいにしたい。
ので、TT の process は一括して last に行うことになる。
でもって問題なのは、story テンプレートで使われることを想定しているプラグイン変数なんですよね。これって次々と変わっていくから、最後に一括して処理したいというこの場合、随時全て保存しておかなければならない。
ここで、プラグイン変数を全て保存しておこうとすると、プラグイン変数の名前を全て知っていないといけない。けど、どうやって知ればいいのかわからない。簡単にやる方法あるんだろうか。


ということで、回り道をし、発想を逆転させて、テンプレートパースを先にやる。
use Template::Parser して parse($text) すると Template::Document オブジェクトが帰ってくる。こいつの BLOCK にはコード化されたテンプレが入っているので、$stash->get ってなっている部分を正規表現 (!) で抜いてくる。
んでごにょると、テンプレートで使われているであろう変数名が余計なものも全部とれるので、この変数名を story テンプレートを通るたびに全てのプラグインからとってくる。かなり無駄だけど!!


http://mizzy.org/program/blosxomTT.html が似たような方法だったけれど、どうも Data::Dumper してみてみると、ちょっと変に連結されてしまったりするので、まるパクできなかった。