X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/467e04791c0d5914dc8ed8e535af607f7fc1dfe1..68a9527d5185cdd9d3fef3d9421415c50de8794d:/include/wx/strconv.h diff --git a/include/wx/strconv.h b/include/wx/strconv.h index eaecd92657..c25a05017c 100644 --- a/include/wx/strconv.h +++ b/include/wx/strconv.h @@ -14,7 +14,7 @@ #define _WX_STRCONV_H_ #include "wx/defs.h" -#include "wx/wxchar.h" +#include "wx/chartype.h" #include "wx/buffer.h" #ifdef __DIGITALMARS__ @@ -191,7 +191,8 @@ class WXDLLIMPEXP_BASE wxConvBrokenFileNames : public wxMBConv public: wxConvBrokenFileNames(const wxChar *charset); wxConvBrokenFileNames(const wxConvBrokenFileNames& conv) - : m_conv(conv.m_conv ? conv.m_conv->Clone() : NULL) + : wxMBConv(), + m_conv(conv.m_conv ? conv.m_conv->Clone() : NULL) { } virtual ~wxConvBrokenFileNames() { delete m_conv; } @@ -286,15 +287,10 @@ protected: class WXDLLIMPEXP_BASE wxMBConvUTF16LE : public wxMBConvUTF16Base { public: -#if SIZEOF_WCHAR_T == 2 virtual size_t ToWChar(wchar_t *dst, size_t dstLen, const char *src, size_t srcLen = wxNO_LEN) const; virtual size_t FromWChar(char *dst, size_t dstLen, const wchar_t *src, size_t srcLen = wxNO_LEN) const; -#else - 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; -#endif virtual wxMBConv *Clone() const { return new wxMBConvUTF16LE; } }; @@ -305,15 +301,10 @@ public: class WXDLLIMPEXP_BASE wxMBConvUTF16BE : public wxMBConvUTF16Base { public: -#if SIZEOF_WCHAR_T == 2 virtual size_t ToWChar(wchar_t *dst, size_t dstLen, const char *src, size_t srcLen = wxNO_LEN) const; virtual size_t FromWChar(char *dst, size_t dstLen, const wchar_t *src, size_t srcLen = wxNO_LEN) const; -#else - 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; -#endif virtual wxMBConv *Clone() const { return new wxMBConvUTF16BE; } }; @@ -342,15 +333,10 @@ protected: class WXDLLIMPEXP_BASE wxMBConvUTF32LE : public wxMBConvUTF32Base { public: -#if SIZEOF_WCHAR_T == 2 virtual size_t ToWChar(wchar_t *dst, size_t dstLen, const char *src, size_t srcLen = wxNO_LEN) const; virtual size_t FromWChar(char *dst, size_t dstLen, const wchar_t *src, size_t srcLen = wxNO_LEN) const; -#else - 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; -#endif virtual wxMBConv *Clone() const { return new wxMBConvUTF32LE; } }; @@ -361,15 +347,10 @@ public: class WXDLLIMPEXP_BASE wxMBConvUTF32BE : public wxMBConvUTF32Base { public: -#if SIZEOF_WCHAR_T == 2 virtual size_t ToWChar(wchar_t *dst, size_t dstLen, const char *src, size_t srcLen = wxNO_LEN) const; virtual size_t FromWChar(char *dst, size_t dstLen, const wchar_t *src, size_t srcLen = wxNO_LEN) const; -#else - 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; -#endif virtual wxMBConv *Clone() const { return new wxMBConvUTF32BE; } }; @@ -392,13 +373,21 @@ public: wxCSConv& operator=(const wxCSConv& conv); + virtual size_t ToWChar(wchar_t *dst, size_t dstLen, + const char *src, size_t srcLen = wxNO_LEN) const; + virtual size_t FromWChar(char *dst, size_t dstLen, + const wchar_t *src, size_t srcLen = wxNO_LEN) const; 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(); + // return true if the conversion could be initilized successfully + bool IsOk() const; + private: // common part of all ctors void Init(); @@ -454,9 +443,14 @@ extern WXDLLIMPEXP_DATA_BASE(wxMBConv *) wxConvFileName; // default in a couple of places inside wx (initially same as wxConvLibc) extern WXDLLIMPEXP_DATA_BASE(wxMBConv *) wxConvCurrent; -// ??? +// the conversion corresponding to the current locale extern WXDLLIMPEXP_DATA_BASE(wxCSConv&) wxConvLocal; +// the conversion corresponding to the encoding of the standard UI elements +// +// by default this is the same as wxConvLocal but may be changed if the program +// needs to use a fixed encoding +extern WXDLLIMPEXP_DATA_BASE(wxMBConv *) wxConvUI; // ---------------------------------------------------------------------------- // endianness-dependent conversions @@ -474,8 +468,8 @@ extern WXDLLIMPEXP_DATA_BASE(wxCSConv&) wxConvLocal; // filename conversion macros // ---------------------------------------------------------------------------- -// filenames are multibyte on Unix and probably widechar on Windows? -#if defined(__UNIX__) || defined(__BORLANDC__) || defined(__WXMAC__ ) +// filenames are multibyte on Unix and widechar on Windows +#if defined(__UNIX__) || defined(__WXMAC__) #define wxMBFILES 1 #else #define wxMBFILES 0 @@ -527,10 +521,25 @@ extern WXDLLIMPEXP_DATA_BASE(wxMBConv *) wxConvCurrent; #if wxUSE_UNICODE #define wxConvertWX2MB(s) wxConvCurrent->cWX2MB(s) #define wxConvertMB2WX(s) wxConvCurrent->cMB2WX(s) + + // these functions should be used when the conversions really, really have + // to succeed (usually because we pass their results to a standard C + // function which would crash if we passed NULL to it), so these functions + // always return a valid pointer if their argument is non-NULL + + // this function safety is achieved by trying wxConvLibc first, wxConvUTF8 + // next if it fails and, finally, wxConvISO8859_1 which always succeeds + extern WXDLLIMPEXP_BASE wxWCharBuffer wxSafeConvertMB2WX(const char *s); + + // this function uses wxConvLibc and wxConvUTF8(MAP_INVALID_UTF8_TO_OCTAL) + // if it fails + extern WXDLLIMPEXP_BASE wxCharBuffer wxSafeConvertWX2MB(const wchar_t *ws); #else // ANSI // no conversions to do #define wxConvertWX2MB(s) (s) #define wxConvertMB2WX(s) (s) + #define wxSafeConvertMB2WX(s) (s) + #define wxSafeConvertWX2MB(s) (s) #endif // Unicode/ANSI #endif // _WX_STRCONV_H_