diff options
Diffstat (limited to 'lib/Tree/Template')
-rw-r--r-- | lib/Tree/Template/Declare.pm | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/lib/Tree/Template/Declare.pm b/lib/Tree/Template/Declare.pm new file mode 100644 index 0000000..372781b --- /dev/null +++ b/lib/Tree/Template/Declare.pm @@ -0,0 +1,52 @@ +package Tree::Template::Declare; +use strict; +use warnings; +use Sub::Exporter; +use Tree::DAG_Node::XPath; + +our $VERSION='0.1'; + +Sub::Exporter::setup_exporter({ + exports => [qw(tree node name attribs)], + groups => { + default => [qw(tree node name attribs)], + } +}); + +our $current_node; + +sub tree(&) { + local $current_node=undef; + my ($ret)=$_[0]->(); + #warn "returning @{[ $ret->name ]}\n"; + return $ret; +} + +sub node(&) { + my $node=Tree::DAG_Node::XPath->new(); + #warn "new node\n"; + { + local $current_node=$node; + $_[0]->(); + } + if ($current_node) { + #warn "adding to parent (@{[ $current_node->name ]})\n"; + $current_node->add_daughter($node); + } + return $node; +} + +sub name($) { + #warn "setting name ($_[0])\n"; + $current_node->name($_[0]); +} + +sub attribs { + my %attrs=@_; + #warn "setting attributes\n"; + $current_node->attributes(\%attrs); + return; +} + + +1; |