mirror of
https://github.com/sigmasternchen/libparcival
synced 2025-03-15 11:58:53 +00:00
changed syntax for structure blocks in main section (added parentheses)
This commit is contained in:
parent
689009c153
commit
4e7b006b06
3 changed files with 22 additions and 11 deletions
|
@ -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>
|
||||||
|
|
26
src/parser.y
26
src/parser.y
|
@ -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 */
|
||||||
{
|
{
|
||||||
|
|
|
@ -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; }
|
||||||
|
|
Loading…
Reference in a new issue