summaryrefslogtreecommitdiffstats
path: root/lib/Text/Xslate/Syntax/Handlebars.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Text/Xslate/Syntax/Handlebars.pm')
-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