summaryrefslogtreecommitdiff
path: root/lib/Tree/Template/Declare.pm
blob: 372781bdaf9d902766176ca401255a1620b88a31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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;