added entity input support.
diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index 3bf058e..a8a7be3 100644
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -14,6 +14,22 @@
 static const char SINGLE_QUOTE			= '\'';

 static const char DOUBLE_QUOTE			= '\"';

 

+struct Entity {

+	const char* pattern;

+	int length;

+	char value;

+};

+

+static const int NUM_ENTITIES = 5;

+static const Entity entities[NUM_ENTITIES] = 

+{

+	{ "quot", 4,	'\"' },

+	{ "amp", 3,		'&'  },

+	{ "apos", 4,	'\'' },

+	{ "lt",	2, 		'<'	 },

+	{ "gt",	2,		'>'	 }

+};

+

 

 // --------- CharBuffer ----------- //

 /*static*/ CharBuffer* CharBuffer::Construct( const char* in )

@@ -37,13 +53,14 @@
 {

 	if ( flags & NEEDS_FLUSH ) {

 		*end = 0;

+		flags ^= NEEDS_FLUSH;

 

-		if ( flags & ( NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION ) ) {

+		if ( flags ) {

 			char* p = start;

 			char* q = start;

 

 			while( p < end ) {

-				if ( *p == CR ) {

+				if ( (flags & NEEDS_NEWLINE_NORMALIZATION) && *p == CR ) {

 					// CR-LF pair becomes LF

 					// CR alone becomes LF

 					// LF-CR becomes LF

@@ -55,7 +72,7 @@
 					}

 					*q = LF;

 				}

-				else if ( *p == LF ) {

+				else if ( (flags & NEEDS_NEWLINE_NORMALIZATION) && *p == LF ) {

 					if ( *(p+1) == CR ) {

 						p += 2;

 					}

@@ -64,12 +81,32 @@
 					}

 					*q = LF;

 				}

+				else if ( (flags & NEEDS_ENTITY_PROCESSING) && *p == '&' ) {

+					int i=0;

+					for( i=0; i<NUM_ENTITIES; ++i ) {

+						if (    strncmp( p+1, entities[i].pattern, entities[i].length ) == 0

+							 && *(p+entities[i].length+1) == ';' ) 

+						{

+							// Found an entity convert;

+							*q = entities[i].value;

+							++q;

+							p += entities[i].length + 2;

+							break;

+						}

+					}

+					if ( i == NUM_ENTITIES ) {

+						// fixme: treat as error?

+						++p;

+						++q;

+					}

+				}

 				else {

 					*q = *p;

 					++p;

 					++q;

 				}

 			}

+			*q = 0;

 		}

 		flags = 0;

 	}

@@ -276,15 +313,6 @@
 	return 0;

 }

 

-/*

-void XMLNode::PrintSpace( FILE* fp, int depth ) 

-{

-	for( int i=0; i<depth; ++i ) {

-		fprintf( fp, "    " );

-	}

-}

-*/

-

 // --------- XMLText ---------- //

 char* XMLText::ParseDeep( char* p )

 {

@@ -480,28 +508,6 @@
 		node->Print( streamer );

 	}

 	streamer->CloseElement();

-

-/*	if ( firstChild ) {

-		fprintf( cfile, ">", Name() );

-		if ( !IsTextParent() ) {

-			fprintf( cfile, "\n" );

-		}

-

-		for( XMLNode* node=firstChild; node; node=node->next ) {

-			node->Print( cfile, depth+1 );

-		}

-

-		fprintf( cfile, "</%s>", Name() );

-		if ( !IsTextParent() ) {

-			fprintf( cfile, "\n" );

-		}

-	}

-	else {

-		fprintf( cfile, "/>" );

-		if ( !IsTextParent() ) {

-			fprintf( cfile, "\n" );

-		}

-	}*/

 }