#define _WX_STRCONV_H_
#include "wx/defs.h"
-#include "wx/wxchar.h"
+#include "wx/chartype.h"
#include "wx/buffer.h"
#ifdef __DIGITALMARS__
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();
#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_