summaryrefslogtreecommitdiffstats
path: root/src/parser.cpp
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2015-04-08 23:49:42 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2015-04-08 23:49:42 +0200
commit9c990ae801b949de2728bfff4258aa90f9c96a52 (patch)
treeba2742dc1b3ef0b9898e20a6162e54fb58f440e2 /src/parser.cpp
parent7b8ebfcef1dada98ff36aeb4d16cd3c06517e879 (diff)
downloadsolar-9c990ae801b949de2728bfff4258aa90f9c96a52.tar
solar-9c990ae801b949de2728bfff4258aa90f9c96a52.zip
Allow adding source blocks to the top the of header and source files
Diffstat (limited to 'src/parser.cpp')
-rw-r--r--src/parser.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/parser.cpp b/src/parser.cpp
index 9d2fbce..84159dc 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -43,6 +43,8 @@ enum parser_state {
STATE_TYPE_NONTERM,
STATE_TYPE_TERM,
STATE_TYPE_TERM_BLOCK,
+ STATE_HEADER,
+ STATE_SOURCE,
};
struct parser {
@@ -70,6 +72,14 @@ int parser_push(parser_t *parser, int token, const parser_value_t *value, parser
parser->state = STATE_TYPE;
return 1;
+ case TOK_SOURCE:
+ parser->state = STATE_SOURCE;
+ return 1;
+
+ case TOK_HEADER:
+ parser->state = STATE_HEADER;
+ return 1;
+
case 0:
return 0;
}
@@ -224,6 +234,25 @@ int parser_push(parser_t *parser, int token, const parser_value_t *value, parser
parser->state = STATE_INIT;
return 1;
}
+
+ case STATE_HEADER:
+ if (token == TOK_BLOCK) {
+ state->set_header_block(value->str);
+ free(value->str);
+ parser->state = STATE_INIT;
+ return 1;
+ }
+
+ break;
+ case STATE_SOURCE:
+ if (token == TOK_BLOCK) {
+ state->set_source_block(value->str);
+ free(value->str);
+ parser->state = STATE_INIT;
+ return 1;
+ }
+
+ break;
}
switch (token) {