]> git.saurik.com Git - wxWidgets.git/commitdiff
wxXRC cleanup: removed .xmlbin format
authorVáclav Slavík <vslavik@fastmail.fm>
Sat, 2 Feb 2002 23:17:38 +0000 (23:17 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Sat, 2 Feb 2002 23:17:38 +0000 (23:17 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13977 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

32 files changed:
contrib/include/wx/xrc/xml.h
contrib/include/wx/xrc/xmlio.h [deleted file]
contrib/src/xrc/Makefile.in
contrib/src/xrc/XrcVC.dsp
contrib/src/xrc/makefile.b32
contrib/src/xrc/makefile.g95
contrib/src/xrc/makefile.vc
contrib/src/xrc/makefile.wat
contrib/src/xrc/xml.cpp
contrib/src/xrc/xmlbin.cpp [deleted file]
contrib/src/xrc/xmlbinz.cpp [deleted file]
contrib/src/xrc/xmlexpat.cpp [deleted file]
contrib/src/xrc/xmlres.cpp
contrib/src/xrc/xmlwrite.cpp [deleted file]
contrib/utils/wxrc/wxrc.cpp
contrib/utils/wxrcedit/editor.cpp
contrib/utils/wxrcedit/preview.cpp
include/wx/xrc/xml.h
include/wx/xrc/xmlio.h [deleted file]
src/xrc/Makefile.in
src/xrc/XrcVC.dsp
src/xrc/makefile.b32
src/xrc/makefile.g95
src/xrc/makefile.vc
src/xrc/makefile.wat
src/xrc/xml.cpp
src/xrc/xmlbin.cpp [deleted file]
src/xrc/xmlbinz.cpp [deleted file]
src/xrc/xmlexpat.cpp [deleted file]
src/xrc/xmlres.cpp
src/xrc/xmlwrite.cpp [deleted file]
utils/wxrc/wxrc.cpp

index 28037b6925bedf7a0f99a905b5b7a5b1adc3c7fc..7d5f4e05a638a10620f445b7f0eb37ba3756f28e 100644 (file)
@@ -54,18 +54,6 @@ enum wxXmlNodeType
 };
 
 
-// Types of XML files:
-
-enum wxXmlIOType
-{
-    wxXML_IO_AUTO = 0,    // detect it automatically
-    wxXML_IO_EXPAT,       // use Expat to load from text/xml document
-    wxXML_IO_TEXT_OUTPUT, // generic saver into text/xml
-    wxXML_IO_BIN,         // save in binary uncompressed proprietary format
-    wxXML_IO_BINZ         // svae in binary zlib-compressed proprietary format
-};
-
-
 // Represents node property(ies).
 // Example: in <img src="hello.gif" id="3"/> "src" is property with value
 //          "hello.gif" and "id" is prop. with value "3".
@@ -178,10 +166,8 @@ class WXXMLDLLEXPORT wxXmlDocument : public wxObject
 public:
     wxXmlDocument() : wxObject(), m_version(wxT("1.0")), m_root(NULL)  {}
     wxXmlDocument(const wxString& filename,
-                  wxXmlIOType io_type = wxXML_IO_AUTO,
                   const wxString& encoding = wxT("UTF-8"));
     wxXmlDocument(wxInputStream& stream,
-                  wxXmlIOType io_type = wxXML_IO_AUTO,
                   const wxString& encoding = wxT("UTF-8"));
     ~wxXmlDocument() { delete m_root; }
 
@@ -191,17 +177,13 @@ public:
     // Parses .xml file and loads data. Returns TRUE on success, FALSE
     // otherwise.
     bool Load(const wxString& filename,
-              wxXmlIOType io_type = wxXML_IO_AUTO,
               const wxString& encoding = wxT("UTF-8"));
     bool Load(wxInputStream& stream,
-              wxXmlIOType io_type = wxXML_IO_AUTO,
               const wxString& encoding = wxT("UTF-8"));
 
     // Saves document as .xml file.
-    bool Save(const wxString& filename,
-              wxXmlIOType io_type = wxXML_IO_TEXT_OUTPUT) const;
-    bool Save(wxOutputStream& stream,
-              wxXmlIOType io_type = wxXML_IO_TEXT_OUTPUT) const;
+    bool Save(const wxString& filename) const;
+    bool Save(wxOutputStream& stream) const;
 
     bool IsOk() const { return m_root != NULL; }
 
@@ -227,13 +209,6 @@ public:
     wxString GetEncoding() const { return m_encoding; }
 #endif
 
-    static void AddHandler(wxXmlIOHandler *handler);
-    static void CleanUpHandlers();
-    static void InitStandardHandlers();
-
-protected:
-    static wxList *sm_handlers;
-
 private:
     wxString   m_version;
     wxString   m_fileEncoding;
@@ -245,27 +220,4 @@ private:
     void DoCopy(const wxXmlDocument& doc);
 };
 
-
-
-// wxXmlIOHandler takes care of loading and/or saving XML data.
-// see xmlio.h for available handlers
-
-class WXXMLDLLEXPORT wxXmlIOHandler : public wxObject
-{
-    public:
-        wxXmlIOHandler() {}
-
-        virtual wxXmlIOType GetType() = 0;
-        virtual bool CanLoad(wxInputStream& stream) = 0;
-        virtual bool CanSave() = 0;
-
-        virtual bool Load(wxInputStream& stream, wxXmlDocument& doc, 
-                          const wxString& encoding) = 0;
-        virtual bool Save(wxOutputStream& stream, const wxXmlDocument& doc) = 0;
-};
-
-
-
-void wxXmlInitXmlModule();
-
 #endif // _WX_XML_H_
diff --git a/contrib/include/wx/xrc/xmlio.h b/contrib/include/wx/xrc/xmlio.h
deleted file mode 100644 (file)
index a4052b6..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////
-// Name:        xmlio.h
-// Purpose:     wxXmlIOHandler - XML I/O classes
-// Author:      Vaclav Slavik
-// Created:     2000/07/24
-// RCS-ID:      $Id$
-// Copyright:   (c) 2000 Vaclav Slavik
-// Licence:     wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
-
-#ifndef _WX_XMLIO_H_
-#define _WX_XMLIO_H_
-
-#ifdef __GNUG__
-#pragma interface "xmlio.h"
-#endif
-
-#include "wx/defs.h"
-#include "wx/string.h"
-#include "wx/xrc/xml.h"
-
-
-class WXXMLDLLEXPORT wxXmlIOHandlerExpat : public wxXmlIOHandler
-{
-public:
-    virtual wxXmlIOType GetType() { return wxXML_IO_EXPAT; }
-    virtual bool CanLoad(wxInputStream& stream);
-    virtual bool CanSave() { return FALSE; }
-
-    virtual bool Load(wxInputStream& stream, wxXmlDocument& doc,
-                      const wxString& encoding);
-    virtual bool Save(wxOutputStream& WXUNUSED(stream), const wxXmlDocument& WXUNUSED(doc))
-        { return FALSE; }
-};
-
-
-class WXXMLDLLEXPORT wxXmlIOHandlerWriter : public wxXmlIOHandler
-{
-public:
-    virtual wxXmlIOType GetType() { return wxXML_IO_TEXT_OUTPUT; }
-    virtual bool CanLoad(wxInputStream& WXUNUSED(stream)) { return FALSE; }
-    virtual bool CanSave() { return TRUE; }
-
-    virtual bool Load(wxInputStream& WXUNUSED(stream), wxXmlDocument& WXUNUSED(doc),
-                      const wxString& WXUNUSED(encoding))
-        { return FALSE; }
-    virtual bool Save(wxOutputStream& stream, const wxXmlDocument& doc);
-};
-
-
-class WXXMLDLLEXPORT wxXmlIOHandlerBin : public wxXmlIOHandler
-{
-public:
-    wxXmlIOHandlerBin() {}
-
-    virtual wxXmlIOType GetType() { return wxXML_IO_BIN; }
-    virtual bool CanLoad(wxInputStream& stream);
-    virtual bool CanSave() { return TRUE; }
-
-    virtual bool Load(wxInputStream& stream, wxXmlDocument& doc,
-                      const wxString& encoding);
-    virtual bool Save(wxOutputStream& stream, const wxXmlDocument& doc);
-
-protected:
-    wxString ReadHeader(wxInputStream& stream);
-    void WriteHeader(wxOutputStream& stream, const wxString& header);
-};
-
-
-
-#if wxUSE_ZLIB
-
-class WXXMLDLLEXPORT wxXmlIOHandlerBinZ : public wxXmlIOHandlerBin
-{
-public:
-    wxXmlIOHandlerBinZ() {}
-
-    virtual wxXmlIOType GetType() { return wxXML_IO_BINZ; }
-    virtual bool CanLoad(wxInputStream& stream);
-
-    virtual bool Load(wxInputStream& stream, wxXmlDocument& doc,
-                      const wxString& encoding);
-    virtual bool Save(wxOutputStream& stream, const wxXmlDocument& doc);
-};
-
-#endif
-
-
-#endif // _WX_XMLIO_H_
index 729c6f1574fb722aad84e91cabdbc463aabe4f44..f645274010b66d79efebeacd243cef590f6662ef 100644 (file)
@@ -27,7 +27,7 @@ HEADERS=xh_all.h xh_bttn.h xh_chckb.h xh_chckl.h xh_choic.h xh_combo.h \
         xh_stlin.h xh_bmp.h xh_unkwn.h xh_frame.h xh_gdctl.h
 
 OBJECTS=$(EXPAT_OBJECTS) \
-        xml.o xmlbin.o xmlbinz.o xmlexpat.o xmlwrite.o xmlres.o xmlrsall.o \
+        xml.o xmlres.o xmlrsall.o \
         xh_bttn.o xh_chckb.o xh_chckl.o xh_choic.o xh_combo.o xh_dlg.o \
         xh_gauge.o xh_html.o xh_menu.o xh_notbk.o xh_panel.o xh_radbt.o \
         xh_radbx.o xh_sizer.o xh_slidr.o xh_spin.o xh_stbmp.o xh_sttxt.o \
index 79710adb448511f1d202116f301035bd50cd770d..44c9ba9a7852f2736efd0d30efe4deb4f0dbb351 100644 (file)
@@ -232,27 +232,11 @@ SOURCE=.\xml.cpp
 # End Source File
 # Begin Source File
 
-SOURCE=.\xmlbin.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\xmlbinz.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\xmlexpat.cpp
-# End Source File
-# Begin Source File
-
 SOURCE=.\xmlres.cpp
 # End Source File
 # Begin Source File
 
 SOURCE=.\xmlrsall.cpp
 # End Source File
-# Begin Source File
-
-SOURCE=.\xmlwrite.cpp
-# End Source File
 # End Target
 # End Project
index ba854f74e65c854addfa43612ebb1fd56c20da5f..dc7d4fa68a9c2b49bb38840d946cf21b3b24dde6 100644 (file)
@@ -21,7 +21,7 @@ EXTRACPPFLAGS=$(wxLIBXMLDIR) $(EXPAT_DEFS)
 LIBTARGET=$(WXDIR)\lib\wxxrc.lib
 
 OBJECTS=$(EXPAT_OBJECTS) \
-        xml.obj xmlbin.obj xmlbinz.obj xmlexpat.obj xmlwrite.obj xmlres.obj xmlrsall.obj \
+        xml.obj xmlres.obj xmlrsall.obj \
         xh_bttn.obj xh_chckb.obj xh_chckl.obj xh_choic.obj xh_combo.obj xh_dlg.obj \
         xh_gauge.obj xh_html.obj xh_menu.obj xh_notbk.obj xh_panel.obj xh_radbt.obj \
         xh_radbx.obj xh_sizer.obj xh_slidr.obj xh_spin.obj xh_stbmp.obj xh_sttxt.obj \
index 2fb8b309a5b2b0041974099f1631cfefc41945e5..8a4bfb322ff87ab5bb51ac4e5a56fdcccc69c25e 100644 (file)
@@ -22,7 +22,7 @@ XMLTOKDIR_OBJECTS=xmltok.o xmlrole.o
 LIBTARGET=$(WXDIR)/lib/libwxxrc.a
 
 OBJECTS= $(XMLPARSEDIR_OBJECTS) $(XMLTOKDIR_OBJECTS) \
-        xml.o xmlbin.o xmlbinz.o xmlexpat.o xmlwrite.o xmlres.o xmlrsall.o \
+        xml.o xmlres.o xmlrsall.o \
         xh_bttn.o xh_chckb.o xh_chckl.o xh_choic.o xh_combo.o xh_dlg.o \
         xh_gauge.o xh_html.o xh_menu.o xh_notbk.o xh_panel.o xh_radbt.o \
         xh_radbx.o xh_sizer.o xh_slidr.o xh_spin.o xh_stbmp.o xh_sttxt.o \
index 841ac2d4cd29e2a684fd9a15876c99173b97b1b9..ff40bb5fcb08f2bb78814b65debe64dfbf0b0237 100644 (file)
@@ -47,7 +47,7 @@ LIBTARGET=$(WXDIR)\lib\wxxrc$(LIBEXT).lib
 EXTRATARGETS=$(D)
 
 OBJECTS=$(EXPAT_OBJS) \
-        $(D)\xml.obj $(D)\xmlbin.obj $(D)\xmlbinz.obj $(D)\xmlres.obj \
+        $(D)\xml.obj \
         $(D)\xmlrsall.obj $(D)\xh_bttn.obj $(D)\xh_chckb.obj $(D)\xh_chckl.obj \
                $(D)\xh_choic.obj $(D)\xh_combo.obj $(D)\xh_dlg.obj \
         $(D)\xh_frame.obj $(D)\xh_gauge.obj $(D)\xh_html.obj $(D)\xh_menu.obj \
@@ -57,7 +57,7 @@ OBJECTS=$(EXPAT_OBJS) \
         $(D)\xh_text.obj $(D)\xh_listb.obj $(D)\xh_toolb.obj \
         $(D)\xh_bmpbt.obj $(D)\xh_cald.obj $(D)\xh_listc.obj $(D)\xh_scrol.obj \
         $(D)\xh_stbox.obj $(D)\xh_tree.obj $(D)\xh_stlin.obj $(D)\xh_bmp.obj \
-        $(D)\xh_unkwn.obj $(D)\xmlwrite.obj $(D)\xmlexpat.obj
+        $(D)\xh_unkwn.obj
 
 !include $(WXDIR)\src\makelib.vc
 
index be5d104e3fa3f7c035fc825dc074dfe940ba69b2..43cfc46647814741bbe45c56c1b98c555dc86794 100644 (file)
@@ -12,7 +12,7 @@ THISDIR = $(WXDIR)\contrib\src\xrc
 NAME = wxxrc
 LNK = $(name).lnk
 
-OBJECTS=xml.obj xmlbin.obj xmlbinz.obj xmlpars.obj xmlres.obj xmlrsall.obj &
+OBJECTS=xml.obj xmlres.obj xmlrsall.obj &
         xh_bttn.obj xh_chckb.obj xh_chckl.obj xh_choic.obj xh_combo.obj xh_dlg.obj &
         xh_gauge.obj xh_html.obj xh_menu.obj xh_notbk.obj xh_panel.obj xh_radbt.obj &
         xh_radbx.obj xh_sizer.obj xh_slidr.obj xh_spin.obj xh_stbmp.obj xh_sttxt.obj &
