summaryrefslogtreecommitdiff
path: root/lib/Tree/Template/Declare/DAG_Node.pm
blob: f6839c6c62e0779175ff98d68493d1481dba3522 (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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package Tree::Template::Declare::DAG_Node; 
 
use strict;
use warnings;
use Carp;
 
sub new {
    my ($class,$node_class)=@_;
    $node_class||='Tree::DAG_Node';
 
    eval "require $node_class" or ## no critic (ProhibitStringyEval) 
        croak "Can't load $node_class$@"## no critic (ProhibitPunctuationVars) 
 
    return bless {nc=>$node_class},$class;
}
 
sub new_tree {
    my ($self)=@_;
 
    return bless [],'Tree::Template::Declare::DAG_Node::Tree';
}
 
sub finalize_tree {
    my ($self,$tree)=@_;
 
    return $tree->[0];
}
 
sub new_node {
    my ($self)=@_;
 
    return $self->{nc}->new();
}
 
sub add_child_node {
    my ($self,$parent,$child)=@_;
 
    if ($parent->isa('Tree::Template::Declare::DAG_Node::Tree')) {
        push @{$parent},$child;
        return $parent;
    }
    return $parent->add_daughter($child);
}
 
sub set_node_name {
    my ($self,$node,$name)=@_;
 
    return $node->name($name);
}
 
sub set_node_attributes {
    my ($self,$node,$attrs)=@_;
 
    my %all_attributes=(
        %{$node->attributes},
        %{$attrs},
    );
 
    return $node->attributes(\%all_attributes);
}
 
1;
__END__
 
# ABSTRACT: adaptor for Tree::DAG_Node 
 
=head1 SYNOPSIS
 
See L<Tree::Template::Declare>.
 
=head1 SPECIFICITIES
 
This module will build trees using L<Tree::DAG_Node>. You can make it
use another module (assuming it has the same interface, for example
L<Tree::DAG_Node::XPath>) by passing the class name to the C<new>
method.
 
 use Tree::Template::Declare builder => '+DAG_Node'; # default
 
 use Tree::Template::Declare builder =>
     Tree::Template::Declare::DAG_Node->new('Tree::DAG_Node::XPath');
     # custom class
 
=for Pod::Coverage add_child_node finalize_tree new new_node new_tree set_node_attributes set_node_name
 
=cut