// a private utility used by wxXML
-static bool wxIsWhiteOnly(const wxChar *buf);
+static bool wxIsWhiteOnly(const wxString& buf);
//-----------------------------------------------------------------------------
}
// 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;
}
wxXmlNode *lastAsText;
wxString encoding;
wxString version;
- bool bLastCdata;
bool removeWhiteOnlyNodes;
};
ctx->node = node;
ctx->lastAsText = NULL;
}
-}
-extern "C" {
static void EndElementHnd(void *userData, const char* WXUNUSED(name))
{
wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
ctx->node = ctx->node->GetParent();
ctx->lastAsText = NULL;
}
-}
-extern "C" {
static void TextHnd(void *userData, const char *s, int len)
{
wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
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
{
}
}
}
-}
-extern "C" {
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);
}
-}
-extern "C" {
-static void EndCdataHnd(void *userData)
-{
- wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
-
- ctx->bLastCdata = false;
-}
-}
-
-extern "C" {
static void CommentHnd(void *userData, const char *data)
{
wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
}
ctx->lastAsText = NULL;
}
-}
-extern "C" {
static void DefaultHnd(void *userData, const char *s, int len)
{
// XML header:
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:
- wxString str(name, wxConvLibc);
- wxCSConv conv(str);
+ wxCSConv conv(name);
char mbBuf[2];
wchar_t wcBuf[10];
size_t i;
return 1;
}
-}
+
+} // extern "C"
bool wxXmlDocument::Load(wxInputStream& stream, const wxString& encoding, int flags)
{
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);