added conversions via UniChar for wchar = 4 bytes versions

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26052 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2004-03-03 09:24:02 +00:00
parent 604b66c10b
commit f3a355ceb3

View File

@@ -1305,11 +1305,8 @@ public:
{ {
OSStatus status = noErr ; OSStatus status = noErr ;
m_char_encoding = encoding ; m_char_encoding = encoding ;
#if SIZEOF_WCHAR_T == 4
m_unicode_encoding = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode32BitFormat) ;
#else
m_unicode_encoding = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode16BitFormat) ; m_unicode_encoding = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode16BitFormat) ;
#endif
status = TECCreateConverter(&m_MB2WC_converter, status = TECCreateConverter(&m_MB2WC_converter,
m_char_encoding, m_char_encoding,
m_unicode_encoding); m_unicode_encoding);
@@ -1324,21 +1321,32 @@ public:
ByteCount byteOutLen ; ByteCount byteOutLen ;
ByteCount byteInLen = strlen(psz) ; ByteCount byteInLen = strlen(psz) ;
wchar_t *tbuf = NULL ; wchar_t *tbuf = NULL ;
UniChar* ubuf = NULL ;
size_t res = 0 ;
if (buf == NULL) if (buf == NULL)
{ {
n = byteInLen ; n = byteInLen ;
tbuf = (wchar_t*) malloc( n * SIZEOF_WCHAR_T) ; tbuf = (wchar_t*) malloc( n * SIZEOF_WCHAR_T) ;
} }
ByteCount byteBufferLen = n * sizeof( UniChar ) ;
ByteCount byteBufferLen = n * SIZEOF_WCHAR_T ; #if SIZEOF_WCHAR_T == 4
ubuf = (UniChar*) malloc( byteBufferLen ) ;
#else
ubuf = (UniChar*) (buf ? buf : tbuf) ;
#endif
status = TECConvertText(m_MB2WC_converter, (ConstTextPtr) psz , byteInLen, &byteInLen, status = TECConvertText(m_MB2WC_converter, (ConstTextPtr) psz , byteInLen, &byteInLen,
(TextPtr) (buf ? buf : tbuf) , byteBufferLen, &byteOutLen); (TextPtr) ubuf , byteBufferLen, &byteOutLen);
#if SIZEOF_WCHAR_T == 4
wxMBConvUTF16BE converter ;
res = converter.MB2WC( (buf ? buf : tbuf) , (const char*)ubuf , n ) ;
free( ubuf ) ;
#else
res = byteOutLen / sizeof( UniChar ) ;
#endif
if ( buf == NULL ) if ( buf == NULL )
free(tbuf) ; free(tbuf) ;
size_t res = byteOutLen / SIZEOF_WCHAR_T ;
if ( buf && res < n) if ( buf && res < n)
buf[res] = 0; buf[res] = 0;
@@ -1361,9 +1369,21 @@ public:
} }
ByteCount byteBufferLen = n ; ByteCount byteBufferLen = n ;
status = TECConvertText(m_WC2MB_converter, (ConstTextPtr) psz , byteInLen, &byteInLen, UniChar* ubuf = NULL ;
#if SIZEOF_WCHAR_T == 4
wxMBConvUTF16BE converter ;
size_t unicharlen = converter.WC2MB( NULL , psz , 0 ) ;
byteBufferLen = unicharlen ;
ubuf = (UniChar*) malloc( byteBufferLen + 2 ) ;
converter.WC2MB( (char*) ubuf , psz, unicharlen ) ;
#else
ubuf = (UniChar*) psz ;
#endif
status = TECConvertText(m_WC2MB_converter, (ConstTextPtr) ubuf , byteInLen, &byteInLen,
(TextPtr) (buf ? buf : tbuf) , byteBufferLen, &byteOutLen); (TextPtr) (buf ? buf : tbuf) , byteBufferLen, &byteOutLen);
#if SIZEOF_WCHAR_T == 4
free( ubuf ) ;
#endif
if ( buf == NULL ) if ( buf == NULL )
free(tbuf) ; free(tbuf) ;