FAXPP_Error elementdecl_cp_separator_or_end_state(FAXPP_TokenizerEnv *env) { read_char(env); switch(env->current_char) { case '|': env->state = elementdecl_cp_name_ws_state; report_empty_token(ELEMENTDECL_BAR_TOKEN, env); break; case ',': env->state = elementdecl_cp_name_ws_state; report_empty_token(ELEMENTDECL_COMMA_TOKEN, env); break; case ')': env->elemdecl_content_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; }
FAXPP_Error elementdecl_cp_cardinality_state(FAXPP_TokenizerEnv *env) { read_char(env); if(env->elemdecl_content_level == 0) { env->state = elementdecl_end_ws_state; } else { env->state = elementdecl_cp_separator_or_end_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_content_state(FAXPP_TokenizerEnv *env) { 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->elemdecl_content_level += 1; env->state = elementdecl_mixed_or_children_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; }
FAXPP_Error elementdecl_pcdata_end_or_names_state1(FAXPP_TokenizerEnv *env) { read_char(env); switch(env->current_char) { case ')': env->elemdecl_content_level -= 1; env->state = elementdecl_pcdata_optional_star_state; report_empty_token(ELEMENTDECL_RPAR_TOKEN, env); break; case '|': env->state = elementdecl_pcdata_name_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->state = elementdecl_end_ws_state; // No next_char break; } return NO_ERROR; }
FAXPP_Error elementdecl_pcdata_star_state(FAXPP_TokenizerEnv *env) { read_char(env); env->state = elementdecl_end_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_end_state(FAXPP_TokenizerEnv *env) { read_char(env); switch(env->current_char) { case '>': env->nesting_level -= 1; base_state(env); report_empty_token(ELEMENTDECL_END_TOKEN, env); break; LINE_ENDINGS default: next_char(env); return INVALID_ELEMENTDECL_CONTENT; } next_char(env); return NO_ERROR; }
FAXPP_Error xml_decl_seen_question_state(FAXPP_TokenizerEnv *env) { read_char(env); switch(env->current_char) { case '>': env->state = initial_misc_state; report_empty_token(XML_DECL_END_TOKEN, env); next_char(env); token_start_position(env); break; LINE_ENDINGS default: next_char(env); return INVALID_CHAR_IN_XML_DECL; } return NO_ERROR; }
FAXPP_Error elementdecl_cp_name_state1(FAXPP_TokenizerEnv *env) { read_char(env); switch(env->current_char) { case '(': env->elemdecl_content_level += 1; env->state = elementdecl_cp_name_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; }