summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2012-09-27 13:55:35 -0500
committerJesse Luehrs <doy@tozt.net>2012-09-27 13:55:35 -0500
commitc4ec8e689764348f2e6d56e46b192209187033a2 (patch)
treed09077aafb4dbe8d4e810423f0ed642fd4d89c29 /lib
parenta96361ab84452a83bdca37e37c5438f41c5e2be1 (diff)
downloadtext-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.pm49
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;