X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/26296ac997d70d32a31bae592a5a332704f36371..1a5cd56aacbfcd5480929e4646e6e97f63add8c8:/src/xml/xml.cpp diff --git a/src/xml/xml.cpp b/src/xml/xml.cpp index ef4326200e..16ced8c8f6 100644 --- a/src/xml/xml.cpp +++ b/src/xml/xml.cpp @@ -40,7 +40,7 @@ IMPLEMENT_CLASS(wxXmlDocument, wxObject) // a private utility used by wxXML -static bool wxIsWhiteOnly(const wxChar *buf); +static bool wxIsWhiteOnly(const wxString& buf); //----------------------------------------------------------------------------- @@ -438,11 +438,14 @@ static wxString CharToString(wxMBConv *conv, } // returns true if the given string contains only whitespaces -bool wxIsWhiteOnly(const wxChar *buf) +bool wxIsWhiteOnly(const wxString& buf) { - for (const wxChar *c = buf; *c != wxT('\0'); c++) - if (*c != wxT(' ') && *c != wxT('\t') && *c != wxT('\n') && *c != wxT('\r')) + for ( wxString::const_iterator i = buf.begin(); i != buf.end(); ++i ) + { + wxChar c = *i; + if ( c != wxT(' ') && c != wxT('\t') && c != wxT('\n') && c != wxT('\r')) return false; + } return true; } @@ -455,7 +458,6 @@ struct wxXmlParsingContext wxXmlNode *lastAsText; wxString encoding; wxString version; - bool bLastCdata; bool removeWhiteOnlyNodes; }; @@ -493,15 +495,7 @@ static void TextHnd(void *userData, const char *s, int len) if (ctx->lastAsText) { - if ( ctx->bLastCdata ) - { - ctx->lastAsText->SetContent(ctx->lastAsText->GetContent() + - CharToString(NULL, s, len)); - } - else - { - ctx->lastAsText->SetContent(ctx->lastAsText->GetContent() + str); - } + ctx->lastAsText->SetContent(ctx->lastAsText->GetContent() + str); } else { @@ -521,19 +515,10 @@ static void StartCdataHnd(void *userData) { wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData; - ctx->bLastCdata = true; - ctx->lastAsText = new wxXmlNode(wxXML_CDATA_SECTION_NODE, wxT("cdata"),wxT("")); ctx->node->AddChild(ctx->lastAsText); } -static void EndCdataHnd(void *userData) -{ - wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData; - - ctx->bLastCdata = false; -} - static void CommentHnd(void *userData, const char *data) { wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData; @@ -573,8 +558,7 @@ static int UnknownEncodingHnd(void * WXUNUSED(encodingHandlerData), // 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: - wxString str(name, wxConvLibc); - wxCSConv conv(str); + wxCSConv conv(name); char mbBuf[2]; wchar_t wcBuf[10]; size_t i; @@ -623,12 +607,11 @@ bool wxXmlDocument::Load(wxInputStream& stream, const wxString& encoding, int fl ctx.conv = new wxCSConv(encoding); #endif ctx.removeWhiteOnlyNodes = (flags & wxXMLDOC_KEEP_WHITESPACE_NODES) == 0; - ctx.bLastCdata = false; XML_SetUserData(parser, (void*)&ctx); XML_SetElementHandler(parser, StartElementHnd, EndElementHnd); XML_SetCharacterDataHandler(parser, TextHnd); - XML_SetCdataSectionHandler(parser, StartCdataHnd, EndCdataHnd ); + XML_SetStartCdataSectionHandler(parser, StartCdataHnd); XML_SetCommentHandler(parser, CommentHnd); XML_SetDefaultHandler(parser, DefaultHnd); XML_SetUnknownEncodingHandler(parser, UnknownEncodingHnd, NULL);