From 7394fbd15c11f2fd4140d949b13d9ee1f631b1b4 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Thu, 4 Oct 2012 11:51:22 -0500 Subject: move the extra end tag data to the beginning to make parsing easier --- lib/Text/Xslate/Syntax/Handlebars.pm | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/lib/Text/Xslate/Syntax/Handlebars.pm b/lib/Text/Xslate/Syntax/Handlebars.pm index 3c5af87..216e7c2 100644 --- a/lib/Text/Xslate/Syntax/Handlebars.pm +++ b/lib/Text/Xslate/Syntax/Handlebars.pm @@ -164,16 +164,19 @@ sub preprocess { } elsif ($type eq 'code') { my $extra = ''; - if (@$chunk > 2) { + if ($content =~ s{^/}{}) { $chunk->[2] =~ s/(["\\])/\\$1/g; $chunk->[3][0] =~ s/(["\\])/\\$1/g; $chunk->[3][1] =~ s/(["\\])/\\$1/g; - $extra = ' "' + $extra = '"' . join('" "', $chunk->[2], @{ $chunk->[3] }) . '"'; + $code .= qq{/$extra $content;\n}; + } + else { + $code .= qq{$content;\n}; } - $code .= qq{$content$extra;\n}; } elsif ($type eq 'raw_code') { $code .= qq{mark_raw $content;\n}; @@ -279,9 +282,15 @@ sub std_block { my $body = $self->statements; $self->advance('/'); - # 1 so that i pick up names and field accesses, but not literals - # closing tags are followed by a literal string containing their raw text - my $closing_name = $self->expression(1); + + my $raw_text = $self->token; + $self->advance; + my $open_tag = $self->token; + $self->advance; + my $close_tag = $self->token; + $self->advance; + + my $closing_name = $self->expression(0); if ($closing_name->arity eq 'if') { $closing_name = $closing_name->third; } @@ -293,13 +302,6 @@ sub std_block { $self->_unexpected('/' . $name->id, $self->token); } - my $raw_text = $self->token; - $self->advance; - my $open_tag = $self->token; - $self->advance; - my $close_tag = $self->token; - $self->advance; - $self->advance(';'); my $iterations = $inverted -- cgit v1.2.3-54-g00ecf