// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
-#ifndef _WX_WXSTRCONVH__
-#define _WX_WXSTRCONVH__
+#ifndef _WX_STRCONV_H_
+#define _WX_STRCONV_H_
#include "wx/defs.h"
#include "wx/wxchar.h"
// don't let the fact that the existing classes implement MB2WC/WC2MB() instead
// confuse you.
//
+// You also have to implement Clone() to allow copying the conversions
+// polymorphically.
+//
// And you might need to override GetMBNulLen() as well.
class WXDLLIMPEXP_BASE wxMBConv
{
virtual size_t WC2MB(char *out, const wchar_t *in, size_t outLen) const;
+ // make a heap-allocated copy of this object
+ virtual wxMBConv *Clone() const = 0;
+
// virtual dtor for any base class
virtual ~wxMBConv();
};
public:
virtual size_t MB2WC(wchar_t *outputBuf, const char *psz, size_t outputSize) const;
virtual size_t WC2MB(char *outputBuf, const wchar_t *psz, size_t outputSize) const;
+
+ virtual wxMBConv *Clone() const { return new wxMBConvLibc; }
};
#ifdef __UNIX__
{
public:
wxConvBrokenFileNames(const wxChar *charset);
+ wxConvBrokenFileNames(const wxConvBrokenFileNames& conv)
+ : m_conv(conv.m_conv ? conv.m_conv->Clone() : NULL)
+ {
+ }
virtual ~wxConvBrokenFileNames() { delete m_conv; }
virtual size_t MB2WC(wchar_t *out, const char *in, size_t outLen) const
return m_conv->GetMBNulLen();
}
+ virtual wxMBConv *Clone() const { return new wxConvBrokenFileNames(*this); }
+
private:
// the conversion object we forward to
wxMBConv *m_conv;
+
+ DECLARE_NO_ASSIGN_CLASS(wxConvBrokenFileNames)
};
#endif // __UNIX__
public:
virtual size_t MB2WC(wchar_t *outputBuf, const char *psz, size_t outputSize) const;
virtual size_t WC2MB(char *outputBuf, const wchar_t *psz, size_t outputSize) const;
+
+ virtual wxMBConv *Clone() const { return new wxMBConvUTF7; }
};
// ----------------------------------------------------------------------------
class WXDLLIMPEXP_BASE wxMBConvUTF8 : public wxMBConv
{
public:
- enum {
+ enum
+ {
MAP_INVALID_UTF8_NOT = 0,
MAP_INVALID_UTF8_TO_PUA = 1,
MAP_INVALID_UTF8_TO_OCTAL = 2
virtual size_t MB2WC(wchar_t *outputBuf, const char *psz, size_t outputSize) const;
virtual size_t WC2MB(char *outputBuf, const wchar_t *psz, size_t outputSize) const;
+ virtual wxMBConv *Clone() const { return new wxMBConvUTF8(m_options); }
+
private:
int m_options;
};
public:
virtual size_t MB2WC(wchar_t *outputBuf, const char *psz, size_t outputSize) const;
virtual size_t WC2MB(char *outputBuf, const wchar_t *psz, size_t outputSize) const;
+ virtual wxMBConv *Clone() const { return new wxMBConvUTF16LE; }
};
// ----------------------------------------------------------------------------
public:
virtual size_t MB2WC(wchar_t *outputBuf, const char *psz, size_t outputSize) const;
virtual size_t WC2MB(char *outputBuf, const wchar_t *psz, size_t outputSize) const;
+ virtual wxMBConv *Clone() const { return new wxMBConvUTF16BE; }
};
// ----------------------------------------------------------------------------
public:
virtual size_t MB2WC(wchar_t *outputBuf, const char *psz, size_t outputSize) const;
virtual size_t WC2MB(char *outputBuf, const wchar_t *psz, size_t outputSize) const;
+ virtual wxMBConv *Clone() const { return new wxMBConvUTF32LE; }
};
// ----------------------------------------------------------------------------
public:
virtual size_t MB2WC(wchar_t *outputBuf, const char *psz, size_t outputSize) const;
virtual size_t WC2MB(char *outputBuf, const wchar_t *psz, size_t outputSize) const;
+ virtual wxMBConv *Clone() const { return new wxMBConvUTF32BE; }
};
// ----------------------------------------------------------------------------
virtual size_t MB2WC(wchar_t *outputBuf, const char *psz, size_t outputSize) const;
virtual size_t WC2MB(char *outputBuf, const wchar_t *psz, size_t outputSize) const;
virtual size_t GetMBNulLen() const;
+ virtual wxMBConv *Clone() const { return new wxCSConv(*this); }
- void Clear() ;
+ void Clear();
private:
// common part of all ctors
#define wxConvertMB2WX(s) (s)
#endif // Unicode/ANSI
-#endif
- // _WX_WXSTRCONVH__
+#endif // _WX_STRCONV_H_