index cf0f9630bf41894411a49df5f14e280a7e5c36ac..692a39f0bc46542a709a57c27ded120fb0245259 100644 (file)
 #include "wx/zstream.h"
 #include "wx/log.h"
 #include "wx/intl.h"
+#include "wx/strconv.h"
 
 #include "wx/xrc/xml.h"
-#include "wx/xrc/xmlio.h"
 
+#include "xmlparse.h" // from Expat
 
+//-----------------------------------------------------------------------------
+//  wxXmlNode
+//-----------------------------------------------------------------------------
 
 wxXmlNode::wxXmlNode(wxXmlNode *parent,wxXmlNodeType type,
                      const wxString& name, const wxString& content,
@@ -51,8 +55,6 @@ wxXmlNode::wxXmlNode(wxXmlNode *parent,wxXmlNodeType type,
     }
 }
 
-
-
 wxXmlNode::wxXmlNode(wxXmlNodeType type, const wxString& name,
                      const wxString& content)
     : m_type(type), m_name(name), m_content(content),
@@ -60,8 +62,6 @@ wxXmlNode::wxXmlNode(wxXmlNodeType type, const wxString& name,
       m_children(NULL), m_next(NULL)
 {}
 
-
-
 wxXmlNode::wxXmlNode(const wxXmlNode& node)
 {
     m_next = NULL;
@@ -69,8 +69,6 @@ wxXmlNode::wxXmlNode(const wxXmlNode& node)
     DoCopy(node);
 }
 
-
-
 wxXmlNode::~wxXmlNode()
 {
     wxXmlNode *c, *c2;
@@ -88,8 +86,6 @@ wxXmlNode::~wxXmlNode()
     }
 }
 
-
-
 wxXmlNode& wxXmlNode::operator=(const wxXmlNode& node)
 {
     wxDELETE(m_properties);
@@ -98,8 +94,6 @@ wxXmlNode& wxXmlNode::operator=(const wxXmlNode& node)
     return *this;
 }
 
-
-
 void wxXmlNode::DoCopy(const wxXmlNode& node)
 {
     m_type = node.m_type;
@@ -123,7 +117,6 @@ void wxXmlNode::DoCopy(const wxXmlNode& node)
     }
 }
 
-
 bool wxXmlNode::HasProp(const wxString& propName) const
 {
     wxXmlProperty *prop = GetProperties();
@@ -137,8 +130,6 @@ bool wxXmlNode::HasProp(const wxString& propName) const
     return FALSE;
 }
 
-
-
 bool wxXmlNode::GetPropVal(const wxString& propName, wxString *value) const
 {
     wxXmlProperty *prop = GetProperties();
@@ -156,8 +147,6 @@ bool wxXmlNode::GetPropVal(const wxString& propName, wxString *value) const
     return FALSE;
 }
 
-
-
 wxString wxXmlNode::GetPropVal(const wxString& propName, const wxString& defaultVal) const
 {
     wxString tmp;
@@ -167,8 +156,6 @@ wxString wxXmlNode::GetPropVal(const wxString& propName, const wxString& default
         return defaultVal;
 }
 
-
-
 void wxXmlNode::AddChild(wxXmlNode *child)
 {
     if (m_children == NULL)
@@ -183,8 +170,6 @@ void wxXmlNode::AddChild(wxXmlNode *child)
     child->m_parent = this;
 }
 
-
-
 void wxXmlNode::InsertChild(wxXmlNode *child, wxXmlNode *before_node)
 {
     wxASSERT_MSG(before_node->GetParent() == this, wxT("wxXmlNode::InsertChild - the node has incorrect parent"));
@@ -202,8 +187,6 @@ void wxXmlNode::InsertChild(wxXmlNode *child, wxXmlNode *before_node)
     child->m_next = before_node;
 }
 
-
-
 bool wxXmlNode::RemoveChild(wxXmlNode *child)
 {
     if (m_children == NULL)
@@ -233,8 +216,6 @@ bool wxXmlNode::RemoveChild(wxXmlNode *child)
     }
 }
 
-
-
 void wxXmlNode::AddProperty(const wxString& name, const wxString& value)
 {
     AddProperty(new wxXmlProperty(name, value, NULL));
@@ -252,8 +233,6 @@ void wxXmlNode::AddProperty(wxXmlProperty *prop)
     }
 }
 
-
-
 bool wxXmlNode::DeleteProperty(const wxString& name)
 {
     wxXmlProperty *prop;
@@ -291,46 +270,33 @@ bool wxXmlNode::DeleteProperty(const wxString& name)
 
 
 
+//-----------------------------------------------------------------------------
+//  wxXmlDocument
+//-----------------------------------------------------------------------------
 
-
-
-
-
-wxList *wxXmlDocument::sm_handlers = NULL;
-
-
-
-wxXmlDocument::wxXmlDocument(const wxString& filename, wxXmlIOType io_type,
-                             const wxString& encoding)
+wxXmlDocument::wxXmlDocument(const wxString& filename, const wxString& encoding)
                           : wxObject(), m_root(NULL)
 {
-    if (!Load(filename, io_type, encoding))
+    if ( !Load(filename, encoding) )
     {
         wxDELETE(m_root);
     }
 }
 
-
-
-wxXmlDocument::wxXmlDocument(wxInputStream& stream, wxXmlIOType io_type,
-                             const wxString& encoding)
+wxXmlDocument::wxXmlDocument(wxInputStream& stream, const wxString& encoding)
                           : wxObject(), m_root(NULL)
 {
-    if (!Load(stream, io_type, encoding))
+    if ( !Load(stream, encoding) )
     {
         wxDELETE(m_root);
     }
 }
 
-
-
 wxXmlDocument::wxXmlDocument(const wxXmlDocument& doc)
 {
     DoCopy(doc);
 }
 
-
-
 wxXmlDocument& wxXmlDocument::operator=(const wxXmlDocument& doc)
 {
     wxDELETE(m_root);
@@ -338,8 +304,6 @@ wxXmlDocument& wxXmlDocument::operator=(const wxXmlDocument& doc)
     return *this;
 }
 
-
-
 void wxXmlDocument::DoCopy(const wxXmlDocument& doc)
 {
     m_version = doc.m_version;
@@ -350,123 +314,398 @@ void wxXmlDocument::DoCopy(const wxXmlDocument& doc)
     m_root = new wxXmlNode(*doc.m_root);
 }
 
-
-
-bool wxXmlDocument::Load(const wxString& filename, wxXmlIOType io_type,
-                         const wxString& encoding)
+bool wxXmlDocument::Load(const wxString& filename, const wxString& encoding)
 {
     wxFileInputStream stream(filename);
-    return Load(stream, io_type, encoding);
+    return Load(stream, encoding);
+}
+
+bool wxXmlDocument::Save(const wxString& filename) const
+{
+    wxFileOutputStream stream(filename);
+    return Save(stream);
 }
 
 
 
-bool wxXmlDocument::Load(wxInputStream& stream, wxXmlIOType io_type,
-                         const wxString& encoding)
+//-----------------------------------------------------------------------------
+//  wxXmlDocument loading routines
+//-----------------------------------------------------------------------------
+
+/* 
+    FIXME:
+       - process all elements, including CDATA
+ */
+
+// converts Expat-produced string in UTF-8 into wxString.
+inline static wxString CharToString(wxMBConv *conv,
+                                    const char *s, size_t len = wxSTRING_MAXLEN)
 {
 #if wxUSE_UNICODE
-    (void)encoding;
+    (void)conv;
+    return wxString(s, wxConvUTF8, len);
 #else
-    m_encoding = encoding;
-#endif
-
-    wxNode *n = sm_handlers->GetFirst();
-    while (n)
+    if ( conv )
     {
-        wxXmlIOHandler *h = (wxXmlIOHandler*) n->GetData();
-
-        if ((io_type == wxXML_IO_AUTO || io_type == h->GetType()) &&
-            h->CanLoad(stream))
-        {
-            return h->Load(stream, *this, encoding);
-        }
-        n = n->GetNext();
+        size_t nLen = (len != wxSTRING_MAXLEN) ? len :
+                          nLen = wxConvUTF8.MB2WC((wchar_t*) NULL, s, 0);
+    
+        wchar_t *buf = new wchar_t[nLen+1];
+        wxConvUTF8.MB2WC(buf, s, nLen);
+        buf[nLen] = 0;
+        return wxString(buf, *conv, len);
+        delete[] buf;
     }
-    wxLogError(_("Cannot find XML I/O handler capable of loading this format."));
-    return FALSE;
+    else
+        return wxString(s, len);
+#endif
 }
 
+struct wxXmlParsingContext
+{
+    wxMBConv  *conv;
+    wxXmlNode *root;
+    wxXmlNode *node;
+    wxXmlNode *lastAsText;
+    wxString   encoding;
+    wxString   version;
+};
 
-
-bool wxXmlDocument::Save(const wxString& filename, wxXmlIOType io_type) const
+static void StartElementHnd(void *userData, const char *name, const char **atts)
 {
-    wxFileOutputStream stream(filename);
-    return Save(stream, io_type);
+    wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
+    wxXmlNode *node = new wxXmlNode(wxXML_ELEMENT_NODE, CharToString(ctx->conv, name));
+    const char **a = atts;
+    while (*a)
+    {
+        node->AddProperty(CharToString(ctx->conv, a[0]), CharToString(ctx->conv, a[1]));
+        a += 2;
+    }
+    if (ctx->root == NULL)
+        ctx->root = node;
+    else
+        ctx->node->AddChild(node);
+    ctx->node = node;
+    ctx->lastAsText = NULL;
 }
 
+static void EndElementHnd(void *userData, const char* WXUNUSED(name))
+{
+    wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
 
+    ctx->node = ctx->node->GetParent();
+    ctx->lastAsText = NULL;
+}
 
-bool wxXmlDocument::Save(wxOutputStream& stream, wxXmlIOType io_type) const
+static void TextHnd(void *userData, const char *s, int len)
 {
-    wxNode *n = sm_handlers->GetFirst();
-    while (n)
+    wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
+    char *buf = new char[len + 1];
+
+    buf[len] = '\0';
+    memcpy(buf, s, (size_t)len);
+
+    if (ctx->lastAsText)
+    {
+        ctx->lastAsText->SetContent(ctx->lastAsText->GetContent() +
+                                    CharToString(ctx->conv, buf));
+    }
+    else
     {
-        wxXmlIOHandler *h = (wxXmlIOHandler*) n->GetData();
-        if (io_type == h->GetType() && h->CanSave())
+        bool whiteOnly = TRUE;
+        for (char *c = buf; *c != '\0'; c++)
+            if (*c != ' ' && *c != '\t' && *c != '\n' && *c != '\r')
+            {
+                whiteOnly = FALSE;
+                break;
+            }
+        if (!whiteOnly)
         {
-            return h->Save(stream, *this);
+            ctx->lastAsText = new wxXmlNode(wxXML_TEXT_NODE, wxT("text"),
+                                            CharToString(ctx->conv, buf));
+            ctx->node->AddChild(ctx->lastAsText);
         }
-        n = n->GetNext();
     }
-    wxLogError(_("Cannot find XML I/O handler capable of saving in this format."));
-    return FALSE;
-}
-
-
 
+    delete[] buf;
+}
 
+static void CommentHnd(void *userData, const char *data)
+{
+    wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
 
+    if (ctx->node)
+    {
+        // VS: ctx->node == NULL happens if there is a comment before
+        //     the root element (e.g. wxDesigner's output). We ignore such
+        //     comments, no big deal...
+        ctx->node->AddChild(new wxXmlNode(wxXML_COMMENT_NODE,
+                            wxT("comment"), CharToString(ctx->conv, data)));
+    }
+    ctx->lastAsText = NULL;
+}
 
-void wxXmlDocument::AddHandler(wxXmlIOHandler *handler)
+static void DefaultHnd(void *userData, const char *s, int len)
 {
-    if (sm_handlers == NULL)
+    // XML header:
+    if (len > 6 && memcmp(s, "<?xml ", 6) == 0)
     {
-        sm_handlers = new wxList;
-        sm_handlers->DeleteContents(TRUE);
+        wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
+
+        wxString buf = CharToString(ctx->conv, s, (size_t)len);
+        int pos;
+        pos = buf.Find(wxT("encoding="));
+        if (pos != wxNOT_FOUND)
+            ctx->encoding = buf.Mid(pos + 10).BeforeFirst(buf[(size_t)pos+9]);
+        pos = buf.Find(wxT("version="));
+        if (pos != wxNOT_FOUND)
+            ctx->version = buf.Mid(pos + 9).BeforeFirst(buf[(size_t)pos+8]);
     }
-    sm_handlers->Append(handler);
 }
 
-
-void wxXmlDocument::CleanUpHandlers()
+static int UnknownEncodingHnd(void * WXUNUSED(encodingHandlerData),
+                               const XML_Char *name, XML_Encoding *info)
 {
-    wxDELETE(sm_handlers);
+    // 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(name);
+    char mbBuf[255];
+    wchar_t wcBuf[255];
+    size_t i;
+    
+    for (i = 0; i < 255; i++)
+        mbBuf[i] = i+1;
+    mbBuf[255] = 0;
+    conv.MB2WC(wcBuf, mbBuf, 255);
+    wcBuf[255] = 0;
+    
+    info->map[0] = 0;
+    for (i = 0; i < 255; i++)
+        info->map[i+1] = (int)wcBuf[i];
+    
+    info->data = NULL;
+    info->convert = NULL;
+    info->release = NULL;
+    
+    return 1;
 }
 
-
-void wxXmlDocument::InitStandardHandlers()
+bool wxXmlDocument::Load(wxInputStream& stream, const wxString& encoding)
 {
-    AddHandler(new wxXmlIOHandlerBin);
-#if wxUSE_ZLIB
-    AddHandler(new wxXmlIOHandlerBinZ);
+#if wxUSE_UNICODE
+    (void)encoding;
+#else
+    m_encoding = encoding;
+#endif
+
+    const size_t BUFSIZE = 1024;
+    char buf[BUFSIZE];
+    wxXmlParsingContext ctx;
+    bool done;
+    XML_Parser parser = XML_ParserCreate(NULL);
+
+    ctx.root = ctx.node = NULL;
+    ctx.encoding = wxT("UTF-8"); // default in absence of encoding=""
+    ctx.conv = NULL;
+#if !wxUSE_UNICODE
+    if ( encoding != wxT("UTF-8") && encoding != wxT("utf-8") )
+        ctx.conv = new wxCSConv(encoding);
 #endif
-    AddHandler(new wxXmlIOHandlerExpat);
-    AddHandler(new wxXmlIOHandlerWriter);
+    
+    XML_SetUserData(parser, (void*)&ctx);
+    XML_SetElementHandler(parser, StartElementHnd, EndElementHnd);
+    XML_SetCharacterDataHandler(parser, TextHnd);
+    XML_SetCommentHandler(parser, CommentHnd);
+    XML_SetDefaultHandler(parser, DefaultHnd);
+    XML_SetUnknownEncodingHandler(parser, UnknownEncodingHnd, NULL);
+
+    do
+    {
+        size_t len = stream.Read(buf, BUFSIZE).LastRead();
+        done = (len < BUFSIZE);
+        if (!XML_Parse(parser, buf, len, done))
+        {
+            wxLogError(_("XML parsing error: '%s' at line %d"),
+                       XML_ErrorString(XML_GetErrorCode(parser)),
+                       XML_GetCurrentLineNumber(parser));
+          return FALSE;
+        }
+    } while (!done);
+
+    SetVersion(ctx.version);
+    SetFileEncoding(ctx.encoding);
+    SetRoot(ctx.root);
+
+    XML_ParserFree(parser);
+#if !wxUSE_UNICODE
+    if ( ctx.conv )
+        delete ctx.conv;
+#endif
+    
+    return TRUE;
+
 }
 
 
