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