]> git.saurik.com Git - wxWidgets.git/blobdiff - src/xml/xml.cpp
cvs to svn
[wxWidgets.git] / src / xml / xml.cpp
index ef4326200eb999455a110cd5dd13e3fed76d2cbf..16ced8c8f6a34480467b2ff68317b32ffba3486a 100644 (file)
@@ -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);