Literal square-bracket path segments cannot have ] in them. TODO: Allow escaped path segments.

This commit is contained in:
Yehuda Katz
2011-12-27 01:21:53 -08:00
parent bd0f74fbd9
commit 373d10edb1
3 changed files with 18 additions and 6 deletions
+7 -5
View File
@@ -135,11 +135,6 @@ test("literal paths", function() {
"Goodbye beautiful world!", "Literal paths can be used");
});
test("literal paths with square brackets in them", function() {
shouldCompileTo("Goodbye {{[@alan]]/expression}} world!", {"@alan]": {expression: "beautiful"}},
"Goodbye beautiful world!", "Literal paths with square brackets in them can be used");
});
test("--- TODO --- bad idea nested paths", function() {
return;
var hash = {goodbyes: [{text: "goodbye"}, {text: "Goodbye"}, {text: "GOODBYE"}], world: "world"};
@@ -1005,3 +1000,10 @@ test("Mustache man page", function() {
shouldCompileTo(string, data, "Hello Chris. You have just won $10000! Well, $6000, after taxes.", "the hello world mustache example works");
});
test("GH-158: Using array index twice, breaks the template", function() {
var string = "{{arr.[0]}}, {{arr.[1]}}";
var data = { "arr": [1,2] };
shouldCompileTo(string, data, "1, 2", "it works as expected");
});
+10
View File
@@ -56,6 +56,16 @@ describe "Tokenizer" do
tokenize("{{foo.bar.baz}}").should match_tokens(%w(OPEN ID SEP ID SEP ID CLOSE))
end
it "allows path literals with []" do
result = tokenize("{{foo.[bar]}}")
result.should match_tokens(%w(OPEN ID SEP ID CLOSE))
end
it "allows multiple path literals on a line with []" do
result = tokenize("{{foo.[bar]}}{{foo.[baz]}}")
result.should match_tokens(%w(OPEN ID SEP ID CLOSE OPEN ID SEP ID CLOSE))
end
it "tokenizes {{.}} as OPEN ID CLOSE" do
result = tokenize("{{.}}")
result.should match_tokens(%w(OPEN ID CLOSE))
+1 -1
View File
@@ -28,7 +28,7 @@
<mu>"false"/[}\s] { return 'BOOLEAN'; }
<mu>[0-9]+/[}\s] { return 'INTEGER'; }
<mu>[a-zA-Z0-9_$-]+/[=}\s\/.] { return 'ID'; }
<mu>\[.*\] { yytext = yytext.substr(1, yyleng-2); return 'ID'; }
<mu>\[[^\]]*\] { yytext = yytext.substr(1, yyleng-2); return 'ID'; }
<mu>. { return 'INVALID'; }
<INITIAL,mu><<EOF>> { return 'EOF'; }