-#include "wx/module.h"
 
-class wxXmlModule: public wxModule
+//-----------------------------------------------------------------------------
+//  wxXmlDocument saving routines
+//-----------------------------------------------------------------------------
+
+// write string to output:
+inline static void OutputString(wxOutputStream& stream, const wxString& str,
+                                wxMBConv *convMem, wxMBConv *convFile)
 {
-    DECLARE_DYNAMIC_CLASS(wxXmlModule)
-    public:
-        wxXmlModule() {}
-        bool OnInit() { wxXmlDocument::InitStandardHandlers(); return TRUE; };
-        void OnExit() { wxXmlDocument::CleanUpHandlers(); };
-};
+    if (str.IsEmpty()) return;
+#if wxUSE_UNICODE
+    const wxW2MBbuf *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
+    {
+        wxString str2(str.wc_str(*convMem), *convFile);
+        stream.Write(str2.mb_str(), str2.Len());
+    }
+#endif
+}
 
-IMPLEMENT_DYNAMIC_CLASS(wxXmlModule, wxModule)
+// Same as above, but create entities first. 
+// Translates '<' to "&lt;", '>' to "&gt;" and '&' to "&amp;"
+static void OutputStringEnt(wxOutputStream& stream, const wxString& str,
+                            wxMBConv *convMem, wxMBConv *convFile)
+{
+    wxString buf;
+    size_t i, last, len;
+    wxChar c;
+    
+    len = str.Len();
+    last = 0;
+    for (i = 0; i < len; i++)
+    {
+        c = str.GetChar(i);
+        if (c == wxT('<') || c == wxT('>') || 
+            (c == wxT('&') && str.Mid(i+1, 4) != wxT("amp;")))
+        {
+            OutputString(stream, str.Mid(last, i - last), convMem, convFile);
+            switch (c)
+            {
+                case wxT('<'): 
+                    OutputString(stream, wxT("&lt;"), NULL, NULL);
+                    break;
+                case wxT('>'): 
+                    OutputString(stream, wxT("&gt;"), NULL, NULL);
+                    break;
+                case wxT('&'): 
+                    OutputString(stream, wxT("&amp;"), NULL, NULL);
+                    break;
+                default: break;
+            }
+            last = i + 1;
+        }
+    }
+    OutputString(stream, str.Mid(last, i - last), convMem, convFile);
+}
 
+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);
+}
 
+static void OutputNode(wxOutputStream& stream, wxXmlNode *node, int indent,
+                       wxMBConv *convMem, wxMBConv *convFile)
+{
+    wxXmlNode *n, *prev;
+    wxXmlProperty *prop;
 
+    switch (node->GetType())
+    {
+        case wxXML_TEXT_NODE:
+            OutputStringEnt(stream, node->GetContent(), convMem, convFile);
+            break;
+            
+        case wxXML_ELEMENT_NODE:
+            OutputString(stream, wxT("<"), NULL, NULL);
+            OutputString(stream, node->GetName(), NULL, NULL);
+            
+            prop = node->GetProperties();
+            while (prop)
+            {
+                OutputString(stream, wxT(" ") + prop->GetName() +
+                             wxT("=\"") + prop->GetValue() + wxT("\""),
+                             NULL, NULL);
+                // FIXME - what if prop contains '"'?
+                prop = prop->GetNext();
+            }
+            
+            if (node->GetChildren())
+            {
+                OutputString(stream, wxT(">"), NULL, NULL);
+                prev = NULL;
+                n = node->GetChildren();
+                while (n)
+                {
+                    if (n && n->GetType() != wxXML_TEXT_NODE)
+                        OutputIndentation(stream, indent + 1);
+                    OutputNode(stream, n, indent + 1, convMem, convFile);
+                    prev = n;
+                    n = n->GetNext();
+                }
+                if (prev && prev->GetType() != wxXML_TEXT_NODE)
+                    OutputIndentation(stream, indent);
+                OutputString(stream, wxT("</"), NULL, NULL);
+                OutputString(stream, node->GetName(), NULL, NULL);
+                OutputString(stream, wxT(">"), NULL, NULL);
+            }
+            else
+                OutputString(stream, wxT("/>"), NULL, NULL);
+            break;
+             
+        case wxXML_COMMENT_NODE:
+            OutputString(stream, wxT("<!--"), NULL, NULL);
+            OutputString(stream, node->GetContent(), convMem, convFile);
+            OutputString(stream, wxT("-->"), NULL, NULL);
+            break;
+            
+        default:
+            wxFAIL_MSG(wxT("unsupported node type"));
+    }
+}
 
-// When wxXml is loaded dynamically after the application is already running
-// then the built-in module system won't pick this one up.  Add it manually.
-void wxXmlInitXmlModule()
+bool wxXmlDocument::Save(wxOutputStream& stream) const
 {
-    wxModule* module = new wxXmlModule;
-    module->Init();
-    wxModule::RegisterModule(module);
+    if ( !IsOk() )
+        return FALSE;
+        
+    wxString s;
+    
+    wxMBConv *convMem = NULL, *convFile = NULL;
+#if wxUSE_UNICODE
+    convFile = new wxCSConv(GetFileEncoding());
+#else
+    if ( GetFileEncoding() != GetEncoding() )
+    {
+        convFile = new wxCSConv(GetFileEncoding());
+        convMem = new wxCSConv(GetEncoding());
+    }
+#endif
+    
+    s.Printf(wxT("<?xml version=\"%s\" encoding=\"%s\"?>\n"),
+             GetVersion().c_str(), GetFileEncoding().c_str());
+    OutputString(stream, s, NULL, NULL);
+    
+    OutputNode(stream, GetRoot(), 0, convMem, convFile);
+    OutputString(stream, wxT("\n"), NULL, NULL);
+    
+    if ( convFile )
+        delete convFile;
+    if ( convMem )
+        delete convMem;
+        
+    return TRUE;
 }
-
diff --git a/contrib/src/xrc/xmlbin.cpp b/contrib/src/xrc/xmlbin.cpp
deleted file mode 100644 (file)
index 730d509..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////
-// Name:        xmlbin.cpp
-// Purpose:     wxXmlIOHandlerBin 
-// Author:      Vaclav Slavik
-// Created:     2000/07/24
-// RCS-ID:      $Id$
-// Copyright:   (c) 2000 Vaclav Slavik
-// Licence:     wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
-// nothing, already in xml.cpp
-#endif
-
-// For compilers that support precompilation, includes "wx.h".
-#include "wx/wxprec.h"
-
-#ifdef __BORLANDC__
-    #pragma hdrstop
-#endif
-
-#include "wx/datstrm.h"
-#include "wx/log.h"
-#include "wx/intl.h"
-
-#include "wx/xrc/xmlio.h"
-
-
-
-
-bool wxXmlIOHandlerBin::CanLoad(wxInputStream& stream)
-{
-    bool canread;
-    canread = (ReadHeader(stream) == wxT("XMLBIN "));
-    stream.SeekI(-9, wxFromCurrent);
-    return canread;
-}
-
-
-
-wxString wxXmlIOHandlerBin::ReadHeader(wxInputStream& stream)
-{
-    wxUint8 version;
-    char cheader[8];
-
-    stream.Read(cheader, 8);
-    cheader[7] = 0;
-    stream.Read(&version, 1);
-    
-    if (version != 1) return wxEmptyString;
-    else return wxString(cheader);
-}
-
-
-
-void wxXmlIOHandlerBin::WriteHeader(wxOutputStream& stream, const wxString& header)
-{
-    char cheader[8];
-    size_t i;
-    wxUint8 version = 1;
-    
-    for (i = 0; i < header.Length(); i++) cheader[i] = header[i];
-    for (; i < 7; i++) cheader[i] = ' ';
-    cheader[7] = 0;
-    stream.Write(cheader, 8);
-    stream.Write(&version, 1);
-}
-
-
-
-static bool SaveBinNode(wxDataOutputStream& ds, wxXmlNode *node)
-{
-    if (node)
-    {
-        ds << (wxUint8)1 <<
-              (wxUint8)node->GetType() << 
-              node->GetName() << node->GetContent();
-        
-        wxXmlProperty *prop = node->GetProperties();
-        while (prop)
-        {
-            ds << (wxUint8)1;
-            ds << prop->GetName() << prop->GetValue();
-            prop = prop->GetNext();
-            
-        }
-        ds << (wxUint8)0;
-        
-        SaveBinNode(ds, node->GetNext());
-        SaveBinNode(ds, node->GetChildren());
-    }  
-    else
-        ds << (wxUint8)0;
-    
-    return TRUE;
-}
-
-
-
-bool wxXmlIOHandlerBin::Save(wxOutputStream& stream, const wxXmlDocument& doc)
-{
-    WriteHeader(stream, "XMLBIN ");
-    wxDataOutputStream ds(stream);
-    ds << doc.GetVersion();
-#if wxUSE_UNICODE
-    ds << wxString(wxT("UTF-8"));
-#else
-    ds << doc.GetEncoding();
-#endif
-    SaveBinNode(ds, doc.GetRoot());
-    return stream.LastError() == wxSTREAM_NOERROR;
-}
-
-
-
-static wxXmlProperty *LoadBinProp(wxDataInputStream& ds)
-{
-    wxUint8 dummy;
-    ds >> dummy;
-    if (dummy == 0) return NULL;
-
-    wxString name, value;
-    ds >> name >> value;
-    return new wxXmlProperty(name, value, LoadBinProp(ds));
-}
-
-
-
-
-static wxXmlNode *LoadBinNode(wxDataInputStream& ds, wxXmlNode *parent)
-{
-    wxUint8 type;
-    wxString name, content;
-    wxUint8 dummy;
-
-    ds >> dummy;
-    if (dummy == 0) return NULL;
-    ds >> type >> name >> content;
-    
-    wxXmlProperty *prop = LoadBinProp(ds);
-
-    wxXmlNode *nd = new wxXmlNode(parent, (wxXmlNodeType)type, name, content, 
-                                  prop, LoadBinNode(ds, parent));
-    LoadBinNode(ds, nd);
-    return nd;
-}
-
-
-
-bool wxXmlIOHandlerBin::Load(wxInputStream& stream, wxXmlDocument& doc,
-                             const wxString& encoding)
-{
-    ReadHeader(stream);
-    wxDataInputStream ds(stream);
-    wxString tmp;
-
-    ds >> tmp;
-    doc.SetVersion(tmp);
-    ds >> tmp;
-    doc.SetFileEncoding(tmp);
-
-    doc.SetRoot(LoadBinNode(ds, NULL));
-        
-    return (doc.GetRoot() != NULL);
-}
-
-
diff --git a/contrib/src/xrc/xmlbinz.cpp b/contrib/src/xrc/xmlbinz.cpp
deleted file mode 100644 (file)
index 5520b31..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////
-// Name:        xmlbinz.cpp
-// Purpose:     wxXmlIOHandlerBinZ
-// Author:      Vaclav Slavik
-// Created:     2000/07/24
-// RCS-ID:      $Id$
-// Copyright:   (c) 2000 Vaclav Slavik
-// Licence:     wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
-// nothing, already in xml.cpp
-#endif
-
-// For compilers that support precompilation, includes "wx.h".
-#include "wx/wxprec.h"
-
-#ifdef __BORLANDC__
-    #pragma hdrstop
-#endif
-
-#include "wx/datstrm.h"
-#include "wx/log.h"
-#include "wx/zstream.h"
-
-#include "wx/xrc/xmlio.h"
-
-#if wxUSE_ZLIB
-
-
-
-bool wxXmlIOHandlerBinZ::CanLoad(wxInputStream& stream)
-{
-    bool canread;
-    canread = (ReadHeader(stream) == wxT("XMLBINZ"));
-    stream.SeekI(-9, wxFromCurrent);
-    return canread;
-}
-
-
-
-bool wxXmlIOHandlerBinZ::Save(wxOutputStream& stream, const wxXmlDocument& doc)
-{
-    WriteHeader(stream, "XMLBINZ");
-    wxZlibOutputStream costr(stream, 9);
-    return wxXmlIOHandlerBin::Save(costr, doc);
-}
-
-
-
-bool wxXmlIOHandlerBinZ::Load(wxInputStream& stream, wxXmlDocument& doc,
-                              const wxString& encoding)
-{
-    ReadHeader(stream);
-    wxZlibInputStream costr(stream);
-    return wxXmlIOHandlerBin::Load(costr, doc, encoding);
-}
-
-
-#endif
diff --git a/contrib/src/xrc/xmlexpat.cpp b/contrib/src/xrc/xmlexpat.cpp
deleted file mode 100644 (file)
index 6d4de6f..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////
-// Name:        xmlexpat.cpp
-// Purpose:     wxXmlDocument - XML reader via Expat
-// Author:      Vaclav Slavik
-// Created:     2001/04/30
-// RCS-ID:      $Id$
-// Copyright:   (c) 2001 Vaclav Slavik
-// Licence:     wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
-
-#ifdef __GNUG__
-// nothing - already in xml.cpp
-#endif
-
-// For compilers that support precompilation, includes "wx.h".
-#include "wx/wxprec.h"
-
-#ifdef __BORLANDC__
-    #pragma hdrstop
-#endif
-
-#include "wx/wfstream.h"
-#include "wx/intl.h"
-#include "wx/log.h"
-#include "wx/strconv.h"
-#include "wx/xrc/xmlio.h"
-
-#include "xmlparse.h"
-
-/*
-
-    FIXME:
-     - process all elements, including CDATA
-
- */
-
-
-// converts Expat-produced string in UTF-8 into wxString.
-inline static wxString CharToString(wxMBConv *conv,
-                                    const char *s, size_t len = wxSTRING_MAXLEN)
-{
-#if wxUSE_UNICODE
-    (void)conv;
-    return wxString(s, wxConvUTF8, len);
-#else
-    if ( conv )
-    {
-        size_t nLen = (len != wxSTRING_MAXLEN) ? len :
-                          nLen = wxConvUTF8.MB2WC((wchar_t*) NULL, s, 0);
-    
-        wchar_t *buf = new wchar_t[nLen+1];
-        wxConvUTF8.MB2WC(buf, s, nLen);
-        buf[nLen] = 0;
-        return wxString(buf, *conv, len);
-        delete[] buf;
-    }
-    else
-        return wxString(s, len);
-#endif
-}
-
-bool wxXmlIOHandlerExpat::CanLoad(wxInputStream& stream)
-{
-    char cheader[7];
-    cheader[6] = 0;
-    stream.Read(cheader, 6);
-    stream.SeekI(-6, wxFromCurrent);
-    return (strcmp(cheader, "<?xml ") == 0);
-}
-
-
-struct wxXmlParsingContext
-{
-    wxMBConv  *conv;
-
-    wxXmlNode *root;
-    wxXmlNode *node;
-    wxXmlNode *lastAsText;
-    wxString   encoding;
-    wxString   version;
-};
-
-static void StartElementHnd(void *userData, const char *name, const char **atts)
-{
-    wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
-    wxXmlNode *node = new wxXmlNode(wxXML_ELEMENT_NODE, CharToString(ctx->conv, name));
-    const char **a = atts;
-    while (*a)
-    {
-        node->AddProperty(CharToString(ctx->conv, a[0]), CharToString(ctx->conv, a[1]));
-        a += 2;
-    }
-    if (ctx->root == NULL)
-        ctx->root = node;
-    else
-        ctx->node->AddChild(node);
-    ctx->node = node;
-    ctx->lastAsText = NULL;
-}
-
-static void EndElementHnd(void *userData, const char* WXUNUSED(name))
-{
-    wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
-
-    ctx->node = ctx->node->GetParent();
-    ctx->lastAsText = NULL;
-}
-
-static void TextHnd(void *userData, const char *s, int len)
-{
-    wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
-    char *buf = new char[len + 1];
-
-    buf[len] = '\0';
-    memcpy(buf, s, (size_t)len);
-
-    if (ctx->lastAsText)
-    {
-        ctx->lastAsText->SetContent(ctx->lastAsText->GetContent() +
-                                    CharToString(ctx->conv, buf));
-    }
-    else
-    {
-        bool whiteOnly = TRUE;
-        for (char *c = buf; *c != '\0'; c++)
-            if (*c != ' ' && *c != '\t' && *c != '\n' && *c != '\r')
-            {
-                whiteOnly = FALSE;
-                break;
-            }
-        if (!whiteOnly)
-        {
-            ctx->lastAsText = new wxXmlNode(wxXML_TEXT_NODE, wxT("text"),
-                                            CharToString(ctx->conv, buf));
-            ctx->node->AddChild(ctx->lastAsText);
-        }
-    }
-
-    delete[] buf;
-}
-
-static void CommentHnd(void *userData, const char *data)
-{
-    wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
-
-    if (ctx->node)
-    {
-        // VS: ctx->node == NULL happens if there is a comment before
-        //     the root element (e.g. wxDesigner's output). We ignore such
-        //     comments, no big deal...
-        ctx->node->AddChild(new wxXmlNode(wxXML_COMMENT_NODE,
-                            wxT("comment"), CharToString(ctx->conv, data)));
-    }
-    ctx->lastAsText = NULL;
-}
-
-static void DefaultHnd(void *userData, const char *s, int len)
-{
-    // XML header:
-    if (len > 6 && memcmp(s, "<?xml ", 6) == 0)
-    {
-        wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
-
-        wxString buf = CharToString(ctx->conv, s, (size_t)len);
-        int pos;
-        pos = buf.Find(wxT("encoding="));
-        if (pos != wxNOT_FOUND)
-            ctx->encoding = buf.Mid(pos + 10).BeforeFirst(buf[(size_t)pos+9]);
-        pos = buf.Find(wxT("version="));
-        if (pos != wxNOT_FOUND)
-            ctx->version = buf.Mid(pos + 9).BeforeFirst(buf[(size_t)pos+8]);
-    }
-}
-
-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(name);
-    char mbBuf[255];
-    wchar_t wcBuf[255];
-    size_t i;
-    
-    for (i = 0; i < 255; i++)
-        mbBuf[i] = i+1;
-    mbBuf[255] = 0;
-    conv.MB2WC(wcBuf, mbBuf, 255);
-    wcBuf[255] = 0;
-    
-    info->map[0] = 0;
-    for (i = 0; i < 255; i++)
-        info->map[i+1] = (int)wcBuf[i];
-    
-    info->data = NULL;
-    info->convert = NULL;
-    info->release = NULL;
-    
-    return 1;
-}
-
-bool wxXmlIOHandlerExpat::Load(wxInputStream& stream, wxXmlDocument& doc,
-                               const wxString& encoding)
-{
-    const size_t BUFSIZE = 1024;
-    char buf[BUFSIZE];
-    wxXmlParsingContext ctx;
-    bool done;
-    XML_Parser parser = XML_ParserCreate(NULL);
-
-    ctx.root = ctx.node = NULL;
-    ctx.encoding = wxT("UTF-8"); // default in absence of encoding=""
-    ctx.conv = NULL;
-#if !wxUSE_UNICODE
-    if ( encoding != wxT("UTF-8") && encoding != wxT("utf-8") )
-        ctx.conv = new wxCSConv(encoding);
-#endif
-    
-    XML_SetUserData(parser, (void*)&ctx);
-    XML_SetElementHandler(parser, StartElementHnd, EndElementHnd);
-    XML_SetCharacterDataHandler(parser, TextHnd);
-    XML_SetCommentHandler(parser, CommentHnd);
-    XML_SetDefaultHandler(parser, DefaultHnd);
-    XML_SetUnknownEncodingHandler(parser, UnknownEncodingHnd, NULL);
-
-    do
-    {
-        size_t len = stream.Read(buf, BUFSIZE).LastRead();
-        done = (len < BUFSIZE);
-        if (!XML_Parse(parser, buf, len, done))
-        {
-            wxLogError(_("XML parsing error: '%s' at line %d"),
-                       XML_ErrorString(XML_GetErrorCode(parser)),
-                       XML_GetCurrentLineNumber(parser));
-          return FALSE;
-        }
-    } while (!done);
-
-    doc.SetVersion(ctx.version);
-    doc.SetFileEncoding(ctx.encoding);
-    doc.SetRoot(ctx.root);
-
-    XML_ParserFree(parser);
-#if !wxUSE_UNICODE
-    if ( ctx.conv )
-        delete ctx.conv;
-#endif
-    
-    return TRUE;
-}
index ef687793569a2cd40de2d60d09dc680a101491b7..bd45b371852f511a889089724eac878cd1d1e5e5 100644 (file)
@@ -331,7 +331,7 @@ void wxXmlResource::UpdateResources()
                 delete m_data[i].Doc;
                 m_data[i].Doc = new wxXmlDocument;
             }
