src/macosx/native/sun/util/locale/provider/HostLocaleProviderAdapter_md.c

Print this page
rev 6809 : imported patch 7091601

*** 30,41 **** #define BUFLEN 256 static CFDateFormatterStyle convertDateFormatterStyle(jint javaStyle); static CFNumberFormatterStyle convertNumberFormatterStyle(jint javaStyle); static void copyArrayElements(JNIEnv *env, CFArrayRef cfarray, jobjectArray jarray, CFIndex sindex, int dindex, int count); ! static jstring getNumberSymbolString(JNIEnv *env, jstring jdefault, CFStringRef type); ! static jchar getNumberSymbolChar(jchar jdefault, CFStringRef type); // from java_props_macosx.c extern char * getMacOSXLocale(int cat); extern char * getPosixLocale(int cat); --- 30,41 ---- #define BUFLEN 256 static CFDateFormatterStyle convertDateFormatterStyle(jint javaStyle); static CFNumberFormatterStyle convertNumberFormatterStyle(jint javaStyle); static void copyArrayElements(JNIEnv *env, CFArrayRef cfarray, jobjectArray jarray, CFIndex sindex, int dindex, int count); ! static jstring getNumberSymbolString(JNIEnv *env, jstring jlangtag, jstring jdefault, CFStringRef type); ! static jchar getNumberSymbolChar(JNIEnv *env, jstring jlangtag, jchar jdefault, CFStringRef type); // from java_props_macosx.c extern char * getMacOSXLocale(int cat); extern char * getPosixLocale(int cat);
*** 320,440 **** * Method: getCurrencySymbol * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getCurrencySymbol (JNIEnv *env, jclass cls, jstring jlangtag, jstring currencySymbol) { ! return getNumberSymbolString(env, currencySymbol, kCFNumberFormatterCurrencySymbol); } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getDecimalSeparator * Signature: (Ljava/lang/String;C)C */ JNIEXPORT jchar JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getDecimalSeparator (JNIEnv *env, jclass cls, jstring jlangtag, jchar decimalSeparator) { ! return getNumberSymbolChar(decimalSeparator, kCFNumberFormatterDecimalSeparator); } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getGroupingSeparator * Signature: (Ljava/lang/String;C)C */ JNIEXPORT jchar JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getGroupingSeparator (JNIEnv *env, jclass cls, jstring jlangtag, jchar groupingSeparator) { ! return getNumberSymbolChar(groupingSeparator, kCFNumberFormatterGroupingSeparator); } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getInfinity * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getInfinity (JNIEnv *env, jclass cls, jstring jlangtag, jstring infinity) { ! return getNumberSymbolString(env, infinity, kCFNumberFormatterInfinitySymbol); } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getInternationalCurrencySymbol * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getInternationalCurrencySymbol (JNIEnv *env, jclass cls, jstring jlangtag, jstring internationalCurrencySymbol) { ! return getNumberSymbolString(env, internationalCurrencySymbol, kCFNumberFormatterInternationalCurrencySymbol); } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getMinusSign * Signature: (Ljava/lang/String;C)C */ JNIEXPORT jchar JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getMinusSign (JNIEnv *env, jclass cls, jstring jlangtag, jchar minusSign) { ! return getNumberSymbolChar(minusSign, kCFNumberFormatterMinusSign); } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getMonetaryDecimalSeparator * Signature: (Ljava/lang/String;C)C */ JNIEXPORT jchar JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getMonetaryDecimalSeparator (JNIEnv *env, jclass cls, jstring jlangtag, jchar monetaryDecimalSeparator) { ! return getNumberSymbolChar(monetaryDecimalSeparator, kCFNumberFormatterCurrencyDecimalSeparator); } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getNaN * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getNaN (JNIEnv *env, jclass cls, jstring jlangtag, jstring nan) { ! return getNumberSymbolString(env, nan, kCFNumberFormatterNaNSymbol); } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getPercent * Signature: (Ljava/lang/String;C)C */ JNIEXPORT jchar JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getPercent (JNIEnv *env, jclass cls, jstring jlangtag, jchar percent) { ! return getNumberSymbolChar(percent, kCFNumberFormatterPercentSymbol); } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getPerMill * Signature: (Ljava/lang/String;C)C */ JNIEXPORT jchar JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getPerMill (JNIEnv *env, jclass cls, jstring jlangtag, jchar perMill) { ! return getNumberSymbolChar(perMill, kCFNumberFormatterPerMillSymbol); } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getZeroDigit * Signature: (Ljava/lang/String;C)C */ JNIEXPORT jchar JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getZeroDigit (JNIEnv *env, jclass cls, jstring jlangtag, jchar zeroDigit) { ! return getNumberSymbolChar(zeroDigit, kCFNumberFormatterZeroSymbol); } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getExponentSeparator * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getExponentSeparator (JNIEnv *env, jclass cls, jstring jlangtag, jstring exponent) { ! return getNumberSymbolString(env, exponent, kCFNumberFormatterExponentSymbol); } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getCalendarInt --- 320,469 ---- * Method: getCurrencySymbol * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getCurrencySymbol (JNIEnv *env, jclass cls, jstring jlangtag, jstring currencySymbol) { ! return getNumberSymbolString(env, jlangtag, currencySymbol, kCFNumberFormatterCurrencySymbol); } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getDecimalSeparator * Signature: (Ljava/lang/String;C)C */ JNIEXPORT jchar JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getDecimalSeparator (JNIEnv *env, jclass cls, jstring jlangtag, jchar decimalSeparator) { ! return getNumberSymbolChar(env, jlangtag, decimalSeparator, kCFNumberFormatterDecimalSeparator); } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getGroupingSeparator * Signature: (Ljava/lang/String;C)C */ JNIEXPORT jchar JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getGroupingSeparator (JNIEnv *env, jclass cls, jstring jlangtag, jchar groupingSeparator) { ! return getNumberSymbolChar(env, jlangtag, groupingSeparator, kCFNumberFormatterGroupingSeparator); } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getInfinity * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getInfinity (JNIEnv *env, jclass cls, jstring jlangtag, jstring infinity) { ! return getNumberSymbolString(env, jlangtag, infinity, kCFNumberFormatterInfinitySymbol); } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getInternationalCurrencySymbol * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getInternationalCurrencySymbol (JNIEnv *env, jclass cls, jstring jlangtag, jstring internationalCurrencySymbol) { ! return getNumberSymbolString(env, jlangtag, internationalCurrencySymbol, kCFNumberFormatterInternationalCurrencySymbol); } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getMinusSign * Signature: (Ljava/lang/String;C)C */ JNIEXPORT jchar JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getMinusSign (JNIEnv *env, jclass cls, jstring jlangtag, jchar minusSign) { ! return getNumberSymbolChar(env, jlangtag, minusSign, kCFNumberFormatterMinusSign); } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getMonetaryDecimalSeparator * Signature: (Ljava/lang/String;C)C */ JNIEXPORT jchar JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getMonetaryDecimalSeparator (JNIEnv *env, jclass cls, jstring jlangtag, jchar monetaryDecimalSeparator) { ! return getNumberSymbolChar(env, jlangtag, monetaryDecimalSeparator, kCFNumberFormatterCurrencyDecimalSeparator); } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getNaN * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getNaN (JNIEnv *env, jclass cls, jstring jlangtag, jstring nan) { ! return getNumberSymbolString(env, jlangtag, nan, kCFNumberFormatterNaNSymbol); } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getPercent * Signature: (Ljava/lang/String;C)C */ JNIEXPORT jchar JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getPercent (JNIEnv *env, jclass cls, jstring jlangtag, jchar percent) { ! return getNumberSymbolChar(env, jlangtag, percent, kCFNumberFormatterPercentSymbol); } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getPerMill * Signature: (Ljava/lang/String;C)C */ JNIEXPORT jchar JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getPerMill (JNIEnv *env, jclass cls, jstring jlangtag, jchar perMill) { ! return getNumberSymbolChar(env, jlangtag, perMill, kCFNumberFormatterPerMillSymbol); } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getZeroDigit * Signature: (Ljava/lang/String;C)C */ JNIEXPORT jchar JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getZeroDigit (JNIEnv *env, jclass cls, jstring jlangtag, jchar zeroDigit) { ! // The following code *should* work, but not for some reason :o ! // ! //return getNumberSymbolChar(env, jlangtag, zeroDigit, kCFNumberFormatterZeroSymbol); ! // ! // so here is a workaround. ! jchar ret = zeroDigit; ! CFLocaleRef cflocale = CFLocaleCopyCurrent(); ! ! if (cflocale != NULL) { ! CFNumberFormatterRef nf = CFNumberFormatterCreate(kCFAllocatorDefault, ! cflocale, ! kCFNumberFormatterNoStyle); ! if (nf != NULL) { ! int zero = 0; ! CFStringRef str = CFNumberFormatterCreateStringWithValue(kCFAllocatorDefault, ! nf, kCFNumberIntType, &zero); ! if (str != NULL) { ! if (CFStringGetLength(str) > 0) { ! ret = CFStringGetCharacterAtIndex(str, 0); ! } ! CFRelease(str); ! } ! ! CFRelease(nf); ! } ! ! CFRelease(cflocale); ! } ! ! return ret; } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getExponentSeparator * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getExponentSeparator (JNIEnv *env, jclass cls, jstring jlangtag, jstring exponent) { ! return getNumberSymbolString(env, jlangtag, exponent, kCFNumberFormatterExponentSymbol); } /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getCalendarInt
*** 623,641 **** CFStringGetCString(CFArrayGetValueAtIndex(cfarray, sindex), buf, BUFLEN, kCFStringEncodingUTF8); (*env)->SetObjectArrayElement(env, jarray, dindex, (*env)->NewStringUTF(env, buf)); } } ! static jstring getNumberSymbolString(JNIEnv *env, jstring jdefault, CFStringRef type) { char buf[BUFLEN]; jstring ret = jdefault; CFLocaleRef cflocale = CFLocaleCopyCurrent(); if (cflocale != NULL) { CFNumberFormatterRef nf = CFNumberFormatterCreate(kCFAllocatorDefault, cflocale, ! kCFNumberFormatterDecimalStyle); if (nf != NULL) { CFStringRef str = CFNumberFormatterCopyProperty(nf, type); if (str != NULL) { CFStringGetCString(str, buf, BUFLEN, kCFStringEncodingUTF8); CFRelease(str); --- 652,670 ---- CFStringGetCString(CFArrayGetValueAtIndex(cfarray, sindex), buf, BUFLEN, kCFStringEncodingUTF8); (*env)->SetObjectArrayElement(env, jarray, dindex, (*env)->NewStringUTF(env, buf)); } } ! static jstring getNumberSymbolString(JNIEnv *env, jstring jlangtag, jstring jdefault, CFStringRef type) { char buf[BUFLEN]; jstring ret = jdefault; CFLocaleRef cflocale = CFLocaleCopyCurrent(); if (cflocale != NULL) { CFNumberFormatterRef nf = CFNumberFormatterCreate(kCFAllocatorDefault, cflocale, ! kCFNumberFormatterNoStyle); if (nf != NULL) { CFStringRef str = CFNumberFormatterCopyProperty(nf, type); if (str != NULL) { CFStringGetCString(str, buf, BUFLEN, kCFStringEncodingUTF8); CFRelease(str);
*** 649,673 **** } return ret; } ! static jchar getNumberSymbolChar(jchar jdefault, CFStringRef type) { ! char buf[BUFLEN]; jchar ret = jdefault; CFLocaleRef cflocale = CFLocaleCopyCurrent(); if (cflocale != NULL) { CFNumberFormatterRef nf = CFNumberFormatterCreate(kCFAllocatorDefault, cflocale, ! kCFNumberFormatterDecimalStyle); if (nf != NULL) { CFStringRef str = CFNumberFormatterCopyProperty(nf, type); if (str != NULL) { ! CFStringGetCString(str, buf, BUFLEN, kCFStringEncodingUTF8); CFRelease(str); - ret = buf[0]; } CFRelease(nf); } --- 678,702 ---- } return ret; } ! static jchar getNumberSymbolChar(JNIEnv *env, jstring jlangtag, jchar jdefault, CFStringRef type) { jchar ret = jdefault; CFLocaleRef cflocale = CFLocaleCopyCurrent(); if (cflocale != NULL) { CFNumberFormatterRef nf = CFNumberFormatterCreate(kCFAllocatorDefault, cflocale, ! kCFNumberFormatterNoStyle); if (nf != NULL) { CFStringRef str = CFNumberFormatterCopyProperty(nf, type); if (str != NULL) { ! if (CFStringGetLength(str) > 0) { ! ret = CFStringGetCharacterAtIndex(str, 0); ! } CFRelease(str); } CFRelease(nf); }