diff options
author | Jesse Luehrs <doy@tozt.net> | 2012-10-03 17:06:55 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2012-10-03 17:08:47 -0500 |
commit | 5811e2f6469ab7303a2ef014f691df659f549cea (patch) | |
tree | 00bb2b5b0f8f44df3854e3ea3b91b015c6b0312f /lib/Text/Xslate | |
parent | 8d8d169d9e30784474856a9b43c43cf21a3d6a91 (diff) | |
download | text-handlebars-5811e2f6469ab7303a2ef014f691df659f549cea.tar.gz text-handlebars-5811e2f6469ab7303a2ef014f691df659f549cea.zip |
mostly implement partials
just need to get the auto-indenting behavior correct
Diffstat (limited to 'lib/Text/Xslate')
-rw-r--r-- | lib/Text/Xslate/Syntax/Handlebars.pm | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/lib/Text/Xslate/Syntax/Handlebars.pm b/lib/Text/Xslate/Syntax/Handlebars.pm index 6ec5769..1be7dff 100644 --- a/lib/Text/Xslate/Syntax/Handlebars.pm +++ b/lib/Text/Xslate/Syntax/Handlebars.pm @@ -68,7 +68,7 @@ sub split_tags { push @delimiters, [$tag_start, $tag_end]; } - my $autochomp = $code =~ m{^[!#^/=]}; + my $autochomp = $code =~ m{^[!#^/=>]}; if ($code =~ s/^=\s*([^\s]+)\s+([^\s]+)\s*=$//) { ($tag_start, $tag_end) = ($1, $2); @@ -80,11 +80,14 @@ sub split_tags { if ($autochomp && $standalone) { if ($input =~ /\A\s*(?:\n|\z)/) { $input =~ s/\A$nl//; - if (@chunks > 0 && $chunks[-1][0] eq 'text') { + if (@chunks > 0 && $chunks[-1][0] eq 'text' && $code !~ m{^>}) { $chunks[-1][1] =~ s/^(?:(?!\n)\s)*\z//m; } } } + else { + $standalone = 0; + } if (length($code)) { push @chunks, [ @@ -196,6 +199,8 @@ sub init_symbols { $self->symbol('^')->set_std($self->can('std_block')); $self->prefix('/', 0)->is_block_end(1); + $self->symbol('>')->set_std($self->can('std_partial')); + $self->prefix('&', 0)->set_nud($self->can('nud_mark_raw')); $self->prefix('..', 0)->set_nud($self->can('nud_uplevel')); } @@ -395,6 +400,27 @@ sub nud_uplevel { return $symbol->clone(arity => 'variable'); } +sub std_partial { + my $self = shift; + my ($symbol) = @_; + + my $partial = $self->token->clone(arity => 'literal'); + $self->advance; + + return $self->make_ternary( + $self->call('(find_file)', $partial->clone), + $symbol->clone( + arity => 'include', + id => 'include', + first => $partial, + ), + $symbol->clone( + arity => 'literal', + id => '', + ), + ); +} + sub define_function { my $self = shift; my (@names) = @_; |