テンプレート
テンプレートとは言っても、C++のテンプレートとは全く別物です。(期待された方すみません)
出力のテンプレート化です。WEBサイト制作ではお馴染みだと思います。
基本的にテンプレート自体にはロジックを組み込まず、できるだけシンプルに扱えるような構造にしてあります。
テンプレートのルール
三つのルールがあります。
次に出てくる%-文字列-%までを、ひとかたまりのブロックとして扱います。文字列はブロック名とされます。
例: テンプレートファイルの内容(sample.tmpl)
こんにちは、%name%さん!%!erase!%%noremove% 今日は%month%月%day%日です。 %name%さんは幾つになられましたでしょうか。 今日の献立 %+menu+% 内容: %food% %-menu-%
青字の部分が置換用文字列、赤字の部分がテンプレートブロックです。
テンプレート処理の流れ
↓
テンプレートオブジェクトに置換文字列設定(Object.set_param)
テンプレートオブジェクトにブロック挿入(Object.insert_block)
↓
テンプレートオブジェクトから最終出力結果取得(Object.body)
↓
出力
例: 処理例
// テンプレートファイルを読み込み、テンプレートオブジェクトを取得
obj_tmpl = TMPL_Load("./sample.tmpl");
// キーワード毎に置換文字列を設定(この時点ではまだ置換はされない)
obj_tmpl.set_param("name", "kim");
obj_tmpl.set_param("month", "9");
obj_tmpl.set_param("day", "22");
// ブロック内で利用するキーワードを設定し、ブロックを挿入
// ブロックは挿入しない限り、出力結果には含まれない
// また挿入時点で、ブロック内部のキーワードのみ置換される
obj_tmpl.set_param("food", "肉");
obj_tmpl.insert_block("menu");
// ブロックは連続して挿入ができる
obj_tmpl.set_param("food", "野菜");
obj_tmpl.insert_block("menu");
// 出力結果を取得し(この時点で全てのキーワードが再帰的に置換される)表示
// println は表示のために利用
println(obj_tmpl.body());
例: 上記処理後の出力結果
%!erase!%は、値を設定しなかったため削除されている。
こんにちは、kimさん!%noremove% 今日は9月22日です。 kimさんは幾つになられましたでしょうか。 今日の献立 内容: 肉 内容: 野菜
テンプレートブロック
テンプレートブロックは、ネストを許します。(ブロック内部にブロックを持てる)
ネストの数に制限はありません。
例: ブロックのネスト例
今日の献立 %+menu+% %food% %+sub_menu+% %seasoning% %-sub_menu-% %-menu-%
ブロック内部のブロックを指定するには、/(スラッシュ)を区切りとして一番上のブロック名から指定します。
(上記sub_menuを指定したい場合には、insert_block("menu/sub_menu")とする)
サブブロックも、明示して挿入しない限りは、出力結果には含まれません。
