X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5c69ef61f3ad09c0aef39915d4361a534f598520..43c42c18d36c703a88b1b7b697bac27fe5608eca:/include/wx/unichar.h?ds=sidebyside diff --git a/include/wx/unichar.h b/include/wx/unichar.h index 9d0b593bd7..fe99644cdc 100644 --- a/include/wx/unichar.h +++ b/include/wx/unichar.h @@ -68,6 +68,27 @@ public: // Returns true if the character is an ASCII character: bool IsAscii() const { return m_value < 0x80; } + // Returns true if the character is representable as a single byte in the + // current locale encoding and return this byte in output argument c (which + // must be non-NULL) + bool GetAsChar(char *c) const + { +#if wxUSE_UNICODE + if ( !IsAscii() ) + { +#if !wxUSE_UTF8_LOCALE_ONLY + if ( GetAsHi8bit(m_value, c) ) + return true; +#endif // !wxUSE_UTF8_LOCALE_ONLY + + return false; + } +#endif // wxUSE_UNICODE + + *c = wx_truncate_cast(char, m_value); + return true; + } + // Conversions to char and wchar_t types: all of those are needed to be // able to pass wxUniChars to verious standard narrow and wide character // functions @@ -165,7 +186,8 @@ private: // helpers of the functions above called to deal with non-ASCII chars static value_type FromHi8bit(char c); - static char ToHi8bit(value_type c); + static char ToHi8bit(value_type v); + static bool GetAsHi8bit(value_type v, char *c); private: value_type m_value; @@ -209,6 +231,7 @@ public: #endif // wxUSE_UNICODE_UTF8 bool IsAscii() const { return UniChar().IsAscii(); } + bool GetAsChar(char *c) const { return UniChar().GetAsChar(c); } // Assignment operators: #if wxUSE_UNICODE_UTF8 @@ -306,17 +329,13 @@ inline wxUniChar& wxUniChar::operator=(const wxUniCharRef& c) // Comparison operators for the case when wxUniChar(Ref) is the second operand // implemented in terms of member comparison functions -#define wxCMP_REVERSE(c1, c2, op) c2 op c1 - -wxDEFINE_COMPARISONS(char, const wxUniChar&, wxCMP_REVERSE) -wxDEFINE_COMPARISONS(char, const wxUniCharRef&, wxCMP_REVERSE) - -wxDEFINE_COMPARISONS(wchar_t, const wxUniChar&, wxCMP_REVERSE) -wxDEFINE_COMPARISONS(wchar_t, const wxUniCharRef&, wxCMP_REVERSE) +wxDEFINE_COMPARISONS_BY_REV(char, const wxUniChar&) +wxDEFINE_COMPARISONS_BY_REV(char, const wxUniCharRef&) -wxDEFINE_COMPARISONS(const wxUniChar&, const wxUniCharRef&, wxCMP_REVERSE) +wxDEFINE_COMPARISONS_BY_REV(wchar_t, const wxUniChar&) +wxDEFINE_COMPARISONS_BY_REV(wchar_t, const wxUniCharRef&) -#undef wxCMP_REVERSE +wxDEFINE_COMPARISONS_BY_REV(const wxUniChar&, const wxUniCharRef&) // for expressions like c-'A': inline int operator-(char c1, const wxUniCharRef& c2) { return -(c2 - c1); }