X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3143722d5a072e17b1ab2e03210321d2ba58f39a..7eb8aeb8b172c3772a2b42364c5a1333007d310f:/src/osx/core/cfstring.cpp diff --git a/src/osx/core/cfstring.cpp b/src/osx/core/cfstring.cpp index 2b0bfbe82a..96bc244d38 100644 --- a/src/osx/core/cfstring.cpp +++ b/src/osx/core/cfstring.cpp @@ -24,6 +24,7 @@ #include + void wxMacConvertNewlines13To10( char * data ) { char * buf = data ; @@ -185,8 +186,8 @@ wxUint32 wxMacGetSystemEncFromFontEnc(wxFontEncoding encoding) #if 0 case wxFONTENCODING_UTF7 : enc = CreateTextEncoding(kCFStringEncodingUnicodeDefault,0,kUnicodeUTF7Format) ; -#endif break ; +#endif case wxFONTENCODING_UTF8 : enc = kCFStringEncodingUTF8; break ; @@ -610,15 +611,20 @@ wxCFStringRef::wxCFStringRef( const wxString &st , wxFontEncoding WXUNUSED_IN_UN #if wxUSE_UNICODE #if wxUSE_UNICODE_WCHAR // native = wchar_t 4 bytes for us - reset( CFStringCreateWithBytes( kCFAllocatorDefault, - (const UInt8*)str.wc_str() , str.length()*4, kCFStringEncodingUTF32, false /* no BOM */ ) ); + const wchar_t * const data = str.wc_str(); + const size_t size = str.length()*sizeof(wchar_t); + CFStringBuiltInEncodings cfencoding = kCFStringEncodingUTF32Native; #elif wxUSE_UNICODE_UTF8 // native = utf8 - reset( CFStringCreateWithBytes( kCFAllocatorDefault, - (const UInt8*) str.utf8_str() , str.utf8_length() , kCFStringEncodingUTF8, false /* no BOM */ ) ); + const char * const data = str.utf8_str(); + const size_t size = str.utf8_length(); + CFStringBuiltInEncodings cfencoding = kCFStringEncodingUTF8; #else - #error "unsupported unicode representation" + #error "unsupported Unicode representation" #endif + + reset( CFStringCreateWithBytes( kCFAllocatorDefault, + (const UInt8*)data, size, cfencoding, false /* no BOM */ ) ); #else // not wxUSE_UNICODE reset( CFStringCreateWithCString( kCFAllocatorSystemDefault , str.c_str() , wxMacGetSystemEncFromFontEnc( encoding ) ) ); @@ -626,19 +632,18 @@ wxCFStringRef::wxCFStringRef( const wxString &st , wxFontEncoding WXUNUSED_IN_UN } } -wxString wxCFStringRef::AsString(wxFontEncoding WXUNUSED_IN_UNICODE(encoding)) +wxString wxCFStringRef::AsString( CFStringRef ref, wxFontEncoding WXUNUSED_IN_UNICODE(encoding) ) { - if ( !get() ) + if ( !ref ) return wxEmptyString ; - Size cflen = CFStringGetLength( get() ) ; - char* buf = NULL ; + Size cflen = CFStringGetLength( ref ) ; - CFStringEncoding cfencoding = 0; - wxString result; + CFStringEncoding cfencoding; + wxString result; #if wxUSE_UNICODE #if wxUSE_UNICODE_WCHAR - cfencoding = kCFStringEncodingUTF32; + cfencoding = kCFStringEncodingUTF32Native; #elif wxUSE_UNICODE_UTF8 cfencoding = kCFStringEncodingUTF8; #else @@ -649,12 +654,12 @@ wxString wxCFStringRef::AsString(wxFontEncoding WXUNUSED_IN_UNICODE(encoding)) #endif CFIndex cStrLen ; - CFStringGetBytes( get() , CFRangeMake(0, cflen) , cfencoding , + CFStringGetBytes( ref , CFRangeMake(0, cflen) , cfencoding , '?' , false , NULL , 0 , &cStrLen ) ; - buf = new char[ cStrLen ] ; - CFStringGetBytes( get() , CFRangeMake(0, cflen) , cfencoding, + char* buf = new char[cStrLen]; + CFStringGetBytes( ref , CFRangeMake(0, cflen) , cfencoding, '?' , false , (unsigned char*) buf , cStrLen , &cStrLen) ; - + #if wxUSE_UNICODE #if wxUSE_UNICODE_WCHAR result = wxString( (const wchar_t*) buf , cStrLen/4); @@ -664,14 +669,27 @@ wxString wxCFStringRef::AsString(wxFontEncoding WXUNUSED_IN_UNICODE(encoding)) #error "unsupported unicode representation" #endif #else - wxString result(buf, cStrLen) ; + result = wxString(buf, cStrLen) ; #endif - + delete[] buf ; wxMacConvertNewlines10To13( &result); return result ; } +wxString wxCFStringRef::AsString(wxFontEncoding encoding) const +{ + return AsString( get(), encoding ); +} + +#if wxOSX_USE_COCOA_OR_IPHONE +wxString wxCFStringRef::AsString( NSString* ref, wxFontEncoding encoding ) +{ + return AsString( (CFStringRef) ref, encoding ); +} +#endif + + // // wxMacUniCharBuffer // @@ -712,11 +730,11 @@ wxMacUniCharBuffer::~wxMacUniCharBuffer() free( m_ubuf ) ; } -UniCharPtr wxMacUniCharBuffer::GetBuffer() +UniCharPtr wxMacUniCharBuffer::GetBuffer() { return m_ubuf ; } - + UniCharCount wxMacUniCharBuffer::GetChars() { return m_chars ;