summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGianni Ceccarelli <dakkar@dechirico.(none)>2009-03-26 15:38:48 +0100
committerGianni Ceccarelli <dakkar@dechirico.(none)>2009-03-26 15:38:51 +0100
commit729bbc7e7d1ae6b4f6f6dc222469b84bb8a94c0f (patch)
tree354259f13034ff26978057d4b89b88bc7e06bcad
parentmakefile (diff)
downloadTree-Template-Declare-729bbc7e7d1ae6b4f6f6dc222469b84bb8a94c0f.tar.gz
Tree-Template-Declare-729bbc7e7d1ae6b4f6f6dc222469b84bb8a94c0f.tar.bz2
Tree-Template-Declare-729bbc7e7d1ae6b4f6f6dc222469b84bb8a94c0f.zip
non-working first attempt
-rw-r--r--lib/Tree/Template/Declare.pm46
-rw-r--r--t/01-basic.t2
2 files changed, 40 insertions, 8 deletions
diff --git a/lib/Tree/Template/Declare.pm b/lib/Tree/Template/Declare.pm
index 8c33b52..4e060d4 100644
--- a/lib/Tree/Template/Declare.pm
+++ b/lib/Tree/Template/Declare.pm
@@ -3,7 +3,8 @@ use strict;
use warnings;
use Sub::Exporter;
use Devel::Caller 'caller_args';
-use Tree::DAG_Node::XPath;
+use Carp;
+use Data::Dumper;
our $VERSION='0.1';
@@ -11,9 +12,41 @@ Sub::Exporter::setup_exporter({
exports => [qw(tree node name attribs)],
groups => {
default => [qw(tree node name attribs)],
- }
+ builder => \&_set_builder_for_package,
+ },
});
+{
+my %builder_for;
+sub _set_builder_for_package {
+ my ($class,$name,$args)=@_;
+
+ my $builder_pkg=$args->{import_args}->[0]->[0];
+
+ if (!ref($builder_pkg)) {
+ if ($builder_pkg=~m{\A \+(\w+) \z}smx) {
+ $builder_pkg="Tree::Template::Declare::$1";
+ }
+ eval "require $builder_pkg";
+ croak "Can't load $builder_pkg: $@" if $@;
+ }
+ $builder_for{$args->{into}}=$builder_pkg;
+
+ return 1;
+}
+
+sub builder_for {
+ my ($pkg)=@_;
+
+ if (exists $builder_for{$pkg}) {
+ return $builder_for{$pkg};
+ }
+ else {
+ return $pkg;
+ }
+}
+}
+
our $current_node;
sub tree(&) {
@@ -24,7 +57,7 @@ sub tree(&) {
}
sub node(&) {
- my $node=Tree::DAG_Node::XPath->new();
+ my $node=builder_for(caller)->new_node();
#warn "new node\n";
{
local $current_node=$node;
@@ -32,22 +65,21 @@ sub node(&) {
}
if ($current_node) {
#warn "adding to parent (@{[ $current_node->name ]})\n";
- $current_node->add_daughter($node);
+ builder_for(caller)->add_child_node($current_node,$node);
}
return $node;
}
sub name($) {
#warn "setting name ($_[0])\n";
- $current_node->name($_[0]);
+ builder_for(caller)->set_node_name($current_node,$_[0]);
}
sub attribs {
my %attrs=@_;
#warn "setting attributes\n";
- $current_node->attributes(\%attrs);
+ builder_for(caller)->set_node_attributes($current_node,\%attrs);
return;
}
-
1;
diff --git a/t/01-basic.t b/t/01-basic.t
index a063a2f..006fa6a 100644
--- a/t/01-basic.t
+++ b/t/01-basic.t
@@ -2,7 +2,7 @@
use Test::Most 'no_plan','die';
use strict;
use warnings;
-use Tree::Template::Declare;
+use Tree::Template::Declare '+DAG_Node';
use Data::Dumper;
my $tree=tree {