Kaydet (Commit) 8737d183 authored tarafından Jens-Heiner Rechtien's avatar Jens-Heiner Rechtien

INTEGRATION: CWS geordi2q14 (1.21.88); FILE MERGED

2004/01/29 18:31:39 hr 1.21.88.1: #111934#: merge CWS ooo111fix2
üst 0e894205
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
* *
* $RCSfile: nlsupport.c,v $ * $RCSfile: nlsupport.c,v $
* *
* $Revision: 1.21 $ * $Revision: 1.22 $
* *
* last change: $Author: hr $ $Date: 2003-07-16 17:21:12 $ * last change: $Author: hr $ $Date: 2004-02-02 19:01:40 $
* *
* The Contents of this file are made available subject to the terms of * The Contents of this file are made available subject to the terms of
* either of the following licenses * either of the following licenses
...@@ -246,7 +246,7 @@ static rtl_Locale * _parse_locale( const char * locale ) ...@@ -246,7 +246,7 @@ static rtl_Locale * _parse_locale( const char * locale )
return NULL; return NULL;
} }
#if defined(LINUX) || defined(SOLARIS) || defined(IRIX) || defined(NETBSD) || defined(FREEBSD) || defined(MACOSX) #if defined(LINUX) || defined(SOLARIS) || defined(IRIX) || defined(NETBSD) || defined(FREEBSD)
/* /*
* This implementation of osl_getTextEncodingFromLocale maps * This implementation of osl_getTextEncodingFromLocale maps
...@@ -329,7 +329,7 @@ const _pair _nl_language_list[] = { ...@@ -329,7 +329,7 @@ const _pair _nl_language_list[] = {
{ "sjis", RTL_TEXTENCODING_SHIFT_JIS } /* Japan */ { "sjis", RTL_TEXTENCODING_SHIFT_JIS } /* Japan */
}; };
#elif defined(LINUX) || defined(NETBSD) || defined(MACOSX) #elif defined(LINUX) || defined(NETBSD)
const _pair _nl_language_list[] = { const _pair _nl_language_list[] = {
{ "ANSI_X3.110-1983", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-99 NAPLPS */ { "ANSI_X3.110-1983", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-99 NAPLPS */
...@@ -563,112 +563,10 @@ const _pair _nl_language_list[] = { ...@@ -563,112 +563,10 @@ const _pair _nl_language_list[] = {
{ "UTF-8", RTL_TEXTENCODING_UTF8 } /* ISO-10646/UTF-8 */ { "UTF-8", RTL_TEXTENCODING_UTF8 } /* ISO-10646/UTF-8 */
}; };
#endif /* ifdef SOLARIS IRIX LINUX FREEBSD NETBSD MACOSX */ #endif /* ifdef SOLARIS IRIX LINUX FREEBSD NETBSD */
#ifdef MACOSX
/* MacOS X has some special names for some of its encodings. These encoding names are
* returned by CFStringConvertEncodingToIANACharSetName() when given a CFTextEncoding
* argument from one of the ones in CFStringEncodingExt.h in the CoreFoundation framework.
*/
const _pair _macxp_language_list[] = {
{ "MACINTOSH", RTL_TEXTENCODING_ISO_8859_1 }, /* kCFStringEncodingMacRoman */
{ "X-MAC-JAPANESE", RTL_TEXTENCODING_EUC_JP }, /* kCFStringEncodingMacJapanese */
{ "X-MAC-TRAD-CHINESE", RTL_TEXTENCODING_APPLE_CHINTRAD }, /* kCFStringEncodingMacChineseTrad */
{ "X-MAC-KOREAN", RTL_TEXTENCODING_EUC_KR }, /* kCFStringEncodingMacKorean */
{ "X-MAC-ARABIC", RTL_TEXTENCODING_APPLE_ARABIC }, /* kCFStringEncodingMacArabic */
{ "X-MAC-HEBREW", RTL_TEXTENCODING_APPLE_HEBREW }, /* kCFStringEncodingMacHebrew */
{ "X-MAC-GREEK", RTL_TEXTENCODING_APPLE_GREEK }, /* kCFStringEncodingMacGreek */
{ "X-MAC-CYRILLIC", RTL_TEXTENCODING_APPLE_CYRILLIC }, /* kCFStringEncodingMacCyrillic */
{ "X-MAC-DEVANAGARI", RTL_TEXTENCODING_APPLE_DEVANAGARI }, /* kCFStringEncodingMacDevanagari */
{ "X-MAC-GURMUKHI", RTL_TEXTENCODING_APPLE_GURMUKHI }, /* kCFStringEncodingMacGurmukhi */
{ "X-MAC-GUJARATI", RTL_TEXTENCODING_APPLE_GUJARATI }, /* kCFStringEncodingMacGujarati */
{ "X-MAC-ORIYA", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacOriya */
{ "X-MAC-BENGALI", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacBengali */
{ "X-MAC-TAMIL", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacTamil */
{ "X-MAC-TELUGU", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacTelugu */
{ "X-MAC-KANNADA", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacKannada */
{ "X-MAC-MALAYALAM", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacMalayalam */
{ "X-MAC-SINHALESE", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacSinhalese */
{ "X-MAC-BURMESE", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacBurmese */
{ "X-MAC-KHMER", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacKhmer */
{ "X-MAC-THAI", RTL_TEXTENCODING_APPLE_THAI }, /* kCFStringEncodingMacThai */
{ "X-MAC-LAOTIAN", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacLaotian */
{ "X-MAC-GEORGIAN", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacGeorgian */
{ "X-MAC-ARMENIAN", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacArmenian */
{ "X-MAC-SIMP-CHINESE", RTL_TEXTENCODING_APPLE_CHINSIMP }, /* kCFStringEncodingMacChineseSimp */
{ "X-MAC-TIBETAN", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacTibetan */
{ "X-MAC-MONGOLIAN", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacMongolian */
{ "X-MAC-ETHIOPIC", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacEthiopic */
{ "X-MAC-CENTRALEURROMAN", RTL_TEXTENCODING_APPLE_CENTEURO }, /* kCFStringEncodingMacCentralEurRoman */
{ "X-MAC-VIETNAMESE", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacVietnamese */
{ "X-MAC-EXTARABIC", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacExtArabic */
{ "X-MAC-SYMBOL", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacSymbol */
{ "X-MAC-DINGBATS", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacDingbats */
{ "X-MAC-TURKISH", RTL_TEXTENCODING_APPLE_TURKISH }, /* kCFStringEncodingMacTurkish */
{ "X-MAC-CROATIAN", RTL_TEXTENCODING_APPLE_CROATIAN }, /* kCFStringEncodingMacCroatian */
{ "X-MAC-ICELANDIC", RTL_TEXTENCODING_APPLE_ICELAND }, /* kCFStringEncodingMacIcelandic */
{ "X-MAC-ROMANIAN", RTL_TEXTENCODING_APPLE_ROMANIAN }, /* kCFStringEncodingMacRomanian */
{ "UNICODE-2-0", RTL_TEXTENCODING_DONTKNOW }, /* */
{ "X-MAC-FARSI", RTL_TEXTENCODING_APPLE_FARSI }, /* kCFStringEncodingMacFarsi */
{ "X-MAC-UKRAINIAN", RTL_TEXTENCODING_APPLE_UKRAINIAN }, /* kCFStringEncodingMacUkrainian */
{ "X-MAC-VT100", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacVT100 */
{ "macintosh", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacHFS */
{ "UTF-16BE", RTL_TEXTENCODING_UNICODE }, /* kCFStringEncodingUnicode */
{ "UNICODE-1-1", RTL_TEXTENCODING_DONTKNOW }, /* */
{ "UNICODE-1-1", RTL_TEXTENCODING_DONTKNOW }, /* */
{ "UNICODE-2-0", RTL_TEXTENCODING_DONTKNOW }, /* */
{ "csUnicode", RTL_TEXTENCODING_DONTKNOW }, /* */
{ "CP437", RTL_TEXTENCODING_IBM_437 }, /* kCFStringEncodingDOSLatinUS */
{ "CP737", RTL_TEXTENCODING_IBM_737 }, /* kCFStringEncodingDOSGreek */
{ "CP775", RTL_TEXTENCODING_IBM_775 }, /* kCFStringEncodingDOSBalticRim */
{ "CP850", RTL_TEXTENCODING_IBM_850 }, /* kCFStringEncodingDOSLatin1 */
{ "CP852", RTL_TEXTENCODING_IBM_852 }, /* kCFStringEncodingDOSGreek1 */
{ "CP857", RTL_TEXTENCODING_IBM_857 }, /* kCFStringEncodingDOSTurkish */
{ "CP861", RTL_TEXTENCODING_IBM_861 }, /* kCFStringEncodingDOSIcelandic */
{ "cp864", RTL_TEXTENCODING_IBM_864 }, /* kCFStringEncodingDOSArabic */
{ "CP866", RTL_TEXTENCODING_IBM_866 }, /* kCFStringEncodingDOSRussian */
{ "CP874", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingDOSThai */
{ "CP932", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingDOSJapanese */
{ "CP936", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingDOSChineseSimplif */
{ "CP949", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingDOSKorean */
{ "CP950", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingDOSChineseTrad */
{ "WINDOWS-1252", RTL_TEXTENCODING_MS_1252 }, /* kCFStringEncodingWindowsLatin1 */
{ "WINDOWS-1250", RTL_TEXTENCODING_MS_1250 }, /* kCFStringEncodingWindowsLatin2 */
{ "WINDOWS-1251", RTL_TEXTENCODING_MS_1251 }, /* kCFStringEncodingWindowsCyrillic */
{ "WINDOWS-1253", RTL_TEXTENCODING_MS_1253 }, /* kCFStringEncodingWindowsGreek */
{ "WINDOWS-1254", RTL_TEXTENCODING_MS_1254 }, /* kCFStringEncodingWindowsLatin5 */
{ "WINDOWS-1255", RTL_TEXTENCODING_MS_1255 }, /* kCFStringEncodingWindowsHebrew */
{ "WINDOWS-1256", RTL_TEXTENCODING_MS_1256 }, /* kCFStringEncodingWindowsArabic */
{ "WINDOWS-1257", RTL_TEXTENCODING_MS_1257 }, /* kCFStringEncodingWindowsBalticRim */
{ "WINDOWS-1258", RTL_TEXTENCODING_MS_1258 }, /* kCFStringEncodingWindowsVietnamese */
{ "US-ASCII", RTL_TEXTENCODING_ASCII_US }, /* kCFStringEncodingASCII */
{ "JIS_C6226-1983", RTL_TEXTENCODING_GB_2312 }, /* kCFStringEncodingJIS_X0208_90 */
{ "csISO58GB231280", RTL_TEXTENCODING_GB_2312 }, /* kCFStringEncodingGB_2312_80 */
{ "X-GBK", RTL_TEXTENCODING_GBK }, /* kCFStringEncodingGBK_95 */
{ "csKSC56011987", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingKSC_5601_87 */
{ "ISO-2022-JP", RTL_TEXTENCODING_ISO_2022_JP }, /* kCFStringEncodingISO_2022_JP */
{ "ISO-2022-CN", RTL_TEXTENCODING_ISO_2022_CN }, /* kCFStringEncodingISO_2022_CN */
{ "ISO-2022-CN-EXT", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingISO_2022_CN_EXT */
{ "ISO-2022-KR", RTL_TEXTENCODING_ISO_2022_KR }, /* kCFStringEncodingISO_2022_KR */
{ "EUC-JP", RTL_TEXTENCODING_EUC_JP }, /* kCFStringEncodingEUC_JP */
{ "EUC-CN", RTL_TEXTENCODING_EUC_CN }, /* kCFStringEncodingEUC_CN */
{ "EUC-TW", RTL_TEXTENCODING_EUC_TW }, /* kCFStringEncodingEUC_TW */
{ "EUC-KR", RTL_TEXTENCODING_EUC_KR }, /* kCFStringEncodingEUC_KR */
{ "SHIFT_JIS", RTL_TEXTENCODING_SHIFT_JIS }, /* kCFStringEncodingShiftJIS */
{ "KOI8-R", RTL_TEXTENCODING_KOI8_R }, /* kCFStringEncodingKOI8_R */
{ "X-MAC-ROMAN-LATIN1", RTL_TEXTENCODING_APPLE_ROMAN }, /* kCFStringEncodingMacRomanLatin1 */
{ "HZ-GB-2312", RTL_TEXTENCODING_GB_2312 }, /* kCFStringEncodingHZ_GB_2312 */
{ "Big5-HKSCS", RTL_TEXTENCODING_BIG5_HKSCS }, /* kCFStringEncodingBig5_HKSCS_1999 */
{ "X-NEXTSTEP", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingNextStepLatin */
{ "cp037", RTL_TEXTENCODING_DONTKNOW } /* kCFStringEncodingEBCDIC_CP037 */
/* ___________ Add more encodings here ___________ */
};
#endif /* ifdef MACOSX */
static pthread_mutex_t aLocalMutex = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t aLocalMutex = PTHREAD_MUTEX_INITIALIZER;
#ifndef MACOSX
/*****************************************************************************/ /*****************************************************************************/
/* return the text encoding corresponding to the given locale /* return the text encoding corresponding to the given locale
/*****************************************************************************/ /*****************************************************************************/
...@@ -787,326 +685,6 @@ int _imp_setProcessLocale( rtl_Locale * pLocale ) ...@@ -787,326 +685,6 @@ int _imp_setProcessLocale( rtl_Locale * pLocale )
return ret; return ret;
} }
#else /* ifndef MACOSX */
/*
* MacOS X specific Locale manipulation code
*/
#include <premac.h>
#include <CoreFoundation/CoreFoundation.h>
#include <postmac.h>
/* OS X locale discovery function from dylib */
int (*pGetOSXLocale)( char *, sal_uInt32 );
int (*pConvertTextEncodingToIANACharsetName)( char *, unsigned int, CFStringEncoding );
void macxp_ConvertCFEncodingToIANACharSetName( char *buffer, unsigned int bufferLen, CFStringEncoding cfEncoding );
/*****************************************************************************/
/* return the text encoding corresponding to the given locale
/*****************************************************************************/
rtl_TextEncoding osl_getTextEncodingFromLocale( rtl_Locale * pLocale )
{
const _pair *pLanguage = NULL;
char sEncoding[ 64 ] = "";
CFStringEncoding sCFSysEncoding;
const unsigned int macxpListMembers = sizeof(_macxp_language_list) / sizeof(_pair);
const unsigned int otherListMembers = sizeof(_nl_language_list) / sizeof(_pair);
unsigned int isDarwin;
unsigned int majorVersion;
unsigned int minorVersion;
unsigned int minorMinorVersion;
/* For retrieving the CoreFoundation text encoding, the process goes like
* this:
* 1) On MacOS X this will be the first language listed in the
* Language tab of the International preference pane.
* 2) On Darwin 5 the value is currently hardwired to
* kCFStringEncodingMacRoman.
*/
sCFSysEncoding = CFStringGetSystemEncoding();
/* If running on OS X, attempt to convert text encoding to a charset name using CoreFoundation calls. */
/* Must use osl_psz_xxxx variants of functions here because otherwise osl_loadModule() tries to get the
* un-Unicode the string we pass to it, which results in this function being called again and again and
* again, finally overflowing the stack.
*/
macxp_getSystemVersion( &isDarwin, &majorVersion, &minorVersion, &minorMinorVersion );
if( !isDarwin )
{
/* Load the text encoding conversion library if we are running on OS X */
const sal_Char *aTextEncConvertLibName = "libsalextra_x11osx_mxp.dylib";
const sal_Char *aOSXTextEncConvertFunctionName = "macxp_OSXConvertCFEncodingToIANACharSetName";
oslModule pTextEncCovertLib;
void *pFunc;
int err;
pTextEncCovertLib = osl_psz_loadModule( aTextEncConvertLibName, SAL_LOADMODULE_DEFAULT );
if( !pTextEncCovertLib )
{
fprintf( stderr, "Could not load the OS X text encoding coversion library! (%s)\n", aTextEncConvertLibName );
}
else
{
/* Grab a pointer to the text encoding conversion function and call it */
pFunc = osl_psz_getSymbol( pTextEncCovertLib, aOSXTextEncConvertFunctionName );
if( pFunc )
{
pConvertTextEncodingToIANACharsetName = ( int(*)(char *, unsigned int, CFStringEncoding) )( pFunc );
err = (*pConvertTextEncodingToIANACharsetName)( sEncoding, 64, sCFSysEncoding );
}
else
fprintf( stderr, "Could not grab pointer to the OS X text encoding coversion routine! (%s)\n", aOSXTextEncConvertFunctionName );
}
osl_unloadModule( pTextEncCovertLib );
}
if ( strlen(sEncoding) <= 0 )
{
/*
* Darwin doesn't have a CFStringConvertEncodingToIANACharSetName(),
* so we call our own replacement. Also fall back to our replacement
* if for some reason we can't load our OS X convert library.
*/
macxp_ConvertCFEncodingToIANACharSetName( sEncoding, 64, sCFSysEncoding );
}
/* Try the Mac-specific list first, then non-Mac list (picks up MACINTOSH from non-Mac list) */
pLanguage = _pair_search( sEncoding, _macxp_language_list, macxpListMembers );
if ( pLanguage == NULL )
pLanguage = _pair_search( sEncoding, _nl_language_list, otherListMembers );
OSL_ASSERT( pLanguage && ( RTL_TEXTENCODING_DONTKNOW != pLanguage->value ) );
/*
* a matching item in our list provides a mapping from codeset to
* rtl-codeset
*/
if ( pLanguage != NULL )
return pLanguage->value;
return RTL_TEXTENCODING_DONTKNOW;
}
/*****************************************************************************/
/* return the current process locale
/*****************************************************************************/
void _imp_getProcessLocale( rtl_Locale ** ppLocale )
{
static const char *locale = NULL;
/* basic thread safeness */
pthread_mutex_lock( &aLocalMutex );
/* Only fetch the locale once and cache it */
if ( NULL == locale )
{
unsigned int isDarwin;
unsigned int majorVersion;
unsigned int minorVersion;
unsigned int minorMinorVersion;
/* If running on OS X, attempt to fetch the locale using CoreServices calls. */
macxp_getSystemVersion( &isDarwin, &majorVersion, &minorVersion, &minorMinorVersion );
if( !isDarwin )
{
/* Load the locale discovery library if we are running on OS X */
const sal_Char *aLocaleLibName = "libsalextra_x11osx_mxp.dylib";
const sal_Char *aGetOSXLocaleFunctionName = "macxp_getOSXLocale";
oslModule pLocaleLib;
void *pFunc;
int err;
pLocaleLib = osl_psz_loadModule( aLocaleLibName, SAL_LOADMODULE_DEFAULT );
if( pLocaleLib )
{
/* Grab a pointer to the locale function and call it */
pFunc = osl_psz_getSymbol( pLocaleLib, aGetOSXLocaleFunctionName );
if( pFunc )
{
pGetOSXLocale = ( int(*)(char *, sal_uInt32) )( pFunc );
locale = (char *)malloc( 20 );
if ( locale )
err = (*pGetOSXLocale)( locale, 20 );
else
fprintf( stderr, "nlsupport.c: locale allocation returned NULL!\n" );
}
else
fprintf( stderr, "Could not load the OS X locale discovery function! (%s)\n", aGetOSXLocaleFunctionName );
}
else
fprintf( stderr, "Could not load the OS X locale discovery library! (%s)\n", aLocaleLibName );
/* Let go of the module, we don't need it anymore */
osl_unloadModule( pLocaleLib );
}
}
/* handle the case where OS specific method of finding locale fails */
if ( NULL == locale )
{
/* simulate behavior of setlocale */
locale = getenv( "LC_ALL" );
if( NULL == locale )
locale = getenv( "LC_CTYPE" );
if( NULL == locale )
locale = getenv( "LANG" );
if( NULL == locale )
locale = "C";
}
/* return the locale */
*ppLocale = _parse_locale( locale );
#ifdef DEBUG
fprintf( stderr, "nlsupport.c: _imp_getProcessLocale() returning %s as current locale.\n", locale );
#endif
pthread_mutex_unlock( &aLocalMutex );
}
/*****************************************************************************/
/* set the current process locale
/*****************************************************************************/
int _imp_setProcessLocale( rtl_Locale * pLocale )
{
/* There is not yet any way to set the locale of a process
* on Darwin or MacOS X through BSD layer functions.
*
* On MacOS X locale and language are set by the user through
* the International pane of the System Preferences application.
*
* FIXME when this can be done.
*/
return 0;
}
/*****************************************************************************/
/* Get a charset name from a CoreFoundation text encoding number
/*****************************************************************************/
void macxp_ConvertCFEncodingToIANACharSetName( char *buffer, unsigned int bufferLen, CFStringEncoding cfEncoding )
{
switch( cfEncoding )
{
case 0: strncpy( buffer, "MACINTOSH", bufferLen-1 ); break; /* kCFStringEncodingMacRoman */
case 1: strncpy( buffer, "X-MAC-JAPANESE", bufferLen-1 ); break; /* kCFStringEncodingMacJapanese */
case 2: strncpy( buffer, "X-MAC-TRAD-CHINESE", bufferLen-1 ); break; /* kCFStringEncodingMacChineseTrad */
case 3: strncpy( buffer, "X-MAC-KOREAN", bufferLen-1 ); break; /* kCFStringEncodingMacKorean */
case 4: strncpy( buffer, "X-MAC-ARABIC", bufferLen-1 ); break; /* kCFStringEncodingMacArabic */
case 5: strncpy( buffer, "X-MAC-HEBREW", bufferLen-1 ); break; /* kCFStringEncodingMacHebrew */
case 6: strncpy( buffer, "X-MAC-GREEK", bufferLen-1 ); break; /* kCFStringEncodingMacGreek */
case 7: strncpy( buffer, "X-MAC-CYRILLIC", bufferLen-1 ); break; /* kCFStringEncodingMacCyrillic */
case 9: strncpy( buffer, "X-MAC-DEVANAGARI", bufferLen-1 ); break; /* kCFStringEncodingMacDevanagari */
case 10: strncpy( buffer, "X-MAC-GURMUKHI", bufferLen-1 ); break; /* kCFStringEncodingMacGurmukhi */
case 11: strncpy( buffer, "X-MAC-GUJARATI", bufferLen-1 ); break; /* kCFStringEncodingMacGujarati */
case 12: strncpy( buffer, "X-MAC-ORIYA", bufferLen-1 ); break; /* kCFStringEncodingMacOriya */
case 13: strncpy( buffer, "X-MAC-BENGALI", bufferLen-1 ); break; /* kCFStringEncodingMacBengali */
case 14: strncpy( buffer, "X-MAC-TAMIL", bufferLen-1 ); break; /* kCFStringEncodingMacTamil */
case 15: strncpy( buffer, "X-MAC-TELUGU", bufferLen-1 ); break; /* kCFStringEncodingMacTamil */
case 16: strncpy( buffer, "X-MAC-KANNADA", bufferLen-1 ); break; /* kCFStringEncodingMacKannada */
case 17: strncpy( buffer, "X-MAC-MALAYALAM", bufferLen-1 ); break; /* kCFStringEncodingMacMalayalam */
case 18: strncpy( buffer, "X-MAC-SINHALESE", bufferLen-1 ); break; /* kCFStringEncodingMacSinhalese */
case 19: strncpy( buffer, "X-MAC-BURMESE", bufferLen-1 ); break; /* kCFStringEncodingMacBurmese */
case 20: strncpy( buffer, "X-MAC-KHMER", bufferLen-1 ); break; /* kCFStringEncodingMacKhmer */
case 21: strncpy( buffer, "X-MAC-THAI", bufferLen-1 ); break; /* kCFStringEncodingMacThai */
case 22: strncpy( buffer, "X-MAC-LAOTIAN", bufferLen-1 ); break; /* kCFStringEncodingMacLaotian */
case 23: strncpy( buffer, "X-MAC-GEORGIAN", bufferLen-1 ); break; /* kCFStringEncodingMacGeorgian */
case 24: strncpy( buffer, "X-MAC-ARMENIAN", bufferLen-1 ); break; /* kCFStringEncodingMacArmenian */
case 25: strncpy( buffer, "X-MAC-SIMP-CHINESE", bufferLen-1 ); break; /* kCFStringEncodingMacChineseSimp */
case 26: strncpy( buffer, "X-MAC-TIBETAN", bufferLen-1 ); break; /* kCFStringEncodingMacTibetan */
case 27: strncpy( buffer, "X-MAC-MONGOLIAN", bufferLen-1 ); break; /* kCFStringEncodingMacMongolian */
case 28: strncpy( buffer, "X-MAC-ETHIOPIC", bufferLen-1 ); break; /* kCFStringEncodingMacEthiopic */
case 29: strncpy( buffer, "X-MAC-CENTRALEURROMAN", bufferLen-1 ); break; /* kCFStringEncodingMacCentralEurRoman */
case 30: strncpy( buffer, "X-MAC-VIETNAMESE", bufferLen-1 ); break; /* kCFStringEncodingMacVietnamese */
case 31: strncpy( buffer, "X-MAC-EXTARABIC", bufferLen-1 ); break; /* kCFStringEncodingMacExtArabic */
case 33: strncpy( buffer, "X-MAC-SYMBOL", bufferLen-1 ); break; /* kCFStringEncodingMacSymbol */
case 34: strncpy( buffer, "X-MAC-DINGBATS", bufferLen-1 ); break; /* kCFStringEncodingMacDingbats */
case 35: strncpy( buffer, "X-MAC-TURKISH", bufferLen-1 ); break; /* kCFStringEncodingMacTurkish */
case 36: strncpy( buffer, "X-MAC-CROATIAN", bufferLen-1 ); break; /* kCFStringEncodingMacCroatian */
case 37: strncpy( buffer, "X-MAC-ICELANDIC", bufferLen-1 ); break; /* kCFStringEncodingMacIcelandic */
case 38: strncpy( buffer, "X-MAC-ROMANIAN", bufferLen-1 ); break; /* kCFStringEncodingMacRomanian */
case 126: strncpy( buffer, "UNICODE-2-0", bufferLen-1 ); break; /* */
case 140: strncpy( buffer, "X-MAC-FARSI", bufferLen-1 ); break; /* kCFStringEncodingMacFarsi */
case 152: strncpy( buffer, "X-MAC-UKRAINIAN", bufferLen-1 ); break; /* kCFStringEncodingMacUkrainian */
case 252: strncpy( buffer, "X-MAC-VT100", bufferLen-1 ); break; /* kCFStringEncodingMacVT100 */
case 255: strncpy( buffer, "macintosh", bufferLen-1 ); break; /* kCFStringEncodingMacHFS */
case 256: strncpy( buffer, "UTF-16BE", bufferLen-1 ); break; /* kCFStringEncodingUnicode */
case 257: strncpy( buffer, "UNICODE-1-1", bufferLen-1 ); break; /* */
case 258: strncpy( buffer, "UNICODE-1-1", bufferLen-1 ); break; /* */
case 259: strncpy( buffer, "UNICODE-2-0", bufferLen-1 ); break; /* */
case 260: strncpy( buffer, "csUnicode", bufferLen-1 ); break; /* */
case 513: strncpy( buffer, "ISO-8859-1", bufferLen-1 ); break; /* kCFStringEncodingISOLatin1 */
case 514: strncpy( buffer, "ISO-8859-2", bufferLen-1 ); break; /* kCFStringEncodingISOLatin2 */
case 515: strncpy( buffer, "ISO-8859-3", bufferLen-1 ); break; /* kCFStringEncodingISOLatin3 */
case 516: strncpy( buffer, "ISO-8859-4", bufferLen-1 ); break; /* kCFStringEncodingISOLatin4 */
case 517: strncpy( buffer, "ISO-8859-5", bufferLen-1 ); break; /* kCFStringEncodingISOLatinCyrillic */
case 518: strncpy( buffer, "ISO-8859-6", bufferLen-1 ); break; /* kCFStringEncodingISOLatinArabic */
case 519: strncpy( buffer, "ISO-8859-7", bufferLen-1 ); break; /* kCFStringEncodingISOLatinGreek */
case 520: strncpy( buffer, "ISO-8859-8", bufferLen-1 ); break; /* kCFStringEncodingISOLatinHebrew */
case 521: strncpy( buffer, "ISO-8859-9", bufferLen-1 ); break; /* kCFStringEncodingISOLatin5 */
case 522: strncpy( buffer, "ISO-8859-10", bufferLen-1 ); break; /* kCFStringEncodingISOLatin6 */
case 523: strncpy( buffer, "ISO-8859-11", bufferLen-1 ); break; /* kCFStringEncodingISOLatinThai */
case 525: strncpy( buffer, "ISO-8859-13", bufferLen-1 ); break; /* kCFStringEncodingISOLatin7 */
case 526: strncpy( buffer, "ISO-8859-14", bufferLen-1 ); break; /* kCFStringEncodingISOLatin8 */
case 527: strncpy( buffer, "ISO-8859-15", bufferLen-1 ); break; /* kCFStringEncodingISOLatin9 */
case 1024: strncpy( buffer, "CP437", bufferLen-1 ); break; /* kCFStringEncodingDOSLatinUS */
case 1029: strncpy( buffer, "CP737", bufferLen-1 ); break; /* kCFStringEncodingDOSGreek */
case 1030: strncpy( buffer, "CP775", bufferLen-1 ); break; /* kCFStringEncodingDOSBalticRim */
case 1040: strncpy( buffer, "CP850", bufferLen-1 ); break; /* kCFStringEncodingDOSLatin1 */
case 1042: strncpy( buffer, "CP852", bufferLen-1 ); break; /* kCFStringEncodingDOSGreek1 */
case 1044: strncpy( buffer, "CP857", bufferLen-1 ); break; /* kCFStringEncodingDOSTurkish */
case 1046: strncpy( buffer, "CP861", bufferLen-1 ); break; /* kCFStringEncodingDOSIcelandic */
case 1049: strncpy( buffer, "cp864", bufferLen-1 ); break; /* kCFStringEncodingDOSArabic */
case 1051: strncpy( buffer, "CP866", bufferLen-1 ); break; /* kCFStringEncodingDOSRussian */
case 1053: strncpy( buffer, "CP874", bufferLen-1 ); break; /* kCFStringEncodingDOSThai */
case 1056: strncpy( buffer, "CP932", bufferLen-1 ); break; /* kCFStringEncodingDOSJapanese */
case 1057: strncpy( buffer, "CP936", bufferLen-1 ); break; /* kCFStringEncodingDOSChineseSimplif */
case 1058: strncpy( buffer, "CP949", bufferLen-1 ); break; /* kCFStringEncodingDOSKorean */
case 1059: strncpy( buffer, "CP950", bufferLen-1 ); break; /* kCFStringEncodingDOSChineseTrad */
case 1280: strncpy( buffer, "WINDOWS-1252", bufferLen-1 ); break; /* kCFStringEncodingWindowsLatin1 */
case 1281: strncpy( buffer, "WINDOWS-1250", bufferLen-1 ); break; /* kCFStringEncodingWindowsLatin2 */
case 1282: strncpy( buffer, "WINDOWS-1251", bufferLen-1 ); break; /* kCFStringEncodingWindowsCyrillic */
case 1283: strncpy( buffer, "WINDOWS-1253", bufferLen-1 ); break; /* kCFStringEncodingWindowsGreek */
case 1284: strncpy( buffer, "WINDOWS-1254", bufferLen-1 ); break; /* kCFStringEncodingWindowsLatin5 */
case 1285: strncpy( buffer, "WINDOWS-1255", bufferLen-1 ); break; /* kCFStringEncodingWindowsHebrew */
case 1286: strncpy( buffer, "WINDOWS-1256", bufferLen-1 ); break; /* kCFStringEncodingWindowsArabic */
case 1287: strncpy( buffer, "WINDOWS-1257", bufferLen-1 ); break; /* kCFStringEncodingWindowsBalticRim */
case 1288: strncpy( buffer, "WINDOWS-1258", bufferLen-1 ); break; /* kCFStringEncodingWindowsVietnamese */
case 1536: strncpy( buffer, "US-ASCII", bufferLen-1 ); break; /* kCFStringEncodingASCII */
case 1570: strncpy( buffer, "JIS_C6226-1983", bufferLen-1 ); break; /* kCFStringEncodingJIS_X0208_90 */
case 1584: strncpy( buffer, "csISO58GB231280", bufferLen-1 ); break; /* kCFStringEncodingGB_2312_80 */
case 1585: strncpy( buffer, "X-GBK", bufferLen-1 ); break; /* kCFStringEncodingGBK_95 */
case 1600: strncpy( buffer, "csKSC56011987", bufferLen-1 ); break; /* kCFStringEncodingKSC_5601_87 */
case 2080: strncpy( buffer, "ISO-2022-JP", bufferLen-1 ); break; /* kCFStringEncodingISO_2022_JP */
case 2096: strncpy( buffer, "ISO-2022-CN", bufferLen-1 ); break; /* kCFStringEncodingISO_2022_CN */
case 2097: strncpy( buffer, "ISO-2022-CN-EXT", bufferLen-1 ); break; /* kCFStringEncodingISO_2022_CN_EXT */
case 2112: strncpy( buffer, "ISO-2022-KR", bufferLen-1 ); break; /* kCFStringEncodingISO_2022_KR */
case 2336: strncpy( buffer, "EUC-JP", bufferLen-1 ); break; /* kCFStringEncodingEUC_JP */
case 2352: strncpy( buffer, "EUC-CN", bufferLen-1 ); break; /* kCFStringEncodingEUC_CN */
case 2353: strncpy( buffer, "EUC-TW", bufferLen-1 ); break; /* kCFStringEncodingEUC_TW */
case 2368: strncpy( buffer, "EUC-KR", bufferLen-1 ); break; /* kCFStringEncodingEUC_KR */
case 2561: strncpy( buffer, "SHIFT_JIS", bufferLen-1 ); break; /* kCFStringEncodingShiftJIS */
case 2562: strncpy( buffer, "KOI8-R", bufferLen-1 ); break; /* kCFStringEncodingKOI8_R */
case 2563: strncpy( buffer, "BIG5", bufferLen-1 ); break; /* kCFStringEncodingBig5 */
case 2564: strncpy( buffer, "X-MAC-ROMAN-LATIN1", bufferLen-1 ); break; /* kCFStringEncodingMacRomanLatin1 */
case 2565: strncpy( buffer, "HZ-GB-2312", bufferLen-1 ); break; /* kCFStringEncodingHZ_GB_2312 */
case 2566: strncpy( buffer, "Big5-HKSCS", bufferLen-1 ); break; /* kCFStringEncodingBig5_HKSCS_1999 */
case 2817: strncpy( buffer, "X-NEXTSTEP", bufferLen-1 ); break; /* kCFStringEncodingNextStepLatin */
case 3074: strncpy( buffer, "cp037", bufferLen-1 ); break; /* kCFStringEncodingEBCDIC_CP037 */
default: strncpy( buffer, "", bufferLen-1 ); break; /* Not listed */
}
}
#endif /* ifndef MACOSX */
#else /* ifdef LINUX || SOLARIS || MACOSX || NETBSD */ #else /* ifdef LINUX || SOLARIS || MACOSX || NETBSD */
/* /*
...@@ -1115,6 +693,7 @@ void macxp_ConvertCFEncodingToIANACharSetName( char *buffer, unsigned int buffer ...@@ -1115,6 +693,7 @@ void macxp_ConvertCFEncodingToIANACharSetName( char *buffer, unsigned int buffer
*/ */
const _pair _full_locale_list[] = { const _pair _full_locale_list[] = {
{ "ja_JP.eucJP", RTL_TEXTENCODING_EUC_JP },
{ "ja_JP.EUC", RTL_TEXTENCODING_EUC_JP }, { "ja_JP.EUC", RTL_TEXTENCODING_EUC_JP },
{ "ko_KR.EUC", RTL_TEXTENCODING_EUC_KR }, { "ko_KR.EUC", RTL_TEXTENCODING_EUC_KR },
{ "zh_CN.EUC", RTL_TEXTENCODING_EUC_CN }, { "zh_CN.EUC", RTL_TEXTENCODING_EUC_CN },
...@@ -1170,6 +749,7 @@ const _pair _iso_language_list[] = { ...@@ -1170,6 +749,7 @@ const _pair _iso_language_list[] = {
{ "fo", RTL_TEXTENCODING_ISO_8859_1 }, { "fo", RTL_TEXTENCODING_ISO_8859_1 },
{ "fr", RTL_TEXTENCODING_ISO_8859_1 }, { "fr", RTL_TEXTENCODING_ISO_8859_1 },
{ "gr", RTL_TEXTENCODING_ISO_8859_7 }, { "gr", RTL_TEXTENCODING_ISO_8859_7 },
{ "he", RTL_TEXTENCODING_ISO_8859_8 },
{ "hi", RTL_TEXTENCODING_DONTKNOW }, { "hi", RTL_TEXTENCODING_DONTKNOW },
{ "hr", RTL_TEXTENCODING_ISO_8859_2 }, { "hr", RTL_TEXTENCODING_ISO_8859_2 },
{ "hu", RTL_TEXTENCODING_ISO_8859_2 }, { "hu", RTL_TEXTENCODING_ISO_8859_2 },
...@@ -1267,7 +847,99 @@ rtl_TextEncoding osl_getTextEncodingFromLocale( rtl_Locale * pLocale ) ...@@ -1267,7 +847,99 @@ rtl_TextEncoding osl_getTextEncodingFromLocale( rtl_Locale * pLocale )
return RTL_TEXTENCODING_DONTKNOW; return RTL_TEXTENCODING_DONTKNOW;
} }
#ifdef MACOSX
#include <premac.h>
#include <CoreFoundation/CoreFoundation.h>
#include <postmac.h>
/* OS X locale discovery function from dylib */
int (*pGetOSXLocale)( char *, sal_uInt32 );
/*****************************************************************************/
/* return the current process locale
/*****************************************************************************/
void _imp_getProcessLocale( rtl_Locale ** ppLocale )
{
static const char *locale = NULL;
/* basic thread safeness */
// pthread_mutex_lock( &aLocalMutex );
/* Only fetch the locale once and cache it */
if ( NULL == locale )
{
unsigned int isDarwin;
unsigned int majorVersion;
unsigned int minorVersion;
unsigned int minorMinorVersion;
/* If running on OS X, attempt to fetch the locale using CoreServices calls. */
macxp_getSystemVersion( &isDarwin, &majorVersion, &minorVersion, &minorMinorVersion );
if( !isDarwin )
{
/* Load the locale discovery library if we are running on OS X */
const sal_Char *aLocaleLibName = "libsalextra_x11osx_mxp.dylib";
const sal_Char *aGetOSXLocaleFunctionName = "macxp_getOSXLocale";
oslModule pLocaleLib;
void *pFunc;
int err;
pLocaleLib = osl_psz_loadModule( aLocaleLibName, SAL_LOADMODULE_DEFAULT );
if( pLocaleLib )
{
/* Grab a pointer to the locale function and call it */
pFunc = osl_psz_getSymbol( pLocaleLib, aGetOSXLocaleFunctionName );
if( pFunc )
{
pGetOSXLocale = ( int(*)(char *, sal_uInt32) )( pFunc );
locale = (char *)malloc( 20 );
if ( locale )
err = (*pGetOSXLocale)( locale, 20 );
else
fprintf( stderr, "nlsupport.c: locale allocation returned NULL!\n" );
}
else
fprintf( stderr, "Could not load the OS X locale discovery function! (%s)\n", aGetOSXLocaleFunctionName );
}
else
fprintf( stderr, "Could not load the OS X locale discovery library! (%s)\n", aLocaleLibName );
/* Let go of the module, we don't need it anymore */
osl_unloadModule( pLocaleLib );
}
}
/* handle the case where OS specific method of finding locale fails */
if ( NULL == locale )
{
/* simulate behavior of setlocale */
locale = getenv( "LC_ALL" );
if( NULL == locale )
locale = getenv( "LC_CTYPE" );
if( NULL == locale )
locale = getenv( "LANG" );
if( NULL == locale )
locale = "C";
}
/* return the locale */
*ppLocale = _parse_locale( locale );
setenv( "LC_ALL", locale, 1);
setenv("LC_CTYPE", locale, 1 );
setenv("LANG", locale, 1 );
#ifdef DEBUG
fprintf( stderr, "nlsupport.c: _imp_getProcessLocale() returning %s as current locale.\n", locale );
#endif
// pthread_mutex_unlock( &aLocalMutex );
}
#else
/*****************************************************************************/ /*****************************************************************************/
/* return the current process locale /* return the current process locale
/*****************************************************************************/ /*****************************************************************************/
...@@ -1288,6 +960,7 @@ void _imp_getProcessLocale( rtl_Locale ** ppLocale ) ...@@ -1288,6 +960,7 @@ void _imp_getProcessLocale( rtl_Locale ** ppLocale )
*ppLocale = _parse_locale( locale ); *ppLocale = _parse_locale( locale );
} }
#endif
/*****************************************************************************/ /*****************************************************************************/
/* set the current process locale /* set the current process locale
...@@ -1309,7 +982,7 @@ int _imp_setProcessLocale( rtl_Locale * pLocale ) ...@@ -1309,7 +982,7 @@ int _imp_setProcessLocale( rtl_Locale * pLocale )
snprintf(env_buf, sizeof(env_buf), "LC_ALL=%s", locale_buf); snprintf(env_buf, sizeof(env_buf), "LC_ALL=%s", locale_buf);
env_buf[sizeof(env_buf)] = '\0'; env_buf[sizeof(env_buf)] = '\0';
putenv(env_buf); putenv(env_buf);
#elif defined( FREEBSD ) || defined( NETBSD ) #elif defined( FREEBSD ) || defined( NETBSD ) || defined( MACOSX )
setenv( "LC_ALL", locale_buf, 1); setenv( "LC_ALL", locale_buf, 1);
#else #else
setenv( "LC_ALL", locale_buf ); setenv( "LC_ALL", locale_buf );
...@@ -1321,7 +994,7 @@ int _imp_setProcessLocale( rtl_Locale * pLocale ) ...@@ -1321,7 +994,7 @@ int _imp_setProcessLocale( rtl_Locale * pLocale )
snprintf(env_buf, sizeof(env_buf), "LC_CTYPE=%s", locale_buf); snprintf(env_buf, sizeof(env_buf), "LC_CTYPE=%s", locale_buf);
env_buf[sizeof(env_buf)] = '\0'; env_buf[sizeof(env_buf)] = '\0';
putenv(env_buf); putenv(env_buf);
#elif defined( FREEBSD ) || defined( NETBSD ) #elif defined( FREEBSD ) || defined( NETBSD ) || defined( MACOSX )
setenv("LC_CTYPE", locale_buf, 1 ); setenv("LC_CTYPE", locale_buf, 1 );
#else #else
setenv( "LC_CTYPE", locale_buf ); setenv( "LC_CTYPE", locale_buf );
...@@ -1333,7 +1006,7 @@ int _imp_setProcessLocale( rtl_Locale * pLocale ) ...@@ -1333,7 +1006,7 @@ int _imp_setProcessLocale( rtl_Locale * pLocale )
snprintf(env_buf, sizeof(env_buf), "LANG=%s", locale_buf); snprintf(env_buf, sizeof(env_buf), "LANG=%s", locale_buf);
env_buf[sizeof(env_buf)] = '\0'; env_buf[sizeof(env_buf)] = '\0';
putenv(env_buf); putenv(env_buf);
#elif defined( FREEBSD ) || defined( NETBSD ) #elif defined( FREEBSD ) || defined( NETBSD ) || defined( MACOSX )
setenv("LC_CTYPE", locale_buf, 1 ); setenv("LC_CTYPE", locale_buf, 1 );
#else #else
setenv( "LANG", locale_buf ); setenv( "LANG", locale_buf );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment