X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/865bb3251ecf83ddac350b734f4fed1d258e250b..6eae1f7d48196dea9968c8e478f28a4166bd0fe9:/src/xml/xml.cpp diff --git a/src/xml/xml.cpp b/src/xml/xml.cpp index 6d7f33c7ff..c17c12e9c3 100644 --- a/src/xml/xml.cpp +++ b/src/xml/xml.cpp @@ -8,10 +8,6 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "xml.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -127,11 +123,11 @@ bool wxXmlNode::HasProp(const wxString& propName) const while (prop) { - if (prop->GetName() == propName) return TRUE; + if (prop->GetName() == propName) return true; prop = prop->GetNext(); } - return FALSE; + return false; } bool wxXmlNode::GetPropVal(const wxString& propName, wxString *value) const @@ -143,12 +139,12 @@ bool wxXmlNode::GetPropVal(const wxString& propName, wxString *value) const if (prop->GetName() == propName) { *value = prop->GetValue(); - return TRUE; + return true; } prop = prop->GetNext(); } - return FALSE; + return false; } wxString wxXmlNode::GetPropVal(const wxString& propName, const wxString& defaultVal) const @@ -194,13 +190,13 @@ void wxXmlNode::InsertChild(wxXmlNode *child, wxXmlNode *before_node) bool wxXmlNode::RemoveChild(wxXmlNode *child) { if (m_children == NULL) - return FALSE; + return false; else if (m_children == child) { m_children = child->m_next; child->m_parent = NULL; child->m_next = NULL; - return TRUE; + return true; } else { @@ -212,11 +208,11 @@ bool wxXmlNode::RemoveChild(wxXmlNode *child) ch->m_next = child->m_next; child->m_parent = NULL; child->m_next = NULL; - return TRUE; + return true; } ch = ch->m_next; } - return FALSE; + return false; } } @@ -242,7 +238,7 @@ bool wxXmlNode::DeleteProperty(const wxString& name) wxXmlProperty *prop; if (m_properties == NULL) - return FALSE; + return false; else if (m_properties->GetName() == name) { @@ -250,7 +246,7 @@ bool wxXmlNode::DeleteProperty(const wxString& name) m_properties = prop->GetNext(); prop->SetNext(NULL); delete prop; - return TRUE; + return true; } else @@ -264,11 +260,11 @@ bool wxXmlNode::DeleteProperty(const wxString& name) p->SetNext(prop->GetNext()); prop->SetNext(NULL); delete prop; - return TRUE; + return true; } p = p->GetNext(); } - return FALSE; + return false; } } @@ -431,11 +427,11 @@ static void TextHnd(void *userData, const char *s, int len) } else { - bool whiteOnly = TRUE; + bool whiteOnly = true; for (char *c = buf; *c != '\0'; c++) if (*c != ' ' && *c != '\t' && *c != '\n' && *c != '\r') { - whiteOnly = FALSE; + whiteOnly = false; break; } if (!whiteOnly) @@ -569,9 +565,9 @@ bool wxXmlDocument::Load(wxInputStream& stream, const wxString& encoding) if (ok) { - if (!ctx.version.IsEmpty()) + if (!ctx.version.empty()) SetVersion(ctx.version); - if (!ctx.encoding.IsEmpty()) + if (!ctx.encoding.empty()) SetFileEncoding(ctx.encoding); SetRoot(ctx.root); } @@ -598,33 +594,42 @@ bool wxXmlDocument::Load(wxInputStream& stream, const wxString& encoding) // write string to output: inline static void OutputString(wxOutputStream& stream, const wxString& str, -#if wxUSE_UNICODE - wxMBConv * WXUNUSED(convMem), -#else - wxMBConv *convMem, -#endif - wxMBConv *convFile) + wxMBConv *convMem = NULL, + wxMBConv *convFile = NULL) { - if (str.IsEmpty()) return; + if (str.empty()) + return; + #if wxUSE_UNICODE + wxUnusedVar(convMem); + const wxWX2MBbuf buf(str.mb_str(*(convFile ? convFile : &wxConvUTF8))); stream.Write((const char*)buf, strlen((const char*)buf)); -#else - if ( convFile == NULL ) - stream.Write(str.mb_str(), str.Len()); - else +#else // !wxUSE_UNICODE + if ( convFile && convMem ) { wxString str2(str.wc_str(*convMem), *convFile); stream.Write(str2.mb_str(), str2.Len()); } -#endif + else // no conversions to do + { + stream.Write(str.mb_str(), str.Len()); + } +#endif // wxUSE_UNICODE/!wxUSE_UNICODE } +// flags for OutputStringEnt() +enum +{ + XML_ESCAPE_QUOTES = 1 +}; + // Same as above, but create entities first. // Translates '<' to "<", '>' to ">" and '&' to "&" static void OutputStringEnt(wxOutputStream& stream, const wxString& str, - wxMBConv *convMem, wxMBConv *convFile, - bool escapeQuotes = false) + wxMBConv *convMem = NULL, + wxMBConv *convFile = NULL, + int flags = 0) { wxString buf; size_t i, last, len; @@ -637,24 +642,25 @@ 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;")) || - (escapeQuotes && c == wxT('"'))) + ((flags & XML_ESCAPE_QUOTES) && c == wxT('"'))) { OutputString(stream, str.Mid(last, i - last), convMem, convFile); switch (c) { case wxT('<'): - OutputString(stream, wxT("<"), NULL, NULL); + OutputString(stream, wxT("<")); break; case wxT('>'): - OutputString(stream, wxT(">"), NULL, NULL); + OutputString(stream, wxT(">")); break; case wxT('&'): - OutputString(stream, wxT("&"), NULL, NULL); + OutputString(stream, wxT("&")); break; case wxT('"'): - OutputString(stream, wxT("""), NULL, NULL); + OutputString(stream, wxT(""")); + break; + default: break; - default: break; } last = i + 1; } @@ -667,7 +673,7 @@ inline static void OutputIndentation(wxOutputStream& stream, int indent) wxString str = wxT("\n"); for (int i = 0; i < indent; i++) str << wxT(' ') << wxT(' '); - OutputString(stream, str, NULL, NULL); + OutputString(stream, str); } static void OutputNode(wxOutputStream& stream, wxXmlNode *node, int indent, @@ -683,23 +689,22 @@ static void OutputNode(wxOutputStream& stream, wxXmlNode *node, int indent, break; case wxXML_ELEMENT_NODE: - OutputString(stream, wxT("<"), NULL, NULL); - OutputString(stream, node->GetName(), NULL, NULL); + OutputString(stream, wxT("<")); + OutputString(stream, node->GetName()); prop = node->GetProperties(); while (prop) { - OutputString(stream, wxT(" ") + prop->GetName() + wxT("=\""), - NULL, NULL); - OutputStringEnt(stream, prop->GetValue(), NULL, NULL, - true/*escapeQuotes*/); - OutputString(stream, wxT("\""), NULL, NULL); + OutputString(stream, wxT(" ") + prop->GetName() + wxT("=\"")); + OutputStringEnt(stream, prop->GetValue(), convMem, convFile, + XML_ESCAPE_QUOTES); + OutputString(stream, wxT("\"")); prop = prop->GetNext(); } if (node->GetChildren()) { - OutputString(stream, wxT(">"), NULL, NULL); + OutputString(stream, wxT(">")); prev = NULL; n = node->GetChildren(); while (n) @@ -712,18 +717,18 @@ static void OutputNode(wxOutputStream& stream, wxXmlNode *node, int indent, } if (prev && prev->GetType() != wxXML_TEXT_NODE) OutputIndentation(stream, indent); - OutputString(stream, wxT("GetName(), NULL, NULL); - OutputString(stream, wxT(">"), NULL, NULL); + OutputString(stream, wxT("GetName()); + OutputString(stream, wxT(">")); } else - OutputString(stream, wxT("/>"), NULL, NULL); + OutputString(stream, wxT("/>")); break; case wxXML_COMMENT_NODE: - OutputString(stream, wxT(""), NULL, NULL); + OutputString(stream, wxT("-->")); break; default: @@ -734,14 +739,16 @@ static void OutputNode(wxOutputStream& stream, wxXmlNode *node, int indent, bool wxXmlDocument::Save(wxOutputStream& stream) const { if ( !IsOk() ) - return FALSE; + return false; wxString s; - wxMBConv *convMem = NULL, *convFile = NULL; + wxMBConv *convMem = NULL; + #if wxUSE_UNICODE - convFile = new wxCSConv(GetFileEncoding()); + wxMBConv *convFile = new wxCSConv(GetFileEncoding()); #else + wxMBConv *convFile = NULL; if ( GetFileEncoding() != GetEncoding() ) { convFile = new wxCSConv(GetFileEncoding()); @@ -751,17 +758,17 @@ bool wxXmlDocument::Save(wxOutputStream& stream) const s.Printf(wxT("\n"), GetVersion().c_str(), GetFileEncoding().c_str()); - OutputString(stream, s, NULL, NULL); + OutputString(stream, s); OutputNode(stream, GetRoot(), 0, convMem, convFile); - OutputString(stream, wxT("\n"), NULL, NULL); + OutputString(stream, wxT("\n")); if ( convFile ) delete convFile; if ( convMem ) delete convMem; - return TRUE; + return true; } #endif // wxUSE_XML