[Faxpp-devel] SF.net SVN: faxpp: [34] trunk/faxpp
Status: Beta
Brought to you by:
jpcs
From: <jp...@us...> - 2007-10-03 10:49:25
|
Revision: 34 http://faxpp.svn.sourceforge.net/faxpp/?rev=34&view=rev Author: jpcs Date: 2007-10-03 02:39:11 -0700 (Wed, 03 Oct 2007) Log Message: ----------- Implemented tokenizing of parameter entity references. Modified Paths: -------------- trunk/faxpp/include/faxpp/token.h trunk/faxpp/src/doctype.c trunk/faxpp/src/reference.c trunk/faxpp/src/token.c trunk/faxpp/src/tokenizer_states.c trunk/faxpp/src/tokenizer_states.h trunk/faxpp/src/xml_parser.c Modified: trunk/faxpp/include/faxpp/token.h =================================================================== --- trunk/faxpp/include/faxpp/token.h 2007-09-28 00:29:16 UTC (rev 33) +++ trunk/faxpp/include/faxpp/token.h 2007-10-03 09:39:11 UTC (rev 34) @@ -63,6 +63,7 @@ ENTITY_REFERENCE_TOKEN, DEC_CHAR_REFERENCE_TOKEN, HEX_CHAR_REFERENCE_TOKEN, + PE_REFERENCE_TOKEN, DOCTYPE_PREFIX_TOKEN, DOCTYPE_NAME_TOKEN, Modified: trunk/faxpp/src/doctype.c =================================================================== --- trunk/faxpp/src/doctype.c 2007-09-28 00:29:16 UTC (rev 33) +++ trunk/faxpp/src/doctype.c 2007-10-03 09:39:11 UTC (rev 34) @@ -240,7 +240,7 @@ next_char(env); break; default: - next_char(env); + env->state = system_literal_start_state; return EXPECTING_WHITESPACE; } return NO_ERROR; @@ -343,7 +343,7 @@ next_char(env); break; default: - next_char(env); + env->state = pubid_literal_start_state; return EXPECTING_WHITESPACE; } return NO_ERROR; @@ -493,6 +493,12 @@ break; WHITESPACE: break; + case '%': + store_state(env); + env->state = parameter_entity_reference_state; + next_char(env); + token_start_position(env); + return NO_ERROR; case '<': env->state = internal_subset_markup_state; break; Modified: trunk/faxpp/src/reference.c =================================================================== --- trunk/faxpp/src/reference.c 2007-09-28 00:29:16 UTC (rev 33) +++ trunk/faxpp/src/reference.c 2007-10-03 09:39:11 UTC (rev 34) @@ -332,6 +332,33 @@ } FAXPP_Error +parameter_entity_reference_state(FAXPP_TokenizerEnv *env) +{ + while(1) { + read_char(env); + + switch(env->current_char) { + LINE_ENDINGS + break; + case ';': + retrieve_state(env); + token_end_position(env); + report_token(PE_REFERENCE_TOKEN, env); + next_char(env); + token_start_position(env); + return NO_ERROR; + } + + next_char(env); + if((FAXPP_char_flags(env->current_char) & env->ncname_char) == 0) + return INVALID_CHAR_IN_ENTITY_REFERENCE; + } + + // Never happens + return NO_ERROR; +} + +FAXPP_Error char_reference_state(FAXPP_TokenizerEnv *env) { read_char(env); Modified: trunk/faxpp/src/token.c =================================================================== --- trunk/faxpp/src/token.c 2007-09-28 00:29:16 UTC (rev 33) +++ trunk/faxpp/src/token.c 2007-10-03 09:39:11 UTC (rev 34) @@ -52,6 +52,8 @@ return "ATTRIBUTE_PREFIX_TOKEN"; case ENTITY_REFERENCE_TOKEN: return "ENTITY_REFERENCE_TOKEN"; + case PE_REFERENCE_TOKEN: + return "PE_REFERENCE_TOKEN"; case DEC_CHAR_REFERENCE_TOKEN: return "DEC_CHAR_REFERENCE_TOKEN"; case HEX_CHAR_REFERENCE_TOKEN: Modified: trunk/faxpp/src/tokenizer_states.c =================================================================== --- trunk/faxpp/src/tokenizer_states.c 2007-09-28 00:29:16 UTC (rev 33) +++ trunk/faxpp/src/tokenizer_states.c 2007-10-03 09:39:11 UTC (rev 34) @@ -246,6 +246,8 @@ return "quot_entity_reference_state4"; else if(state == entity_reference_state) return "entity_reference_state"; + else if(state == parameter_entity_reference_state) + return "parameter_entity_reference_state"; else if(state == char_reference_state) return "char_reference_state"; else if(state == dec_char_reference_state) Modified: trunk/faxpp/src/tokenizer_states.h =================================================================== --- trunk/faxpp/src/tokenizer_states.h 2007-09-28 00:29:16 UTC (rev 33) +++ trunk/faxpp/src/tokenizer_states.h 2007-10-03 09:39:11 UTC (rev 34) @@ -167,6 +167,7 @@ FAXPP_Error quot_entity_reference_state3(FAXPP_TokenizerEnv *env); FAXPP_Error quot_entity_reference_state4(FAXPP_TokenizerEnv *env); FAXPP_Error entity_reference_state(FAXPP_TokenizerEnv *env); +FAXPP_Error parameter_entity_reference_state(FAXPP_TokenizerEnv *env); FAXPP_Error char_reference_state(FAXPP_TokenizerEnv *env); FAXPP_Error dec_char_reference_state(FAXPP_TokenizerEnv *env); FAXPP_Error hex_char_reference_state1(FAXPP_TokenizerEnv *env); @@ -396,7 +397,8 @@ #define LINE_ENDINGS \ case '\r': { \ Char32 next_char; \ - if((env)->decode((env)->position + (env)->char_len, (env)->buffer_end, &next_char) \ + if((env)->position + (env)->char_len >= (env)->buffer_end || \ + (env)->decode((env)->position + (env)->char_len, (env)->buffer_end, &next_char) \ == TRANSCODE_PREMATURE_END_OF_BUFFER) { \ if(!(env)->buffer_done) return PREMATURE_END_OF_BUFFER; \ goto LINE_ENDINGS_INC; \ Modified: trunk/faxpp/src/xml_parser.c =================================================================== --- trunk/faxpp/src/xml_parser.c 2007-09-28 00:29:16 UTC (rev 33) +++ trunk/faxpp/src/xml_parser.c 2007-10-03 09:39:11 UTC (rev 34) @@ -815,6 +815,7 @@ case DOCTYPE_END_TOKEN: case SYSTEM_LITERAL_TOKEN: case PUBID_LITERAL_TOKEN: + case PE_REFERENCE_TOKEN: // TBD - jpcs break; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |