Преглед изворни кода

In PrintString, move the optimization under the if ( _processEntities ) block and retain the strlen Write in the new else block. Added a test case.

Derek Quam пре 7 година
родитељ
комит
be69ae6352
2 измењених фајлова са 20 додато и 7 уклоњено
  1. 9 7
      tinyxml2.cpp
  2. 11 0
      xmltest.cpp

+ 9 - 7
tinyxml2.cpp

@@ -2523,14 +2523,16 @@ void XMLPrinter::PrintString( const char* p, bool restricted )
             ++q;
             ++q;
             TIXMLASSERT( p <= q );
             TIXMLASSERT( p <= q );
         }
         }
+        // Flush the remaining string. This will be the entire
+        // string if an entity wasn't found.
+        if ( p < q ) {
+            const size_t delta = q - p;
+            const int toPrint = ( INT_MAX < delta ) ? INT_MAX : (int)delta;
+            Write( p, toPrint );
+        }
     }
     }
-    // Flush the remaining string. This will be the entire
-    // string if an entity wasn't found.
-    TIXMLASSERT( p <= q );
-    if ( !_processEntities || ( p < q ) ) {
-        const size_t delta = q - p;
-        const int toPrint = ( INT_MAX < delta ) ? INT_MAX : (int)delta;
-        Write( p, toPrint );
+    else {
+        Write( p );
     }
     }
 }
 }
 
 

+ 11 - 0
xmltest.cpp

@@ -1995,6 +1995,17 @@ int main( int argc, const char ** argv )
 		}
 		}
 	}
 	}
 
 
+	{
+		const char* html("<!DOCTYPE html><html><body><p>test</p><p><br/></p></body></html>");
+		XMLDocument doc(false);
+		doc.Parse(html);
+
+		XMLPrinter printer(0, true);
+		doc.Print(&printer);
+
+		XMLTest(html, html, printer.CStr());
+	}
+
 	{
 	{
 		// Evil memory leaks. 
 		// Evil memory leaks. 
 		// If an XMLElement (etc) is allocated via NewElement() (etc.)
 		// If an XMLElement (etc) is allocated via NewElement() (etc.)