diff options
author | Bastien Nocera <hadess@hadess.net> | 2021-03-02 12:35:53 +0100 |
---|---|---|
committer | Bastien Nocera <hadess@hadess.net> | 2021-03-02 12:35:53 +0100 |
commit | a365e60245170686a147c3871cc518aa05deb565 (patch) | |
tree | 37efba88a5fa9383949d7ce36867946d5e75dfdc | |
parent | 78d2c09b846df8bddceef20b02592671f32c57d5 (diff) | |
download | totem-pl-parser-a365e60245170686a147c3871cc518aa05deb565.tar.gz |
core: Add state names to debug in XML parser
-rw-r--r-- | plparse/xmllexer.c | 26 | ||||
-rw-r--r-- | plparse/xmlparser.c | 46 |
2 files changed, 59 insertions, 13 deletions
diff --git a/plparse/xmllexer.c b/plparse/xmllexer.c index bb06cbe..818e7f8 100644 --- a/plparse/xmllexer.c +++ b/plparse/xmllexer.c @@ -159,6 +159,28 @@ typedef enum { STATE_IDENT /* must be last */ } lexer_state_t; +static const char *const states[] = { + "STATE_UNKNOWN", + "STATE_IDLE", + "STATE_EOL", + "STATE_SEPAR", + "STATE_T_M_START", + "STATE_T_M_STOP_1", + "STATE_T_M_STOP_2", + "STATE_T_EQUAL", + "STATE_T_STRING_SINGLE", + "STATE_T_STRING_DOUBLE", + "STATE_T_COMMENT", + "STATE_T_TI_STOP", + "STATE_T_DASHDASH", + "STATE_T_C_STOP", + "STATE_IDENT" +}; + +static inline const char *state_to_str(lexer_state_t state) { + return states[state + 1]; +} + /* for ABI compatibility */ int lexer_get_token_d(char ** _tok, int * _tok_size, int fixed) { return lexer_get_token_d_r(static_lexer, _tok, _tok_size, fixed); @@ -175,7 +197,7 @@ int lexer_get_token_d_r(struct lexer * lexer, char ** _tok, int * _tok_size, int if (tok) { while ((tok_pos < tok_size) && (lexer->lexbuf_pos < lexer->lexbuf_size)) { c = lexer->lexbuf[lexer->lexbuf_pos]; - lprintf("c=%c, state=%d, in_comment=%d\n", c, state, lexer->in_comment); + lprintf("c=%c, state=%s (%d), in_comment=%d\n", c, state_to_str(state), state, lexer->in_comment); switch (lexer->lex_mode) { case NORMAL: @@ -597,7 +619,7 @@ int lexer_get_token_d_r(struct lexer * lexer, char ** _tok, int * _tok_size, int lprintf("unknown state, state=%d\n", state); } } else { - lprintf("abnormal end of buffer, state=%d\n", state); + lprintf("abnormal end of buffer, state=%s (%d)\n", state_to_str(state), state); } } return T_ERROR; diff --git a/plparse/xmlparser.c b/plparse/xmlparser.c index 5d0e289..3015960 100644 --- a/plparse/xmlparser.c +++ b/plparse/xmlparser.c @@ -210,6 +210,30 @@ typedef enum { STATE_CDATA, } parser_state_t; +static const char *const states[] = { + "STATE_IDLE", + "STATE_NODE", + "STATE_ATTRIBUTE", + "STATE_NODE_CLOSE", + "STATE_TAG_TERM", + "STATE_ATTRIBUTE_EQUALS", + "STATE_STRING", + "STATE_TAG_TERM_IGNORE", + "STATE_Q_NODE", + "STATE_Q_ATTRIBUTE", + "STATE_Q_NODE_CLOSE", + "STATE_Q_TAG_TERM", + "STATE_Q_ATTRIBUTE_EQUALS", + "STATE_Q_STRING", + "STATE_COMMENT", + "STATE_DOCTYPE", + "STATE_CDATA" +}; + +static inline const char *state_to_str(parser_state_t state) { + return states[state]; +} + static xml_node_t *xml_parser_append_text (xml_node_t *node, xml_node_t *subnode, const char *text, int flags) { if (!text || !*text) @@ -316,7 +340,7 @@ static int xml_parser_get_node_internal (xml_parser_t *xml_parser, lprintf("info: node data : %s\n", current_node->data); break; default: - lprintf("error: unexpected token \"%s\", state %d\n", tok, state); + lprintf("error: unexpected token \"%s\", state %s (%d)\n", tok, state_to_str(state), state); return -1; break; } @@ -348,7 +372,7 @@ static int xml_parser_get_node_internal (xml_parser_t *xml_parser, lprintf("info: current node name \"%s\"\n", node_name); break; default: - lprintf("error: unexpected token \"%s\", state %d\n", tok, state); + lprintf("error: unexpected token \"%s\", state %s (%d)\n", tok, state_to_str(state), state); return -1; break; } @@ -439,7 +463,7 @@ static int xml_parser_get_node_internal (xml_parser_t *xml_parser, lprintf("info: current property name \"%s\"\n", property_name); break; default: - lprintf("error: unexpected token \"%s\", state %d\n", tok, state); + lprintf("error: unexpected token \"%s\", state %s (%d)\n", tok, state_to_str(state), state); return -1; break; } @@ -456,7 +480,7 @@ static int xml_parser_get_node_internal (xml_parser_t *xml_parser, case (T_IDENT): goto new_prop; default: - lprintf("error: unexpected token \"%s\", state %d\n", tok, state); + lprintf("error: unexpected token \"%s\", state %s (%d)\n", tok, state_to_str(state), state); return -1; break; } @@ -493,7 +517,7 @@ static int xml_parser_get_node_internal (xml_parser_t *xml_parser, } break; default: - lprintf("error: unexpected token \"%s\", state %d\n", tok, state); + lprintf("error: unexpected token \"%s\", state %s (%d)\n", tok, state_to_str(state), state); return -1; break; } @@ -506,7 +530,7 @@ static int xml_parser_get_node_internal (xml_parser_t *xml_parser, return retval; break; default: - lprintf("error: unexpected token \"%s\", state %d\n", tok, state); + lprintf("error: unexpected token \"%s\", state %s (%d)\n", tok, state_to_str(state), state); return -1; break; } @@ -541,7 +565,7 @@ static int xml_parser_get_node_internal (xml_parser_t *xml_parser, state = STATE_ATTRIBUTE; break; default: - lprintf("error: unexpected token \"%s\", state %d\n", tok, state); + lprintf("error: unexpected token \"%s\", state %s (%d)\n", tok, state_to_str(state), state); return -1; break; } @@ -576,7 +600,7 @@ static int xml_parser_get_node_internal (xml_parser_t *xml_parser, state = STATE_Q_ATTRIBUTE; break; default: - lprintf("error: unexpected token \"%s\", state %d\n", tok, state); + lprintf("error: unexpected token \"%s\", state %s (%d)\n", tok, state_to_str(state), state); return -1; break; } @@ -606,7 +630,7 @@ static int xml_parser_get_node_internal (xml_parser_t *xml_parser, state = Q_STATE(STRING, ATTRIBUTE); break; default: - lprintf("error: unexpected token \"%s\", state %d\n", tok, state); + lprintf("error: unexpected token \"%s\", state %s (%d)\n", tok, state_to_str(state), state); return -1; break; } @@ -643,7 +667,7 @@ static int xml_parser_get_node_internal (xml_parser_t *xml_parser, state = STATE_IDLE; break; default: - lprintf("error: unexpected token \"%s\", state %d\n", tok, state); + lprintf("error: unexpected token \"%s\", state %s (%d)\n", tok, state_to_str(state), state); return -1; break; } @@ -656,7 +680,7 @@ static int xml_parser_get_node_internal (xml_parser_t *xml_parser, state = STATE_IDLE; break; default: - lprintf("error: unexpected token \"%s\", state %d\n", tok, state); + lprintf("error: unexpected token \"%s\", state %s (%d)\n", tok, state_to_str(state), state); return -1; break; } |