-            if (!stream || !m_data[i].Doc->Load(*stream, wxXML_IO_AUTO, encoding))
+            if (!stream || !m_data[i].Doc->Load(*stream, encoding))
             {
                 wxLogError(_("Cannot load resources from file '%s'."),
                            m_data[i].File.c_str());
diff --git a/contrib/src/xrc/xmlwrite.cpp b/contrib/src/xrc/xmlwrite.cpp
deleted file mode 100644 (file)
index 3b6e3a1..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////
-// Name:        xmlwrite.cpp
-// Purpose:     wxXmlDocument - XML text writer
-// Author:      Vaclav Slavik
-// Created:     2001/04/30
-// RCS-ID:      $Id$
-// Copyright:   (c) 2001 Vaclav Slavik
-// Licence:     wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
-// nothing - already in xml.cpp
-#endif
-
-// For compilers that support precompilation, includes "wx.h".
-#include "wx/wxprec.h"
-
-#ifdef __BORLANDC__
-    #pragma hdrstop
-#endif
-
-#include "wx/wfstream.h"
-#include "wx/intl.h"
-#include "wx/log.h"
-#include "wx/strconv.h"
-#include "wx/xrc/xml.h"
-#include "wx/xrc/xmlio.h"
-
-// write string to output:
-inline static void OutputString(wxOutputStream& stream, const wxString& str,
-                                wxMBConv *convMem, wxMBConv *convFile)
-{
-    if (str.IsEmpty()) return;
-#if wxUSE_UNICODE
-    const wxW2MBbuf *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
-    {
-        wxString str2(str.wc_str(*convMem), *convFile);
-        stream.Write(str2.mb_str(), str2.Len());
-    }
-#endif
-}
-
-// Same as above, but create entities first. 
-// Translates '<' to "&lt;", '>' to "&gt;" and '&' to "&amp;"
-static void OutputStringEnt(wxOutputStream& stream, const wxString& str,
-                            wxMBConv *convMem, wxMBConv *convFile)
-{
-    wxString buf;
-    size_t i, last, len;
-    wxChar c;
-    
-    len = str.Len();
-    last = 0;
-    for (i = 0; i < len; i++)
-    {
-        c = str.GetChar(i);
-        if (c == wxT('<') || c == wxT('>') || 
-            (c == wxT('&') && str.Mid(i+1, 4) != wxT("amp;")))
-        {
-            OutputString(stream, str.Mid(last, i - last), convMem, convFile);
-            switch (c)
-            {
-                case wxT('<'): 
-                    OutputString(stream, wxT("&lt;"), NULL, NULL);
-                    break;
-                case wxT('>'): 
-                    OutputString(stream, wxT("&gt;"), NULL, NULL);
-                    break;
-                case wxT('&'): 
-                    OutputString(stream, wxT("&amp;"), NULL, NULL);
-                    break;
-                default: break;
-            }
-            last = i + 1;
-        }
-    }
-    OutputString(stream, str.Mid(last, i - last), convMem, convFile);
-}
-
-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);
-}
-
-static void OutputNode(wxOutputStream& stream, wxXmlNode *node, int indent,
-                       wxMBConv *convMem, wxMBConv *convFile)
-{
-    wxXmlNode *n, *prev;
-    wxXmlProperty *prop;
-
-    switch (node->GetType())
-    {
-        case wxXML_TEXT_NODE:
-            OutputStringEnt(stream, node->GetContent(), convMem, convFile);
-            break;
-            
-        case wxXML_ELEMENT_NODE:
-            OutputString(stream, wxT("<"), NULL, NULL);
-            OutputString(stream, node->GetName(), NULL, NULL);
-            
-            prop = node->GetProperties();
-            while (prop)
-            {
-                OutputString(stream, wxT(" ") + prop->GetName() +
-                             wxT("=\"") + prop->GetValue() + wxT("\""),
-                             NULL, NULL);
-                // FIXME - what if prop contains '"'?
-                prop = prop->GetNext();
-            }
-            
-            if (node->GetChildren())
-            {
-                OutputString(stream, wxT(">"), NULL, NULL);
-                prev = NULL;
-                n = node->GetChildren();
-                while (n)
-                {
-                    if (n && n->GetType() != wxXML_TEXT_NODE)
-                        OutputIndentation(stream, indent + 1);
-                    OutputNode(stream, n, indent + 1, convMem, convFile);
-                    prev = n;
-                    n = n->GetNext();
-                }
-                if (prev && prev->GetType() != wxXML_TEXT_NODE)
-                    OutputIndentation(stream, indent);
-                OutputString(stream, wxT("</"), NULL, NULL);
-                OutputString(stream, node->GetName(), NULL, NULL);
-                OutputString(stream, wxT(">"), NULL, NULL);
-            }
-            else
-                OutputString(stream, wxT("/>"), NULL, NULL);
-            break;
-             
-        case wxXML_COMMENT_NODE:
-            OutputString(stream, wxT("<!--"), NULL, NULL);
-            OutputString(stream, node->GetContent(), convMem, convFile);
-            OutputString(stream, wxT("-->"), NULL, NULL);
-            break;
-            
-        default:
-            wxFAIL_MSG(wxT("unsupported node type"));
-    }
-}
-
-bool wxXmlIOHandlerWriter::Save(wxOutputStream& stream, const wxXmlDocument& doc)
-{
-    if (!doc.IsOk())
-        return FALSE;
-        
-    wxString s;
-    
-    wxMBConv *convMem = NULL, *convFile = NULL;
-#if wxUSE_UNICODE
-    convFile = new wxCSConv(doc.GetFileEncoding());
-#else
-    if ( doc.GetFileEncoding() != doc.GetEncoding() )
-    {
-        convFile = new wxCSConv(doc.GetFileEncoding());
-        convMem = new wxCSConv(doc.GetEncoding());
-    }
-#endif
-    
-    s.Printf(wxT("<?xml version=\"%s\" encoding=\"%s\"?>\n"),
-             doc.GetVersion().c_str(), doc.GetFileEncoding().c_str());
-    OutputString(stream, s, NULL, NULL);
-    
-    OutputNode(stream, doc.GetRoot(), 0, convMem, convFile);
-    OutputString(stream, wxT("\n"), NULL, NULL);
-    
-    if ( convFile )
-        delete convFile;
-    if ( convMem )
-        delete convMem;
-        
-    return TRUE;
-}
index 5ea1c7a4779db182af42d901348520a1e0933fd7..be9b7b75b5af5e0900c533990fad60800507c6e0 100644 (file)
@@ -28,7 +28,6 @@
 
 #include "wx/cmdline.h"
 #include "wx/xrc/xml.h"
-#include "wx/xrc/xmlio.h"
 #include "wx/ffile.h"
 #include "wx/wfstream.h"
 
@@ -67,7 +66,7 @@ private:
     wxArrayString FindStrings();
     wxArrayString FindStrings(wxXmlNode *node);
             
-    bool flagVerbose, flagCPP, flagCompress, flagGettext;
+    bool flagVerbose, flagCPP, flagGettext;
     wxString parOutput, parFuncname, parOutputPath;
     wxArrayString parFiles;
     int retCode;
@@ -86,7 +85,6 @@ int XmlResApp::OnRun()
         { wxCMD_LINE_SWITCH, "h", "help",  "show help message" },
         { wxCMD_LINE_SWITCH, "v", "verbose", "be verbose" },
         { wxCMD_LINE_SWITCH, "c", "cpp-code",  "output C++ source rather than .rsc file" },
-        { wxCMD_LINE_SWITCH, "u", "uncompressed",  "do not compress .xml files (C++ only)" },
         { wxCMD_LINE_SWITCH, "g", "gettext",  "output list of translatable strings (to stdout or file if -o used)" },
         { wxCMD_LINE_OPTION, "n", "function",  "C++ function name (with -c) [InitXmlResource]" },
         { wxCMD_LINE_OPTION, "o", "output",  "output file [resource.xrs/cpp]" },
@@ -104,8 +102,6 @@ int XmlResApp::OnRun()
     delete wxLog::SetActiveTarget(new wxLogStderr);
 #endif
 
-    wxXmlDocument::AddHandler(new wxXmlIOHandlerBinZ);
-
     wxCmdLineParser parser(cmdLineDesc, argc, argv);
 
     switch (parser.Parse())
@@ -146,7 +142,6 @@ void XmlResApp::ParseParams(const wxCmdLineParser& cmdline)
     flagGettext = cmdline.Found("g");
     flagVerbose = cmdline.Found("v");
     flagCPP = cmdline.Found("c");
-    flagCompress = flagCPP && !cmdline.Found("u");
 
     if (!cmdline.Found("o", &parOutput)) 
     {
@@ -210,9 +205,8 @@ wxArrayString XmlResApp::PrepareTempFiles()
 
         FindFilesInXML(doc.GetRoot(), flist, path);
 
-        doc.Save(parOutputPath + "/" + name + ".xmlbin", 
-                 flagCompress ? wxXML_IO_BINZ : wxXML_IO_BIN);
-        flist.Add(name + ".xmlbin");
+        doc.Save(parOutputPath + "/" + name + ".xrc");
+        flist.Add(name + ".xrc");
     }
     
     return flist;
