X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6a8fb6bdeaa474cf8d965b4dc211de47f71ce5c5..9c112555198f51fcec71106530cddba95a17f3dc:/src/xml/xml.cpp diff --git a/src/xml/xml.cpp b/src/xml/xml.cpp index ab40593bed..1df50a7f8a 100644 --- a/src/xml/xml.cpp +++ b/src/xml/xml.cpp @@ -127,11 +127,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 +143,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 @@ -156,8 +156,8 @@ wxString wxXmlNode::GetPropVal(const wxString& propName, const wxString& default wxString tmp; if (GetPropVal(propName, &tmp)) return tmp; - else - return defaultVal; + + return defaultVal; } void wxXmlNode::AddChild(wxXmlNode *child) @@ -194,13 +194,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 +212,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 +242,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 +250,7 @@ bool wxXmlNode::DeleteProperty(const wxString& name) m_properties = prop->GetNext(); prop->SetNext(NULL); delete prop; - return TRUE; + return true; } else @@ -264,11 +264,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; } } @@ -287,7 +287,7 @@ wxXmlDocument::wxXmlDocument() } wxXmlDocument::wxXmlDocument(const wxString& filename, const wxString& encoding) - : wxObject(), m_root(NULL) + :wxObject(), m_root(NULL) { if ( !Load(filename, encoding) ) { @@ -296,7 +296,7 @@ wxXmlDocument::wxXmlDocument(const wxString& filename, const wxString& encoding) } wxXmlDocument::wxXmlDocument(wxInputStream& stream, const wxString& encoding) - : wxObject(), m_root(NULL) + :wxObject(), m_root(NULL) { if ( !Load(stream, encoding) ) { @@ -305,6 +305,7 @@ wxXmlDocument::wxXmlDocument(wxInputStream& stream, const wxString& encoding) } wxXmlDocument::wxXmlDocument(const wxXmlDocument& doc) + :wxObject() { DoCopy(doc); } @@ -370,7 +371,7 @@ inline static wxString CharToString(wxMBConv *conv, return str; } else - return wxString(s, len); + return wxString(s, len != wxSTRING_MAXLEN ? len : strlen(s)); #endif } @@ -384,6 +385,7 @@ struct wxXmlParsingContext wxString version; }; +extern "C" { static void StartElementHnd(void *userData, const char *name, const char **atts) { wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData; @@ -401,7 +403,9 @@ static void StartElementHnd(void *userData, const char *name, const char **atts) ctx->node = node; ctx->lastAsText = NULL; } +} +extern "C" { static void EndElementHnd(void *userData, const char* WXUNUSED(name)) { wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData; @@ -409,7 +413,9 @@ static void EndElementHnd(void *userData, const char* WXUNUSED(name)) ctx->node = ctx->node->GetParent(); ctx->lastAsText = NULL; } +} +extern "C" { static void TextHnd(void *userData, const char *s, int len) { wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData; @@ -425,11 +431,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) @@ -442,7 +448,9 @@ static void TextHnd(void *userData, const char *s, int len) delete[] buf; } +} +extern "C" { static void CommentHnd(void *userData, const char *data) { wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData; @@ -457,7 +465,9 @@ static void CommentHnd(void *userData, const char *data) } ctx->lastAsText = NULL; } +} +extern "C" { static void DefaultHnd(void *userData, const char *s, int len) { // XML header: @@ -475,14 +485,17 @@ static void DefaultHnd(void *userData, const char *s, int len) ctx->version = buf.Mid(pos + 9).BeforeFirst(buf[(size_t)pos+8]); } } +} +extern "C" { static int UnknownEncodingHnd(void * WXUNUSED(encodingHandlerData), const XML_Char *name, XML_Encoding *info) { // We must build conversion table for expat. The easiest way to do so // is to let wxCSConv convert as string containing all characters to // wide character representation: - wxCSConv conv(wxString(name, wxConvLibc)); + wxString str(name, wxConvLibc); + wxCSConv conv(str); char mbBuf[2]; wchar_t wcBuf[10]; size_t i; @@ -499,13 +512,14 @@ static int UnknownEncodingHnd(void * WXUNUSED(encodingHandlerData), } info->map[i+1] = (int)wcBuf[0]; } - + info->data = NULL; info->convert = NULL; info->release = NULL; return 1; } +} bool wxXmlDocument::Load(wxInputStream& stream, const wxString& encoding) { @@ -555,9 +569,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); } @@ -584,9 +598,14 @@ bool wxXmlDocument::Load(wxInputStream& stream, const wxString& encoding) // write string to output: inline static void OutputString(wxOutputStream& stream, const wxString& str, - wxMBConv *convMem, wxMBConv *convFile) +#if wxUSE_UNICODE + wxMBConv * WXUNUSED(convMem), +#else + wxMBConv *convMem, +#endif + wxMBConv *convFile) { - if (str.IsEmpty()) return; + if (str.empty()) return; #if wxUSE_UNICODE const wxWX2MBbuf buf(str.mb_str(*(convFile ? convFile : &wxConvUTF8))); stream.Write((const char*)buf, strlen((const char*)buf)); @@ -604,7 +623,8 @@ inline static void OutputString(wxOutputStream& stream, const wxString& str, // Same as above, but create entities first. // Translates '<' to "<", '>' to ">" and '&' to "&" 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 +636,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 +651,9 @@ static void OutputStringEnt(wxOutputStream& stream, const wxString& str, case wxT('&'): OutputString(stream, wxT("&"), NULL, NULL); break; + case wxT('"'): + OutputString(stream, wxT("""), NULL, NULL); + break; default: break; } last = i + 1; @@ -665,10 +689,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(); } @@ -709,14 +734,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()); @@ -736,7 +763,7 @@ bool wxXmlDocument::Save(wxOutputStream& stream) const if ( convMem ) delete convMem; - return TRUE; + return true; } #endif // wxUSE_XML