From 4e7b006b06d082c322fa0dea36e5e687543d33ba Mon Sep 17 00:00:00 2001 From: overflowerror Date: Sat, 5 Jun 2021 00:29:10 +0200 Subject: [PATCH] changed syntax for structure blocks in main section (added parentheses) --- demofiles/demo.html.templ | 2 +- src/parser.y | 26 +++++++++++++++++--------- src/scanner.l | 5 ++++- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/demofiles/demo.html.templ b/demofiles/demo.html.templ index 8f35b19..17c9528 100644 --- a/demofiles/demo.html.templ +++ b/demofiles/demo.html.templ @@ -10,7 +10,7 @@ {% for(size_t i = 0; i < no; i++) %} - {# render "greeting.templ", names[i] #}
+ {# render("greeting.templ", names[i]) #}
{% end %} diff --git a/src/parser.y b/src/parser.y index 7701177..54fa1ca 100644 --- a/src/parser.y +++ b/src/parser.y @@ -42,12 +42,13 @@ extern struct template result; %type structureType %token TEXT +%token WHITESPACE %token SECTION COMMA END %token PARAMS_BEGIN PARAMS_END %token STATEMENT_BEGIN STATEMENT_END %token STRUCTURE_BEGIN STRUCTURE_END %token OUTPUT_BEGIN OUTPUT_END -%token RENDER +%token RENDER OPEN_PARENTHESES CLOSE_PARENTHESES %start template @@ -143,17 +144,12 @@ mainSection: /* empty */ $$ = $1; addNode(&$$, newOutputNode($3)); } - | mainSection STRUCTURE_BEGIN texts structureType text STRUCTURE_END - { - if (!checkCharset($3, " \t\n")) { - yyerror("unknown structure block command"); - YYERROR; - } - + | mainSection STRUCTURE_BEGIN optionalWhitespaces structureType optionalWhitespaces OPEN_PARENTHESES text CLOSE_PARENTHESES optionalWhitespaces STRUCTURE_END + { $$ = $1; switch($4) { case RENDER_NODE: - addNode(&$$, newRenderNode($5)); + addNode(&$$, newRenderNode($7)); break; default: yyerror("unhandled structure block command (internal error)"); @@ -162,6 +158,10 @@ mainSection: /* empty */ } ; +optionalWhitespaces: /* empty */ + | WHITESPACE optionalWhitespaces +; + structureType: RENDER { $$ = RENDER_NODE; @@ -199,10 +199,18 @@ text: TEXT { $$ = $1; } + | WHITESPACE + { + $$ = $1; + } | TEXT text { $$ = combineStr($1, $2); } + | WHITESPACE text + { + $$ = combineStr($1, $2); + } texts: /* empty */ { diff --git a/src/scanner.l b/src/scanner.l index d6b7be5..195dcbf 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -74,8 +74,11 @@ type_or_id {type_prefix}?{id}{type_pointer}* "e" { yylval.text = strdup(yytext); return TEXT; /* catch e as text */ } {statement_end} { BEGIN(isMetaSection ? META_SECTION : MAIN_SECTION); return STATEMENT_END; } -[^#r]+ { yylval.text = strdup(yytext); return TEXT; } +[^#r() \t\n]+ { yylval.text = strdup(yytext); return TEXT; } +{whitespace}+ { yylval.text = strdup(yytext); return WHITESPACE; } {render_token} { return RENDER; } +"(" { return OPEN_PARENTHESES; } +")" { return CLOSE_PARENTHESES; } "r" { yylval.text = strdup(yytext); return TEXT; /* catch r as text */ } "#" { yylval.text = strdup(yytext); return TEXT; /* catch # as text */ } {structure_end} { BEGIN(isMetaSection ? META_SECTION : MAIN_SECTION); return STRUCTURE_END; }