@@ -394,7 +388,7 @@ void " + parFuncname + "()\n\
         wxString name, ext, path;
         wxSplitPath(parFiles[i], &path, &name, &ext);
         file.Write("    wxXmlResource::Get()->Load(\"memory:xml_resource/" + 
-                   name + ".xmlbin" + "\");\n");
+                   name + ".xrc" + "\");\n");
     }
     
     file.Write("}\n");
index 201c047d72d4520cebaaac73756414ebb5c2c92e..affbc9e01bcd7b614db6c55851fa3d9ca8f88e45 100644 (file)
@@ -297,7 +297,7 @@ void EditorFrame::LoadFile(const wxString& filename)
     m_Resource = new wxXmlRcEditDocument;
     m_Modified = FALSE;
     
-    if (!m_Resource->Load(filename, wxXML_IO_AUTO, wxLocale::GetSystemEncodingName()))
+    if (!m_Resource->Load(filename,  wxLocale::GetSystemEncodingName()))
     {
         delete m_Resource;
         m_Resource = NULL;
index 9aeb6154019746d3c272703918f6b6e9bdf9cb9b..ddf3be2b61d5962b749b1864d8522730d01af21f 100644 (file)
@@ -154,7 +154,7 @@ void PreviewFrame::Preview(wxXmlNode *node,const wxString &version)
        if (XmlGetClass(doc.GetRoot()->GetChildren()) == _T("wxDialog")) 
            XmlSetClass(doc.GetRoot()->GetChildren(), _T("wxPanel"));   
 
-       doc.Save(m_TmpFile, wxXML_IO_BIN);
+       doc.Save(m_TmpFile);
        // wxXmlResource will detect change automatically
    }
 
index 28037b6925bedf7a0f99a905b5b7a5b1adc3c7fc..7d5f4e05a638a10620f445b7f0eb37ba3756f28e 100644 (file)
@@ -54,18 +54,6 @@ enum wxXmlNodeType
 };
 
 
-// Types of XML files:
-
-enum wxXmlIOType
-{
-    wxXML_IO_AUTO = 0,    // detect it automatically
-    wxXML_IO_EXPAT,       // use Expat to load from text/xml document
-    wxXML_IO_TEXT_OUTPUT, // generic saver into text/xml
-    wxXML_IO_BIN,         // save in binary uncompressed proprietary format
-    wxXML_IO_BINZ         // svae in binary zlib-compressed proprietary format
-};
-
-
 // Represents node property(ies).
 // Example: in <img src="hello.gif" id="3"/> "src" is property with value
 //          "hello.gif" and "id" is prop. with value "3".
@@ -178,10 +166,8 @@ class WXXMLDLLEXPORT wxXmlDocument : public wxObject
 public:
     wxXmlDocument() : wxObject(), m_version(wxT("1.0")), m_root(NULL)  {}
     wxXmlDocument(const wxString& filename,
-                  wxXmlIOType io_type = wxXML_IO_AUTO,
                   const wxString& encoding = wxT("UTF-8"));
     wxXmlDocument(wxInputStream& stream,
-                  wxXmlIOType io_type = wxXML_IO_AUTO,
                   const wxString& encoding = wxT("UTF-8"));
     ~wxXmlDocument() { delete m_root; }
 
@@ -191,17 +177,13 @@ public:
     // Parses .xml file and loads data. Returns TRUE on success, FALSE
     // otherwise.
     bool Load(const wxString& filename,
-              wxXmlIOType io_type = wxXML_IO_AUTO,
               const wxString& encoding = wxT("UTF-8"));
     bool Load(wxInputStream& stream,
-              wxXmlIOType io_type = wxXML_IO_AUTO,
               const wxString& encoding = wxT("UTF-8"));
 
     // Saves document as .xml file.
-    bool Save(const wxString& filename,
-              wxXmlIOType io_type = wxXML_IO_TEXT_OUTPUT) const;
-    bool Save(wxOutputStream& stream,
-              wxXmlIOType io_type = wxXML_IO_TEXT_OUTPUT) const;
+    bool Save(const wxString& filename) const;
+    bool Save(wxOutputStream& stream) const;
 
     bool IsOk() const { return m_root != NULL; }
 
@@ -227,13 +209,6 @@ public:
     wxString GetEncoding() const { return m_encoding; }
 #endif
 
-    static void AddHandler(wxXmlIOHandler *handler);
-    static void CleanUpHandlers();
-    static void InitStandardHandlers();
-
-protected:
-    static wxList *sm_handlers;
-
 private:
     wxString   m_version;
     wxString   m_fileEncoding;
@@ -245,27 +220,4 @@ private:
     void DoCopy(const wxXmlDocument& doc);
 };
 
-
-
-// wxXmlIOHandler takes care of loading and/or saving XML data.
-// see xmlio.h for available handlers
-
-class WXXMLDLLEXPORT wxXmlIOHandler : public wxObject
-{
-    public:
-        wxXmlIOHandler() {}
-
-        virtual wxXmlIOType GetType() = 0;
-        virtual bool CanLoad(wxInputStream& stream) = 0;
-        virtual bool CanSave() = 0;
-
-        virtual bool Load(wxInputStream& stream, wxXmlDocument& doc, 
-                          const wxString& encoding) = 0;
-        virtual bool Save(wxOutputStream& stream, const wxXmlDocument& doc) = 0;
-};
-
-
-
-void wxXmlInitXmlModule();
-
 #endif // _WX_XML_H_
diff --git a/include/wx/xrc/xmlio.h b/include/wx/xrc/xmlio.h
deleted file mode 100644 (file)
index a4052b6..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////
-// Name:        xmlio.h
-// Purpose:     wxXmlIOHandler - XML I/O classes
-// Author:      Vaclav Slavik
-// Created:     2000/07/24
-// RCS-ID:      $Id$
-// Copyright:   (c) 2000 Vaclav Slavik
-// Licence:     wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
-
-#ifndef _WX_XMLIO_H_
-#define _WX_XMLIO_H_
-
-#ifdef __GNUG__
-#pragma interface "xmlio.h"
-#endif
-
-#include "wx/defs.h"
-#include "wx/string.h"
-#include "wx/xrc/xml.h"
-
-
-class WXXMLDLLEXPORT wxXmlIOHandlerExpat : public wxXmlIOHandler
-{
-public:
-    virtual wxXmlIOType GetType() { return wxXML_IO_EXPAT; }
-    virtual bool CanLoad(wxInputStream& stream);
-    virtual bool CanSave() { return FALSE; }
-
-    virtual bool Load(wxInputStream& stream, wxXmlDocument& doc,
-                      const wxString& encoding);
-    virtual bool Save(wxOutputStream& WXUNUSED(stream), const wxXmlDocument& WXUNUSED(doc))
-        { return FALSE; }
-};
-
-
-class WXXMLDLLEXPORT wxXmlIOHandlerWriter : public wxXmlIOHandler
-{
-public:
-    virtual wxXmlIOType GetType() { return wxXML_IO_TEXT_OUTPUT; }
-    virtual bool CanLoad(wxInputStream& WXUNUSED(stream)) { return FALSE; }
-    virtual bool CanSave() { return TRUE; }
-
-    virtual bool Load(wxInputStream& WXUNUSED(stream), wxXmlDocument& WXUNUSED(doc),
-                      const wxString& WXUNUSED(encoding))
-        { return FALSE; }
-    virtual bool Save(wxOutputStream& stream, const wxXmlDocument& doc);
-};
-
-
-class WXXMLDLLEXPORT wxXmlIOHandlerBin : public wxXmlIOHandler
-{
-public:
-    wxXmlIOHandlerBin() {}
-
-    virtual wxXmlIOType GetType() { return wxXML_IO_BIN; }
-    virtual bool CanLoad(wxInputStream& stream);
-    virtual bool CanSave() { return TRUE; }
-
-    virtual bool Load(wxInputStream& stream, wxXmlDocument& doc,
-                      const wxString& encoding);
-    virtual bool Save(wxOutputStream& stream, const wxXmlDocument& doc);
-
-protected:
-    wxString ReadHeader(wxInputStream& stream);
-    void WriteHeader(wxOutputStream& stream, const wxString& header);
-};
-
-
-
-#if wxUSE_ZLIB
-
-class WXXMLDLLEXPORT wxXmlIOHandlerBinZ : public wxXmlIOHandlerBin
-{
-public:
-    wxXmlIOHandlerBinZ() {}
-
-    virtual wxXmlIOType GetType() { return wxXML_IO_BINZ; }
-    virtual bool CanLoad(wxInputStream& stream);
-
-    virtual bool Load(wxInputStream& stream, wxXmlDocument& doc,
-                      const wxString& encoding);
-    virtual bool Save(wxOutputStream& stream, const wxXmlDocument& doc);
-};
-
-#endif
-
-
-#endif // _WX_XMLIO_H_
index 729c6f1574fb722aad84e91cabdbc463aabe4f44..f645274010b66d79efebeacd243cef590f6662ef 100644 (file)
@@ -27,7 +27,7 @@ HEADERS=xh_all.h xh_bttn.h xh_chckb.h xh_chckl.h xh_choic.h xh_combo.h \
         xh_stlin.h xh_bmp.h xh_unkwn.h xh_frame.h xh_gdctl.h
 
 OBJECTS=$(EXPAT_OBJECTS) \
-        xml.o xmlbin.o xmlbinz.o xmlexpat.o xmlwrite.o xmlres.o xmlrsall.o \
+        xml.o xmlres.o xmlrsall.o \
         xh_bttn.o xh_chckb.o xh_chckl.o xh_choic.o xh_combo.o xh_dlg.o \
         xh_gauge.o xh_html.o xh_menu.o xh_notbk.o xh_panel.o xh_radbt.o \
         xh_radbx.o xh_sizer.o xh_slidr.o xh_spin.o xh_stbmp.o xh_sttxt.o \
index 79710adb448511f1d202116f301035bd50cd770d..44c9ba9a7852f2736efd0d30efe4deb4f0dbb351 100644 (file)
@@ -232,27 +232,11 @@ SOURCE=.\xml.cpp
 # End Source File
 # Begin Source File
 
-SOURCE=.\xmlbin.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\xmlbinz.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\xmlexpat.cpp
-# End Source File
-# Begin Source File
-
 SOURCE=.\xmlres.cpp
 # End Source File
 # Begin Source File
 
 SOURCE=.\xmlrsall.cpp
 # End Source File
-# Begin Source File
-
-SOURCE=.\xmlwrite.cpp
-# End Source File
 # End Target
 # End Project
index ba854f74e65c854addfa43612ebb1fd56c20da5f..dc7d4fa68a9c2b49bb38840d946cf21b3b24dde6 100644 (file)
@@ -21,7 +21,7 @@ EXTRACPPFLAGS=$(wxLIBXMLDIR) $(EXPAT_DEFS)
 LIBTARGET=$(WXDIR)\lib\wxxrc.lib
 
 OBJECTS=$(EXPAT_OBJECTS) \
-        xml.obj xmlbin.obj xmlbinz.obj xmlexpat.obj xmlwrite.obj xmlres.obj xmlrsall.obj \
+        xml.obj xmlres.obj xmlrsall.obj \
         xh_bttn.obj xh_chckb.obj xh_chckl.obj xh_choic.obj xh_combo.obj xh_dlg.obj \
         xh_gauge.obj xh_html.obj xh_menu.obj xh_notbk.obj xh_panel.obj xh_radbt.obj \
         xh_radbx.obj xh_sizer.obj xh_slidr.obj xh_spin.obj xh_stbmp.obj xh_sttxt.obj \
index 2fb8b309a5b2b0041974099f1631cfefc41945e5..8a4bfb322ff87ab5bb51ac4e5a56fdcccc69c25e 100644 (file)
@@ -22,7 +22,7 @@ XMLTOKDIR_OBJECTS=xmltok.o xmlrole.o
 LIBTARGET=$(WXDIR)/lib/libwxxrc.a
 
 OBJECTS= $(XMLPARSEDIR_OBJECTS) $(XMLTOKDIR_OBJECTS) \
-        xml.o xmlbin.o xmlbinz.o xmlexpat.o xmlwrite.o xmlres.o xmlrsall.o \
+        xml.o xmlres.o xmlrsall.o \
         xh_bttn.o xh_chckb.o xh_chckl.o xh_choic.o xh_combo.o xh_dlg.o \
         xh_gauge.o xh_html.o xh_menu.o xh_notbk.o xh_panel.o xh_radbt.o \
         xh_radbx.o xh_sizer.o xh_slidr.o xh_spin.o xh_stbmp.o xh_sttxt.o \
index 841ac2d4cd29e2a684fd9a15876c99173b97b1b9..ff40bb5fcb08f2bb78814b65debe64dfbf0b0237 100644 (file)
@@ -47,7 +47,7 @@ LIBTARGET=$(WXDIR)\lib\wxxrc$(LIBEXT).lib
 EXTRATARGETS=$(D)
 
 OBJECTS=$(EXPAT_OBJS) \
-        $(D)\xml.obj $(D)\xmlbin.obj $(D)\xmlbinz.obj $(D)\xmlres.obj \
+        $(D)\xml.obj \
         $(D)\xmlrsall.obj $(D)\xh_bttn.obj $(D)\xh_chckb.obj $(D)\xh_chckl.obj \
                $(D)\xh_choic.obj $(D)\xh_combo.obj $(D)\xh_dlg.obj \
         $(D)\xh_frame.obj $(D)\xh_gauge.obj $(D)\xh_html.obj $(D)\xh_menu.obj \
@@ -57,7 +57,7 @@ OBJECTS=$(EXPAT_OBJS) \
         $(D)\xh_text.obj $(D)\xh_listb.obj $(D)\xh_toolb.obj \
         $(D)\xh_bmpbt.obj $(D)\xh_cald.obj $(D)\xh_listc.obj $(D)\xh_scrol.obj \
         $(D)\xh_stbox.obj $(D)\xh_tree.obj $(D)\xh_stlin.obj $(D)\xh_bmp.obj \
-        $(D)\xh_unkwn.obj $(D)\xmlwrite.obj $(D)\xmlexpat.obj
+        $(D)\xh_unkwn.obj
 
 !include $(WXDIR)\src\makelib.vc
 
index be5d104e3fa3f7c035fc825dc074dfe940ba69b2..43cfc46647814741bbe45c56c1b98c555dc86794 100644 (file)
@@ -12,7 +12,7 @@ THISDIR = $(WXDIR)\contrib\src\xrc
 NAME = wxxrc
 LNK = $(name).lnk
 
-OBJECTS=xml.obj xmlbin.obj xmlbinz.obj xmlpars.obj xmlres.obj xmlrsall.obj &
+OBJECTS=xml.obj xmlres.obj xmlrsall.obj &
         xh_bttn.obj xh_chckb.obj xh_chckl.obj xh_choic.obj xh_combo.obj xh_dlg.obj &
         xh_gauge.obj xh_html.obj xh_menu.obj xh_notbk.obj xh_panel.obj xh_radbt.obj &
         xh_radbx.obj xh_sizer.obj xh_slidr.obj xh_spin.obj xh_stbmp.obj xh_sttxt.obj &
index cf0f9630bf41894411a49df5f14e280a7e5c36ac..692a39f0bc46542a709a57c27ded120fb0245259 100644 (file)
 #include "wx/zstream.h"
 #include "wx/log.h"
 #include "wx/intl.h"
