Async-Template
view release on metacpan or search on metacpan
lib/Async/Template/Directive.pm view on Meta::CPAN
\$context->event_push( {
event => \$iteration,
} );
\$context->process_enter(\$file, $inclargs, 'localize me');
} else {
my \$event_top = \$context->event_top();
my \$pop_output = \$event_top->{push_output};
\${\$pop_output} .= \${\$capture_output};
\$context->set_event_output( \$pop_output );
\$out = \$pop_output;
$tail
}
___EOF
$iteration = $self->event_proc( $iteration );
my $capture = << "___EOF";
# WRAPPER CONTENT CAPTURE
my \$push_out = \$context->event_output;
my \$event_top = \$context->event_top();
\$event_top->{push_output} = \$push_out;
my \$capture_out = '';
\$context->set_event_output( \\\$capture_out );
\$out = \\\$capture_out;
\$context->event_push( {
resvar => undef,
event => \$iteration,
} );
$block
___EOF
return << "___EOF";
my \$wrapper_files = $name;
my \$iteration; \$iteration = $iteration;
$capture
___EOF
}
#------------------------------------------------------------------------
# event_while($expr, $block, $tail, $label) [% WHILE x < 10 %]
# ...
# [% END %]
#------------------------------------------------------------------------
sub event_while {
my ($self, $expr, $block, $tail, $label) = @_;
# $block = pad($block, 2) if $PRETTY;
$label ||= 'LOOP';
my $while_max = $Template::Directive::WHILE_MAX;
$block = << "EOF";
if( --\$context->event_top()->{failsafe} && ($expr) ) {
\$context->event_push( {
resvar => undef,
event => \$event,
} );
$block
} else {
die "WHILE loop terminated (> $while_max iterations)\\n"
unless \$context->event_top()->{failsafe};
$tail
}
EOF
$block = $self->event_proc($block);
return << "EOF";
# EVENT $label DECLARE
my \$event;
\$event =
$block
;
# EVENT $label STARTUP
\$context->event_top()->{failsafe} = $while_max;
\$event->( \$context );
return '';
EOF
}
#------------------------------------------------------------------------
# event_for($target, $list, $args, $block, $tail)
# [% FOREACH x = [ foo bar ] %]
# ...
# [% END %]
#------------------------------------------------------------------------
sub event_for {
my ($self, $target, $list, $args, $block, $tail, $label) = @_;
# $args is not used in original code
$label ||= 'LOOP';
# vars: value, list, getnext, error, oldloop
my ($loop_save, $loop_set, $loop_restore, $setiter);
if ($target) {
$loop_save = 'eval { $evtop->{oldloop} = ' . $self->ident(["'loop'"]) . ' }';
$loop_set = "\$stash->{'$target'} = \$evtop->{value}";
$loop_restore = "\$stash->set('loop', \$evtop->{oldloop})";
}
else {
$loop_save = '$stash = $context->localise()';
# $loop_set = "\$stash->set('import', \$evtop->{value}) "
# . "if ref \$value eq 'HASH'";
$loop_set = "\$stash->get(['import', [\$evtop->{value}]]) "
. "if ref \$evtop->{value} eq 'HASH'";
$loop_restore = '$stash = $context->delocalise()';
}
# $block = pad($block, 3) if $PRETTY;
$block = << "EOF";
my \$evtop = \$context->event_top();
if( \$evtop->{getnext} ) {
(\$evtop->{value}, \$evtop->{error}) =
\$evtop->{list}->get_next();
} else {
\$evtop->{getnext} = 1;
( run in 0.508 second using v1.01-cache-2.11-cpan-96521ef73a4 )