X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FTemplate%2FSimple.pm;h=4dd68a4ad7524805fa6710b8999d15930f0837ce;hb=ca30cbfe69d42d85468bd8b05ee5753cda5a009e;hp=1b603d0d0e1bcffe847bd4f0c6afeea6336a0d31;hpb=060b866c8fcd6f0db48be9db01e7e9137ca860cc;p=urisagit%2FTemplate-Simple.git diff --git a/lib/Template/Simple.pm b/lib/Template/Simple.pm index 1b603d0..4dd68a4 100644 --- a/lib/Template/Simple.pm +++ b/lib/Template/Simple.pm @@ -108,28 +108,34 @@ sub compile { my $code_body = $self->_compile_chunk( '', "${$tmpl_ref}", "\t" ) ; - $self->{source} = <{source_cache}{$template_name} = $self->{source} ; - print $self->{source} ; +#print $source ; - my $code_ref = eval $self->{source} ; + my $code_ref = eval $source ; -die $@ if $@ ; +print $@ if $@ ; $self->{compiled_cache}{$template_name} = $code_ref ; + $self->{source_cache}{$template_name} = $source ; +} + +sub get_source { + + my( $self, $template_name ) = @_ ; + + return $self->{source_cache}{$template_name} ; } @@ -139,26 +145,34 @@ sub _compile_chunk { return '' unless length $template ; - $indent .= "\t" ; - my @parts ; # 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-chunk text and compile it for scalars and save all of its parts +# 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 ) ; + push @parts, $self->_compile_chunk( $1, $2, "$indent\t\t" ) ; -# chop off the pre-chunk and chunk +# 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 @@ -169,24 +183,57 @@ sub _compile_chunk { # start it with a do{} block open - my $code = "do {\n$indent" ; + my $code = <{$chunk_name} ; + $code .= <{$chunk_name} ; CODE +# add the loop code to handle a scalar or an array + + $code .= <{$1}" ) ; + +# truncate the matched text so the next match starts at begining of string + substr( $template, 0, $+[0], '' ) ; } @@ -241,22 +291,25 @@ sub render { my( $self, $template_name, $data ) = @_ ; -# render with cached code if we precompiled this template + my $tmpl_ref = ref $template_name eq 'SCALAR' ? $template_name : '' ; - if ( my $compiled = $self->{compiled_cache}{$template_name} ) { + unless( $tmpl_ref ) { - return $compiled->($data) ; - } +# render with cached code and return if we precompiled this template + + if ( my $compiled = $self->{compiled_cache}{$template_name} ) { -# TODO: look for template by name + return $compiled->($data) ; + } - my $template = eval{ $self->_get_template($1) } ; +# not compiled so get this template by name -print "GOT [$template]\n" ; + $tmpl_ref ||= eval{ $self->_get_template($template_name) } ; -# force the template into a ref +# we couldn't find this template name so assume it is the template text - my $tmpl_ref = ref $template eq 'SCALAR' ? $template : \$template ; + $tmpl_ref ||= \$template_name ; + } my $rendered = $self->_render_includes( $tmpl_ref ) ; @@ -337,8 +390,8 @@ sub _render_hash { $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 ;