From 6d3b76546c92f15aadc2a9c4b7568411e49ccfbe Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Mon, 8 Oct 2012 13:33:45 -0500 Subject: implement hash parameters for block helpers --- lib/Text/Xslate/Syntax/Handlebars.pm | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'lib/Text/Xslate/Syntax/Handlebars.pm') 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) = @_; -- cgit v1.2.3-54-g00ecf