diff options
author | Jesse Luehrs <doy@tozt.net> | 2012-10-05 14:57:53 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2012-10-05 14:57:53 -0500 |
commit | 70d3df4d85c9a8fb3ac2c2a3cdb4c579e8ee5efc (patch) | |
tree | ff52abd3d62c651743c7b65961b6459f43712a70 /lib/Text/Xslate/Syntax/Handlebars.pm | |
parent | 350dde80bbe03ebf2f2d1168e259106c0e4a6f18 (diff) | |
download | text-handlebars-70d3df4d85c9a8fb3ac2c2a3cdb4c579e8ee5efc.tar.gz text-handlebars-70d3df4d85c9a8fb3ac2c2a3cdb4c579e8ee5efc.zip |
special case {{{.}}} (not dealing with {{foo . bar}} in general)
Diffstat (limited to 'lib/Text/Xslate/Syntax/Handlebars.pm')
-rw-r--r-- | lib/Text/Xslate/Syntax/Handlebars.pm | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/lib/Text/Xslate/Syntax/Handlebars.pm b/lib/Text/Xslate/Syntax/Handlebars.pm index 7a8c3d6..bf10ab5 100644 --- a/lib/Text/Xslate/Syntax/Handlebars.pm +++ b/lib/Text/Xslate/Syntax/Handlebars.pm @@ -231,12 +231,18 @@ sub init_symbols { $symbol->lbp(10); } + for my $this (qw(. this)) { + my $symbol = $self->symbol($this); + $symbol->arity('variable'); + $symbol->id('.'); + $symbol->lbp(10); + $symbol->set_nud($self->can('nud_variable')); + $symbol->set_led($self->can('led_variable')); + } + $self->infix('.', 256, $self->can('led_dot')); $self->infix('/', 256, $self->can('led_dot')); - $self->symbol('.')->set_nud($self->can('nud_dot')); - $self->symbol('this')->set_nud($self->can('nud_dot')); - $self->symbol('#')->set_std($self->can('std_block')); $self->symbol('^')->set_std($self->can('std_block')); $self->prefix('/', 0)->is_block_end(1); @@ -354,6 +360,13 @@ sub led_dot { my $self = shift; my ($symbol, $left) = @_; + # XXX hack to make {{{.}}} work, but in general this syntax is ambiguous + # and i'm not going to deal with it + if ($left->arity eq 'call' && $left->first->id eq 'mark_raw') { + push @{ $left->second }, $symbol->nud($self); + return $left; + } + my $dot = $self->make_field_lookup($left, $self->token, $symbol); $self->advance; @@ -361,13 +374,6 @@ sub led_dot { return $self->check_lambda($dot); } -sub nud_dot { - my $self = shift; - my ($symbol) = @_; - - return $symbol->clone(arity => 'variable', id => '.'); -} - sub std_block { my $self = shift; my ($symbol) = @_; |