static const wxUint16* GetEncTable(wxFontEncoding enc) { #ifdef __WXMAC__ if( enc >= wxFONTENCODING_MACMIN && enc <= wxFONTENCODING_MACMAX ) { int i = enc-wxFONTENCODING_MACMIN ; if ( gMacEncodingsInited[i] == false ) { TECObjectRef converter ; TextEncodingBase code = wxMacGetSystemEncFromFontEnc( enc ) ; TextEncodingBase unicode = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode16BitFormat) ; OSStatus status = TECCreateConverter(&converter,code,unicode); char s[2] ; s[1] = 0 ; ByteCount byteInLen, byteOutLen ; for( unsigned char c = 255 ; c >= 128 ; --c ) { s[0] = c ; status = TECConvertText(converter, (ConstTextPtr) &s , 1, &byteInLen, (TextPtr) &gMacEncodings[i][c-128] , 2, &byteOutLen); } status = TECDisposeConverter(converter); gMacEncodingsInited[i]=true; } return gMacEncodings[i] ; } #endif for (int i = 0; encodings_list[i].table != NULL; i++) { if (encodings_list[i].encoding == enc) return encodings_list[i].table; } return NULL; }
XMLTranscoder* MacOSUnicodeConverter::makeNewXMLTranscoder(const XMLCh* const encodingName , XMLTransService::Codes& resValue , const XMLSize_t blockSize , TextEncoding textEncoding , MemoryManager* const manager) { XMLTranscoder* result = NULL; resValue = XMLTransService::Ok; OSStatus status = noErr; TECObjectRef textToUnicode = NULL; TECObjectRef unicodeToText = NULL; // We convert to and from utf16 TextEncoding utf16Encoding = CreateTextEncoding(kTextEncodingUnicodeDefault, kTextEncodingDefaultVariant, kUnicode16BitFormat); // Create a TEC from our encoding to utf16 if (status == noErr) status = TECCreateConverter(&textToUnicode, textEncoding, utf16Encoding); // Create a TEC from utf16 to our encoding if (status == noErr) status = TECCreateConverter(&unicodeToText, utf16Encoding, textEncoding); if (status != noErr) { // Clean up on error if (textToUnicode != NULL) TECDisposeConverter(textToUnicode); if (unicodeToText != NULL) TECDisposeConverter(unicodeToText); resValue = XMLTransService::UnsupportedEncoding; } else { // Create our transcoder, passing in the converters result = new (manager) MacOSTranscoder(encodingName, textToUnicode, unicodeToText, blockSize, manager); } return result; }
void Internat::Init() { // Save decimal point character struct lconv * localeInfo = localeconv(); if (localeInfo) mDecimalSeparator = wxString(localeInfo->decimal_point, wxConvLocal).GetChar(0); // wxLogDebug(wxT("Decimal separator set to '%c'"), mDecimalSeparator); #ifndef __WXMAC__ // Set up character-set conversion for UTF-8 input and output. mConvLocal = new wxCSConv(wxLocale::GetSystemEncodingName()); #else // Set up a special converter to/from the Mac-specific local // encoding (usually MacRoman) OSStatus status = noErr; TECObjectRef ec; TextEncoding MacEncoding = GetApplicationTextEncoding(); TextEncoding UTF8 = CreateTextEncoding(kTextEncodingUnicodeDefault, kUnicodeNoSubset, kUnicodeUTF8Format); status = TECCreateConverter(&ec, MacEncoding, UTF8); if (status == noErr) mTECToUTF = (void *)ec; else mTECToUTF = NULL; status = TECCreateConverter(&ec, UTF8, MacEncoding); if (status == noErr) mTECFromUTF = (void *)ec; else mTECFromUTF = NULL; #endif }
OSStatus TextCodecMac::createTECConverter() const { bool cachedEncodingEqual = cachedConverterEncoding == m_encoding; cachedConverterEncoding = invalidEncoding; if (cachedEncodingEqual && cachedConverterTEC) { m_converterTEC = cachedConverterTEC; cachedConverterTEC = 0; TECClearConverterContextInfo(m_converterTEC); } else { OSStatus status = TECCreateConverter(&m_converterTEC, m_encoding, CreateTextEncoding(kTextEncodingUnicodeDefault, kTextEncodingDefaultVariant, kUnicode16BitFormat)); if (status) return status; TECSetBasicOptions(m_converterTEC, kUnicodeForceASCIIRangeMask); } return noErr; }