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";
croak "Can't load $node_class: $@" if $@;
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)=@_;
return $node->attributes({%{$node->attributes},%$attrs});
}
1;