summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGianni Ceccarelli <dakkar@dechirico.(none)>2009-03-25 15:33:22 +0100
committerGianni Ceccarelli <dakkar@dechirico.(none)>2009-03-25 15:33:22 +0100
commitf9fce9e34a1750038eee3a858cfec018d8cdf6e5 (patch)
tree21d1d0d1d4b51cf7ba400b5519c6be7e416d5b97 /lib
downloadTree-Template-Declare-f9fce9e34a1750038eee3a858cfec018d8cdf6e5.tar.gz
Tree-Template-Declare-f9fce9e34a1750038eee3a858cfec018d8cdf6e5.tar.bz2
Tree-Template-Declare-f9fce9e34a1750038eee3a858cfec018d8cdf6e5.zip
initial stab at tree-building
Diffstat (limited to 'lib')
-rw-r--r--lib/Tree/Template/Declare.pm52
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;