mirror of
https://github.com/sigmasternchen/libparcival
synced 2025-03-15 11:58:53 +00:00
structure blocks are now read correctly
This commit is contained in:
parent
274cec4d5e
commit
59d69f71ab
3 changed files with 43 additions and 0 deletions
16
src/parser.y
16
src/parser.y
|
@ -81,6 +81,11 @@ metaSection: /* empty */
|
||||||
$$ = $4;
|
$$ = $4;
|
||||||
addStat(&$$.stats, $2);
|
addStat(&$$.stats, $2);
|
||||||
}
|
}
|
||||||
|
| STRUCTURE_BEGIN
|
||||||
|
{
|
||||||
|
yyerror("structure block in meta section not yet supported");
|
||||||
|
YYERROR;
|
||||||
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
parameters: /* empty */
|
parameters: /* empty */
|
||||||
|
@ -135,8 +140,19 @@ mainSection: /* empty */
|
||||||
$$ = $1;
|
$$ = $1;
|
||||||
addNode(&$$, newOutputNode($3));
|
addNode(&$$, newOutputNode($3));
|
||||||
}
|
}
|
||||||
|
| mainSection STRUCTURE_BEGIN texts structureType text STRUCTURE_END
|
||||||
|
{
|
||||||
|
if (!checkCharset($3, " \t\n")) {
|
||||||
|
yyerror("unknown structure block command");
|
||||||
|
YYERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
$$ = $1;
|
||||||
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
structureType: RENDER
|
||||||
|
|
||||||
statementHeader: STATEMENT_BEGIN blockStatement STATEMENT_END
|
statementHeader: STATEMENT_BEGIN blockStatement STATEMENT_END
|
||||||
{
|
{
|
||||||
$$ = $2;
|
$$ = $2;
|
||||||
|
|
23
src/tree.c
23
src/tree.c
|
@ -1,5 +1,6 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "tree.h"
|
#include "tree.h"
|
||||||
|
@ -161,3 +162,25 @@ struct template newTemplate() {
|
||||||
.tree = newTree()
|
.tree = newTree()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool checkCharset(const char* string, const char* charset) {
|
||||||
|
size_t charsetLength = strlen(charset);
|
||||||
|
|
||||||
|
while (*string != '\0') {
|
||||||
|
bool ok = false;
|
||||||
|
for (size_t i = 0; i < charsetLength; i++) {
|
||||||
|
if (*string == charset[i]) {
|
||||||
|
ok = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ok) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
string++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
#ifndef TREE_H_
|
#ifndef TREE_H_
|
||||||
#define TREE_H_
|
#define TREE_H_
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
char* combineStr(char*, char*);
|
char* combineStr(char*, char*);
|
||||||
|
|
||||||
#define TEXT_NODE (0)
|
#define TEXT_NODE (0)
|
||||||
|
@ -56,4 +58,6 @@ struct template {
|
||||||
|
|
||||||
struct template newTemplate();
|
struct template newTemplate();
|
||||||
|
|
||||||
|
bool checkCharset(const char*, const char*);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue