properly quote characters when streaming out XML properties

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24016 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík 2003-09-30 19:08:28 +00:00
parent 6612393c00
commit ebf0700dda

View File

@ -604,7 +604,8 @@ inline static void OutputString(wxOutputStream& stream, const wxString& str,
// Same as above, but create entities first.
// Translates '<' to "&lt;", '>' to "&gt;" and '&' to "&amp;"
static void OutputStringEnt(wxOutputStream& stream, const wxString& str,
wxMBConv *convMem, wxMBConv *convFile)
wxMBConv *convMem, wxMBConv *convFile,
bool escapeQuotes = false)
{
wxString buf;
size_t i, last, len;
@ -616,7 +617,8 @@ static void OutputStringEnt(wxOutputStream& stream, const wxString& str,
{
c = str.GetChar(i);
if (c == wxT('<') || c == wxT('>') ||
(c == wxT('&') && str.Mid(i+1, 4) != wxT("amp;")))
(c == wxT('&') && str.Mid(i+1, 4) != wxT("amp;")) ||
(escapeQuotes && c == wxT('"')))
{
OutputString(stream, str.Mid(last, i - last), convMem, convFile);
switch (c)
@ -630,6 +632,9 @@ static void OutputStringEnt(wxOutputStream& stream, const wxString& str,
case wxT('&'):
OutputString(stream, wxT("&amp;"), NULL, NULL);
break;
case wxT('"'):
OutputString(stream, wxT("&quot;"), NULL, NULL);
break;
default: break;
}
last = i + 1;
@ -665,10 +670,11 @@ static void OutputNode(wxOutputStream& stream, wxXmlNode *node, int indent,
prop = node->GetProperties();
while (prop)
{
OutputString(stream, wxT(" ") + prop->GetName() +
wxT("=\"") + prop->GetValue() + wxT("\""),
OutputString(stream, wxT(" ") + prop->GetName() + wxT("=\""),
NULL, NULL);
// FIXME - what if prop contains '"'?
OutputStringEnt(stream, prop->GetValue(), NULL, NULL,
true/*escapeQuotes*/);
OutputString(stream, wxT("\""), NULL, NULL);
prop = prop->GetNext();
}