summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Changes2
-rw-r--r--lib/Text/Xslate/Syntax/Handlebars.pm7
-rw-r--r--t/bugs.t34
3 files changed, 42 insertions, 1 deletions
diff --git a/Changes b/Changes
index 81982bb..52d58b0 100644
--- a/Changes
+++ b/Changes
@@ -1,6 +1,8 @@
Revision history for Text-Handlebars
{{$NEXT}}
+ - fix '{{{' variable references inside block helpers (reported by
+ belousandrey, #6)
0.04 2014-04-16
- fix '..' in block helpers (reported by Jörg Prante, RT#94792)
diff --git a/lib/Text/Xslate/Syntax/Handlebars.pm b/lib/Text/Xslate/Syntax/Handlebars.pm
index ce21c68..05b76d5 100644
--- a/lib/Text/Xslate/Syntax/Handlebars.pm
+++ b/lib/Text/Xslate/Syntax/Handlebars.pm
@@ -105,7 +105,12 @@ sub split_tags {
}
}
if (@raw_text) {
- $raw_text[-1] .= $tag_start . $code . $tag_end;
+ if ($close_tag eq '}}}') {
+ $raw_text[-1] .= '{{{' . $code . '}}}';
+ }
+ else {
+ $raw_text[-1] .= $tag_start . $code . $tag_end;
+ }
}
if ($code =~ m{^[#^]} || $code eq 'else') {
push @raw_text, '';
diff --git a/t/bugs.t b/t/bugs.t
new file mode 100644
index 0000000..b7a71a7
--- /dev/null
+++ b/t/bugs.t
@@ -0,0 +1,34 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use lib 't/lib';
+use Test::More;
+use Test::Handlebars;
+
+my $vars = {
+ outer => '<em>example</em>',
+ elements => [
+ { inner => '<em>text</em>' },
+ { inner => '<h1>text</h1>' },
+ ]
+};
+my $template = <<EOL;
+{{{outer}}}
+{{#each elements}}
+{{{inner}}}
+{{/each}}
+EOL
+my $expected = <<EOL;
+<em>example</em>
+<em>text</em>
+<h1>text</h1>
+EOL
+
+render_ok(
+ $template,
+ $vars,
+ $expected,
+ "doy/text-handlebars#6"
+);
+
+done_testing;