summaryrefslogtreecommitdiffstats
path: root/src/parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.cpp')
-rw-r--r--src/parser.cpp28
1 files changed, 28 insertions, 0 deletions
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) {