[Faxpp-devel] SF.net SVN: faxpp: [42] trunk/faxpp
Status: Beta
Brought to you by:
jpcs
|
From: <jp...@us...> - 2008-03-13 21:56:43
|
Revision: 42
http://faxpp.svn.sourceforge.net/faxpp/?rev=42&view=rev
Author: jpcs
Date: 2008-03-13 14:56:47 -0700 (Thu, 13 Mar 2008)
Log Message:
-----------
Added correct tokenization of element declarations.
Modified Paths:
--------------
trunk/faxpp/include/faxpp/error.h
trunk/faxpp/include/faxpp/token.h
trunk/faxpp/src/elementdecl.c
trunk/faxpp/src/error.c
trunk/faxpp/src/token.c
trunk/faxpp/src/tokenizer_states.c
trunk/faxpp/src/tokenizer_states.h
trunk/faxpp/src/xml_parser.c
trunk/faxpp/tests/xmlconf_runner.c
Modified: trunk/faxpp/include/faxpp/error.h
===================================================================
--- trunk/faxpp/include/faxpp/error.h 2008-03-11 17:28:12 UTC (rev 41)
+++ trunk/faxpp/include/faxpp/error.h 2008-03-13 21:56:47 UTC (rev 42)
@@ -67,6 +67,7 @@
DONT_PARSE_EXTERNAL_ENTITY,
INVALID_ATTRIBUTE_TYPE,
INVALID_DEFAULTDECL,
+ INVALID_ELEMENTDECL_CONTENT,
OUT_OF_MEMORY,
ELEMENT_NAME_MISMATCH,
Modified: trunk/faxpp/include/faxpp/token.h
===================================================================
--- trunk/faxpp/include/faxpp/token.h 2008-03-11 17:28:12 UTC (rev 41)
+++ trunk/faxpp/include/faxpp/token.h 2008-03-13 21:56:47 UTC (rev 42)
@@ -75,7 +75,17 @@
ELEMENTDECL_PREFIX_TOKEN,
ELEMENTDECL_NAME_TOKEN,
- ELEMENTDECL_CONTENT_TOKEN,
+ ELEMENTDECL_EMPTY_TOKEN,
+ ELEMENTDECL_ANY_TOKEN,
+ ELEMENTDECL_PCDATA_TOKEN,
+ ELEMENTDECL_LPAR_TOKEN,
+ ELEMENTDECL_RPAR_TOKEN,
+ ELEMENTDECL_QUESTION_TOKEN,
+ ELEMENTDECL_STAR_TOKEN,
+ ELEMENTDECL_PLUS_TOKEN,
+ ELEMENTDECL_BAR_TOKEN,
+ ELEMENTDECL_COMMA_TOKEN,
+ ELEMENTDECL_END_TOKEN,
ATTLISTDECL_PREFIX_TOKEN,
ATTLISTDECL_NAME_TOKEN,
Modified: trunk/faxpp/src/elementdecl.c
===================================================================
--- trunk/faxpp/src/elementdecl.c 2008-03-11 17:28:12 UTC (rev 41)
+++ trunk/faxpp/src/elementdecl.c 2008-03-13 21:56:47 UTC (rev 42)
@@ -39,7 +39,7 @@
return NO_ERROR;
}
-#define SINGLE_CHAR_STATE(name, ch, next_stored_state, next_state, error) \
+#define SINGLE_CHAR_STATE_RETURN(name, ch, next_stored_state, next_state, error, return_token) \
FAXPP_Error \
name(FAXPP_TokenizerEnv *env) \
{ \
@@ -49,6 +49,7 @@
case (ch): \
if((next_stored_state) != 0) env->stored_state = (next_stored_state); \
env->state = (next_state); \
+ if((return_token) != NO_TOKEN) { report_empty_token((return_token), env); } \
next_char(env); \
break; \
LINE_ENDINGS \
@@ -59,6 +60,8 @@
return NO_ERROR; \
}
+#define SINGLE_CHAR_STATE(name, ch, next_stored_state, next_state, error) SINGLE_CHAR_STATE_RETURN(name, ch, next_stored_state, next_state, error, NO_TOKEN)
+
SINGLE_CHAR_STATE(elementdecl_initial_state1, 'E', 0, elementdecl_initial_state2, INVALID_DTD_DECL)
SINGLE_CHAR_STATE(elementdecl_initial_state2, 'M', 0, elementdecl_initial_state3, INVALID_DTD_DECL)
SINGLE_CHAR_STATE(elementdecl_initial_state3, 'E', 0, elementdecl_initial_state4, INVALID_DTD_DECL)
@@ -168,14 +171,466 @@
read_char(env);
switch(env->current_char) {
+ case 'E':
+ env->state = elementdecl_empty_state1;
+ break;
+ case 'A':
+ env->state = elementdecl_any_state1;
+ break;
+ case '(':
+ env->nesting_level += 1;
+ env->stored_state = elementdecl_mixed_or_children_state;
+ env->state = ws_state;
+ report_empty_token(ELEMENTDECL_LPAR_TOKEN, env);
+ break;
+ LINE_ENDINGS
+ default:
+ next_char(env);
+ return INVALID_ELEMENTDECL_CONTENT;
+ }
+ next_char(env);
+ return NO_ERROR;
+}
+
+SINGLE_CHAR_STATE(elementdecl_empty_state1, 'M', 0, elementdecl_empty_state2, INVALID_ELEMENTDECL_CONTENT)
+SINGLE_CHAR_STATE(elementdecl_empty_state2, 'P', 0, elementdecl_empty_state3, INVALID_ELEMENTDECL_CONTENT)
+SINGLE_CHAR_STATE(elementdecl_empty_state3, 'T', 0, elementdecl_empty_state4, INVALID_ELEMENTDECL_CONTENT)
+SINGLE_CHAR_STATE_RETURN(elementdecl_empty_state4, 'Y', elementdecl_end_state, ws_state, INVALID_ELEMENTDECL_CONTENT, ELEMENTDECL_EMPTY_TOKEN)
+
+SINGLE_CHAR_STATE(elementdecl_any_state1, 'N', 0, elementdecl_any_state2, INVALID_ELEMENTDECL_CONTENT)
+SINGLE_CHAR_STATE_RETURN(elementdecl_any_state2, 'Y', elementdecl_end_state, ws_state, INVALID_ELEMENTDECL_CONTENT, ELEMENTDECL_ANY_TOKEN)
+
+FAXPP_Error
+elementdecl_mixed_or_children_state(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ case '#':
+ env->state = elementdecl_pcdata_state1;
+ break;
+ default:
+ env->state = elementdecl_cp_name_state1;
+ // No next_char
+ return NO_ERROR;
+ }
+ next_char(env);
+ return NO_ERROR;
+
+}
+
+FAXPP_Error
+elementdecl_cp_name_state1(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ case '(':
+ env->nesting_level += 1;
+ env->stored_state = elementdecl_cp_name_state1;
+ env->state = ws_state;
+ report_empty_token(ELEMENTDECL_LPAR_TOKEN, env);
+ next_char(env);
+ break;
+ LINE_ENDINGS
+ default:
+ env->state = elementdecl_cp_name_state2;
+ next_char(env);
+ if((FAXPP_char_flags(env->current_char) & env->ncname_start_char) == 0)
+ return INVALID_CHAR_IN_ELEMENTDECL_NAME;
+ break;
+ }
+ return NO_ERROR;
+}
+
+FAXPP_Error
+elementdecl_cp_name_state2(FAXPP_TokenizerEnv *env)
+{
+ while(1) {
+ read_char(env);
+
+ switch(env->current_char) {
+ WHITESPACE:
+ env->stored_state = elementdecl_cp_separator_or_end_state;
+ env->state = ws_state;
+ token_end_position(env);
+ report_token(ELEMENTDECL_NAME_TOKEN, env);
+ next_char(env);
+ return NO_ERROR;
+ case '?':
+ case '*':
+ case '+':
+ env->state = elementdecl_cp_cardinality_state;
+ token_end_position(env);
+ report_token(ELEMENTDECL_NAME_TOKEN, env);
+ // No next_char
+ return NO_ERROR;
+ case '|':
+ case ',':
+ case ')':
+ env->state = elementdecl_cp_separator_or_end_state;
+ token_end_position(env);
+ report_token(ELEMENTDECL_NAME_TOKEN, env);
+ // No next_char
+ return NO_ERROR;
+ case ':':
+ env->state = elementdecl_cp_name_seen_colon_state1;
+ token_end_position(env);
+ report_token(ELEMENTDECL_PREFIX_TOKEN, env);
+ next_char(env);
+ token_start_position(env);
+ return NO_ERROR;
+ default:
+ break;
+ }
+
+ next_char(env);
+ if((FAXPP_char_flags(env->current_char) & env->ncname_char) == 0)
+ return INVALID_CHAR_IN_ELEMENTDECL_NAME;
+ }
+
+ // Never happens
+ return NO_ERROR;
+}
+
+FAXPP_Error
+elementdecl_cp_name_seen_colon_state1(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ LINE_ENDINGS
+ default:
+ env->state = elementdecl_cp_name_seen_colon_state2;
+ next_char(env);
+ if((FAXPP_char_flags(env->current_char) & env->ncname_start_char) == 0)
+ return INVALID_CHAR_IN_ELEMENTDECL_NAME;
+ break;
+ }
+
+ return NO_ERROR;
+}
+
+FAXPP_Error
+elementdecl_cp_name_seen_colon_state2(FAXPP_TokenizerEnv *env)
+{
+ while(1) {
+ read_char(env);
+
+ switch(env->current_char) {
+ WHITESPACE:
+ env->stored_state = elementdecl_cp_separator_or_end_state;
+ env->state = ws_state;
+ token_end_position(env);
+ report_token(ELEMENTDECL_NAME_TOKEN, env);
+ next_char(env);
+ return NO_ERROR;
+ case '?':
+ case '*':
+ case '+':
+ env->state = elementdecl_cp_cardinality_state;
+ token_end_position(env);
+ report_token(ELEMENTDECL_NAME_TOKEN, env);
+ // No next_char
+ return NO_ERROR;
+ case '|':
+ case ',':
+ case ')':
+ env->state = elementdecl_cp_separator_or_end_state;
+ token_end_position(env);
+ report_token(ELEMENTDECL_NAME_TOKEN, env);
+ // No next_char
+ return NO_ERROR;
+ default:
+ break;
+ }
+
+ next_char(env);
+ if((FAXPP_char_flags(env->current_char) & env->ncname_char) == 0)
+ return INVALID_CHAR_IN_ELEMENTDECL_NAME;
+ }
+
+ // Never happens
+ return NO_ERROR;
+}
+
+FAXPP_Error
+elementdecl_cp_cardinality_state(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ if(env->nesting_level == 0)
+ env->stored_state = elementdecl_end_state;
+ else
+ env->stored_state = elementdecl_cp_separator_or_end_state;
+ env->state = ws_state;
+
+ switch(env->current_char) {
+ case '?':
+ report_empty_token(ELEMENTDECL_QUESTION_TOKEN, env);
+ break;
+ case '*':
+ report_empty_token(ELEMENTDECL_STAR_TOKEN, env);
+ break;
+ case '+':
+ report_empty_token(ELEMENTDECL_PLUS_TOKEN, env);
+ break;
+ default:
+ // No next_char
+ return NO_ERROR;
+ }
+
+ next_char(env);
+ return NO_ERROR;
+}
+
+FAXPP_Error
+elementdecl_cp_separator_or_end_state(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ case '|':
+ env->stored_state = elementdecl_cp_name_state1;
+ env->state = ws_state;
+ report_empty_token(ELEMENTDECL_BAR_TOKEN, env);
+ break;
+ case ',':
+ env->stored_state = elementdecl_cp_name_state1;
+ env->state = ws_state;
+ report_empty_token(ELEMENTDECL_COMMA_TOKEN, env);
+ break;
+ case ')':
+ env->nesting_level -= 1;
+ env->state = elementdecl_cp_cardinality_state;
+ report_empty_token(ELEMENTDECL_RPAR_TOKEN, env);
+ break;
+ default:
+ next_char(env);
+ return INVALID_ELEMENTDECL_CONTENT;
+ }
+
+ next_char(env);
+ return NO_ERROR;
+}
+
+SINGLE_CHAR_STATE(elementdecl_pcdata_state1, 'P', 0, elementdecl_pcdata_state2, INVALID_ELEMENTDECL_CONTENT)
+SINGLE_CHAR_STATE(elementdecl_pcdata_state2, 'C', 0, elementdecl_pcdata_state3, INVALID_ELEMENTDECL_CONTENT)
+SINGLE_CHAR_STATE(elementdecl_pcdata_state3, 'D', 0, elementdecl_pcdata_state4, INVALID_ELEMENTDECL_CONTENT)
+SINGLE_CHAR_STATE(elementdecl_pcdata_state4, 'A', 0, elementdecl_pcdata_state5, INVALID_ELEMENTDECL_CONTENT)
+SINGLE_CHAR_STATE(elementdecl_pcdata_state5, 'T', 0, elementdecl_pcdata_state6, INVALID_ELEMENTDECL_CONTENT)
+SINGLE_CHAR_STATE_RETURN(elementdecl_pcdata_state6, 'A', elementdecl_pcdata_end_or_names_state1, ws_state, INVALID_ELEMENTDECL_CONTENT, ELEMENTDECL_PCDATA_TOKEN)
+
+FAXPP_Error
+elementdecl_pcdata_end_or_names_state1(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ case ')':
+ env->nesting_level -= 1;
+ env->state = elementdecl_pcdata_optional_star_state;
+ report_empty_token(ELEMENTDECL_RPAR_TOKEN, env);
+ break;
+ case '|':
+ env->stored_state = elementdecl_pcdata_name_state1;
+ env->state = ws_state;
+ report_empty_token(ELEMENTDECL_BAR_TOKEN, env);
+ break;
+ default:
+ next_char(env);
+ return INVALID_ELEMENTDECL_CONTENT;
+ }
+ next_char(env);
+ return NO_ERROR;
+}
+
+FAXPP_Error
+elementdecl_pcdata_optional_star_state(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ case '*':
+ report_empty_token(ELEMENTDECL_STAR_TOKEN, env);
+ next_char(env);
+ // Fall through
+ default:
+ env->stored_state = elementdecl_end_state;
+ env->state = ws_state;
+ // No next_char
+ break;
+ }
+ return NO_ERROR;
+}
+
+FAXPP_Error
+elementdecl_pcdata_end_or_names_state2(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ case ')':
+ env->nesting_level -= 1;
+ env->state = elementdecl_pcdata_star_state;
+ report_empty_token(ELEMENTDECL_RPAR_TOKEN, env);
+ break;
+ case '|':
+ env->stored_state = elementdecl_pcdata_name_state1;
+ env->state = ws_state;
+ report_empty_token(ELEMENTDECL_BAR_TOKEN, env);
+ break;
+ default:
+ next_char(env);
+ return INVALID_ELEMENTDECL_CONTENT;
+ }
+ next_char(env);
+ return NO_ERROR;
+}
+
+FAXPP_Error
+elementdecl_pcdata_star_state(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ env->stored_state = elementdecl_end_state;
+ env->state = ws_state;
+
+ switch(env->current_char) {
+ case '*':
+ report_empty_token(ELEMENTDECL_STAR_TOKEN, env);
+ next_char(env);
+ break;
+ default:
+ next_char(env);
+ return INVALID_ELEMENTDECL_CONTENT;
+ }
+ return NO_ERROR;
+}
+
+FAXPP_Error
+elementdecl_pcdata_name_state1(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ LINE_ENDINGS
+ default:
+ env->state = elementdecl_pcdata_name_state2;
+ next_char(env);
+ if((FAXPP_char_flags(env->current_char) & env->ncname_start_char) == 0)
+ return INVALID_CHAR_IN_ELEMENTDECL_NAME;
+ break;
+ }
+
+ return NO_ERROR;
+}
+
+FAXPP_Error
+elementdecl_pcdata_name_state2(FAXPP_TokenizerEnv *env)
+{
+ while(1) {
+ read_char(env);
+
+ switch(env->current_char) {
+ WHITESPACE:
+ env->stored_state = elementdecl_pcdata_end_or_names_state2;
+ env->state = ws_state;
+ token_end_position(env);
+ report_token(ELEMENTDECL_NAME_TOKEN, env);
+ next_char(env);
+ return NO_ERROR;
+ case ')':
+ env->state = elementdecl_pcdata_end_or_names_state2;
+ token_end_position(env);
+ report_token(ELEMENTDECL_NAME_TOKEN, env);
+ // No next_char
+ return NO_ERROR;
+ case ':':
+ env->state = elementdecl_pcdata_name_seen_colon_state1;
+ token_end_position(env);
+ report_token(ELEMENTDECL_PREFIX_TOKEN, env);
+ next_char(env);
+ token_start_position(env);
+ return NO_ERROR;
+ default:
+ break;
+ }
+
+ next_char(env);
+ if((FAXPP_char_flags(env->current_char) & env->ncname_char) == 0)
+ return INVALID_CHAR_IN_ELEMENTDECL_NAME;
+ }
+
+ // Never happens
+ return NO_ERROR;
+}
+
+FAXPP_Error
+elementdecl_pcdata_name_seen_colon_state1(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ LINE_ENDINGS
+ default:
+ env->state = elementdecl_pcdata_name_seen_colon_state2;
+ next_char(env);
+ if((FAXPP_char_flags(env->current_char) & env->ncname_start_char) == 0)
+ return INVALID_CHAR_IN_ELEMENTDECL_NAME;
+ break;
+ }
+
+ return NO_ERROR;
+}
+
+FAXPP_Error
+elementdecl_pcdata_name_seen_colon_state2(FAXPP_TokenizerEnv *env)
+{
+ while(1) {
+ read_char(env);
+
+ switch(env->current_char) {
+ WHITESPACE:
+ env->stored_state = elementdecl_pcdata_end_or_names_state2;
+ env->state = ws_state;
+ token_end_position(env);
+ report_token(ELEMENTDECL_NAME_TOKEN, env);
+ next_char(env);
+ return NO_ERROR;
+ case ')':
+ env->state = elementdecl_pcdata_end_or_names_state2;
+ token_end_position(env);
+ report_token(ELEMENTDECL_NAME_TOKEN, env);
+ // No next_char
+ return NO_ERROR;
+ default:
+ break;
+ }
+
+ next_char(env);
+ if((FAXPP_char_flags(env->current_char) & env->ncname_char) == 0)
+ return INVALID_CHAR_IN_ELEMENTDECL_NAME;
+ }
+
+ // Never happens
+ return NO_ERROR;
+}
+
+FAXPP_Error
+elementdecl_end_state(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
case '>':
base_state(env);
- token_end_position(env);
- report_token(ELEMENTDECL_CONTENT_TOKEN, env);
+ report_empty_token(ELEMENTDECL_END_TOKEN, env);
break;
LINE_ENDINGS
default:
- break;
+ next_char(env);
+ return INVALID_ELEMENTDECL_CONTENT;
}
next_char(env);
return NO_ERROR;
Modified: trunk/faxpp/src/error.c
===================================================================
--- trunk/faxpp/src/error.c 2008-03-11 17:28:12 UTC (rev 41)
+++ trunk/faxpp/src/error.c 2008-03-13 21:56:47 UTC (rev 42)
@@ -129,6 +129,8 @@
return "INVALID_ATTRIBUTE_TYPE";
case INVALID_DEFAULTDECL:
return "INVALID_DEFAULTDECL";
+ case INVALID_ELEMENTDECL_CONTENT:
+ return "INVALID_ELEMENTDECL_CONTENT";
case NO_ERROR:
break;
}
Modified: trunk/faxpp/src/token.c
===================================================================
--- trunk/faxpp/src/token.c 2008-03-11 17:28:12 UTC (rev 41)
+++ trunk/faxpp/src/token.c 2008-03-13 21:56:47 UTC (rev 42)
@@ -103,8 +103,28 @@
return "ELEMENTDECL_PREFIX_TOKEN";
case ELEMENTDECL_NAME_TOKEN:
return "ELEMENTDECL_NAME_TOKEN";
- case ELEMENTDECL_CONTENT_TOKEN:
- return "ELEMENTDECL_CONTENT_TOKEN";
+ case ELEMENTDECL_EMPTY_TOKEN:
+ return "ELEMENTDECL_EMPTY_TOKEN";
+ case ELEMENTDECL_ANY_TOKEN:
+ return "ELEMENTDECL_ANY_TOKEN";
+ case ELEMENTDECL_PCDATA_TOKEN:
+ return "ELEMENTDECL_PCDATA_TOKEN";
+ case ELEMENTDECL_LPAR_TOKEN:
+ return "ELEMENTDECL_LPAR_TOKEN";
+ case ELEMENTDECL_RPAR_TOKEN:
+ return "ELEMENTDECL_RPAR_TOKEN";
+ case ELEMENTDECL_QUESTION_TOKEN:
+ return "ELEMENTDECL_QUESTION_TOKEN";
+ case ELEMENTDECL_STAR_TOKEN:
+ return "ELEMENTDECL_STAR_TOKEN";
+ case ELEMENTDECL_PLUS_TOKEN:
+ return "ELEMENTDECL_PLUS_TOKEN";
+ case ELEMENTDECL_BAR_TOKEN:
+ return "ELEMENTDECL_BAR_TOKEN";
+ case ELEMENTDECL_COMMA_TOKEN:
+ return "ELEMENTDECL_COMMA_TOKEN";
+ case ELEMENTDECL_END_TOKEN:
+ return "ELEMENTDECL_END_TOKEN";
case ATTLISTDECL_PREFIX_TOKEN:
return "ATTLISTDECL_PREFIX_TOKEN";
Modified: trunk/faxpp/src/tokenizer_states.c
===================================================================
--- trunk/faxpp/src/tokenizer_states.c 2008-03-11 17:28:12 UTC (rev 41)
+++ trunk/faxpp/src/tokenizer_states.c 2008-03-13 21:56:47 UTC (rev 42)
@@ -504,6 +504,62 @@
return "elementdecl_name_seen_colon_state2";
else if(state == elementdecl_content_state)
return "elementdecl_content_state";
+ else if(state == elementdecl_empty_state1)
+ return "elementdecl_empty_state1";
+ else if(state == elementdecl_empty_state2)
+ return "elementdecl_empty_state2";
+ else if(state == elementdecl_empty_state3)
+ return "elementdecl_empty_state3";
+ else if(state == elementdecl_empty_state4)
+ return "elementdecl_empty_state4";
+ else if(state == elementdecl_any_state1)
+ return "elementdecl_any_state1";
+ else if(state == elementdecl_any_state2)
+ return "elementdecl_any_state2";
+ else if(state == elementdecl_mixed_or_children_state)
+ return "elementdecl_mixed_or_children_state";
+ else if(state == elementdecl_cp_name_state1)
+ return "elementdecl_cp_name_state1";
+ else if(state == elementdecl_cp_name_state2)
+ return "elementdecl_cp_name_state2";
+ else if(state == elementdecl_cp_name_seen_colon_state1)
+ return "elementdecl_cp_name_seen_colon_state1";
+ else if(state == elementdecl_cp_name_seen_colon_state2)
+ return "elementdecl_cp_name_seen_colon_state2";
+ else if(state == elementdecl_cp_cardinality_state)
+ return "elementdecl_cp_cardinality_state";
+ else if(state == elementdecl_cp_separator_or_end_state)
+ return "elementdecl_cp_separator_or_end_state";
+ else if(state == elementdecl_pcdata_state1)
+ return "elementdecl_pcdata_state1";
+ else if(state == elementdecl_pcdata_state2)
+ return "elementdecl_pcdata_state2";
+ else if(state == elementdecl_pcdata_state3)
+ return "elementdecl_pcdata_state3";
+ else if(state == elementdecl_pcdata_state4)
+ return "elementdecl_pcdata_state4";
+ else if(state == elementdecl_pcdata_state5)
+ return "elementdecl_pcdata_state5";
+ else if(state == elementdecl_pcdata_state6)
+ return "elementdecl_pcdata_state6";
+ else if(state == elementdecl_pcdata_end_or_names_state1)
+ return "elementdecl_pcdata_end_or_names_state1";
+ else if(state == elementdecl_pcdata_optional_star_state)
+ return "elementdecl_pcdata_optional_star_state";
+ else if(state == elementdecl_pcdata_end_or_names_state2)
+ return "elementdecl_pcdata_end_or_names_state2";
+ else if(state == elementdecl_pcdata_star_state)
+ return "elementdecl_pcdata_star_state";
+ else if(state == elementdecl_pcdata_name_state1)
+ return "elementdecl_pcdata_name_state1";
+ else if(state == elementdecl_pcdata_name_state2)
+ return "elementdecl_pcdata_name_state2";
+ else if(state == elementdecl_pcdata_name_seen_colon_state1)
+ return "elementdecl_pcdata_name_seen_colon_state1";
+ else if(state == elementdecl_pcdata_name_seen_colon_state2)
+ return "elementdecl_pcdata_name_seen_colon_state2";
+ else if(state == elementdecl_end_state)
+ return "elementdecl_end_state";
else if(state == attlistdecl_initial_state1)
return "attlistdecl_initial_state1";
Modified: trunk/faxpp/src/tokenizer_states.h
===================================================================
--- trunk/faxpp/src/tokenizer_states.h 2008-03-11 17:28:12 UTC (rev 41)
+++ trunk/faxpp/src/tokenizer_states.h 2008-03-13 21:56:47 UTC (rev 42)
@@ -302,6 +302,34 @@
FAXPP_Error elementdecl_name_seen_colon_state1(FAXPP_TokenizerEnv *env);
FAXPP_Error elementdecl_name_seen_colon_state2(FAXPP_TokenizerEnv *env);
FAXPP_Error elementdecl_content_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_empty_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_empty_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_empty_state3(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_empty_state4(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_any_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_any_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_mixed_or_children_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_cp_name_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_cp_name_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_cp_name_seen_colon_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_cp_name_seen_colon_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_cp_cardinality_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_cp_separator_or_end_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_pcdata_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_pcdata_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_pcdata_state3(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_pcdata_state4(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_pcdata_state5(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_pcdata_state6(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_pcdata_end_or_names_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_pcdata_optional_star_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_pcdata_end_or_names_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_pcdata_star_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_pcdata_name_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_pcdata_name_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_pcdata_name_seen_colon_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_pcdata_name_seen_colon_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_end_state(FAXPP_TokenizerEnv *env);
FAXPP_Error attlistdecl_initial_state1(FAXPP_TokenizerEnv *env);
FAXPP_Error attlistdecl_initial_state2(FAXPP_TokenizerEnv *env);
@@ -426,7 +454,7 @@
*********************/
#ifdef DEBUG
-const char *state_to_string(FAXPP_StateFunction state);
+const char *FAXPP_state_to_string(FAXPP_StateFunction state);
#endif
#define read_char_no_check(env) \
@@ -441,7 +469,7 @@
} \
\
/* printf("%03d:%03d State: %s, Byte: %c, Char: %08X\n", (env)->line, (env)->column, */ \
-/* state_to_string((env)->state), *(unsigned char*)(env)->position, */ \
+/* FAXPP_state_to_string((env)->state), *(unsigned char*)(env)->position, */ \
/* (env)->current_char); */ \
}
Modified: trunk/faxpp/src/xml_parser.c
===================================================================
--- trunk/faxpp/src/xml_parser.c 2008-03-11 17:28:12 UTC (rev 41)
+++ trunk/faxpp/src/xml_parser.c 2008-03-13 21:56:47 UTC (rev 42)
@@ -1562,7 +1562,18 @@
break;
case ELEMENTDECL_PREFIX_TOKEN:
case ELEMENTDECL_NAME_TOKEN:
- case ELEMENTDECL_CONTENT_TOKEN:
+ case ELEMENTDECL_EMPTY_TOKEN:
+ case ELEMENTDECL_ANY_TOKEN:
+ case ELEMENTDECL_PCDATA_TOKEN:
+ case ELEMENTDECL_LPAR_TOKEN:
+ case ELEMENTDECL_RPAR_TOKEN:
+ case ELEMENTDECL_QUESTION_TOKEN:
+ case ELEMENTDECL_STAR_TOKEN:
+ case ELEMENTDECL_PLUS_TOKEN:
+ case ELEMENTDECL_BAR_TOKEN:
+ case ELEMENTDECL_COMMA_TOKEN:
+ case ELEMENTDECL_END_TOKEN:
+
case ATTLISTDECL_ATTDEF_PREFIX_TOKEN:
case ATTLISTDECL_ATTDEF_NAME_TOKEN:
case ATTLISTDECL_NOTATION_NAME_TOKEN:
@@ -1615,7 +1626,17 @@
case PE_REFERENCE_TOKEN:
case ELEMENTDECL_PREFIX_TOKEN:
case ELEMENTDECL_NAME_TOKEN:
- case ELEMENTDECL_CONTENT_TOKEN:
+ case ELEMENTDECL_EMPTY_TOKEN:
+ case ELEMENTDECL_ANY_TOKEN:
+ case ELEMENTDECL_PCDATA_TOKEN:
+ case ELEMENTDECL_LPAR_TOKEN:
+ case ELEMENTDECL_RPAR_TOKEN:
+ case ELEMENTDECL_QUESTION_TOKEN:
+ case ELEMENTDECL_STAR_TOKEN:
+ case ELEMENTDECL_PLUS_TOKEN:
+ case ELEMENTDECL_BAR_TOKEN:
+ case ELEMENTDECL_COMMA_TOKEN:
+ case ELEMENTDECL_END_TOKEN:
case ATTLISTDECL_PREFIX_TOKEN:
case ATTLISTDECL_NAME_TOKEN:
case ATTLISTDECL_ATTDEF_PREFIX_TOKEN:
Modified: trunk/faxpp/tests/xmlconf_runner.c
===================================================================
--- trunk/faxpp/tests/xmlconf_runner.c 2008-03-11 17:28:12 UTC (rev 41)
+++ trunk/faxpp/tests/xmlconf_runner.c 2008-03-13 21:56:47 UTC (rev 42)
@@ -23,10 +23,13 @@
#include "../examples/entity_resolver.h"
#include "../examples/output_event.h"
-void error(FAXPP_Error err, unsigned int line, unsigned int column)
+void error(const FAXPP_Parser *parser, FAXPP_Error err)
{
+ unsigned int line = FAXPP_get_error_line(parser);
+
if(line != 0) {
- fprintf(stderr, "%03d:%03d FAXPP_Error: %s\n", line, column, FAXPP_err_to_string(err));
+ output_text(FAXPP_get_base_uri(parser), stderr);
+ fprintf(stderr, ":%03d:%03d FAXPP_Error: %s\n", line, FAXPP_get_error_column(parser), FAXPP_err_to_string(err));
} else {
fprintf(stderr, "FAXPP_Error: %s\n", FAXPP_err_to_string(err));
}
@@ -140,10 +143,10 @@
FAXPP_set_external_entity_callback(parser, entity_callback, 0);
err = FAXPP_init_parse_file(parser, file);
- if(err != NO_ERROR) error(err, 0, 0);
+ if(err != NO_ERROR) error(parser, err);
err = FAXPP_set_base_uri_str(parser, testFile);
- if(err != NO_ERROR) error(err, 0, 0);
+ if(err != NO_ERROR) error(parser, err);
while((err = FAXPP_next_event(parser)) == 0) {
event = FAXPP_get_current_event(parser);
@@ -275,8 +278,7 @@
}
}
- if(err != NO_ERROR) error(err, FAXPP_get_error_line(parser),
- FAXPP_get_error_column(parser));
+ if(err != NO_ERROR) error(parser, err);
cleanup:
printf("\n\nTests run: %d, Tests passed: %d, Tests skipped: %d, Tests failed: %d (%.3f%%)\n", test_passes + test_failures + test_skips,
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|