summaryrefslogtreecommitdiffstats
path: root/lib/Text/Xslate/Syntax/Handlebars.pm
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2012-10-08 13:33:45 -0500
committerJesse Luehrs <doy@tozt.net>2012-10-08 13:33:45 -0500
commit6d3b76546c92f15aadc2a9c4b7568411e49ccfbe (patch)
tree99d12c1e4c9d73765fa9bc09320f896cdae50ca4 /lib/Text/Xslate/Syntax/Handlebars.pm
parent7f47485c049416b1c4386d21531f1e50ae3acd79 (diff)
downloadtext-handlebars-6d3b76546c92f15aadc2a9c4b7568411e49ccfbe.tar.gz
text-handlebars-6d3b76546c92f15aadc2a9c4b7568411e49ccfbe.zip
implement hash parameters for block helpers
Diffstat (limited to 'lib/Text/Xslate/Syntax/Handlebars.pm')
-rw-r--r--lib/Text/Xslate/Syntax/Handlebars.pm18
1 files changed, 17 insertions, 1 deletions
diff --git a/lib/Text/Xslate/Syntax/Handlebars.pm b/lib/Text/Xslate/Syntax/Handlebars.pm
index 3edab0a..7d28824 100644
--- a/lib/Text/Xslate/Syntax/Handlebars.pm
+++ b/lib/Text/Xslate/Syntax/Handlebars.pm
@@ -16,7 +16,7 @@ my $nl = qr/\x0d?\x0a/;
my $bracket_string = qr/\[ [^\]]* \]/xms;
my $STRING = qr/(?: $Text::Xslate::Util::STRING | $bracket_string )/xms;
-my $single_char = '[.#^/>&;]';
+my $single_char = '[.#^/>&;=]';
my $OPERATOR_TOKEN = sprintf(
"(?:%s|$single_char)",
join('|', map{ quotemeta } qw(..))
@@ -260,6 +260,8 @@ sub init_symbols {
$self->symbol('&')->set_nud($self->can('nud_mark_raw'));
$self->symbol('..')->set_nud($self->can('nud_uplevel'));
+
+ $self->infix('=', 20, $self->can('led_equals'));
}
# copied from Text::Xslate::Parser, but using different definitions of
@@ -417,6 +419,7 @@ sub std_block {
? $block{else}{raw_text}->clone
: $self->literal('')),
),
+ is_helper => 1,
);
return $self->print_raw($name);
}
@@ -515,6 +518,19 @@ sub std_partial {
);
}
+sub led_equals {
+ my $self = shift;
+ my ($symbol, $left) = @_;
+
+ my $right = $self->expression($symbol->lbp);
+
+ return $symbol->clone(
+ arity => 'pair',
+ first => $left->clone(arity => 'literal'),
+ second => $right,
+ );
+}
+
sub undefined_name {
my $self = shift;
my ($name) = @_;