summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2021-03-02 12:35:53 +0100
committerBastien Nocera <hadess@hadess.net>2021-03-02 12:35:53 +0100
commita365e60245170686a147c3871cc518aa05deb565 (patch)
tree37efba88a5fa9383949d7ce36867946d5e75dfdc
parent78d2c09b846df8bddceef20b02592671f32c57d5 (diff)
downloadtotem-pl-parser-a365e60245170686a147c3871cc518aa05deb565.tar.gz
core: Add state names to debug in XML parser
-rw-r--r--plparse/xmllexer.c26
-rw-r--r--plparse/xmlparser.c46
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;
}