Lines 63-72
Link Here
|
63 |
#include <osl/diagnose.h> |
63 |
#include <osl/diagnose.h> |
64 |
#include <osl/process.h> |
64 |
#include <osl/process.h> |
65 |
|
65 |
|
66 |
#if defined(LINUX) || defined(SOLARIS) || defined(IRIX) || defined(NETBSD) |
66 |
#if defined(LINUX) || defined(SOLARIS) || defined(IRIX) || defined(NETBSD) || defined(MACOSX) |
67 |
#include <pthread.h> |
67 |
#include <pthread.h> |
|
|
68 |
#ifndef MACOSX |
68 |
#include <locale.h> |
69 |
#include <locale.h> |
69 |
#include <langinfo.h> |
70 |
#include <langinfo.h> |
|
|
71 |
#else |
72 |
#ifdef BUILD_OS_APPLEOSX |
73 |
#include <jni.h> |
74 |
#endif |
75 |
#endif |
70 |
#endif |
76 |
#endif |
71 |
|
77 |
|
72 |
/*****************************************************************************/ |
78 |
/*****************************************************************************/ |
Lines 241-247
Link Here
|
241 |
return NULL; |
247 |
return NULL; |
242 |
} |
248 |
} |
243 |
|
249 |
|
244 |
#if defined(LINUX) || defined(SOLARIS) || defined(IRIX) || defined(NETBSD) |
250 |
#if defined(LINUX) || defined(SOLARIS) || defined(IRIX) || defined(NETBSD) || defined(MACOSX) |
245 |
|
251 |
|
246 |
/* |
252 |
/* |
247 |
* This implementation of osl_getTextEncodingFromLocale maps |
253 |
* This implementation of osl_getTextEncodingFromLocale maps |
Lines 315-321
Link Here
|
315 |
{ "sjis", RTL_TEXTENCODING_SHIFT_JIS }, /* Japan */ |
321 |
{ "sjis", RTL_TEXTENCODING_SHIFT_JIS }, /* Japan */ |
316 |
}; |
322 |
}; |
317 |
|
323 |
|
318 |
#elif defined(LINUX) || defined(NETBSD) |
324 |
#elif defined(LINUX) || defined(NETBSD) || defined(MACOSX) |
319 |
|
325 |
|
320 |
const _pair _nl_language_list[] = { |
326 |
const _pair _nl_language_list[] = { |
321 |
{ "ANSI_X3.110-1983", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-99 NAPLPS */ |
327 |
{ "ANSI_X3.110-1983", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-99 NAPLPS */ |
Lines 496-505
Link Here
|
496 |
{ "WIN-SAMI-2", RTL_TEXTENCODING_DONTKNOW } /* WS2 */ |
502 |
{ "WIN-SAMI-2", RTL_TEXTENCODING_DONTKNOW } /* WS2 */ |
497 |
}; |
503 |
}; |
498 |
|
504 |
|
499 |
#endif /* ifdef LINUX || NETBSD */ |
505 |
#endif /* ifdef LINUX || NETBSD || MACOSX */ |
|
|
506 |
|
507 |
#ifdef MACOSX |
508 |
/* MacOS X has some special names for some of its encodings. These encoding names are |
509 |
* returned by CFStringConvertEncodingToIANACharSetName() when given a CFTextEncoding |
510 |
* argument from one of the ones in CFStringEncodingExt.h in the CoreFoundation framework. |
511 |
*/ |
512 |
const _pair _macxp_language_list[] = { |
513 |
{ "X-MAC-JAPANESE", RTL_TEXTENCODING_EUC_JP }, /* kCFStringEncodingMacJapanese */ |
514 |
{ "X-MAC-TRAD-CHINESE", RTL_TEXTENCODING_APPLE_CHINTRAD }, /* kCFStringEncodingMacChineseTrad */ |
515 |
{ "X-MAC-KOREAN", RTL_TEXTENCODING_EUC_KR }, /* kCFStringEncodingMacKorean */ |
516 |
{ "X-MAC-ARABIC", RTL_TEXTENCODING_APPLE_ARABIC }, /* kCFStringEncodingMacArabic */ |
517 |
{ "X-MAC-HEBREW", RTL_TEXTENCODING_APPLE_HEBREW }, /* kCFStringEncodingMacHebrew */ |
518 |
{ "X-MAC-GREEK", RTL_TEXTENCODING_APPLE_GREEK }, /* kCFStringEncodingMacGreek */ |
519 |
{ "X-MAC-CYRILLIC", RTL_TEXTENCODING_APPLE_CYRILLIC }, /* kCFStringEncodingMacCyrillic */ |
520 |
{ "X-MAC-DEVANAGARI", RTL_TEXTENCODING_APPLE_DEVANAGARI }, /* kCFStringEncodingMacDevanagari */ |
521 |
{ "X-MAC-GURMUKHI", RTL_TEXTENCODING_APPLE_GURMUKHI }, /* kCFStringEncodingMacGurmukhi */ |
522 |
{ "X-MAC-GUJARATI", RTL_TEXTENCODING_APPLE_GUJARATI }, /* kCFStringEncodingMacGujarati */ |
523 |
{ "X-MAC-ORIYA", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacOriya */ |
524 |
{ "X-MAC-BENGALI", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacBengali */ |
525 |
{ "X-MAC-TAMIL", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacTamil */ |
526 |
{ "X-MAC-TELUGU", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacTelugu */ |
527 |
{ "X-MAC-KANNADA", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacKannada */ |
528 |
{ "X-MAC-MALAYALAM", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacMalayalam */ |
529 |
{ "X-MAC-SINHALESE", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacSinhalese */ |
530 |
{ "X-MAC-BURMESE", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacBurmese */ |
531 |
{ "X-MAC-KHMER", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacKhmer */ |
532 |
{ "X-MAC-THAI", RTL_TEXTENCODING_APPLE_THAI }, /* kCFStringEncodingMacThai */ |
533 |
{ "X-MAC-LAOTIAN", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacLaotian */ |
534 |
{ "X-MAC-GEORGIAN", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacGeorgian */ |
535 |
{ "X-MAC-ARMENIAN", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacArmenian */ |
536 |
{ "X-MAC-SIMP-CHINESE", RTL_TEXTENCODING_APPLE_CHINSIMP }, /* kCFStringEncodingMacChineseSimp */ |
537 |
{ "X-MAC-TIBETAN", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacTibetan */ |
538 |
{ "X-MAC-MONGOLIAN", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacMongolian */ |
539 |
{ "X-MAC-ETHIOPIC", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacEthiopic */ |
540 |
{ "X-MAC-CENTRALEURROMAN", RTL_TEXTENCODING_APPLE_CENTEURO }, /* kCFStringEncodingMacCentralEurRoman */ |
541 |
{ "X-MAC-VIETNAMESE", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacVietnamese */ |
542 |
{ "X-MAC-EXTARABIC", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacExtArabic */ |
543 |
{ "X-MAC-SYMBOL", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacSymbol */ |
544 |
{ "X-MAC-DINGBATS", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacDingbats */ |
545 |
{ "X-MAC-TURKISH", RTL_TEXTENCODING_APPLE_TURKISH }, /* kCFStringEncodingMacTurkish */ |
546 |
{ "X-MAC-CROATIAN", RTL_TEXTENCODING_APPLE_CROATIAN }, /* kCFStringEncodingMacCroatian */ |
547 |
{ "X-MAC-ICELANDIC", RTL_TEXTENCODING_APPLE_ICELAND }, /* kCFStringEncodingMacIcelandic */ |
548 |
{ "X-MAC-ROMANIAN", RTL_TEXTENCODING_APPLE_ROMANIAN }, /* kCFStringEncodingMacRomanian */ |
549 |
{ "UNICODE-2-0", RTL_TEXTENCODING_DONTKNOW }, /* */ |
550 |
{ "X-MAC-FARSI", RTL_TEXTENCODING_APPLE_FARSI }, /* kCFStringEncodingMacFarsi */ |
551 |
{ "X-MAC-UKRAINIAN", RTL_TEXTENCODING_APPLE_UKRAINIAN }, /* kCFStringEncodingMacUkrainian */ |
552 |
{ "X-MAC-VT100", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacVT100 */ |
553 |
{ "macintosh", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacHFS */ |
554 |
{ "UTF-16BE", RTL_TEXTENCODING_UNICODE }, /* kCFStringEncodingUnicode */ |
555 |
{ "UNICODE-1-1", RTL_TEXTENCODING_DONTKNOW }, /* */ |
556 |
{ "UNICODE-1-1", RTL_TEXTENCODING_DONTKNOW }, /* */ |
557 |
{ "UNICODE-2-0", RTL_TEXTENCODING_DONTKNOW }, /* */ |
558 |
{ "csUnicode", RTL_TEXTENCODING_DONTKNOW }, /* */ |
559 |
{ "CP437", RTL_TEXTENCODING_IBM_437 }, /* kCFStringEncodingDOSLatinUS */ |
560 |
{ "CP737", RTL_TEXTENCODING_IBM_737 }, /* kCFStringEncodingDOSGreek */ |
561 |
{ "CP775", RTL_TEXTENCODING_IBM_775 }, /* kCFStringEncodingDOSBalticRim */ |
562 |
{ "CP850", RTL_TEXTENCODING_IBM_850 }, /* kCFStringEncodingDOSLatin1 */ |
563 |
{ "CP852", RTL_TEXTENCODING_IBM_852 }, /* kCFStringEncodingDOSGreek1 */ |
564 |
{ "CP857", RTL_TEXTENCODING_IBM_857 }, /* kCFStringEncodingDOSTurkish */ |
565 |
{ "CP861", RTL_TEXTENCODING_IBM_861 }, /* kCFStringEncodingDOSIcelandic */ |
566 |
{ "cp864", RTL_TEXTENCODING_IBM_864 }, /* kCFStringEncodingDOSArabic */ |
567 |
{ "CP866", RTL_TEXTENCODING_IBM_866 }, /* kCFStringEncodingDOSRussian */ |
568 |
{ "CP874", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingDOSThai */ |
569 |
{ "CP932", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingDOSJapanese */ |
570 |
{ "CP936", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingDOSChineseSimplif */ |
571 |
{ "CP949", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingDOSKorean */ |
572 |
{ "CP950", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingDOSChineseTrad */ |
573 |
{ "WINDOWS-1252", RTL_TEXTENCODING_MS_1252 }, /* kCFStringEncodingWindowsLatin1 */ |
574 |
{ "WINDOWS-1250", RTL_TEXTENCODING_MS_1250 }, /* kCFStringEncodingWindowsLatin2 */ |
575 |
{ "WINDOWS-1251", RTL_TEXTENCODING_MS_1251 }, /* kCFStringEncodingWindowsCyrillic */ |
576 |
{ "WINDOWS-1253", RTL_TEXTENCODING_MS_1253 }, /* kCFStringEncodingWindowsGreek */ |
577 |
{ "WINDOWS-1254", RTL_TEXTENCODING_MS_1254 }, /* kCFStringEncodingWindowsLatin5 */ |
578 |
{ "WINDOWS-1255", RTL_TEXTENCODING_MS_1255 }, /* kCFStringEncodingWindowsHebrew */ |
579 |
{ "WINDOWS-1256", RTL_TEXTENCODING_MS_1256 }, /* kCFStringEncodingWindowsArabic */ |
580 |
{ "WINDOWS-1257", RTL_TEXTENCODING_MS_1257 }, /* kCFStringEncodingWindowsBalticRim */ |
581 |
{ "WINDOWS-1258", RTL_TEXTENCODING_MS_1258 }, /* kCFStringEncodingWindowsVietnamese */ |
582 |
{ "US-ASCII", RTL_TEXTENCODING_ASCII_US }, /* kCFStringEncodingASCII */ |
583 |
{ "JIS_C6226-1983", RTL_TEXTENCODING_GB_2312 }, /* kCFStringEncodingJIS_X0208_90 */ |
584 |
{ "csISO58GB231280", RTL_TEXTENCODING_GB_2312 }, /* kCFStringEncodingGB_2312_80 */ |
585 |
{ "X-GBK", RTL_TEXTENCODING_GBK }, /* kCFStringEncodingGBK_95 */ |
586 |
{ "csKSC56011987", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingKSC_5601_87 */ |
587 |
{ "ISO-2022-JP", RTL_TEXTENCODING_ISO_2022_JP }, /* kCFStringEncodingISO_2022_JP */ |
588 |
{ "ISO-2022-CN", RTL_TEXTENCODING_ISO_2022_CN }, /* kCFStringEncodingISO_2022_CN */ |
589 |
{ "ISO-2022-CN-EXT", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingISO_2022_CN_EXT */ |
590 |
{ "ISO-2022-KR", RTL_TEXTENCODING_ISO_2022_KR }, /* kCFStringEncodingISO_2022_KR */ |
591 |
{ "EUC-JP", RTL_TEXTENCODING_EUC_JP }, /* kCFStringEncodingEUC_JP */ |
592 |
{ "EUC-CN", RTL_TEXTENCODING_EUC_CN }, /* kCFStringEncodingEUC_CN */ |
593 |
{ "EUC-TW", RTL_TEXTENCODING_EUC_TW }, /* kCFStringEncodingEUC_TW */ |
594 |
{ "EUC-KR", RTL_TEXTENCODING_EUC_KR }, /* kCFStringEncodingEUC_KR */ |
595 |
{ "SHIFT_JIS", RTL_TEXTENCODING_SHIFT_JIS }, /* kCFStringEncodingShiftJIS */ |
596 |
{ "KOI8-R", RTL_TEXTENCODING_KOI8_R }, /* kCFStringEncodingKOI8_R */ |
597 |
{ "X-MAC-ROMAN-LATIN1", RTL_TEXTENCODING_APPLE_ROMAN }, /* kCFStringEncodingMacRomanLatin1 */ |
598 |
{ "HZ-GB-2312", RTL_TEXTENCODING_GB_2312 }, /* kCFStringEncodingHZ_GB_2312 */ |
599 |
{ "Big5-HKSCS", RTL_TEXTENCODING_BIG5_HKSCS }, /* kCFStringEncodingBig5_HKSCS_1999 */ |
600 |
{ "X-NEXTSTEP", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingNextStepLatin */ |
601 |
{ "cp037", RTL_TEXTENCODING_DONTKNOW } /* kCFStringEncodingEBCDIC_CP037 */ |
602 |
/* ___________ Add more encodings here ___________ */ |
603 |
}; |
604 |
#endif /* ifdef MACOSX */ |
500 |
|
605 |
|
501 |
static pthread_mutex_t aLocalMutex = PTHREAD_MUTEX_INITIALIZER; |
606 |
static pthread_mutex_t aLocalMutex = PTHREAD_MUTEX_INITIALIZER; |
502 |
|
607 |
|
|
|
608 |
#ifndef MACOSX |
503 |
/*****************************************************************************/ |
609 |
/*****************************************************************************/ |
504 |
/* return the text encoding corresponding to the given locale |
610 |
/* return the text encoding corresponding to the given locale |
505 |
/*****************************************************************************/ |
611 |
/*****************************************************************************/ |
Lines 577-584
Link Here
|
577 |
|
683 |
|
578 |
void _imp_getProcessLocale( rtl_Locale ** ppLocale ) |
684 |
void _imp_getProcessLocale( rtl_Locale ** ppLocale ) |
579 |
{ |
685 |
{ |
|
|
686 |
|
580 |
char * locale; |
687 |
char * locale; |
581 |
|
688 |
|
582 |
/* basic thread safeness */ |
689 |
/* basic thread safeness */ |
583 |
pthread_mutex_lock( &aLocalMutex ); |
690 |
pthread_mutex_lock( &aLocalMutex ); |
584 |
|
691 |
|
Lines 618-655
Link Here
|
618 |
return ret; |
725 |
return ret; |
619 |
} |
726 |
} |
620 |
|
727 |
|
621 |
#elif defined(MACOSX) /* ifdef LINUX || SOLARIS || NETBSD */ |
728 |
#else /* ifndef MACOSX */ |
622 |
|
729 |
|
623 |
/* |
730 |
/* |
624 |
* FIXME: the MacOS X implemetation is missing |
731 |
* |
|
|
732 |
* MacOS X specific Locale manipulation code |
733 |
* |
625 |
*/ |
734 |
*/ |
626 |
|
735 |
|
|
|
736 |
#include <premac.h> |
737 |
#include <CoreFoundation/CoreFoundation.h> |
738 |
#include <postmac.h> |
739 |
|
740 |
void macxp_ConvertCFEncodingToIANACharSetName( char *buffer, unsigned int bufferLen, CFStringEncoding cfEncoding ); |
741 |
|
627 |
/*****************************************************************************/ |
742 |
/*****************************************************************************/ |
628 |
/* return the text encoding corresponding to the given locale |
743 |
/* return the text encoding corresponding to the given locale |
629 |
/*****************************************************************************/ |
744 |
/*****************************************************************************/ |
630 |
|
|
|
631 |
rtl_TextEncoding osl_getTextEncodingFromLocale( rtl_Locale * pLocale ) |
745 |
rtl_TextEncoding osl_getTextEncodingFromLocale( rtl_Locale * pLocale ) |
632 |
{ |
746 |
{ |
633 |
return RTL_TEXTENCODING_DONTKNOW; |
747 |
const _pair *pLanguage = NULL; |
|
|
748 |
char sEncoding[ 64 ] = ""; |
749 |
CFStringEncoding sCFSysEncoding; |
750 |
CFStringRef sCFEncodingName; |
751 |
const unsigned int macxpListMembers = sizeof(_macxp_language_list) / sizeof(_pair); |
752 |
const unsigned int otherListMembers = sizeof(_nl_language_list) / sizeof(_pair); |
753 |
|
754 |
/* For retrieving the CoreFoundation text encoding, the process goes like |
755 |
* this: |
756 |
* 1) On MacOS X this will be the first language listed in the |
757 |
* Language tab of the International preference pane. |
758 |
* 2) On Darwin 5 the value is currently hardwired to |
759 |
* kCFStringEncodingMacRoman. |
760 |
*/ |
761 |
sCFSysEncoding = CFStringGetSystemEncoding(); |
762 |
#ifdef BUILD_OS_APPLEOSX |
763 |
/* Use MacOS X routines to get the charset name for us */ |
764 |
sCFEncodingName = CFStringConvertEncodingToIANACharSetName( sCFSysEncoding ); |
765 |
CFStringGetCString( sCFEncodingName, sEncoding, 32, sCFSysEncoding); |
766 |
#else |
767 |
/* |
768 |
* Darwin doesn't have a CFStringConvertEncodingToIANACharSetName(), |
769 |
* so we call our own replacement |
770 |
*/ |
771 |
macxp_ConvertCFEncodingToIANACharSetName( sEncoding, 32, sCFSysEncoding ); |
772 |
#endif |
773 |
|
774 |
/* Try the Mac-specific list first, then non-Mac list (picks up MACINTOSH from non-Mac list) */ |
775 |
pLanguage = _pair_search( sEncoding, _macxp_language_list, macxpListMembers ); |
776 |
if ( pLanguage == NULL ) |
777 |
pLanguage = _pair_search( sEncoding, _nl_language_list, otherListMembers ); |
778 |
|
779 |
OSL_ASSERT( pLanguage && ( RTL_TEXTENCODING_DONTKNOW != pLanguage->value ) ); |
780 |
|
781 |
/* |
782 |
* a matching item in our list provides a mapping from codeset to |
783 |
* rtl-codeset |
784 |
*/ |
785 |
if ( pLanguage != NULL ) |
786 |
return pLanguage->value; |
787 |
|
788 |
return RTL_TEXTENCODING_DONTKNOW; |
634 |
} |
789 |
} |
635 |
|
790 |
|
636 |
/*****************************************************************************/ |
791 |
/*****************************************************************************/ |
637 |
/* return the current process locale |
792 |
/* return the current process locale |
638 |
/*****************************************************************************/ |
793 |
/*****************************************************************************/ |
639 |
|
|
|
640 |
void _imp_getProcessLocale( rtl_Locale ** ppLocale ) |
794 |
void _imp_getProcessLocale( rtl_Locale ** ppLocale ) |
641 |
{ |
795 |
{ |
642 |
*ppLocale = _parse_locale( "C" ); |
796 |
#ifdef BUILD_OS_APPLEOSX |
|
|
797 |
static const char *locale = NULL; |
798 |
JNIEnv *env = NULL; |
799 |
JavaVM *jvm = NULL; |
800 |
JavaVMInitArgs vm_args; |
801 |
jclass aClass = NULL; |
802 |
jmethodID aMethod = NULL; |
803 |
jobject aLocale = NULL; |
804 |
jstring sLocale = NULL; |
805 |
jboolean bCopy = JNI_TRUE; |
806 |
#endif /* ifdef BUILD_OS_APPLEOSX */ |
807 |
|
808 |
/* basic thread safeness */ |
809 |
pthread_mutex_lock( &aLocalMutex ); |
810 |
|
811 |
#ifdef BUILD_OS_APPLEOSX |
812 |
/* Only fetch the locale once and cache it */ |
813 |
if ( NULL == locale ) |
814 |
{ |
815 |
/* specify Java 2 */ |
816 |
vm_args.version = JNI_VERSION_1_2; |
817 |
vm_args.options = NULL; |
818 |
vm_args.nOptions = 0; |
819 |
vm_args.ignoreUnrecognized = JNI_TRUE; |
820 |
|
821 |
/* get default JVM args */ |
822 |
JNI_GetDefaultJavaVMInitArgs( &vm_args ); |
823 |
|
824 |
/* create the Java VM */ |
825 |
if ( JNI_CreateJavaVM( &jvm, (void *)&env, &vm_args ) == JNI_OK ) |
826 |
{ |
827 |
/* get the current locale */ |
828 |
aClass = (*env)->FindClass( env, "java.util.Locale" ); |
829 |
if ( aClass ) |
830 |
aMethod = (*env)->GetStaticMethodID( env, aClass, "getDefault", "()Ljava/util/Locale;" ); |
831 |
if ( aMethod ) |
832 |
aLocale = (*env)->CallStaticObjectMethod( env, aClass, aMethod ); |
833 |
if ( aClass ) |
834 |
aMethod = (*env)->GetMethodID( env, aClass, "toString", "()Ljava/lang/String;" ); |
835 |
if ( aMethod ) |
836 |
sLocale = (jstring)( (*env)->CallObjectMethod( env, aLocale, aMethod) ); |
837 |
if ( sLocale ) |
838 |
locale = (*env)->GetStringUTFChars( env, sLocale, &bCopy ); |
839 |
|
840 |
/* Destroy the JVM */ |
841 |
(*jvm)->DestroyJavaVM( jvm ); |
842 |
} |
843 |
#endif /* ifdef BUILD_OS_APPLEOSX */ |
844 |
|
845 |
/* handle the case where the Java method of finding locale fails */ |
846 |
if ( NULL == locale ) |
847 |
{ |
848 |
/* simulate behavior of setlocale */ |
849 |
locale = getenv( "LC_ALL" ); |
850 |
|
851 |
if( NULL == locale ) |
852 |
locale = getenv( "LC_CTYPE" ); |
853 |
|
854 |
if( NULL == locale ) |
855 |
locale = getenv( "LANG" ); |
856 |
|
857 |
if( NULL == locale ) |
858 |
locale = "C"; |
859 |
} |
860 |
|
861 |
*ppLocale = _parse_locale( locale ); |
862 |
} |
863 |
|
864 |
/* return the locale */ |
865 |
*ppLocale = _parse_locale( locale ); |
866 |
|
867 |
pthread_mutex_unlock( &aLocalMutex ); |
868 |
|
643 |
} |
869 |
} |
644 |
|
870 |
|
645 |
/*****************************************************************************/ |
871 |
/*****************************************************************************/ |
646 |
/* set the current process locale |
872 |
/* set the current process locale |
647 |
/*****************************************************************************/ |
873 |
/*****************************************************************************/ |
648 |
|
|
|
649 |
int _imp_setProcessLocale( rtl_Locale * pLocale ) |
874 |
int _imp_setProcessLocale( rtl_Locale * pLocale ) |
650 |
{ |
875 |
{ |
651 |
return 0; |
876 |
/* There is not yet any way to set the locale of a process |
|
|
877 |
* on Darwin or MacOS X through BSD layer functions. |
878 |
* |
879 |
* On MacOS X locale and language are set by the user through |
880 |
* the International pane of the System Preferences application. |
881 |
* |
882 |
* FIXME when this can be done. |
883 |
*/ |
884 |
return 0; |
652 |
} |
885 |
} |
|
|
886 |
|
887 |
/*****************************************************************************/ |
888 |
/* Get a charset name from a CoreFoundation text encoding number |
889 |
/*****************************************************************************/ |
890 |
void macxp_ConvertCFEncodingToIANACharSetName( char *buffer, unsigned int bufferLen, CFStringEncoding cfEncoding ) |
891 |
{ |
892 |
switch( cfEncoding ) |
893 |
{ |
894 |
case 0: strncpy( buffer, "MACINTOSH", bufferLen-1 ); break; /* kCFStringEncodingMacRoman */ |
895 |
case 1: strncpy( buffer, "X-MAC-JAPANESE", bufferLen-1 ); break; /* kCFStringEncodingMacJapanese */ |
896 |
case 2: strncpy( buffer, "X-MAC-TRAD-CHINESE", bufferLen-1 ); break; /* kCFStringEncodingMacChineseTrad */ |
897 |
case 3: strncpy( buffer, "X-MAC-KOREAN", bufferLen-1 ); break; /* kCFStringEncodingMacKorean */ |
898 |
case 4: strncpy( buffer, "X-MAC-ARABIC", bufferLen-1 ); break; /* kCFStringEncodingMacArabic */ |
899 |
case 5: strncpy( buffer, "X-MAC-HEBREW", bufferLen-1 ); break; /* kCFStringEncodingMacHebrew */ |
900 |
case 6: strncpy( buffer, "X-MAC-GREEK", bufferLen-1 ); break; /* kCFStringEncodingMacGreek */ |
901 |
case 7: strncpy( buffer, "X-MAC-CYRILLIC", bufferLen-1 ); break; /* kCFStringEncodingMacCyrillic */ |
902 |
case 9: strncpy( buffer, "X-MAC-DEVANAGARI", bufferLen-1 ); break; /* kCFStringEncodingMacDevanagari */ |
903 |
case 10: strncpy( buffer, "X-MAC-GURMUKHI", bufferLen-1 ); break; /* kCFStringEncodingMacGurmukhi */ |
904 |
case 11: strncpy( buffer, "X-MAC-GUJARATI", bufferLen-1 ); break; /* kCFStringEncodingMacGujarati */ |
905 |
case 12: strncpy( buffer, "X-MAC-ORIYA", bufferLen-1 ); break; /* kCFStringEncodingMacOriya */ |
906 |
case 13: strncpy( buffer, "X-MAC-BENGALI", bufferLen-1 ); break; /* kCFStringEncodingMacBengali */ |
907 |
case 14: strncpy( buffer, "X-MAC-TAMIL", bufferLen-1 ); break; /* kCFStringEncodingMacTamil */ |
908 |
case 15: strncpy( buffer, "X-MAC-TELUGU", bufferLen-1 ); break; /* kCFStringEncodingMacTamil */ |
909 |
case 16: strncpy( buffer, "X-MAC-KANNADA", bufferLen-1 ); break; /* kCFStringEncodingMacKannada */ |
910 |
case 17: strncpy( buffer, "X-MAC-MALAYALAM", bufferLen-1 ); break; /* kCFStringEncodingMacMalayalam */ |
911 |
case 18: strncpy( buffer, "X-MAC-SINHALESE", bufferLen-1 ); break; /* kCFStringEncodingMacSinhalese */ |
912 |
case 19: strncpy( buffer, "X-MAC-BURMESE", bufferLen-1 ); break; /* kCFStringEncodingMacBurmese */ |
913 |
case 20: strncpy( buffer, "X-MAC-KHMER", bufferLen-1 ); break; /* kCFStringEncodingMacKhmer */ |
914 |
case 21: strncpy( buffer, "X-MAC-THAI", bufferLen-1 ); break; /* kCFStringEncodingMacThai */ |
915 |
case 22: strncpy( buffer, "X-MAC-LAOTIAN", bufferLen-1 ); break; /* kCFStringEncodingMacLaotian */ |
916 |
case 23: strncpy( buffer, "X-MAC-GEORGIAN", bufferLen-1 ); break; /* kCFStringEncodingMacGeorgian */ |
917 |
case 24: strncpy( buffer, "X-MAC-ARMENIAN", bufferLen-1 ); break; /* kCFStringEncodingMacArmenian */ |
918 |
case 25: strncpy( buffer, "X-MAC-SIMP-CHINESE", bufferLen-1 ); break; /* kCFStringEncodingMacChineseSimp */ |
919 |
case 26: strncpy( buffer, "X-MAC-TIBETAN", bufferLen-1 ); break; /* kCFStringEncodingMacTibetan */ |
920 |
case 27: strncpy( buffer, "X-MAC-MONGOLIAN", bufferLen-1 ); break; /* kCFStringEncodingMacMongolian */ |
921 |
case 28: strncpy( buffer, "X-MAC-ETHIOPIC", bufferLen-1 ); break; /* kCFStringEncodingMacEthiopic */ |
922 |
case 29: strncpy( buffer, "X-MAC-CENTRALEURROMAN", bufferLen-1 ); break; /* kCFStringEncodingMacCentralEurRoman */ |
923 |
case 30: strncpy( buffer, "X-MAC-VIETNAMESE", bufferLen-1 ); break; /* kCFStringEncodingMacVietnamese */ |
924 |
case 31: strncpy( buffer, "X-MAC-EXTARABIC", bufferLen-1 ); break; /* kCFStringEncodingMacExtArabic */ |
925 |
case 33: strncpy( buffer, "X-MAC-SYMBOL", bufferLen-1 ); break; /* kCFStringEncodingMacSymbol */ |
926 |
case 34: strncpy( buffer, "X-MAC-DINGBATS", bufferLen-1 ); break; /* kCFStringEncodingMacDingbats */ |
927 |
case 35: strncpy( buffer, "X-MAC-TURKISH", bufferLen-1 ); break; /* kCFStringEncodingMacTurkish */ |
928 |
case 36: strncpy( buffer, "X-MAC-CROATIAN", bufferLen-1 ); break; /* kCFStringEncodingMacCroatian */ |
929 |
case 37: strncpy( buffer, "X-MAC-ICELANDIC", bufferLen-1 ); break; /* kCFStringEncodingMacIcelandic */ |
930 |
case 38: strncpy( buffer, "X-MAC-ROMANIAN", bufferLen-1 ); break; /* kCFStringEncodingMacRomanian */ |
931 |
case 126: strncpy( buffer, "UNICODE-2-0", bufferLen-1 ); break; /* */ |
932 |
case 140: strncpy( buffer, "X-MAC-FARSI", bufferLen-1 ); break; /* kCFStringEncodingMacFarsi */ |
933 |
case 152: strncpy( buffer, "X-MAC-UKRAINIAN", bufferLen-1 ); break; /* kCFStringEncodingMacUkrainian */ |
934 |
case 252: strncpy( buffer, "X-MAC-VT100", bufferLen-1 ); break; /* kCFStringEncodingMacVT100 */ |
935 |
case 255: strncpy( buffer, "macintosh", bufferLen-1 ); break; /* kCFStringEncodingMacHFS */ |
936 |
case 256: strncpy( buffer, "UTF-16BE", bufferLen-1 ); break; /* kCFStringEncodingUnicode */ |
937 |
case 257: strncpy( buffer, "UNICODE-1-1", bufferLen-1 ); break; /* */ |
938 |
case 258: strncpy( buffer, "UNICODE-1-1", bufferLen-1 ); break; /* */ |
939 |
case 259: strncpy( buffer, "UNICODE-2-0", bufferLen-1 ); break; /* */ |
940 |
case 260: strncpy( buffer, "csUnicode", bufferLen-1 ); break; /* */ |
941 |
case 513: strncpy( buffer, "ISO-8859-1", bufferLen-1 ); break; /* kCFStringEncodingISOLatin1 */ |
942 |
case 514: strncpy( buffer, "ISO-8859-2", bufferLen-1 ); break; /* kCFStringEncodingISOLatin2 */ |
943 |
case 515: strncpy( buffer, "ISO-8859-3", bufferLen-1 ); break; /* kCFStringEncodingISOLatin3 */ |
944 |
case 516: strncpy( buffer, "ISO-8859-4", bufferLen-1 ); break; /* kCFStringEncodingISOLatin4 */ |
945 |
case 517: strncpy( buffer, "ISO-8859-5", bufferLen-1 ); break; /* kCFStringEncodingISOLatinCyrillic */ |
946 |
case 518: strncpy( buffer, "ISO-8859-6", bufferLen-1 ); break; /* kCFStringEncodingISOLatinArabic */ |
947 |
case 519: strncpy( buffer, "ISO-8859-7", bufferLen-1 ); break; /* kCFStringEncodingISOLatinGreek */ |
948 |
case 520: strncpy( buffer, "ISO-8859-8", bufferLen-1 ); break; /* kCFStringEncodingISOLatinHebrew */ |
949 |
case 521: strncpy( buffer, "ISO-8859-9", bufferLen-1 ); break; /* kCFStringEncodingISOLatin5 */ |
950 |
case 522: strncpy( buffer, "ISO-8859-10", bufferLen-1 ); break; /* kCFStringEncodingISOLatin6 */ |
951 |
case 523: strncpy( buffer, "ISO-8859-11", bufferLen-1 ); break; /* kCFStringEncodingISOLatinThai */ |
952 |
case 525: strncpy( buffer, "ISO-8859-13", bufferLen-1 ); break; /* kCFStringEncodingISOLatin7 */ |
953 |
case 526: strncpy( buffer, "ISO-8859-14", bufferLen-1 ); break; /* kCFStringEncodingISOLatin8 */ |
954 |
case 527: strncpy( buffer, "ISO-8859-15", bufferLen-1 ); break; /* kCFStringEncodingISOLatin9 */ |
955 |
case 1024: strncpy( buffer, "CP437", bufferLen-1 ); break; /* kCFStringEncodingDOSLatinUS */ |
956 |
case 1029: strncpy( buffer, "CP737", bufferLen-1 ); break; /* kCFStringEncodingDOSGreek */ |
957 |
case 1030: strncpy( buffer, "CP775", bufferLen-1 ); break; /* kCFStringEncodingDOSBalticRim */ |
958 |
case 1040: strncpy( buffer, "CP850", bufferLen-1 ); break; /* kCFStringEncodingDOSLatin1 */ |
959 |
case 1042: strncpy( buffer, "CP852", bufferLen-1 ); break; /* kCFStringEncodingDOSGreek1 */ |
960 |
case 1044: strncpy( buffer, "CP857", bufferLen-1 ); break; /* kCFStringEncodingDOSTurkish */ |
961 |
case 1046: strncpy( buffer, "CP861", bufferLen-1 ); break; /* kCFStringEncodingDOSIcelandic */ |
962 |
case 1049: strncpy( buffer, "cp864", bufferLen-1 ); break; /* kCFStringEncodingDOSArabic */ |
963 |
case 1051: strncpy( buffer, "CP866", bufferLen-1 ); break; /* kCFStringEncodingDOSRussian */ |
964 |
case 1053: strncpy( buffer, "CP874", bufferLen-1 ); break; /* kCFStringEncodingDOSThai */ |
965 |
case 1056: strncpy( buffer, "CP932", bufferLen-1 ); break; /* kCFStringEncodingDOSJapanese */ |
966 |
case 1057: strncpy( buffer, "CP936", bufferLen-1 ); break; /* kCFStringEncodingDOSChineseSimplif */ |
967 |
case 1058: strncpy( buffer, "CP949", bufferLen-1 ); break; /* kCFStringEncodingDOSKorean */ |
968 |
case 1059: strncpy( buffer, "CP950", bufferLen-1 ); break; /* kCFStringEncodingDOSChineseTrad */ |
969 |
case 1280: strncpy( buffer, "WINDOWS-1252", bufferLen-1 ); break; /* kCFStringEncodingWindowsLatin1 */ |
970 |
case 1281: strncpy( buffer, "WINDOWS-1250", bufferLen-1 ); break; /* kCFStringEncodingWindowsLatin2 */ |
971 |
case 1282: strncpy( buffer, "WINDOWS-1251", bufferLen-1 ); break; /* kCFStringEncodingWindowsCyrillic */ |
972 |
case 1283: strncpy( buffer, "WINDOWS-1253", bufferLen-1 ); break; /* kCFStringEncodingWindowsGreek */ |
973 |
case 1284: strncpy( buffer, "WINDOWS-1254", bufferLen-1 ); break; /* kCFStringEncodingWindowsLatin5 */ |
974 |
case 1285: strncpy( buffer, "WINDOWS-1255", bufferLen-1 ); break; /* kCFStringEncodingWindowsHebrew */ |
975 |
case 1286: strncpy( buffer, "WINDOWS-1256", bufferLen-1 ); break; /* kCFStringEncodingWindowsArabic */ |
976 |
case 1287: strncpy( buffer, "WINDOWS-1257", bufferLen-1 ); break; /* kCFStringEncodingWindowsBalticRim */ |
977 |
case 1288: strncpy( buffer, "WINDOWS-1258", bufferLen-1 ); break; /* kCFStringEncodingWindowsVietnamese */ |
978 |
case 1536: strncpy( buffer, "US-ASCII", bufferLen-1 ); break; /* kCFStringEncodingASCII */ |
979 |
case 1570: strncpy( buffer, "JIS_C6226-1983", bufferLen-1 ); break; /* kCFStringEncodingJIS_X0208_90 */ |
980 |
case 1584: strncpy( buffer, "csISO58GB231280", bufferLen-1 ); break; /* kCFStringEncodingGB_2312_80 */ |
981 |
case 1585: strncpy( buffer, "X-GBK", bufferLen-1 ); break; /* kCFStringEncodingGBK_95 */ |
982 |
case 1600: strncpy( buffer, "csKSC56011987", bufferLen-1 ); break; /* kCFStringEncodingKSC_5601_87 */ |
983 |
case 2080: strncpy( buffer, "ISO-2022-JP", bufferLen-1 ); break; /* kCFStringEncodingISO_2022_JP */ |
984 |
case 2096: strncpy( buffer, "ISO-2022-CN", bufferLen-1 ); break; /* kCFStringEncodingISO_2022_CN */ |
985 |
case 2097: strncpy( buffer, "ISO-2022-CN-EXT", bufferLen-1 ); break; /* kCFStringEncodingISO_2022_CN_EXT */ |
986 |
case 2112: strncpy( buffer, "ISO-2022-KR", bufferLen-1 ); break; /* kCFStringEncodingISO_2022_KR */ |
987 |
case 2336: strncpy( buffer, "EUC-JP", bufferLen-1 ); break; /* kCFStringEncodingEUC_JP */ |
988 |
case 2352: strncpy( buffer, "EUC-CN", bufferLen-1 ); break; /* kCFStringEncodingEUC_CN */ |
989 |
case 2353: strncpy( buffer, "EUC-TW", bufferLen-1 ); break; /* kCFStringEncodingEUC_TW */ |
990 |
case 2368: strncpy( buffer, "EUC-KR", bufferLen-1 ); break; /* kCFStringEncodingEUC_KR */ |
991 |
case 2561: strncpy( buffer, "SHIFT_JIS", bufferLen-1 ); break; /* kCFStringEncodingShiftJIS */ |
992 |
case 2562: strncpy( buffer, "KOI8-R", bufferLen-1 ); break; /* kCFStringEncodingKOI8_R */ |
993 |
case 2563: strncpy( buffer, "BIG5", bufferLen-1 ); break; /* kCFStringEncodingBig5 */ |
994 |
case 2564: strncpy( buffer, "X-MAC-ROMAN-LATIN1", bufferLen-1 ); break; /* kCFStringEncodingMacRomanLatin1 */ |
995 |
case 2565: strncpy( buffer, "HZ-GB-2312", bufferLen-1 ); break; /* kCFStringEncodingHZ_GB_2312 */ |
996 |
case 2566: strncpy( buffer, "Big5-HKSCS", bufferLen-1 ); break; /* kCFStringEncodingBig5_HKSCS_1999 */ |
997 |
case 2817: strncpy( buffer, "X-NEXTSTEP", bufferLen-1 ); break; /* kCFStringEncodingNextStepLatin */ |
998 |
case 3074: strncpy( buffer, "cp037", bufferLen-1 ); break; /* kCFStringEncodingEBCDIC_CP037 */ |
999 |
default: strncpy( buffer, "", bufferLen-1 ); break; /* Not listed */ |
1000 |
} |
1001 |
} |
1002 |
#endif /* ifndef MACOSX */ |
1003 |
|
653 |
|
1004 |
|
654 |
#else /* ifdef LINUX || SOLARIS || MACOSX || NETBSD */ |
1005 |
#else /* ifdef LINUX || SOLARIS || MACOSX || NETBSD */ |
655 |
|
1006 |
|