Template::Parser
Template::Parserでは、'[%'('%]')をデフォルトデリミタ(※)としてtt2ファイルをparseします。
parseの方針は、
- ファイル先頭もしくは'%]'から、次の'[%'までのテキストを $preとして保存。(プレシーディング部)
- '[%'から'%]'の内部のテキストを $dirとして保存。(ディレクティブ部)
のようです。
こうして順次parseしていき、区切られたもの毎にごにょごにょするわけです。
ごにょごにょ
区切られたものには、$preと$dirがあります。
次は、$dirを tokenize_directiveメソッドを使って、ディレクティブトークンを作成します。
[ ディレクティブ部, ($dir) テンプレート内でディレクティブが存在した行数の番号, ( 12-13 ) tokenise_directive($dir), ]
という配列リファレンスが@tokens(ディレクティブトークン)にpushされていきます。
sub tokenise_directive
[% html_str | html | html_line_break %] $var1 = [ 'IDENT', 'html_str', 'FILTER', '|', 'IDENT', 'html', 'FILTER', '|', 'IDENT', 'html_line_break' ];
[% test_msg1 = 'test1' test_msg2 = 'test2' %] $var1 = [ 'IDENT', 'test_msg1', 'ASSIGN', '=', 'LITERAL', '\'test1\'', 'IDENT', 'test_msg2', 'ASSIGN', '=', 'LITERAL', '\'test2\'', ];
(※)デリミタとして使えるものは、
Template::Parser - LALR(1) parser for compiling template documents - metacpan.org
のTAG_STYLEを参照。
また、TAGSディレクティブでいつでも指定可能です。
(※)ディレクティブのparseデリミタ(デフォルトは'|')に関しては、
http://search.cpan.org/src/ABW/Template-Toolkit-2.15/lib/Template/Parser.pmの
sub tokenise_directive メソッドを参照。