static TextEncoding sLookupName(const string& iName) { TextEncoding theTE; Str255 theNameStr255; ZString::sToPString(iName, theNameStr255, 255); if (noErr == TECGetTextEncodingFromInternetName(&theTE, theNameStr255)) return theTE; // Try again, forcing lower case ZString::sToPString(ZUnicode::sToLower(iName), theNameStr255, 255); if (noErr == TECGetTextEncodingFromInternetName(&theTE, theNameStr255)) return theTE; // Work our way through any aliases ZTextCoder may know about vector<string> aliases; ZTextCoder::sGetAliases(iName, aliases); for (vector<string>::iterator i = aliases.begin(); i != aliases.end(); ++i) { ZString::sToPString(ZUnicode::sToLower(*i), theNameStr255, 255); if (noErr == TECGetTextEncodingFromInternetName(&theTE, theNameStr255)) return theTE; } return 0; }
// --------------------------------------------------------------------------- // MacOSTransService: The protected virtual transcoding service API // --------------------------------------------------------------------------- XMLTranscoder* MacOSUnicodeConverter::makeNewXMLTranscoder(const XMLCh* const encodingName , XMLTransService::Codes& resValue , const XMLSize_t blockSize , MemoryManager* const manager) { XMLTranscoder* result = NULL; resValue = XMLTransService::Ok; TextToUnicodeInfo textToUnicodeInfo = NULL; UnicodeToTextInfo unicodeToTextInfo = NULL; // Map the encoding to a Mac OS Encoding value Str255 pasEncodingName; char cEncodingName[256]; ConvertWideToNarrow(encodingName, cEncodingName, sizeof(cEncodingName)); CopyCStringToPascal(cEncodingName, pasEncodingName); TextEncoding textEncoding = 0; OSStatus status = TECGetTextEncodingFromInternetName ( &textEncoding, pasEncodingName); // Make a transcoder for that encoding if (status == noErr) result = makeNewXMLTranscoder(encodingName, resValue, blockSize, textEncoding, manager); else resValue = XMLTransService::UnsupportedEncoding; return result; }