+#include "wx/strconv.h"
 
 #include "wx/xrc/xml.h"
-#include "wx/xrc/xmlio.h"
 
+#include "xmlparse.h" // from Expat
 
+//-----------------------------------------------------------------------------
+//  wxXmlNode
+//-----------------------------------------------------------------------------
 
 wxXmlNode::wxXmlNode(wxXmlNode *parent,wxXmlNodeType type,
                      const wxString& name, const wxString& content,
@@ -51,8 +55,6 @@ wxXmlNode::wxXmlNode(wxXmlNode *parent,wxXmlNodeType type,
     }
 }
 
-
-
 wxXmlNode::wxXmlNode(wxXmlNodeType type, const wxString& name,
                      const wxString& content)
     : m_type(type), m_name(name), m_content(content),
@@ -60,8 +62,6 @@ wxXmlNode::wxXmlNode(wxXmlNodeType type, const wxString& name,
       m_children(NULL), m_next(NULL)
 {}
 
-
-
 wxXmlNode::wxXmlNode(const wxXmlNode& node)
 {
     m_next = NULL;
@@ -69,8 +69,6 @@ wxXmlNode::wxXmlNode(const wxXmlNode& node)
     DoCopy(node);
 }
 
-
-
 wxXmlNode::~wxXmlNode()
 {
     wxXmlNode *c, *c2;
@@ -88,8 +86,6 @@ wxXmlNode::~wxXmlNode()
     }
 }
 
-
-
 wxXmlNode& wxXmlNode::operator=(const wxXmlNode& node)
 {
     wxDELETE(m_properties);
@@ -98,8 +94,6 @@ wxXmlNode& wxXmlNode::operator=(const wxXmlNode& node)
     return *this;
 }
 
-
-
 void wxXmlNode::DoCopy(const wxXmlNode& node)
 {
     m_type = node.m_type;
@@ -123,7 +117,6 @@ void wxXmlNode::DoCopy(const wxXmlNode& node)
     }
 }
 
-
 bool wxXmlNode::HasProp(const wxString& propName) const
 {
     wxXmlProperty *prop = GetProperties();
@@ -137,8 +130,6 @@ bool wxXmlNode::HasProp(const wxString& propName) const
     return FALSE;
 }
 
-
-
 bool wxXmlNode::GetPropVal(const wxString& propName, wxString *value) const
 {
     wxXmlProperty *prop = GetProperties();
@@ -156,8 +147,6 @@ bool wxXmlNode::GetPropVal(const wxString& propName, wxString *value) const
     return FALSE;
 }
 
-
-
 wxString wxXmlNode::GetPropVal(const wxString& propName, const wxString& defaultVal) const
 {
     wxString tmp;
@@ -167,8 +156,6 @@ wxString wxXmlNode::GetPropVal(const wxString& propName, const wxString& default
         return defaultVal;
 }
 
-
-
 void wxXmlNode::AddChild(wxXmlNode *child)
 {
     if (m_children == NULL)
@@ -183,8 +170,6 @@ void wxXmlNode::AddChild(wxXmlNode *child)
     child->m_parent = this;
 }
 
-
-
 void wxXmlNode::InsertChild(wxXmlNode *child, wxXmlNode *before_node)
 {
     wxASSERT_MSG(before_node->GetParent() == this, wxT("wxXmlNode::InsertChild - the node has incorrect parent"));
@@ -202,8 +187,6 @@ void wxXmlNode::InsertChild(wxXmlNode *child, wxXmlNode *before_node)
     child->m_next = before_node;
 }
 
-
-
 bool wxXmlNode::RemoveChild(wxXmlNode *child)
 {
     if (m_children == NULL)
@@ -233,8 +216,6 @@ bool wxXmlNode::RemoveChild(wxXmlNode *child)
     }
 }
 
-
-
 void wxXmlNode::AddProperty(const wxString& name, const wxString& value)
 {
     AddProperty(new wxXmlProperty(name, value, NULL));
@@ -252,8 +233,6 @@ void wxXmlNode::AddProperty(wxXmlProperty *prop)
     }
 }
 
-
-
 bool wxXmlNode::DeleteProperty(const wxString& name)
 {
     wxXmlProperty *prop;
@@ -291,46 +270,33 @@ bool wxXmlNode::DeleteProperty(const wxString& name)
 
 
 
+//-----------------------------------------------------------------------------
+//  wxXmlDocument
+//-----------------------------------------------------------------------------
 
-
-
-
-
-wxList *wxXmlDocument::sm_handlers = NULL;
-
-
-
-wxXmlDocument::wxXmlDocument(const wxString& filename, wxXmlIOType io_type,
-                             const wxString& encoding)
+wxXmlDocument::wxXmlDocument(const wxString& filename, const wxString& encoding)
                           : wxObject(), m_root(NULL)
 {
-    if (!Load(filename, io_type, encoding))
+    if ( !Load(filename, encoding) )
     {
         wxDELETE(m_root);
     }
 }
 
-
-
-wxXmlDocument::wxXmlDocument(wxInputStream& stream, wxXmlIOType io_type,
-                             const wxString& encoding)
+wxXmlDocument::wxXmlDocument(wxInputStream& stream, const wxString& encoding)
                           : wxObject(), m_root(NULL)
 {
-    if (!Load(stream, io_type, encoding))
+    if ( !Load(stream, encoding) )
     {
         wxDELETE(m_root);
     }
 }
 
-
-
 wxXmlDocument::wxXmlDocument(const wxXmlDocument& doc)
 {
     DoCopy(doc);
 }
 
-
-
 wxXmlDocument& wxXmlDocument::operator=(const wxXmlDocument& doc)
 {
     wxDELETE(m_root);
@@ -338,8 +304,6 @@ wxXmlDocument& wxXmlDocument::operator=(const wxXmlDocument& doc)
     return *this;
 }
 
-
-
 void wxXmlDocument::DoCopy(const wxXmlDocument& doc)
 {
     m_version = doc.m_version;
@@ -350,123 +314,398 @@ void wxXmlDocument::DoCopy(const wxXmlDocument& doc)
     m_root = new wxXmlNode(*doc.m_root);
 }
 
-
-
-bool wxXmlDocument::Load(const wxString& filename, wxXmlIOType io_type,
-                         const wxString& encoding)
+bool wxXmlDocument::Load(const wxString& filename, const wxString& encoding)
 {
     wxFileInputStream stream(filename);
-    return Load(stream, io_type, encoding);
+    return Load(stream, encoding);
+}
+
+bool wxXmlDocument::Save(const wxString& filename) const
+{
+    wxFileOutputStream stream(filename);
+    return Save(stream);
 }
 
 
 
-bool wxXmlDocument::Load(wxInputStream& stream, wxXmlIOType io_type,
-                         const wxString& encoding)
+//-----------------------------------------------------------------------------
+//  wxXmlDocument loading routines
+//-----------------------------------------------------------------------------
+
+/* 
+    FIXME:
+       - process all elements, including CDATA
+ */
+
+// converts Expat-produced string in UTF-8 into wxString.
+inline static wxString CharToString(wxMBConv *conv,
+                                    const char *s, size_t len = wxSTRING_MAXLEN)
 {
 #if wxUSE_UNICODE
-    (void)encoding;
+    (void)conv;
+    return wxString(s, wxConvUTF8, len);
 #else
-    m_encoding = encoding;
-#endif
-
-    wxNode *n = sm_handlers->GetFirst();
-    while (n)
+    if ( conv )
     {
-        wxXmlIOHandler *h = (wxXmlIOHandler*) n->GetData();
-
-        if ((io_type == wxXML_IO_AUTO || io_type == h->GetType()) &&
-            h->CanLoad(stream))
-        {
-            return h->Load(stream, *this, encoding);
-        }
-        n = n->GetNext();
+        size_t nLen = (len != wxSTRING_MAXLEN) ? len :
+                          nLen = wxConvUTF8.MB2WC((wchar_t*) NULL, s, 0);
+    
+        wchar_t *buf = new wchar_t[nLen+1];
+        wxConvUTF8.MB2WC(buf, s, nLen);
+        buf[nLen] = 0;
+        return wxString(buf, *conv, len);
+        delete[] buf;
     }
-    wxLogError(_("Cannot find XML I/O handler capable of loading this format."));
-    return FALSE;
+    else
+        return wxString(s, len);
+#endif
 }
 
+struct wxXmlParsingContext
+{
+    wxMBConv  *conv;
+    wxXmlNode *root;
+    wxXmlNode *node;
+    wxXmlNode *lastAsText;
+    wxString   encoding;
+    wxString   version;
+};
 
-
-bool wxXmlDocument::Save(const wxString& filename, wxXmlIOType io_type) const
+static void StartElementHnd(void *userData, const char *name, const char **atts)
 {
-    wxFileOutputStream stream(filename);
-    return Save(stream, io_type);
+    wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
+    wxXmlNode *node = new wxXmlNode(wxXML_ELEMENT_NODE, CharToString(ctx->conv, name));
+    const char **a = atts;
+    while (*a)
+    {
+        node->AddProperty(CharToString(ctx->conv, a[0]), CharToString(ctx->conv, a[1]));
+        a += 2;
+    }
+    if (ctx->root == NULL)
+        ctx->root = node;
+    else
+        ctx->node->AddChild(node);
+    ctx->node = node;
+    ctx->lastAsText = NULL;
 }
 
+static void EndElementHnd(void *userData, const char* WXUNUSED(name))
+{
+    wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
 
+    ctx->node = ctx->node->GetParent();
+    ctx->lastAsText = NULL;
+}
 
-bool wxXmlDocument::Save(wxOutputStream& stream, wxXmlIOType io_type) const
+static void TextHnd(void *userData, const char *s, int len)
 {
-    wxNode *n = sm_handlers->GetFirst();
-    while (n)
+    wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
+    char *buf = new char[len + 1];
+
+    buf[len] = '\0';
+    memcpy(buf, s, (size_t)len);
+
+    if (ctx->lastAsText)
+    {
+        ctx->lastAsText->SetContent(ctx->lastAsText->GetContent() +
+                                    CharToString(ctx->conv, buf));
+    }
+    else
     {
-        wxXmlIOHandler *h = (wxXmlIOHandler*) n->GetData();
-        if (io_type == h->GetType() && h->CanSave())
+        bool whiteOnly = TRUE;
+        for (char *c = buf; *c != '\0'; c++)
+            if (*c != ' ' && *c != '\t' && *c != '\n' && *c != '\r')
+            {
+                whiteOnly = FALSE;
+                break;
+            }
+        if (!whiteOnly)
         {
-            return h->Save(stream, *this);
+            ctx->lastAsText = new wxXmlNode(wxXML_TEXT_NODE, wxT("text"),
+                                            CharToString(ctx->conv, buf));
+            ctx->node->AddChild(ctx->lastAsText);
         }
-        n = n->GetNext();
     }
-    wxLogError(_("Cannot find XML I/O handler capable of saving in this format."));
-    return FALSE;
-}
-
-
 
+    delete[] buf;
+}
 
+static void CommentHnd(void *userData, const char *data)
+{
+    wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
 
+    if (ctx->node)
+    {
+        // VS: ctx->node == NULL happens if there is a comment before
+        //     the root element (e.g. wxDesigner's output). We ignore such
+        //     comments, no big deal...
+        ctx->node->AddChild(new wxXmlNode(wxXML_COMMENT_NODE,
+                            wxT("comment"), CharToString(ctx->conv, data)));
+    }
+    ctx->lastAsText = NULL;
+}
 
-void wxXmlDocument::AddHandler(wxXmlIOHandler *handler)
+static void DefaultHnd(void *userData, const char *s, int len)
 {
-    if (sm_handlers == NULL)
+    // XML header:
+    if (len > 6 && memcmp(s, "<?xml ", 6) == 0)
     {
-        sm_handlers = new wxList;
-        sm_handlers->DeleteContents(TRUE);
+        wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
+
+        wxString buf = CharToString(ctx->conv, s, (size_t)len);
+        int pos;
+        pos = buf.Find(wxT("encoding="));
+        if (pos != wxNOT_FOUND)
+            ctx->encoding = buf.Mid(pos + 10).BeforeFirst(buf[(size_t)pos+9]);
+        pos = buf.Find(wxT("version="));
+        if (pos != wxNOT_FOUND)
+            ctx->version = buf.Mid(pos + 9).BeforeFirst(buf[(size_t)pos+8]);
     }
-    sm_handlers->Append(handler);
 }
 
-
-void wxXmlDocument::CleanUpHandlers()
+static int UnknownEncodingHnd(void * WXUNUSED(encodingHandlerData),
+                               const XML_Char *name, XML_Encoding *info)
 {
-    wxDELETE(sm_handlers);
+    // 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(name);
+    char mbBuf[255];
+    wchar_t wcBuf[255];
+    size_t i;
+    
+    for (i = 0; i < 255; i++)
+        mbBuf[i] = i+1;
+    mbBuf[255] = 0;
+    conv.MB2WC(wcBuf, mbBuf, 255);
+    wcBuf[255] = 0;
+    
+    info->map[0] = 0;
+    for (i = 0; i < 255; i++)
+        info->map[i+1] = (int)wcBuf[i];
+    
+    info->data = NULL;
+    info->convert = NULL;
+    info->release = NULL;
+    
+    return 1;
 }
 
-
-void wxXmlDocument::InitStandardHandlers()
+bool wxXmlDocument::Load(wxInputStream& stream, const wxString& encoding)
 {
-    AddHandler(new wxXmlIOHandlerBin);
-#if wxUSE_ZLIB
-    AddHandler(new wxXmlIOHandlerBinZ);
+#if wxUSE_UNICODE
+    (void)encoding;
+#else
+    m_encoding = encoding;
+#endif
+
+    const size_t BUFSIZE = 1024;
+    char buf[BUFSIZE];
+    wxXmlParsingContext ctx;
+    bool done;
+    XML_Parser parser = XML_ParserCreate(NULL);
+
+    ctx.root = ctx.node = NULL;
+    ctx.encoding = wxT("UTF-8"); // default in absence of encoding=""
+    ctx.conv = NULL;
+#if !wxUSE_UNICODE
+    if ( encoding != wxT("UTF-8") && encoding != wxT("utf-8") )
+        ctx.conv = new wxCSConv(encoding);
 #endif
-    AddHandler(new wxXmlIOHandlerExpat);
-    AddHandler(new wxXmlIOHandlerWriter);
+    
+    XML_SetUserData(parser, (void*)&ctx);
+    XML_SetElementHandler(parser, StartElementHnd, EndElementHnd);
+    XML_SetCharacterDataHandler(parser, TextHnd);
+    XML_SetCommentHandler(parser, CommentHnd);
+    XML_SetDefaultHandler(parser, DefaultHnd);
+    XML_SetUnknownEncodingHandler(parser, UnknownEncodingHnd, NULL);
+
+    do
+    {
+        size_t len = stream.Read(buf, BUFSIZE).LastRead();
+        done = (len < BUFSIZE);
+        if (!XML_Parse(parser, buf, len, done))
+        {
+            wxLogError(_("XML parsing error: '%s' at line %d"),
+                       XML_ErrorString(XML_GetErrorCode(parser)),
+                       XML_GetCurrentLineNumber(parser));
+          return FALSE;
+        }
+    } while (!done);
+
+    SetVersion(ctx.version);
+    SetFileEncoding(ctx.encoding);
+    SetRoot(ctx.root);
+
+    XML_ParserFree(parser);
+#if !wxUSE_UNICODE
+    if ( ctx.conv )
+        delete ctx.conv;
+#endif
+    
+    return TRUE;
+
 }
 
 
