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 )