moving UniChar code to one place
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39893 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -88,4 +88,21 @@ private:
|
|||||||
DECLARE_NO_COPY_CLASS( wxMacCFStringHolder )
|
DECLARE_NO_COPY_CLASS( wxMacCFStringHolder )
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
// corresponding class for holding UniChars (native unicode characters)
|
||||||
|
|
||||||
|
class wxMacUniCharBuffer
|
||||||
|
{
|
||||||
|
public :
|
||||||
|
wxMacUniCharBuffer( const wxString &str ) ;
|
||||||
|
|
||||||
|
~wxMacUniCharBuffer() ;
|
||||||
|
|
||||||
|
UniChar* GetBuffer() ;
|
||||||
|
|
||||||
|
UniCharCount GetChars() ;
|
||||||
|
|
||||||
|
private :
|
||||||
|
UniChar* m_ubuf ;
|
||||||
|
UniCharCount m_chars ;
|
||||||
|
};
|
||||||
#endif //__WXCFSTRINGHOLDER_H__
|
#endif //__WXCFSTRINGHOLDER_H__
|
||||||
|
@@ -707,3 +707,50 @@ wxString wxMacCFStringHolder::AsString(wxFontEncoding encoding)
|
|||||||
delete[] buf ;
|
delete[] buf ;
|
||||||
return result ;
|
return result ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wxMacUniCharBuffer::wxMacUniCharBuffer( const wxString &str )
|
||||||
|
{
|
||||||
|
m_chars = str.length() ;
|
||||||
|
m_ubuf = NULL ;
|
||||||
|
|
||||||
|
#if SIZEOF_WCHAR_T == 4
|
||||||
|
wxMBConvUTF16 converter ;
|
||||||
|
#if wxUSE_UNICODE
|
||||||
|
size_t unicharlen = converter.WC2MB( NULL , str.wc_str() , 0 ) ;
|
||||||
|
m_ubuf = (UniChar*) malloc( unicharlen + 2 ) ;
|
||||||
|
converter.WC2MB( (char*) m_ubuf , str.wc_str(), unicharlen + 2 ) ;
|
||||||
|
#else
|
||||||
|
const wxWCharBuffer wchar = str.wc_str( wxConvLocal ) ;
|
||||||
|
size_t unicharlen = converter.WC2MB( NULL , wchar.data() , 0 ) ;
|
||||||
|
m_ubuf = (UniChar*) malloc( unicharlen + 2 ) ;
|
||||||
|
converter.WC2MB( (char*) m_ubuf , wchar.data() , unicharlen + 2 ) ;
|
||||||
|
#endif
|
||||||
|
m_chars = unicharlen / 2 ;
|
||||||
|
#else // SIZEOF_WCHAR_T is then 2
|
||||||
|
#if wxUSE_UNICODE
|
||||||
|
m_ubuf = malloc( m_chars * 2 + 2 ) ;
|
||||||
|
memcpy( m_ubuf , (UniChar*) str.wc_str() , m_chars * 2 + 2 ) ;
|
||||||
|
#else
|
||||||
|
wxWCharBuffer wchar = str.wc_str( wxConvLocal ) ;
|
||||||
|
m_chars = wxWcslen( wchar.data() ) ;
|
||||||
|
m_ubuf = malloc( m_chars * 2 + 2 ) ;
|
||||||
|
memcpy( m_ubuf , (UniChar*) wchar.data() , m_chars * 2 + 2 ) ;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
wxMacUniCharBuffer::~wxMacUniCharBuffer()
|
||||||
|
{
|
||||||
|
free( m_ubuf ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
UniCharArrayPtr wxMacUniCharBuffer::GetBuffer()
|
||||||
|
{
|
||||||
|
return m_ubuf ;
|
||||||
|
}
|
||||||
|
|
||||||
|
UniCharCount wxMacUniCharBuffer::GetChars()
|
||||||
|
{
|
||||||
|
return m_chars ;
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user