Fixed GitHub Issue #70

Interleave XML entities are now encoded correctly
This commit is contained in:
Phil Nash
2012-02-10 18:58:06 +00:00
parent a162e22fa3
commit 0b09d1c089
3 changed files with 36 additions and 25 deletions

View File

@@ -294,32 +294,30 @@ namespace Catch
const std::string& text
)
{
// !TBD finish this
if( !findReplaceableString( text, "<", "&lt;" ) &&
!findReplaceableString( text, "&", "&amp;" ) &&
!findReplaceableString( text, "\"", "&quot;" ) )
static const char* charsToEncode = "<&\"";
std::string mtext = text;
std::string::size_type pos = mtext.find_first_of( charsToEncode );
while( pos != std::string::npos )
{
stream() << text;
stream() << mtext.substr( 0, pos );
switch( mtext[pos] )
{
case '<':
stream() << "&lt;";
break;
case '&':
stream() << "&amp;";
break;
case '\"':
stream() << "&quot;";
break;
}
mtext = mtext.substr( pos+1 );
pos = mtext.find_first_of( charsToEncode );
}
}
///////////////////////////////////////////////////////////////////////
bool findReplaceableString
(
const std::string& text,
const std::string& replaceWhat,
const std::string& replaceWith
)
{
std::string::size_type pos = text.find_first_of( replaceWhat );
if( pos != std::string::npos )
{
stream() << text.substr( 0, pos ) << replaceWith;
writeEncodedText( text.substr( pos+1 ) );
return true;
}
return false;
}
stream() << mtext;
}
bool m_tagIsOpen;
bool m_needsNewline;