From ea9eea98c6772ad528b9902dfd97ffe48f6bed22 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 3 Oct 2012 13:12:56 -0500 Subject: implement custom delimiters --- lib/Text/Xslate/Syntax/Handlebars.pm | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) (limited to 'lib') diff --git a/lib/Text/Xslate/Syntax/Handlebars.pm b/lib/Text/Xslate/Syntax/Handlebars.pm index 6f48f1b..d8f2f9a 100644 --- a/lib/Text/Xslate/Syntax/Handlebars.pm +++ b/lib/Text/Xslate/Syntax/Handlebars.pm @@ -24,10 +24,6 @@ sub split_tags { my $tag_start = $self->tag_start; my $tag_end = $self->tag_end; - # 'text' is a something without newlines - # follwoing a newline, $tag_start, or end of the input - my $lex_text = qr/\A ( [^\n]*? (?: \n | (?= \Q$tag_start\E ) | \z ) ) /xms; - my $lex_comment = $self->comment_pattern; my $lex_code = qr/(?: $lex_comment | (?: $STRING | [^'"] ) )/xms; @@ -53,7 +49,16 @@ sub split_tags { $input =~ s/\A\Q$close_tag// or die "Oops!"; - if ($code =~ m{^[!#^/]} && $standalone) { + my $autochomp = $code =~ m{^[!#^/=]}; + + if ($code =~ s/^=\s*([^\s]+)\s+([^\s]+)\s*=$//) { + ($tag_start, $tag_end) = ($1, $2); + } + elsif ($code =~ /^=/) { + die "Invalid delimiter tag: $code"; + } + + if ($autochomp && $standalone) { if ($input =~ /\A\s*(?:\n|\z)/) { $input =~ s/\A$nl//; if (@chunks > 0 && $chunks[-1][0] eq 'text') { @@ -62,10 +67,12 @@ sub split_tags { } } - push @chunks, [ - ($close_tag eq '}}}' ? 'raw_code' : 'code'), - $code - ]; + if (length($code)) { + push @chunks, [ + ($close_tag eq '}}}' ? 'raw_code' : 'code'), + $code + ]; + } undef $close_tag; } @@ -81,7 +88,7 @@ sub split_tags { $close_tag = $tag_end; } } - elsif ($input =~ s/\A$lex_text//) { + elsif ($input =~ s/\A([^\n]*?(?:\n|(?=\Q$tag_start\E)|\z))//) { my $text = $1; if (length($text)) { push @chunks, [ text => $text ]; -- cgit v1.2.3-54-g00ecf