From 59258d1f71d36502cf778dd089409146fd085c12 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Thu, 9 Apr 2015 03:31:20 +0200 Subject: Add support for extra arguments --- src/parser.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/parser.cpp') diff --git a/src/parser.cpp b/src/parser.cpp index 84159dc..0333243 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -45,6 +45,8 @@ enum parser_state { STATE_TYPE_TERM_BLOCK, STATE_HEADER, STATE_SOURCE, + STATE_EXTRA_ARG, + STATE_EXTRA_ARG_NAME, }; struct parser { @@ -80,6 +82,10 @@ int parser_push(parser_t *parser, int token, const parser_value_t *value, parser parser->state = STATE_HEADER; return 1; + case TOK_EXTRA_ARG: + parser->state = STATE_EXTRA_ARG; + return 1; + case 0: return 0; } @@ -234,6 +240,7 @@ int parser_push(parser_t *parser, int token, const parser_value_t *value, parser parser->state = STATE_INIT; return 1; } + break; case STATE_HEADER: if (token == TOK_BLOCK) { @@ -244,6 +251,7 @@ int parser_push(parser_t *parser, int token, const parser_value_t *value, parser } break; + case STATE_SOURCE: if (token == TOK_BLOCK) { state->set_source_block(value->str); @@ -253,6 +261,26 @@ int parser_push(parser_t *parser, int token, const parser_value_t *value, parser } break; + + case STATE_EXTRA_ARG: + if (token == TOK_BLOCK) { + state->add_extra_arg(value->str); + free(value->str); + parser->state = STATE_EXTRA_ARG_NAME; + return 1; + } + break; + + case STATE_EXTRA_ARG_NAME: + switch (token) { + case TOK_SYMBOL: + case TOK_SYMBOL_UC: + case TOK_SYMBOL_LC: + state->set_extra_arg_name(value->str); + free(value->str); + parser->state = STATE_INIT; + return 1; + } } switch (token) { -- cgit v1.2.3