X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2e2cf78dc1f2db0caa8b982a072e88d13c8303cf..68a9527d5185cdd9d3fef3d9421415c50de8794d:/include/wx/strconv.h diff --git a/include/wx/strconv.h b/include/wx/strconv.h index e2ef14a6ba..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__ @@ -373,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(); @@ -435,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 @@ -455,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 @@ -508,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_