diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2015-04-08 23:49:42 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2015-04-08 23:49:42 +0200 |
commit | 9c990ae801b949de2728bfff4258aa90f9c96a52 (patch) | |
tree | ba2742dc1b3ef0b9898e20a6162e54fb58f440e2 /src/parser.cpp | |
parent | 7b8ebfcef1dada98ff36aeb4d16cd3c06517e879 (diff) | |
download | solar-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.cpp | 29 |
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) { |