簡易テンプレートエンジンの仕様を考えるメモ

genre:memo,programming,perl


Perlで簡易的な、でも実用に耐えるHTML用のテンプレートエンジンを作るための仕様を適当に考えてみる。



●Parserエンジン仕様

# パーサーオブジェクト生成

$p = new TinyHTMLParser();



#テンプレートと変数を渡してParseする。

#変数($vars)は参照の形で渡す。

#テンプレート($template)はファイル名かfopenで開いたファイルのグラブか生テキストデータ。

#戻り値はテンプレートに変数を適用した結果。

$html = TinyHTMLParser()%vars, $template);



・変数は%varsの要素として渡す。スカラーと配列を渡せる



●テンプレート仕様

・「$変数名」は引数に与えた変数(スカラー)で展開される

・「$$」は「$」に展開される

・「$変数名」がハッシュへの参照の場合、「$変数名->要素」で「要素」という名前を持つ要素にアクセスできる。ただし、「$変数名->要素->要素」という表現は禁止。

・「<!–foreach $var in @配列名–>」?「<!–end foreach–>」でループ。$varに@配列名の要素を次々と代入して繰り返す

・「<!–if $var–>」?「<!–else–>」?「<!–end if–>」でif?else?式条件分岐。$varがexistならelseまでを適用、not existならelse以降を適用



以上。TemplateToolkitのサブセット版みたいな感じだね。原則として、内部データを直でテンプレートに適用するのではなく、表示用のデータに変換してからテンプレートに適用することを想定。

分岐を「<!– –>」で囲むのは、HTMLとして見たときに解釈しやすくするため。開始/終了タグは変更可能。