X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3a0d76bc6f563c53fb412dfec51b6a5a72c9a2ce..016105291a38f62a4811025653947cb4f8da765e:/src/common/strconv.cpp diff --git a/src/common/strconv.cpp b/src/common/strconv.cpp index c0dbf63459..bd39f333b0 100644 --- a/src/common/strconv.cpp +++ b/src/common/strconv.cpp @@ -37,6 +37,25 @@ #include #include + +#include "wx/debug.h" +#include "wx/strconv.h" +#include "wx/intl.h" +#include "wx/log.h" + +// ---------------------------------------------------------------------------- +// globals +// ---------------------------------------------------------------------------- + +WXDLLEXPORT_DATA(wxMBConv *) wxConvCurrent = &wxConvLibc; + + +// ============================================================================ +// implementation +// ============================================================================ + +#if wxUSE_WCHAR_T + #ifdef __SALFORDC__ #include #endif @@ -49,11 +68,6 @@ #include #endif -#include "wx/debug.h" -#include "wx/strconv.h" -#include "wx/intl.h" -#include "wx/log.h" - #define BSWAP_UCS4(str, len) { unsigned _c; for (_c=0; _cCharsetToEncoding(name, FALSE); + if ( enc == wxFONTENCODING_SYSTEM ) + return -1; + + // the use the helper function + return wxEncodingToCodepage(enc); +} + +#endif // wxUSE_FONTMAP + +#endif // wxUSE_GUI + +// include old wxCharsetToCodepage() by OK if needed +#if !wxUSE_GUI || !wxUSE_FONTMAP + #include "wx/msw/registry.h" -// this should work if M$ Internet Exploiter is installed -static long CharsetToCodepage(const wxChar *name) + +// this should work if Internet Exploiter is installed +extern long wxCharsetToCodepage(const wxChar *name) { if (!name) return GetACP(); @@ -437,7 +492,10 @@ static long CharsetToCodepage(const wxChar *name) return CP; } -#endif + +#endif // !wxUSE_GUI || !wxUSE_FONTMAP + +#endif // Win32 class wxCharacterSet { @@ -638,7 +696,7 @@ public: size_t outbuf = n; size_t res, cres; - wchar_t *tmpbuf; + wchar_t *tmpbuf = 0; if (g_wcNeedsSwap) { @@ -706,13 +764,16 @@ protected: class CP_CharSet : public wxCharacterSet { public: - CP_CharSet(const wxChar*name) - : wxCharacterSet(name), CodePage(CharsetToCodepage(name)) {} + CP_CharSet(const wxChar* name) + : wxCharacterSet(name) + { + m_CodePage = wxCharsetToCodepage(name); + } size_t MB2WC(wchar_t *buf, const char *psz, size_t n) { size_t len = - MultiByteToWideChar(CodePage, 0, psz, -1, buf, buf ? n : 0); + MultiByteToWideChar(m_CodePage, 0, psz, -1, buf, buf ? n : 0); //VS: returns # of written chars for buf!=NULL and *size* // needed buffer for buf==NULL return len ? (buf ? len : len-1) : (size_t)-1; @@ -720,7 +781,7 @@ public: size_t WC2MB(char *buf, const wchar_t *psz, size_t n) { - size_t len = WideCharToMultiByte(CodePage, 0, psz, -1, buf, + size_t len = WideCharToMultiByte(m_CodePage, 0, psz, -1, buf, buf ? n : 0, NULL, NULL); //VS: returns # of written chars for buf!=NULL and *size* // needed buffer for buf==NULL @@ -728,10 +789,10 @@ public: } bool usable() - { return CodePage != -1; } + { return m_CodePage != -1; } public: - long CodePage; + long m_CodePage; }; #endif // __WIN32__ @@ -742,8 +803,8 @@ class EC_CharSet : public wxCharacterSet public: // temporarily just use wxEncodingConverter stuff, // so that it works while a better implementation is built - EC_CharSet(const wxChar*name) : wxCharacterSet(name), - enc(wxFONTENCODING_SYSTEM) + EC_CharSet(const wxChar* name) : wxCharacterSet(name), + enc(wxFONTENCODING_SYSTEM) { if (name) enc = wxTheFontMapper->CharsetToEncoding(name, FALSE); @@ -761,7 +822,8 @@ public: size_t WC2MB(char *buf, const wchar_t *psz, size_t n) { -#if defined(__BORLANDC__) && (__BORLANDC__ > 0x530) +#if ( defined(__BORLANDC__) && (__BORLANDC__ > 0x530) ) \ + || ( defined(__MWERKS__) && defined(__WXMSW__) ) size_t inbuf = std::wcslen(psz); #else size_t inbuf = ::wcslen(psz); @@ -895,7 +957,8 @@ size_t wxCSConv::WC2MB(char *buf, const wchar_t *psz, size_t n) const return m_cset->WC2MB(buf, psz, n); // latin-1 (direct) -#if defined(__BORLANDC__) && (__BORLANDC__ > 0x530) +#if ( defined(__BORLANDC__) && (__BORLANDC__ > 0x530) ) \ + || ( defined(__MWERKS__) && defined(__WXMSW__) ) size_t len=std::wcslen(psz); #else size_t len=::wcslen(psz);