summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2012-10-02 12:28:01 -0500
committerJesse Luehrs <doy@tozt.net>2012-10-02 12:28:01 -0500
commit09ed3913a9bf4059f7e7b72e2c9ee4488251979a (patch)
treeed1a1f549b378121f4046a21c0ec817fc51d5fdb
parent0722287d6c04831cdb40b64bae2ca55c24c2f555 (diff)
downloadtext-handlebars-09ed3913a9bf4059f7e7b72e2c9ee4488251979a.tar.gz
text-handlebars-09ed3913a9bf4059f7e7b72e2c9ee4488251979a.zip
& for mark_raw
-rw-r--r--lib/Text/Xslate/Syntax/Handlebars.pm9
-rw-r--r--t/mustache-extra.t58
2 files changed, 67 insertions, 0 deletions
diff --git a/lib/Text/Xslate/Syntax/Handlebars.pm b/lib/Text/Xslate/Syntax/Handlebars.pm
index ab46d52..3537952 100644
--- a/lib/Text/Xslate/Syntax/Handlebars.pm
+++ b/lib/Text/Xslate/Syntax/Handlebars.pm
@@ -146,6 +146,8 @@ sub init_symbols {
$self->symbol('#')->set_std($self->can('std_block'));
$self->symbol('^')->set_std($self->can('std_block'));
$self->prefix('/', 0)->is_block_end(1);
+
+ $self->prefix('&', 0)->set_nud($self->can('nud_mark_raw'));
}
sub nud_name {
@@ -281,6 +283,13 @@ sub std_block {
);
}
+sub nud_mark_raw {
+ my $self = shift;
+ my ($symbol) = @_;
+
+ return $self->call('mark_raw', $self->expression(0));
+}
+
sub make_field_lookup {
my $self = shift;
my ($var, $field, $dot) = @_;
diff --git a/t/mustache-extra.t b/t/mustache-extra.t
new file mode 100644
index 0000000..ac28498
--- /dev/null
+++ b/t/mustache-extra.t
@@ -0,0 +1,58 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More;
+use Test::Fatal;
+
+use Text::Handlebars;
+
+render_ok(
+ <<'TEMPLATE',
+* {{name}}
+* {{age}}
+* {{company}}
+* {{& company}}
+TEMPLATE
+ {
+ name => 'Chris',
+ company => '<b>GitHub</b>',
+ },
+ <<'RENDERED',
+* Chris
+*
+* &lt;b&gt;GitHub&lt;/b&gt;
+* <b>GitHub</b>
+RENDERED
+ "& for make_raw"
+);
+
+sub render_ok {
+ local $Test::Builder::Level = $Test::Builder::Level + 1;
+ return _render_ok('render_string', @_);
+}
+
+sub render_file_ok {
+ local $Test::Builder::Level = $Test::Builder::Level + 1;
+ return _render_ok('render', @_);
+}
+
+sub _render_ok {
+ my $render_method = shift;
+ my $opts = ref($_[0]) && ref($_[0]) eq 'HASH' ? shift : {};
+ my ($template, $env, $expected, $desc) = @_;
+ local $Test::Builder::Level = $Test::Builder::Level + 1;
+
+ my $tx = Text::Handlebars->new(%$opts);
+
+ my $exception = exception {
+ is($tx->$render_method($template, $env), $expected, $desc);
+ };
+ fail("$desc (threw an exception)") if $exception;
+ is(
+ $exception,
+ undef,
+ "no exceptions for $desc"
+ );
+}
+
+done_testing;