From c4ec8e689764348f2e6d56e46b192209187033a2 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Thu, 27 Sep 2012 13:55:35 -0500 Subject: basic implementation of raw strings --- lib/Text/Xslate/Syntax/Handlebars.pm | 49 ++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) (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 357faca..4fb230c 100644 --- a/lib/Text/Xslate/Syntax/Handlebars.pm +++ b/lib/Text/Xslate/Syntax/Handlebars.pm @@ -107,7 +107,7 @@ sub preprocess { $code .= qq{$content;\n}; } elsif ($type eq 'raw_code') { - $code .= qq{& $content;\n}; + $code .= qq{mark_raw $content;\n}; } else { $self->_error("Oops: Unknown token: $content ($type)"); @@ -123,11 +123,56 @@ sub preprocess { sub init_symbols { my $self = shift; + my $name = $self->symbol('(name)'); + $name->set_led($self->can('led_name')); + $name->lbp(1); + + $self->infix('.', 256, $self->can('led_dot')); + $self->infix('/', 256, $self->can('led_dot')); } sub nud_name { my $self = shift; - return $self->nud_variable(@_); + my ($symbol) = @_; + + if ($symbol->is_defined) { + return $self->SUPER::nud_name(@_); + } + else { + return $self->nud_variable(@_); + } +} + +sub led_name { + my $self = shift; + my ($symbol, $left) = @_; + + if ($left->arity eq 'name') { + return $self->call($left, $symbol->nud($self)); + } + else { + ... + } +} + +sub led_dot { + my $self = shift; + my ($symbol, $left) = @_; + + my $token = $self->token; + if (!$self->is_valid_field($token)) { + $self->_unexpected("a field name", $token); + } + + my $dot = $symbol->clone( + arity => 'field', + first => $left, + second => $token->clone(arity => 'literal'), + ); + + $self->advance; + + return $dot; } __PACKAGE__->meta->make_immutable; -- cgit v1.2.3-54-g00ecf