package Tree::Template::Declare; use strict; use warnings; use Sub::Exporter; use Devel::Caller 'caller_args'; 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]->(caller_args(1)); #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]->(caller_args(1)); } 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;