diff --git a/tinyxml2.cpp b/tinyxml2.cpp index 66ef0c9..af48c14 100644 --- a/tinyxml2.cpp +++ b/tinyxml2.cpp @@ -2577,7 +2577,7 @@ void XMLDocument::PopDepth() --_parsingDepth; } -XMLPrinter::XMLPrinter( FILE* file, bool compact, int depth ) : +XMLPrinter::XMLPrinter( FILE* file, bool compact, int depth, EscapeAposCharsInAttributes aposInAttributes ) : _elementJustOpened( false ), _stack(), _firstElement( true ), @@ -2594,9 +2594,11 @@ XMLPrinter::XMLPrinter( FILE* file, bool compact, int depth ) : } for( int i=0; i(entityValue); - TIXMLASSERT( flagIndex < ENTITY_RANGE ); - _entityFlag[flagIndex] = true; + if ((aposInAttributes == ESCAPE_APOS_CHARS_IN_ATTRIBUTES) || (entityValue != SINGLE_QUOTE)) { + const unsigned char flagIndex = static_cast(entityValue); + TIXMLASSERT( flagIndex < ENTITY_RANGE ); + _entityFlag[flagIndex] = true; + } } _restrictedEntityFlag[static_cast('&')] = true; _restrictedEntityFlag[static_cast('<')] = true; diff --git a/tinyxml2.h b/tinyxml2.h index 8179f57..aefe876 100644 --- a/tinyxml2.h +++ b/tinyxml2.h @@ -2240,13 +2240,18 @@ private: class TINYXML2_LIB XMLPrinter : public XMLVisitor { public: + enum EscapeAposCharsInAttributes { + ESCAPE_APOS_CHARS_IN_ATTRIBUTES, + DONT_ESCAPE_APOS_CHARS_IN_ATTRIBUTES + }; + /** Construct the printer. If the FILE* is specified, this will print to the FILE. Else it will print to memory, and the result is available in CStr(). If 'compact' is set to true, then output is created with only required whitespace and newlines. */ - XMLPrinter( FILE* file=0, bool compact = false, int depth = 0 ); + XMLPrinter( FILE* file=0, bool compact = false, int depth = 0, EscapeAposCharsInAttributes aposInAttributes = ESCAPE_APOS_CHARS_IN_ATTRIBUTES ); virtual ~XMLPrinter() {} /** If streaming, write the BOM and declaration. */