[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.
|