my $code_ref = eval $source ;
-die $@ if $@ ;
+print $@ if $@ ;
$self->{compiled_cache}{$template_name} = $code_ref ;
$self->{source_cache}{$template_name} = $source ;
# loop all nested chunks and the text separating them
- while( $template =~ m{$self->{chunk_re}}g ) {
+ while( $template =~ m{$self->{chunk_re}} ) {
# grab the pre-match text and compile its scalars and save all of its parts
push @parts, $self->_compile_scalars(
substr( $template, 0, $-[0] ) ) ;
+# print "OFF: $-[0] $+[0]\n" ;
+# print "PRE: [", substr( $template, 0, $-[0] ), "]\n\n" ;
+# print "CHUNK: [$1] BODY [$2]\n\n" ;
+# print "TRUNC: [", substr( $template, 0, $+[0] ), "]\n\n" ;
+# print "LEFT: [$template]\n\n" ;
+
# compile the nested chunk and save its parts
push @parts, $self->_compile_chunk( $1, $2, "$indent\t\t" ) ;
# chop off the pre-match and the chunk
substr( $template, 0, $+[0], '' ) ;
+
+# print "LEFT2: [$template]\n\n" ;
+# print Dumper \@parts ;
+
}
# compile trailing text for scalars and save all of its parts
$code .= <<CODE ;
${indent}my \$out ;
-${indent}foreach my \$data ( ref \$data eq 'ARRAY' ? \@{\$data} : \$data ) {
+
+${indent}my \@data = \$data ;
+${indent}while( defined( my \$data = shift \@data ) ) {
+
+${indent} if ( ref \$data eq 'ARRAY' ) {
+${indent} push \@data, \@{\$data} ;
+${indent} next ;
+${indent} }
${indent}\$out .= ref \$data ne 'HASH' ? \$data :
CODE
+#${indent}foreach my \$data ( ref \$data eq 'ARRAY' ? \@{\$data} : \$data ) {
+
+
+
$indent .= "\t" ;
# now generate the code to output all the parts of this chunk. they
dump_text( substr( $template, 0, $-[0] ) ),
"\$data->{$1}"
) ;
+
+# truncate the matched text so the next match starts at begining of string
+
substr( $template, 0, $+[0], '' ) ;
}
$rendered =~ s{$self->{chunk_re}}
{
# print "CHUNK $1\nBODY\n----\n<$2>\n\n------\n" ;
- print "CHUNK $1\nBODY\n----\n<$2>\n\n------\n" ;
- print "pre CHUNK [$`]\n" ;
+# print "CHUNK $1\nBODY\n----\n<$2>\n\n------\n" ;
+# print "pre CHUNK [$`]\n" ;
${ $self->_render_chunk( \"$2", $href->{$1} ) }
}gex ;