-#include "wx/module.h"
 
-class wxXmlModule: public wxModule
+//-----------------------------------------------------------------------------
+//  wxXmlDocument saving routines
+//-----------------------------------------------------------------------------
+
+// write string to output:
+inline static void OutputString(wxOutputStream& stream, const wxString& str,
+                                wxMBConv *convMem, wxMBConv *convFile)
 {
-    DECLARE_DYNAMIC_CLASS(wxXmlModule)
-    public:
-        wxXmlModule() {}
-        bool OnInit() { wxXmlDocument::InitStandardHandlers(); return TRUE; };
-        void OnExit() { wxXmlDocument::CleanUpHandlers(); };
-};
+    if (str.IsEmpty()) return;
+#if wxUSE_UNICODE
+    const wxW2MBbuf *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
+    {
+        wxString str2(str.wc_str(*convMem), *convFile);
+        stream.Write(str2.mb_str(), str2.Len());
+    }
+#endif
+}
 
-IMPLEMENT_DYNAMIC_CLASS(wxXmlModule, wxModule)
+// Same as above, but create entities first. 
+// Translates '<' to "&lt;", '>' to "&gt;" and '&' to "&amp;"
+static void OutputStringEnt(wxOutputStream& stream, const wxString& str,
+                            wxMBConv *convMem, wxMBConv *convFile)
+{
+    wxString buf;
+    size_t i, last, len;
+    wxChar c;
+    
+    len = str.Len();
+    last = 0;
+    for (i = 0; i < len; i++)
+    {
+        c = str.GetChar(i);
+        if (c == wxT('<') || c == wxT('>') || 
+            (c == wxT('&') && str.Mid(i+1, 4) != wxT("amp;")))
+        {
+            OutputString(stream, str.Mid(last, i - last), convMem, convFile);
+            switch (c)
+            {
+                case wxT('<'): 
+                    OutputString(stream, wxT("&lt;"), NULL, NULL);
+                    break;
+                case wxT('>'): 
+                    OutputString(stream, wxT("&gt;"), NULL, NULL);
+                    break;
+                case wxT('&'): 
+                    OutputString(stream, wxT("&amp;"), NULL, NULL);
+                    break;
+                default: break;
+            }
+            last = i + 1;
+        }
+    }
+    OutputString(stream, str.Mid(last, i - last), convMem, convFile);
+}
 
+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);
+}
 
+static void OutputNode(wxOutputStream& stream, wxXmlNode *node, int indent,
+                       wxMBConv *convMem, wxMBConv *convFile)
+{
+    wxXmlNode *n, *prev;
+    wxXmlProperty *prop;
 
+    switch (node->GetType())
+    {
+        case wxXML_TEXT_NODE:
+            OutputStringEnt(stream, node->GetContent(), convMem, convFile);
+            break;
+            
+        case wxXML_ELEMENT_NODE:
+            OutputString(stream, wxT("<"), NULL, NULL);
+            OutputString(stream, node->GetName(), NULL, NULL);
+            
+            prop = node->GetProperties();
+            while (prop)
+            {
+                OutputString(stream, wxT(" ") + prop->GetName() +
+                             wxT("=\"") + prop->GetValue() + wxT("\""),
+                             NULL, NULL);
+                // FIXME - what if prop contains '"'?
+                prop = prop->GetNext();
+            }
+            
+            if (node->GetChildren())
+            {
+                OutputString(stream, wxT(">"), NULL, NULL);
+                prev = NULL;
+                n = node->GetChildren();
+                while (n)
+                {
+                    if (n && n->GetType() != wxXML_TEXT_NODE)
+                        OutputIndentation(stream, indent + 1);
+                    OutputNode(stream, n, indent + 1, convMem, convFile);
+                    prev = n;
+                    n = n->GetNext();
+                }
+                if (prev && prev->GetType() != wxXML_TEXT_NODE)
+                    OutputIndentation(stream, indent);
+                OutputString(stream, wxT("</"), NULL, NULL);
+                OutputString(stream, node->GetName(), NULL, NULL);
+                OutputString(stream, wxT(">"), NULL, NULL);
+            }
+            else
+                OutputString(stream, wxT("/>"), NULL, NULL);
+            break;
+             
+        case wxXML_COMMENT_NODE:
+            OutputString(stream, wxT("<!--"), NULL, NULL);
+            OutputString(stream, node->GetContent(), convMem, convFile);
+            OutputString(stream, wxT("-->"), NULL, NULL);
+            break;
+            
+        default:
+            wxFAIL_MSG(wxT("unsupported node type"));
+    }
+}
 
-// When wxXml is loaded dynamically after the application is already running
-// then the built-in module system won't pick this one up.  Add it manually.
-void wxXmlInitXmlModule()
+bool wxXmlDocument::Save(wxOutputStream& stream) const
 {
-    wxModule* module = new wxXmlModule;
-    module->Init();
-    wxModule::RegisterModule(module);
+    if ( !IsOk() )
+        return FALSE;
+        
+    wxString s;
+    
+    wxMBConv *convMem = NULL, *convFile = NULL;
+#if wxUSE_UNICODE
+    convFile = new wxCSConv(GetFileEncoding());
+#else
+    if ( GetFileEncoding() != GetEncoding() )
+    {
+        convFile = new wxCSConv(GetFileEncoding());
+        convMem = new wxCSConv(GetEncoding());
+    }
+#endif
+    
+    s.Printf(wxT("<?xml version=\"%s\" encoding=\"%s\"?>\n"),
+             GetVersion().c_str(), GetFileEncoding().c_str());
+    OutputString(stream, s, NULL, NULL);
+    
+    OutputNode(stream, GetRoot(), 0, convMem, convFile);
+    OutputString(stream, wxT("\n"), NULL, NULL);
+    
+    if ( convFile )
+        delete convFile;
+    if ( convMem )
+        delete convMem;
+        
+    return TRUE;
 }
-
diff --git a/src/xrc/xmlbin.cpp b/src/xrc/xmlbin.cpp
deleted file mode 100644 (file)
index 730d509..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////
-// Name:        xmlbin.cpp
-// Purpose:     wxXmlIOHandlerBin 
-// Author:      Vaclav Slavik
-// Created:     2000/07/24
-// RCS-ID:      $Id$
-// Copyright:   (c) 2000 Vaclav Slavik
-// Licence:     wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
-// nothing, already in xml.cpp
-#endif
-
-// For compilers that support precompilation, includes "wx.h".
-#include "wx/wxprec.h"
-
-#ifdef __BORLANDC__
-    #pragma hdrstop
-#endif
-
-#include "wx/datstrm.h"
-#include "wx/log.h"
-#include "wx/intl.h"
-
-#include "wx/xrc/xmlio.h"
-
-
-
-
-bool wxXmlIOHandlerBin::CanLoad(wxInputStream& stream)
-{
-    bool canread;
-    canread = (ReadHeader(stream) == wxT("XMLBIN "));
-    stream.SeekI(-9, wxFromCurrent);
-    return canread;
-}
-
-
-
-wxString wxXmlIOHandlerBin::ReadHeader(wxInputStream& stream)
-{
-    wxUint8 version;
-    char cheader[8];
-
-    stream.Read(cheader, 8);
-    cheader[7] = 0;
-    stream.Read(&version, 1);
-    
-    if (version != 1) return wxEmptyString;
-    else return wxString(cheader);
-}
-
-
-
-void wxXmlIOHandlerBin::WriteHeader(wxOutputStream& stream, const wxString& header)
-{
-    char cheader[8];
-    size_t i;
-    wxUint8 version = 1;
-    
-    for (i = 0; i < header.Length(); i++) cheader[i] = header[i];
-    for (; i < 7; i++) cheader[i] = ' ';
-    cheader[7] = 0;
-    stream.Write(cheader, 8);
-    stream.Write(&version, 1);
-}
-
-
-
-static bool SaveBinNode(wxDataOutputStream& ds, wxXmlNode *node)
-{
-    if (node)
-    {
-        ds << (wxUint8)1 <<
-              (wxUint8)node->GetType() << 
-              node->GetName() << node->GetContent();
-        
-        wxXmlProperty *prop = node->GetProperties();
-        while (prop)
-        {
-            ds << (wxUint8)1;
-            ds << prop->GetName() << prop->GetValue();
-            prop = prop->GetNext();
-            
-        }
-        ds << (wxUint8)0;
-        
-        SaveBinNode(ds, node->GetNext());
-        SaveBinNode(ds, node->GetChildren());
-    }  
-    else
-        ds << (wxUint8)0;
-    
-    return TRUE;
-}
-
-
-
-bool wxXmlIOHandlerBin::Save(wxOutputStream& stream, const wxXmlDocument& doc)
-{
-    WriteHeader(stream, "XMLBIN ");
-    wxDataOutputStream ds(stream);
-    ds << doc.GetVersion();
-#if wxUSE_UNICODE
-    ds << wxString(wxT("UTF-8"));
-#else
-    ds << doc.GetEncoding();
-#endif
-    SaveBinNode(ds, doc.GetRoot());
-    return stream.LastError() == wxSTREAM_NOERROR;
-}
-
-
-
-static wxXmlProperty *LoadBinProp(wxDataInputStream& ds)
-{
-    wxUint8 dummy;
-    ds >> dummy;
-    if (dummy == 0) return NULL;
-
-    wxString name, value;
-    ds >> name >> value;
-    return new wxXmlProperty(name, value, LoadBinProp(ds));
-}
-
-
-
-
-static wxXmlNode *LoadBinNode(wxDataInputStream& ds, wxXmlNode *parent)
-{
-    wxUint8 type;
-    wxString name, content;
-    wxUint8 dummy;
-
-    ds >> dummy;
-    if (dummy == 0) return NULL;
-    ds >> type >> name >> content;
-    
-    wxXmlProperty *prop = LoadBinProp(ds);
-
-    wxXmlNode *nd = new wxXmlNode(parent, (wxXmlNodeType)type, name, content, 
-                                  prop, LoadBinNode(ds, parent));
-    LoadBinNode(ds, nd);
-    return nd;
-}
-
-
-
-bool wxXmlIOHandlerBin::Load(wxInputStream& stream, wxXmlDocument& doc,
-                             const wxString& encoding)
-{
-    ReadHeader(stream);
-    wxDataInputStream ds(stream);
-    wxString tmp;
-
-    ds >> tmp;
-    doc.SetVersion(tmp);
-    ds >> tmp;
-    doc.SetFileEncoding(tmp);
-
-    doc.SetRoot(LoadBinNode(ds, NULL));
-        
-    return (doc.GetRoot() != NULL);
-}
-
-
diff --git a/src/xrc/xmlbinz.cpp b/src/xrc/xmlbinz.cpp
deleted file mode 100644 (file)
index 5520b31..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////
-// Name:        xmlbinz.cpp
-// Purpose:     wxXmlIOHandlerBinZ
-// Author:      Vaclav Slavik
-// Created:     2000/07/24
-// RCS-ID:      $Id$
-// Copyright:   (c) 2000 Vaclav Slavik
-// Licence:     wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
-// nothing, already in xml.cpp
-#endif
-
-// For compilers that support precompilation, includes "wx.h".
-#include "wx/wxprec.h"
-
-#ifdef __BORLANDC__
-    #pragma hdrstop
-#endif
-
-#include "wx/datstrm.h"
-#include "wx/log.h"
-#include "wx/zstream.h"
-
-#include "wx/xrc/xmlio.h"
-
-#if wxUSE_ZLIB
-
-
-
-bool wxXmlIOHandlerBinZ::CanLoad(wxInputStream& stream)
-{
-    bool canread;
-    canread = (ReadHeader(stream) == wxT("XMLBINZ"));
-    stream.SeekI(-9, wxFromCurrent);
-    return canread;
-}
-
-
-
-bool wxXmlIOHandlerBinZ::Save(wxOutputStream& stream, const wxXmlDocument& doc)
-{
-    WriteHeader(stream, "XMLBINZ");
-    wxZlibOutputStream costr(stream, 9);
-    return wxXmlIOHandlerBin::Save(costr, doc);
-}
-
-
-
-bool wxXmlIOHandlerBinZ::Load(wxInputStream& stream, wxXmlDocument& doc,
-                              const wxString& encoding)
-{
-    ReadHeader(stream);
-    wxZlibInputStream costr(stream);
-    return wxXmlIOHandlerBin::Load(costr, doc, encoding);
-}
-
-
-#endif
diff --git a/src/xrc/xmlexpat.cpp b/src/xrc/xmlexpat.cpp
deleted file mode 100644 (file)
index 6d4de6f..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////
-// Name:        xmlexpat.cpp
-// Purpose:     wxXmlDocument - XML reader via Expat
-// Author:      Vaclav Slavik
-// Created:     2001/04/30
-// RCS-ID:      $Id$
-// Copyright:   (c) 2001 Vaclav Slavik
-// Licence:     wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
-
-#ifdef __GNUG__
-// nothing - already in xml.cpp
-#endif
-
-// For compilers that support precompilation, includes "wx.h".
-#include "wx/wxprec.h"
-
-#ifdef __BORLANDC__
-    #pragma hdrstop
-#endif
-
-#include "wx/wfstream.h"
-#include "wx/intl.h"
-#include "wx/log.h"
-#include "wx/strconv.h"
-#include "wx/xrc/xmlio.h"
-
-#include "xmlparse.h"
-
-/*
-
-    FIXME:
-     - process all elements, including CDATA
-
- */
-
-
-// converts Expat-produced string in UTF-8 into wxString.
-inline static wxString CharToString(wxMBConv *conv,
-                                    const char *s, size_t len = wxSTRING_MAXLEN)
-{
-#if wxUSE_UNICODE
-    (void)conv;
-    return wxString(s, wxConvUTF8, len);
-#else
-    if ( conv )
-    {
-        size_t nLen = (len != wxSTRING_MAXLEN) ? len :
-                          nLen = wxConvUTF8.MB2WC((wchar_t*) NULL, s, 0);
-    
-        wchar_t *buf = new wchar_t[nLen+1];
-        wxConvUTF8.MB2WC(buf, s, nLen);
-        buf[nLen] = 0;
-        return wxString(buf, *conv, len);
-        delete[] buf;
-    }
-    else
-        return wxString(s, len);
-#endif
-}
-
-bool wxXmlIOHandlerExpat::CanLoad(wxInputStream& stream)
-{
-    char cheader[7];
-    cheader[6] = 0;
-    stream.Read(cheader, 6);
-    stream.SeekI(-6, wxFromCurrent);
-    return (strcmp(cheader, "<?xml ") == 0);
-}
-
-
-struct wxXmlParsingContext
-{
-    wxMBConv  *conv;
-
-    wxXmlNode *root;
-    wxXmlNode *node;
-    wxXmlNode *lastAsText;
-    wxString   encoding;
-    wxString   version;
-};
-
-static void StartElementHnd(void *userData, const char *name, const char **atts)
-{
-    wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
-    wxXmlNode *node = new wxXmlNode(wxXML_ELEMENT_NODE, CharToString(ctx->conv, name));
-    const char **a = atts;
-    while (*a)
-    {
-        node->AddProperty(CharToString(ctx->conv, a[0]), CharToString(ctx->conv, a[1]));
-        a += 2;
-    }
-    if (ctx->root == NULL)
-        ctx->root = node;
-    else
-        ctx->node->AddChild(node);
-    ctx->node = node;
-    ctx->lastAsText = NULL;
-}
-
-static void EndElementHnd(void *userData, const char* WXUNUSED(name))
-{
-    wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
-
-    ctx->node = ctx->node->GetParent();
-    ctx->lastAsText = NULL;
-}
-
-static void TextHnd(void *userData, const char *s, int len)
-{
-    wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
-    char *buf = new char[len + 1];
-
-    buf[len] = '\0';
-    memcpy(buf, s, (size_t)len);
-
-    if (ctx->lastAsText)
-    {
-        ctx->lastAsText->SetContent(ctx->lastAsText->GetContent() +
-                                    CharToString(ctx->conv, buf));
-    }
-    else
-    {
-        bool whiteOnly = TRUE;
-        for (char *c = buf; *c != '\0'; c++)
-            if (*c != ' ' && *c != '\t' && *c != '\n' && *c != '\r')
-            {
-                whiteOnly = FALSE;
-                break;
-            }
-        if (!whiteOnly)
-        {
-            ctx->lastAsText = new wxXmlNode(wxXML_TEXT_NODE, wxT("text"),
-                                            CharToString(ctx->conv, buf));
-            ctx->node->AddChild(ctx->lastAsText);
-        }
-    }
-
-    delete[] buf;
-}
-
-static void CommentHnd(void *userData, const char *data)
-{
-    wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
-
-    if (ctx->node)
-    {
-        // VS: ctx->node == NULL happens if there is a comment before
-        //     the root element (e.g. wxDesigner's output). We ignore such
-        //     comments, no big deal...
-        ctx->node->AddChild(new wxXmlNode(wxXML_COMMENT_NODE,
-                            wxT("comment"), CharToString(ctx->conv, data)));
-    }
-    ctx->lastAsText = NULL;
-}
-
-static void DefaultHnd(void *userData, const char *s, int len)
-{
-    // XML header:
-    if (len > 6 && memcmp(s, "<?xml ", 6) == 0)
-    {
-        wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
-
-        wxString buf = CharToString(ctx->conv, s, (size_t)len);
-        int pos;
-        pos = buf.Find(wxT("encoding="));
-        if (pos != wxNOT_FOUND)
-            ctx->encoding = buf.Mid(pos + 10).BeforeFirst(buf[(size_t)pos+9]);
-        pos = buf.Find(wxT("version="));
-        if (pos != wxNOT_FOUND)
-            ctx->version = buf.Mid(pos + 9).BeforeFirst(buf[(size_t)pos+8]);
-    }
-}
-
-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(name);
-    char mbBuf[255];
-    wchar_t wcBuf[255];
-    size_t i;
-    
-    for (i = 0; i < 255; i++)
-        mbBuf[i] = i+1;
-    mbBuf[255] = 0;
-    conv.MB2WC(wcBuf, mbBuf, 255);
-    wcBuf[255] = 0;
-    
-    info->map[0] = 0;
-    for (i = 0; i < 255; i++)
-        info->map[i+1] = (int)wcBuf[i];
-    
-    info->data = NULL;
-    info->convert = NULL;
-    info->release = NULL;
-    
-    return 1;
-}
-
-bool wxXmlIOHandlerExpat::Load(wxInputStream& stream, wxXmlDocument& doc,
-                               const wxString& encoding)
-{
-    const size_t BUFSIZE = 1024;
-    char buf[BUFSIZE];
-    wxXmlParsingContext ctx;
-    bool done;
-    XML_Parser parser = XML_ParserCreate(NULL);
-
-    ctx.root = ctx.node = NULL;
-    ctx.encoding = wxT("UTF-8"); // default in absence of encoding=""
-    ctx.conv = NULL;
-#if !wxUSE_UNICODE
-    if ( encoding != wxT("UTF-8") && encoding != wxT("utf-8") )
-        ctx.conv = new wxCSConv(encoding);
-#endif
-    
-    XML_SetUserData(parser, (void*)&ctx);
-    XML_SetElementHandler(parser, StartElementHnd, EndElementHnd);
-    XML_SetCharacterDataHandler(parser, TextHnd);
-    XML_SetCommentHandler(parser, CommentHnd);
-    XML_SetDefaultHandler(parser, DefaultHnd);
-    XML_SetUnknownEncodingHandler(parser, UnknownEncodingHnd, NULL);
-
-    do
-    {
-        size_t len = stream.Read(buf, BUFSIZE).LastRead();
-        done = (len < BUFSIZE);
-        if (!XML_Parse(parser, buf, len, done))
-        {
-            wxLogError(_("XML parsing error: '%s' at line %d"),
-                       XML_ErrorString(XML_GetErrorCode(parser)),
-                       XML_GetCurrentLineNumber(parser));
-          return FALSE;
-        }
-    } while (!done);
-
-    doc.SetVersion(ctx.version);
-    doc.SetFileEncoding(ctx.encoding);
-    doc.SetRoot(ctx.root);
-
-    XML_ParserFree(parser);
-#if !wxUSE_UNICODE
-    if ( ctx.conv )
-        delete ctx.conv;
-#endif
-    
-    return TRUE;
-}
index ef687793569a2cd40de2d60d09dc680a101491b7..bd45b371852f511a889089724eac878cd1d1e5e5 100644 (file)
@@ -331,7 +331,7 @@ void wxXmlResource::UpdateResources()
                 delete m_data[i].Doc;
                 m_data[i].Doc = new wxXmlDocument;
             }
