/usr/local/CPAN/hub-standard/Hub/Parse/DataInjector.pm
package Hub::Parse::DataInjector;
use strict;
use Hub qw/:lib/;
push our @ISA, qw(Hub::Parse::Parser);
our %EVALUATORS;
sub get_evaluator {
my $evaluator = defined $EVALUATORS{$_[1]}
? $EVALUATORS{$_[1]}
: &Hub::Parse::Parser::get_evaluator(@_);
# Avoid undefined parser directive warnings
return defined $evaluator ? $evaluator : sub {};
}
$EVALUATORS{'define'} = sub {
my ($self, $params, $result) = @_;
# return if $$self{'priority'} eq 'content';
my ($outer_str, $fields, $pos, $text, $parents, $valdata) = @$params;
my ($opts, %directive) = Hub::opts($fields);
my $varname = $directive{'define'};
my ($end_p, $block) =
$self->_get_block($$pos + length($outer_str), $text, 'define');
$$result{'width'} = $end_p - $$pos;
my $data = defined $varname
? Hub::getv($self->{'data'}, $varname)
: $self->{'data'};
if (defined $data) {
my $type = ref($data)
? isa($data, 'HASH')
? 'HASH'
: isa($data, 'ARRAY')
? 'ARRAY'
: ref($data)
: 'TEXT';
$$result{'value'} = "$$self{'var_begin'}define";
$$result{'value'} .= " '$varname' as '$type'" if (defined $varname);
$$result{'value'} .= "$$self{'var_end'}\n";
$$result{'value'} .= ref($data) ? Hub::hprint($data) : $data;
$$result{'value'} .= $self->_end_define();
} else {
$$result{'value'} = '';
}
$$result{'goto'} = $$pos + length($$result{'value'});
};
$EVALUATORS{'end'} = sub {
my ($self, $params, $result) = @_;
# return if $$self{'priority'} eq 'content';
my ($outer_str, $fields, $pos, $text, $parents, $valdata) = @$params;
my ($opts, %directive) = Hub::opts($fields);
$result->{'value'} = '' if $directive{'end'} eq 'define';
};
sub get_value {
return undef;
}
sub populate {
my ($self,$opts) = Hub::objopts(\@_);
$self->{'data'} = shift;
$self->SUPER::populate();
}#populate
sub _end_define {
return "$_[0]->{'var_begin'}end 'define'$_[0]->{'var_end'}";
}
1;