class WXXMLDLLEXPORT wxXmlDocument : public wxObject
{
public:
- wxXmlDocument() : wxObject(), m_version(wxT("1.0")), m_root(NULL) {}
+ wxXmlDocument();
wxXmlDocument(const wxString& filename,
const wxString& encoding = wxT("UTF-8"));
wxXmlDocument(wxInputStream& stream,
const wxString& encoding = wxT("UTF-8"));
bool Load(wxInputStream& stream,
const wxString& encoding = wxT("UTF-8"));
-
+
// Saves document as .xml file.
bool Save(const wxString& filename) const;
bool Save(wxOutputStream& stream) const;
// Returns version of document (may be empty).
wxString GetVersion() const { return m_version; }
// Returns encoding of document (may be empty).
- // Note: this is the encoding original fail was saved in, *not* the
+ // Note: this is the encoding original file was saved in, *not* the
// encoding of in-memory representation!
wxString GetFileEncoding() const { return m_fileEncoding; }
// (same as passed to Load or ctor, defaults to UTF-8).
// NB: this is meaningless in Unicode build where data are stored as wchar_t*
wxString GetEncoding() const { return m_encoding; }
+ void SetEncoding(const wxString& enc) { m_encoding = enc; }
#endif
private:
#ifdef __GNUG__
#pragma implementation "xml.h"
-#pragma implementation "xmlio.h"
#endif
// For compilers that support precompilation, includes "wx.h".
// wxXmlDocument
//-----------------------------------------------------------------------------
+wxXmlDocument::wxXmlDocument()
+ : m_version(wxT("1.0")), m_fileEncoding(wxT("utf-8")), m_root(NULL)
+{
+#if !wxUSE_UNICODE
+ m_encoding = wxT("UTF-8");
+#endif
+}
+
wxXmlDocument::wxXmlDocument(const wxString& filename, const wxString& encoding)
: wxObject(), m_root(NULL)
{
wchar_t *buf = new wchar_t[nLen+1];
wxConvUTF8.MB2WC(buf, s, nLen);
buf[nLen] = 0;
- wxString s(buf, *conv, len);
+ wxString str(buf, *conv, len);
delete[] buf;
- return s;
+ return str;
}
else
return wxString(s, len);
}
static int UnknownEncodingHnd(void * WXUNUSED(encodingHandlerData),
- const XML_Char *name, XML_Encoding *info)
+ const XML_Char *name, XML_Encoding *info)
{
// We must build conversion table for expat. The easiest way to do so
// is to let wxCSConv convert as string containing all characters to
// wide character representation:
wxCSConv conv(wxString(name, wxConvLibc));
- char mbBuf[255];
- wchar_t wcBuf[255];
+ char mbBuf[2];
+ wchar_t wcBuf[10];
size_t i;
- for (i = 0; i < 255; i++)
- mbBuf[i] = (char) (i+1);
- mbBuf[255] = 0;
- conv.MB2WC(wcBuf, mbBuf, 255);
- wcBuf[255] = 0;
-
+ mbBuf[1] = 0;
info->map[0] = 0;
for (i = 0; i < 255; i++)
- info->map[i+1] = (int)wcBuf[i];
-
+ {
+ mbBuf[0] = (char)(i+1);
+ if (conv.MB2WC(wcBuf, mbBuf, 2) == (size_t)-1)
+ {
+ // invalid/undefined byte in the encoding:
+ info->map[i+1] = -1;
+ }
+ info->map[i+1] = (int)wcBuf[0];
+ }
+
info->data = NULL;
info->convert = NULL;
info->release = NULL;
m_Resource->SetRoot(new wxXmlNode(wxXML_ELEMENT_NODE, _("resource")));
m_Resource->SetFileEncoding("utf-8");
+#if !wxUSE_UNICODE
+ m_Resource->SetEncoding(wxLocale::GetSystemEncodingName());
+#endif
m_Resource->GetRoot()->AddProperty(_T("version"),
WX_XMLRES_CURRENT_VERSION_STRING);
class WXXMLDLLEXPORT wxXmlDocument : public wxObject
{
public:
- wxXmlDocument() : wxObject(), m_version(wxT("1.0")), m_root(NULL) {}
+ wxXmlDocument();
wxXmlDocument(const wxString& filename,
const wxString& encoding = wxT("UTF-8"));
wxXmlDocument(wxInputStream& stream,
const wxString& encoding = wxT("UTF-8"));
bool Load(wxInputStream& stream,
const wxString& encoding = wxT("UTF-8"));
-
+
// Saves document as .xml file.
bool Save(const wxString& filename) const;
bool Save(wxOutputStream& stream) const;
// Returns version of document (may be empty).
wxString GetVersion() const { return m_version; }
// Returns encoding of document (may be empty).
- // Note: this is the encoding original fail was saved in, *not* the
+ // Note: this is the encoding original file was saved in, *not* the
// encoding of in-memory representation!
wxString GetFileEncoding() const { return m_fileEncoding; }
// (same as passed to Load or ctor, defaults to UTF-8).
// NB: this is meaningless in Unicode build where data are stored as wchar_t*
wxString GetEncoding() const { return m_encoding; }
+ void SetEncoding(const wxString& enc) { m_encoding = enc; }
#endif
private:
#ifdef __GNUG__
#pragma implementation "xml.h"
-#pragma implementation "xmlio.h"
#endif
// For compilers that support precompilation, includes "wx.h".
// wxXmlDocument
//-----------------------------------------------------------------------------
+wxXmlDocument::wxXmlDocument()
+ : m_version(wxT("1.0")), m_fileEncoding(wxT("utf-8")), m_root(NULL)
+{
+#if !wxUSE_UNICODE
+ m_encoding = wxT("UTF-8");
+#endif
+}
+
wxXmlDocument::wxXmlDocument(const wxString& filename, const wxString& encoding)
: wxObject(), m_root(NULL)
{
wchar_t *buf = new wchar_t[nLen+1];
wxConvUTF8.MB2WC(buf, s, nLen);
buf[nLen] = 0;
- wxString s(buf, *conv, len);
+ wxString str(buf, *conv, len);
delete[] buf;
- return s;
+ return str;
}
else
return wxString(s, len);
}
static int UnknownEncodingHnd(void * WXUNUSED(encodingHandlerData),
- const XML_Char *name, XML_Encoding *info)
+ const XML_Char *name, XML_Encoding *info)
{
// We must build conversion table for expat. The easiest way to do so
// is to let wxCSConv convert as string containing all characters to
// wide character representation:
wxCSConv conv(wxString(name, wxConvLibc));
- char mbBuf[255];
- wchar_t wcBuf[255];
+ char mbBuf[2];
+ wchar_t wcBuf[10];
size_t i;
- for (i = 0; i < 255; i++)
- mbBuf[i] = (char) (i+1);
- mbBuf[255] = 0;
- conv.MB2WC(wcBuf, mbBuf, 255);
- wcBuf[255] = 0;
-
+ mbBuf[1] = 0;
info->map[0] = 0;
for (i = 0; i < 255; i++)
- info->map[i+1] = (int)wcBuf[i];
-
+ {
+ mbBuf[0] = (char)(i+1);
+ if (conv.MB2WC(wcBuf, mbBuf, 2) == (size_t)-1)
+ {
+ // invalid/undefined byte in the encoding:
+ info->map[i+1] = -1;
+ }
+ info->map[i+1] = (int)wcBuf[0];
+ }
+
info->data = NULL;
info->convert = NULL;
info->release = NULL;