summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2012-10-04 11:51:22 -0500
committerJesse Luehrs <doy@tozt.net>2012-10-04 11:51:22 -0500
commit7394fbd15c11f2fd4140d949b13d9ee1f631b1b4 (patch)
tree62b89da35a051e2cc2f91229f335458b26eab51e
parentf090ae8a745f8d17016033ae452e6383ba63a973 (diff)
downloadtext-handlebars-7394fbd15c11f2fd4140d949b13d9ee1f631b1b4.tar.gz
text-handlebars-7394fbd15c11f2fd4140d949b13d9ee1f631b1b4.zip
move the extra end tag data to the beginning to make parsing easier
-rw-r--r--lib/Text/Xslate/Syntax/Handlebars.pm28
1 files 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