- Text::Xslate::AST::Walker - Filter Nodes in the AST made by Text::Xslate - metacpan.org
- ae real / Text-Xslate-AST-Walker-0.01 - search.cpan.org
これはなに?
Text::Xslate::Parser が返す AST を文字通り「歩きまわる」ためのモジュールです。
0.01 現在では条件に一致するノードのみを返すメソッド (#search_descendants
) が実装されています。
使い方
SYNOPSIS より:
use Text::Xslate::Parser; use Text::Xslate::AST::Walker; my $template = <<EOF; : my $first_name = 'Hanae'; Hello, <: $last_name :>, <: $first_name :>. EOF my $parser = Text::Xslate::Parser->new; my $nodes = $parser->parse($template); my $tw = Text::Xslate::AST::Walker->new(nodes => $nodes); my $undeclared_vars = $tw->search_descendants(sub { my ($node) = @_; ($node->arity eq 'variable') && !$node->is_defined && !$node->is_reserved; }); printf "Undeclared var: %s @ Line %d\n", $_->id, $_->line for @$undeclared_vars;
簡単ですね。
#search_descendants
に渡すサブルーチンには Text::Xslate::Symbol
のインスタンスが渡されます。
上記例のように未定義の変数を列挙することなどができます。
Text::Xslate は便利
Text::Xslate は高速なテンプレートエンジンとして既に有名で実績がありますが、一方で構文を選ぶことのできる柔軟性も持ち合わせています。
構文それぞれについて Parser が用意されており、抽象構文木を得ることができます。
機能追加、バグ報告
GitHub で開発しているので Issues or Pull Request をお待ちしております。
どうぞご利用ください
cpanm Text::Xslate::AST::Walker