簡易テンプレートエンジンの仕様を考えるメモ
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として見たときに解釈しやすくするため。開始/終了タグは変更可能。