changed syntax for structure blocks in main section (added parentheses)

This commit is contained in:
overflowerror 2021-06-05 00:29:10 +02:00
parent 689009c153
commit 4e7b006b06
3 changed files with 22 additions and 11 deletions

View file

@ -10,7 +10,7 @@
</head> </head>
<body> <body>
{% for(size_t i = 0; i < no; i++) %} {% for(size_t i = 0; i < no; i++) %}
{# render "greeting.templ", names[i] #}<br /> {# render("greeting.templ", names[i]) #}<br />
{% end %} {% end %}
</body> </body>
</html> </html>

View file

@ -42,12 +42,13 @@ extern struct template result;
%type <nodeType> structureType %type <nodeType> structureType
%token <text> TEXT %token <text> TEXT
%token <text> WHITESPACE
%token SECTION COMMA END %token SECTION COMMA END
%token PARAMS_BEGIN PARAMS_END %token PARAMS_BEGIN PARAMS_END
%token STATEMENT_BEGIN STATEMENT_END %token STATEMENT_BEGIN STATEMENT_END
%token STRUCTURE_BEGIN STRUCTURE_END %token STRUCTURE_BEGIN STRUCTURE_END
%token OUTPUT_BEGIN OUTPUT_END %token OUTPUT_BEGIN OUTPUT_END
%token RENDER %token RENDER OPEN_PARENTHESES CLOSE_PARENTHESES
%start template %start template
@ -143,17 +144,12 @@ mainSection: /* empty */
$$ = $1; $$ = $1;
addNode(&$$, newOutputNode($3)); addNode(&$$, newOutputNode($3));
} }
| mainSection STRUCTURE_BEGIN texts structureType text STRUCTURE_END | mainSection STRUCTURE_BEGIN optionalWhitespaces structureType optionalWhitespaces OPEN_PARENTHESES text CLOSE_PARENTHESES optionalWhitespaces STRUCTURE_END
{ {
if (!checkCharset($3, " \t\n")) {
yyerror("unknown structure block command");
YYERROR;
}
$$ = $1; $$ = $1;
switch($4) { switch($4) {
case RENDER_NODE: case RENDER_NODE:
addNode(&$$, newRenderNode($5)); addNode(&$$, newRenderNode($7));
break; break;
default: default:
yyerror("unhandled structure block command (internal error)"); yyerror("unhandled structure block command (internal error)");
@ -162,6 +158,10 @@ mainSection: /* empty */
} }
; ;
optionalWhitespaces: /* empty */
| WHITESPACE optionalWhitespaces
;
structureType: RENDER structureType: RENDER
{ {
$$ = RENDER_NODE; $$ = RENDER_NODE;
@ -199,10 +199,18 @@ text: TEXT
{ {
$$ = $1; $$ = $1;
} }
| WHITESPACE
{
$$ = $1;
}
| TEXT text | TEXT text
{ {
$$ = combineStr($1, $2); $$ = combineStr($1, $2);
} }
| WHITESPACE text
{
$$ = combineStr($1, $2);
}
texts: /* empty */ texts: /* empty */
{ {

View file

@ -74,8 +74,11 @@ type_or_id {type_prefix}?{id}{type_pointer}*
<STATEMENT>"e" { yylval.text = strdup(yytext); return TEXT; /* catch e as text */ } <STATEMENT>"e" { yylval.text = strdup(yytext); return TEXT; /* catch e as text */ }
<STATEMENT>{statement_end} { BEGIN(isMetaSection ? META_SECTION : MAIN_SECTION); return STATEMENT_END; } <STATEMENT>{statement_end} { BEGIN(isMetaSection ? META_SECTION : MAIN_SECTION); return STATEMENT_END; }
<STRUCTURE>[^#r]+ { yylval.text = strdup(yytext); return TEXT; } <STRUCTURE>[^#r() \t\n]+ { yylval.text = strdup(yytext); return TEXT; }
<STRUCTURE>{whitespace}+ { yylval.text = strdup(yytext); return WHITESPACE; }
<STRUCTURE>{render_token} { return RENDER; } <STRUCTURE>{render_token} { return RENDER; }
<STRUCTURE>"(" { return OPEN_PARENTHESES; }
<STRUCTURE>")" { return CLOSE_PARENTHESES; }
<STRUCTURE>"r" { yylval.text = strdup(yytext); return TEXT; /* catch r as text */ } <STRUCTURE>"r" { yylval.text = strdup(yytext); return TEXT; /* catch r as text */ }
<STRUCTURE>"#" { yylval.text = strdup(yytext); return TEXT; /* catch # as text */ } <STRUCTURE>"#" { yylval.text = strdup(yytext); return TEXT; /* catch # as text */ }
<STRUCTURE>{structure_end} { BEGIN(isMetaSection ? META_SECTION : MAIN_SECTION); return STRUCTURE_END; } <STRUCTURE>{structure_end} { BEGIN(isMetaSection ? META_SECTION : MAIN_SECTION); return STRUCTURE_END; }