X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e2c87f4cc46b77ca7aee5be0e3dac1a90681bf62..6dfaa4e5d9b8e6c741971884ec896f15f71712f4:/include/wx/string.h diff --git a/include/wx/string.h b/include/wx/string.h index 88adfa8ffb..993e8a9283 100644 --- a/include/wx/string.h +++ b/include/wx/string.h @@ -77,6 +77,9 @@ const unsigned int wxSTRING_MAXLEN = UINT_MAX - 100; // implementation only #define ASSERT_VALID_INDEX(i) wxASSERT( (unsigned)(i) <= Len() ) +// include conversion classes +#include "wx/strconv.h" + // --------------------------------------------------------------------------- // Global functions complementing standard C string library replacements for // strlen() and portable strcasecmp() @@ -175,94 +178,6 @@ struct WXDLLEXPORT wxStringData bool IsValid() const { return (nRefs != 0); } }; -// --------------------------------------------------------------------------- -// types of multibyte<->Unicode conversions -// --------------------------------------------------------------------------- -#if wxUSE_WCHAR_T -class WXDLLEXPORT wxMBConv -{ - public: - virtual size_t MB2WC(wchar_t *buf, const char *psz, size_t n) const; - virtual size_t WC2MB(char *buf, const wchar_t *psz, size_t n) const; - // No longer inline since BC++ complains. - const wxWCharBuffer cMB2WC(const char *psz) const; - const wxCharBuffer cWC2MB(const wchar_t *psz) const; -#if wxUSE_UNICODE - const wxWCharBuffer cMB2WX(const char *psz) const { return cMB2WC(psz); } - const wxCharBuffer cWX2MB(const wchar_t *psz) const { return cWC2MB(psz); } - const wchar_t* cWC2WX(const wchar_t *psz) const { return psz; } - const wchar_t* cMB2WC(const wchar_t *psz) const { return psz; } -#else - const char* cMB2WX(const char *psz) const { return psz; } - const char* cWX2MB(const char *psz) const { return psz; } - const wxCharBuffer cWC2WX(const wchar_t *psz) const { return cWC2MB(psz); } - const wxWCharBuffer cWX2WC(const char *psz) const { return cMB2WC(psz); } -#endif -}; -WXDLLEXPORT_DATA(extern wxMBConv) wxConvLibc; - -#define wxANOTHER_MBCONV(type) \ -class type : public wxMBConv { \ - public: \ - virtual size_t MB2WC(wchar_t *buf, const char *psz, size_t n) const; \ - virtual size_t WC2MB(char *buf, const wchar_t *psz, size_t n) const; \ -} - -WXDLLEXPORT_DATA(extern wxANOTHER_MBCONV(wxMBConvFile)) wxConvFile; -WXDLLEXPORT_DATA(extern wxANOTHER_MBCONV(wxMBConvUTF7)) wxConvUTF7; -WXDLLEXPORT_DATA(extern wxANOTHER_MBCONV(wxMBConvUTF8)) wxConvUTF8; -#ifdef __WXGTK12__ - WXDLLEXPORT_DATA(extern wxANOTHER_MBCONV(wxMBConvGdk)) wxConvGdk; -#endif - -class wxCharacterSet; -class WXDLLEXPORT wxCSConv : public wxMBConv -{ - private: - wxChar *m_name; - wxCharacterSet *m_cset; - bool m_deferred; - void SetName(const wxChar *charset); - public: - wxCSConv(const wxChar *charset); - virtual ~wxCSConv(); - void LoadNow(); - virtual size_t MB2WC(wchar_t *buf, const char *psz, size_t n) const; - virtual size_t WC2MB(char *buf, const wchar_t *psz, size_t n) const; -}; - -WXDLLEXPORT_DATA(extern wxCSConv) wxConvLocal; -#define wxConv_local wxConvLocal - -WXDLLEXPORT_DATA(extern wxMBConv *) wxConvCurrent; -#define wxConv_current wxConvCurrent - -// filenames are multibyte on Unix and probably widechar on Windows? -#if defined(__UNIX__) || defined(__BORLANDC__) -#define wxMBFILES 1 -#else -#define wxMBFILES 0 -#endif - -#if wxMBFILES -#define wxFNCONV(name) wxConvFile.cWX2MB(name) -#define FNSTRINGCAST MBSTRINGCAST -#else -#define wxFNCONV(name) name -#define FNSTRINGCAST WXSTRINGCAST -#endif -#else//!wxUSE_WCHAR_T -class WXDLLEXPORT wxMBConv { -public: - const char* cMB2WX(const char *psz) const { return psz; } - const char* cWX2MB(const char *psz) const { return psz; } -}; -WXDLLEXPORT_DATA(extern wxMBConv) wxConvLibc, wxConvFile; -WXDLLEXPORT_DATA(extern wxMBConv *) wxConvCurrent; -#define wxFNCONV(name) name -#define FNSTRINGCAST WXSTRINGCAST -#endif//wxUSE_WCHAR_T - // --------------------------------------------------------------------------- // This is (yet another one) String class for C++ programmers. It doesn't use // any of "advanced" C++ features (i.e. templates, exceptions, namespaces...)