diff options
author | Jesse Luehrs <doy@tozt.net> | 2012-09-27 13:55:35 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2012-09-27 13:55:35 -0500 |
commit | c4ec8e689764348f2e6d56e46b192209187033a2 (patch) | |
tree | d09077aafb4dbe8d4e810423f0ed642fd4d89c29 /lib | |
parent | a96361ab84452a83bdca37e37c5438f41c5e2be1 (diff) | |
download | text-handlebars-c4ec8e689764348f2e6d56e46b192209187033a2.tar.gz text-handlebars-c4ec8e689764348f2e6d56e46b192209187033a2.zip |
basic implementation of raw strings
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Text/Xslate/Syntax/Handlebars.pm | 49 |
1 files changed, 47 insertions, 2 deletions
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; |