From 590e21b0e29d2406625227419e39b671b581a6a5 Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Sun, 8 Feb 2004 13:24:35 +0000 Subject: [PATCH] proper UTF32 / 16 conversions added git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25625 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/mac/carbon/utils.cpp | 49 +++++----------------------------------- src/mac/utils.cpp | 49 +++++----------------------------------- 2 files changed, 12 insertions(+), 86 deletions(-) diff --git a/src/mac/carbon/utils.cpp b/src/mac/carbon/utils.cpp index 80ca4e3321..12491293dc 100644 --- a/src/mac/carbon/utils.cpp +++ b/src/mac/carbon/utils.cpp @@ -1287,38 +1287,8 @@ wxFontEncoding wxMacGetFontEncFromSystemEnc(wxUint32 encoding) #if (wxUSE_UNICODE == 1) && (SIZEOF_WCHAR_T == 4) -TECObjectRef s_TECUnicode32To16 = NULL ; -TECObjectRef s_TECUnicode16To32 = NULL ; +wxMBConvUTF16BE gMacUTFConverter ; -class wxMacUnicodeConverters -{ -public : - wxMacUnicodeConverters() ; - ~wxMacUnicodeConverters() ; -} ; - -wxMacUnicodeConverters guard ; - -wxMacUnicodeConverters::wxMacUnicodeConverters() -{ - OSStatus status = noErr ; - TextEncoding kUnicode32 = CreateTextEncoding(kTextEncodingUnicodeDefault,kTextEncodingDefaultVariant,kUnicode32BitFormat) ; - TextEncoding kUnicode16 = CreateTextEncoding(kTextEncodingUnicodeDefault,kTextEncodingDefaultVariant,kUnicode16BitFormat) ; - - status = TECCreateConverter(&s_TECUnicode16To32, - kUnicode16, - kUnicode32); - status = TECCreateConverter(&s_TECUnicode32To16, - kUnicode32, - kUnicode16); -} - -wxMacUnicodeConverters::~wxMacUnicodeConverters() -{ - OSStatus status = noErr ; - status = TECDisposeConverter(s_TECUnicode32To16); - status = TECDisposeConverter(s_TECUnicode16To32); -} #endif // converts this string into a carbon foundation string with optional pc 2 mac encoding void wxMacCFStringHolder::Assign( const wxString &st , wxFontEncoding encoding ) @@ -1332,17 +1302,10 @@ void wxMacCFStringHolder::Assign( const wxString &st , wxFontEncoding encoding ) #if SIZEOF_WCHAR_T == 2 unibuf = (UniChar*)str.wc_str() ; #else - OSStatus status = noErr ; - ByteCount byteOutLen ; - ByteCount byteInLen = len * SIZEOF_WCHAR_T ; ByteCount byteBufferLen = len * sizeof( UniChar ) ; unibuf = (UniChar*) malloc(byteBufferLen) ; - for( int i = 0 ; i < len ; ++ i ) - unibuf[i] = (UniChar) str[i] ; - /* - status = TECConvertText( s_TECUnicode32To16 , (ConstTextPtr)str.wc_str() , byteInLen, &byteInLen, - (TextPtr)unibuf, byteBufferLen, &byteOutLen); - */ + wxMBConvUTF16BE converter ; + converter.WC2MB( (char*) unibuf , str.wc_str() , byteBufferLen ) ; #endif m_cfs = CFStringCreateWithCharacters( kCFAllocatorDefault, unibuf , len ); @@ -1369,14 +1332,14 @@ wxString wxMacCFStringHolder::AsString(wxFontEncoding encoding) #if SIZEOF_WCHAR_T == 2 unibuf = (UniChar*) buf ; #else - unibuf = malloc( len * sizeof( UniChar ) ) ; + unibuf = (UniChar*) malloc( len * sizeof( UniChar ) ) ; #endif CFStringGetCharacters( m_cfs , CFRangeMake( 0 , len ) , (UniChar*) unibuf ) ; #if SIZEOF_WCHAR_T == 2 // as long as UniChar is the same as wchar_t nothing to do here #else - for( int i = 0 ; i < len ; ++ i ) - buf[i] = (wchar_t) unibuf[i] ; + wxMBConvUTF16BE converter ; + converter.MB2WC( buf , (const char*)unibuf , len * sizeof( UniChar ) ) ; free( unibuf ) ; #endif #else diff --git a/src/mac/utils.cpp b/src/mac/utils.cpp index 80ca4e3321..12491293dc 100644 --- a/src/mac/utils.cpp +++ b/src/mac/utils.cpp @@ -1287,38 +1287,8 @@ wxFontEncoding wxMacGetFontEncFromSystemEnc(wxUint32 encoding) #if (wxUSE_UNICODE == 1) && (SIZEOF_WCHAR_T == 4) -TECObjectRef s_TECUnicode32To16 = NULL ; -TECObjectRef s_TECUnicode16To32 = NULL ; +wxMBConvUTF16BE gMacUTFConverter ; -class wxMacUnicodeConverters -{ -public : - wxMacUnicodeConverters() ; - ~wxMacUnicodeConverters() ; -} ; - -wxMacUnicodeConverters guard ; - -wxMacUnicodeConverters::wxMacUnicodeConverters() -{ - OSStatus status = noErr ; - TextEncoding kUnicode32 = CreateTextEncoding(kTextEncodingUnicodeDefault,kTextEncodingDefaultVariant,kUnicode32BitFormat) ; - TextEncoding kUnicode16 = CreateTextEncoding(kTextEncodingUnicodeDefault,kTextEncodingDefaultVariant,kUnicode16BitFormat) ; - - status = TECCreateConverter(&s_TECUnicode16To32, - kUnicode16, - kUnicode32); - status = TECCreateConverter(&s_TECUnicode32To16, - kUnicode32, - kUnicode16); -} - -wxMacUnicodeConverters::~wxMacUnicodeConverters() -{ - OSStatus status = noErr ; - status = TECDisposeConverter(s_TECUnicode32To16); - status = TECDisposeConverter(s_TECUnicode16To32); -} #endif // converts this string into a carbon foundation string with optional pc 2 mac encoding void wxMacCFStringHolder::Assign( const wxString &st , wxFontEncoding encoding ) @@ -1332,17 +1302,10 @@ void wxMacCFStringHolder::Assign( const wxString &st , wxFontEncoding encoding ) #if SIZEOF_WCHAR_T == 2 unibuf = (UniChar*)str.wc_str() ; #else - OSStatus status = noErr ; - ByteCount byteOutLen ; - ByteCount byteInLen = len * SIZEOF_WCHAR_T ; ByteCount byteBufferLen = len * sizeof( UniChar ) ; unibuf = (UniChar*) malloc(byteBufferLen) ; - for( int i = 0 ; i < len ; ++ i ) - unibuf[i] = (UniChar) str[i] ; - /* - status = TECConvertText( s_TECUnicode32To16 , (ConstTextPtr)str.wc_str() , byteInLen, &byteInLen, - (TextPtr)unibuf, byteBufferLen, &byteOutLen); - */ + wxMBConvUTF16BE converter ; + converter.WC2MB( (char*) unibuf , str.wc_str() , byteBufferLen ) ; #endif m_cfs = CFStringCreateWithCharacters( kCFAllocatorDefault, unibuf , len ); @@ -1369,14 +1332,14 @@ wxString wxMacCFStringHolder::AsString(wxFontEncoding encoding) #if SIZEOF_WCHAR_T == 2 unibuf = (UniChar*) buf ; #else - unibuf = malloc( len * sizeof( UniChar ) ) ; + unibuf = (UniChar*) malloc( len * sizeof( UniChar ) ) ; #endif CFStringGetCharacters( m_cfs , CFRangeMake( 0 , len ) , (UniChar*) unibuf ) ; #if SIZEOF_WCHAR_T == 2 // as long as UniChar is the same as wchar_t nothing to do here #else - for( int i = 0 ; i < len ; ++ i ) - buf[i] = (wchar_t) unibuf[i] ; + wxMBConvUTF16BE converter ; + converter.MB2WC( buf , (const char*)unibuf , len * sizeof( UniChar ) ) ; free( unibuf ) ; #endif #else