-            if (!stream || !m_data[i].Doc->Load(*stream, wxXML_IO_AUTO, encoding))
+            if (!stream || !m_data[i].Doc->Load(*stream, encoding))
             {
                 wxLogError(_("Cannot load resources from file '%s'."),
                            m_data[i].File.c_str());
diff --git a/src/xrc/xmlwrite.cpp b/src/xrc/xmlwrite.cpp
deleted file mode 100644 (file)
index 3b6e3a1..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////
-// Name:        xmlwrite.cpp
-// Purpose:     wxXmlDocument - XML text writer
-// Author:      Vaclav Slavik
-// Created:     2001/04/30
-// RCS-ID:      $Id$
-// Copyright:   (c) 2001 Vaclav Slavik
-// Licence:     wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
-// nothing - already in xml.cpp
-#endif
-
-// For compilers that support precompilation, includes "wx.h".
-#include "wx/wxprec.h"
-
-#ifdef __BORLANDC__
-    #pragma hdrstop
-#endif
-
-#include "wx/wfstream.h"
-#include "wx/intl.h"
-#include "wx/log.h"
-#include "wx/strconv.h"
-#include "wx/xrc/xml.h"
-#include "wx/xrc/xmlio.h"
-
-// write string to output:
-inline static void OutputString(wxOutputStream& stream, const wxString& str,
-                                wxMBConv *convMem, wxMBConv *convFile)
-{
-    if (str.IsEmpty()) return;
-#if wxUSE_UNICODE
-    const wxW2MBbuf *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
-    {
-        wxString str2(str.wc_str(*convMem), *convFile);
-        stream.Write(str2.mb_str(), str2.Len());
-    }
-#endif
-}
-
-// Same as above, but create entities first. 
-// Translates '<' to "&lt;", '>' to "&gt;" and '&' to "&amp;"
-static void OutputStringEnt(wxOutputStream& stream, const wxString& str,
-                            wxMBConv *convMem, wxMBConv *convFile)
-{
-    wxString buf;
-    size_t i, last, len;
-    wxChar c;
-    
-    len = str.Len();
-    last = 0;
-    for (i = 0; i < len; i++)
-    {
-        c = str.GetChar(i);
-        if (c == wxT('<') || c == wxT('>') || 
-            (c == wxT('&') && str.Mid(i+1, 4) != wxT("amp;")))
-        {
-            OutputString(stream, str.Mid(last, i - last), convMem, convFile);
-            switch (c)
-            {
-                case wxT('<'): 
-                    OutputString(stream, wxT("&lt;"), NULL, NULL);
-                    break;
-                case wxT('>'): 
-                    OutputString(stream, wxT("&gt;"), NULL, NULL);
-                    break;
-                case wxT('&'): 
-                    OutputString(stream, wxT("&amp;"), NULL, NULL);
-                    break;
-                default: break;
-            }
-            last = i + 1;
-        }
-    }
-    OutputString(stream, str.Mid(last, i - last), convMem, convFile);
-}
-
-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);
-}
-
-static void OutputNode(wxOutputStream& stream, wxXmlNode *node, int indent,
-                       wxMBConv *convMem, wxMBConv *convFile)
-{
-    wxXmlNode *n, *prev;
-    wxXmlProperty *prop;
-
-    switch (node->GetType())
-    {
-        case wxXML_TEXT_NODE:
-            OutputStringEnt(stream, node->GetContent(), convMem, convFile);
-            break;
-            
-        case wxXML_ELEMENT_NODE:
-            OutputString(stream, wxT("<"), NULL, NULL);
-            OutputString(stream, node->GetName(), NULL, NULL);
-            
-            prop = node->GetProperties();
-            while (prop)
-            {
-                OutputString(stream, wxT(" ") + prop->GetName() +
-                             wxT("=\"") + prop->GetValue() + wxT("\""),
-                             NULL, NULL);
-                // FIXME - what if prop contains '"'?
-                prop = prop->GetNext();
-            }
-            
-            if (node->GetChildren())
-            {
-                OutputString(stream, wxT(">"), NULL, NULL);
-                prev = NULL;
-                n = node->GetChildren();
-                while (n)
-                {
-                    if (n && n->GetType() != wxXML_TEXT_NODE)
-                        OutputIndentation(stream, indent + 1);
-                    OutputNode(stream, n, indent + 1, convMem, convFile);
-                    prev = n;
-                    n = n->GetNext();
-                }
-                if (prev && prev->GetType() != wxXML_TEXT_NODE)
-                    OutputIndentation(stream, indent);
-                OutputString(stream, wxT("</"), NULL, NULL);
-                OutputString(stream, node->GetName(), NULL, NULL);
-                OutputString(stream, wxT(">"), NULL, NULL);
-            }
-            else
-                OutputString(stream, wxT("/>"), NULL, NULL);
-            break;
-             
-        case wxXML_COMMENT_NODE:
-            OutputString(stream, wxT("<!--"), NULL, NULL);
-            OutputString(stream, node->GetContent(), convMem, convFile);
-            OutputString(stream, wxT("-->"), NULL, NULL);
-            break;
-            
-        default:
-            wxFAIL_MSG(wxT("unsupported node type"));
-    }
-}
-
-bool wxXmlIOHandlerWriter::Save(wxOutputStream& stream, const wxXmlDocument& doc)
-{
-    if (!doc.IsOk())
-        return FALSE;
-        
-    wxString s;
-    
-    wxMBConv *convMem = NULL, *convFile = NULL;
-#if wxUSE_UNICODE
-    convFile = new wxCSConv(doc.GetFileEncoding());
-#else
-    if ( doc.GetFileEncoding() != doc.GetEncoding() )
-    {
-        convFile = new wxCSConv(doc.GetFileEncoding());
-        convMem = new wxCSConv(doc.GetEncoding());
-    }
-#endif
-    
-    s.Printf(wxT("<?xml version=\"%s\" encoding=\"%s\"?>\n"),
-             doc.GetVersion().c_str(), doc.GetFileEncoding().c_str());
-    OutputString(stream, s, NULL, NULL);
-    
-    OutputNode(stream, doc.GetRoot(), 0, convMem, convFile);
-    OutputString(stream, wxT("\n"), NULL, NULL);
-    
-    if ( convFile )
-        delete convFile;
-    if ( convMem )
-        delete convMem;
-        
-    return TRUE;
-}
index 5ea1c7a4779db182af42d901348520a1e0933fd7..be9b7b75b5af5e0900c533990fad60800507c6e0 100644 (file)
@@ -28,7 +28,6 @@
 
 #include "wx/cmdline.h"
 #include "wx/xrc/xml.h"
-#include "wx/xrc/xmlio.h"
 #include "wx/ffile.h"
 #include "wx/wfstream.h"
 
@@ -67,7 +66,7 @@ private:
     wxArrayString FindStrings();
     wxArrayString FindStrings(wxXmlNode *node);
             
-    bool flagVerbose, flagCPP, flagCompress, flagGettext;
+    bool flagVerbose, flagCPP, flagGettext;
     wxString parOutput, parFuncname, parOutputPath;
     wxArrayString parFiles;
     int retCode;
@@ -86,7 +85,6 @@ int XmlResApp::OnRun()
         { wxCMD_LINE_SWITCH, "h", "help",  "show help message" },
         { wxCMD_LINE_SWITCH, "v", "verbose", "be verbose" },
         { wxCMD_LINE_SWITCH, "c", "cpp-code",  "output C++ source rather than .rsc file" },
-        { wxCMD_LINE_SWITCH, "u", "uncompressed",  "do not compress .xml files (C++ only)" },
         { wxCMD_LINE_SWITCH, "g", "gettext",  "output list of translatable strings (to stdout or file if -o used)" },
         { wxCMD_LINE_OPTION, "n", "function",  "C++ function name (with -c) [InitXmlResource]" },
         { wxCMD_LINE_OPTION, "o", "output",  "output file [resource.xrs/cpp]" },
@@ -104,8 +102,6 @@ int XmlResApp::OnRun()
     delete wxLog::SetActiveTarget(new wxLogStderr);
 #endif
 
-    wxXmlDocument::AddHandler(new wxXmlIOHandlerBinZ);
-
     wxCmdLineParser parser(cmdLineDesc, argc, argv);
 
     switch (parser.Parse())
@@ -146,7 +142,6 @@ void XmlResApp::ParseParams(const wxCmdLineParser& cmdline)
     flagGettext = cmdline.Found("g");
     flagVerbose = cmdline.Found("v");
     flagCPP = cmdline.Found("c");
-    flagCompress = flagCPP && !cmdline.Found("u");
 
     if (!cmdline.Found("o", &parOutput)) 
     {
@@ -210,9 +205,8 @@ wxArrayString XmlResApp::PrepareTempFiles()
 
         FindFilesInXML(doc.GetRoot(), flist, path);
 
-        doc.Save(parOutputPath + "/" + name + ".xmlbin", 
-                 flagCompress ? wxXML_IO_BINZ : wxXML_IO_BIN);
-        flist.Add(name + ".xmlbin");
+        doc.Save(parOutputPath + "/" + name + ".xrc");
+        flist.Add(name + ".xrc");
     }
     
     return flist;
@@ -394,7 +388,7 @@ void " + parFuncname + "()\n\
         wxString name, ext, path;
         wxSplitPath(parFiles[i], &path, &name, &ext);
         file.Write("    wxXmlResource::Get()->Load(\"memory:xml_resource/" + 
-                   name + ".xmlbin" + "\");\n");
+                   name + ".xrc" + "\");\n");
     }
     
     file.Write("}\n");