Exemplo n.º 1
0
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;
}