X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1e50d914af93e769828bac5895622ebdece469c6..db18be579249298716e35521cc060bda248c0efe:/include/wx/strconv.h diff --git a/include/wx/strconv.h b/include/wx/strconv.h index b9ea52f68e..0fbe71bfd5 100644 --- a/include/wx/strconv.h +++ b/include/wx/strconv.h @@ -135,6 +135,12 @@ public: // encoding static size_t GetMaxMBNulLen() { return 4 /* for UTF-32 */; } +#if wxUSE_UNICODE_UTF8 + // return true if the converter's charset is UTF-8, i.e. char* strings + // decoded using this object can be directly copied to wxString's internal + // storage without converting to WC and than back to UTF-8 MB string + virtual bool IsUTF8() const { return false; } +#endif // The old conversion functions. The existing classes currently mostly // implement these ones but we're in transition to using To/FromWChar() @@ -175,6 +181,10 @@ public: virtual size_t WC2MB(char *outputBuf, const wchar_t *psz, size_t outputSize) const; virtual wxMBConv *Clone() const { return new wxMBConvLibc; } + +#if wxUSE_UNICODE_UTF8 + virtual bool IsUTF8() const { return wxLocaleIsUtf8; } +#endif }; #ifdef __UNIX__ @@ -244,6 +254,8 @@ public: class WXDLLIMPEXP_BASE wxMBConvUTF8 : public wxMBConv { public: + // FIXME-UTF8: split this class into multiple classes, one strict and + // other lossy (PUA, OCTAL mappings) enum { MAP_INVALID_UTF8_NOT = 0, @@ -257,6 +269,12 @@ public: virtual wxMBConv *Clone() const { return new wxMBConvUTF8(m_options); } +#if wxUSE_UNICODE_UTF8 + // NB: other mapping modes are not, strictly speaking, UTF-8, so we can't + // take the shortcut in that case + virtual bool IsUTF8() const { return m_options == MAP_INVALID_UTF8_NOT; } +#endif + private: int m_options; }; @@ -424,7 +442,7 @@ private: // instead. #define WX_DECLARE_GLOBAL_CONV(klass, name) \ extern WXDLLIMPEXP_DATA_BASE(klass*) name##Ptr; \ - extern klass* WXDLLIMPEXP_BASE wxGet_##name##Ptr(); \ + extern WXDLLIMPEXP_BASE klass* wxGet_##name##Ptr(); \ inline klass& wxGet_##name() \ { \ if ( !name##Ptr ) \