From 9c990ae801b949de2728bfff4258aa90f9c96a52 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Wed, 8 Apr 2015 23:49:42 +0200 Subject: Allow adding source blocks to the top the of header and source files --- src/parser.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'src/parser.cpp') 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) { -- cgit v1.2.3