150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* 250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho******************************************************************************* 3fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius* Copyright (C) 2010-2014, International Business Machines Corporation and 4b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* others. All Rights Reserved. 550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho******************************************************************************* 650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*/ 750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/utypes.h" 950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_FORMATTING 1150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/locdspnm.h" 1350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/msgfmt.h" 1454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include "unicode/ures.h" 15fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#include "unicode/udisplaycontext.h" 1654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include "unicode/brkiter.h" 1750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "cmemory.h" 1950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "cstring.h" 2050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "ulocimp.h" 2150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "ureslocs.h" 2254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include "uresimp.h" 2350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include <stdarg.h> 2550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/** 2750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Concatenate a number of null-terminated strings to buffer, leaving a 2850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * null-terminated string. The last argument should be the null pointer. 2950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Return the length of the string in the buffer, not counting the trailing 3050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * null. Return -1 if there is an error (buffer is null, or buflen < 1). 3150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 3250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic int32_t ncat(char *buffer, uint32_t buflen, ...) { 3350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho va_list args; 3450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho char *str; 3550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho char *p = buffer; 3650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char* e = buffer + buflen - 1; 3750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (buffer == NULL || buflen < 1) { 3950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return -1; 4050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 4150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 4250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho va_start(args, buflen); 4350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho while ((str = va_arg(args, char *))) { 4450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho char c; 4550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho while (p != e && (c = *str++)) { 4650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho *p++ = c; 4750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 4850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 4950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho *p = 0; 5050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho va_end(args); 5150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 5250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return p - buffer; 5350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 5450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 5550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_NAMESPACE_BEGIN 5650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 5750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//////////////////////////////////////////////////////////////////////////////////////////////////// 5850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 5950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// Access resource data for locale components. 6050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// Wrap code in uloc.c for now. 6150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoclass ICUDataTable { 6254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius const char* path; 6354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius Locale locale; 6450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 6550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehopublic: 6654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ICUDataTable(const char* path, const Locale& locale); 6754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ~ICUDataTable(); 6850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 6954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius const Locale& getLocale(); 7050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 7154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString& get(const char* tableKey, const char* itemKey, 7254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString& result) const; 7354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString& get(const char* tableKey, const char* subTableKey, const char* itemKey, 7454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString& result) const; 7550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 7654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString& getNoFallback(const char* tableKey, const char* itemKey, 7754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString &result) const; 7854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString& getNoFallback(const char* tableKey, const char* subTableKey, const char* itemKey, 7954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString &result) const; 8050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}; 8150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 8250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoinline UnicodeString & 8350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoICUDataTable::get(const char* tableKey, const char* itemKey, UnicodeString& result) const { 8454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return get(tableKey, NULL, itemKey, result); 8550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 8650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 8750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoinline UnicodeString & 8850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoICUDataTable::getNoFallback(const char* tableKey, const char* itemKey, UnicodeString& result) const { 8954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return getNoFallback(tableKey, NULL, itemKey, result); 9050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 9150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 9250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoICUDataTable::ICUDataTable(const char* path, const Locale& locale) 9354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius : path(NULL), locale(Locale::getRoot()) 9450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho{ 9550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (path) { 9650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t len = uprv_strlen(path); 9750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho this->path = (const char*) uprv_malloc(len + 1); 9850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (this->path) { 9950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho uprv_strcpy((char *)this->path, path); 10050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho this->locale = locale; 10150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 10250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 10350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 10450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 10550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoICUDataTable::~ICUDataTable() { 10650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (path) { 10750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho uprv_free((void*) path); 10850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho path = NULL; 10950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 11050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 11150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 11250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoconst Locale& 11350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoICUDataTable::getLocale() { 11450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return locale; 11550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 11650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 11750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString & 11850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoICUDataTable::get(const char* tableKey, const char* subTableKey, const char* itemKey, 11950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString &result) const { 12050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 12150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t len = 0; 12250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 12350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const UChar *s = uloc_getTableStringWithFallback(path, locale.getName(), 12450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho tableKey, subTableKey, itemKey, 12550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho &len, &status); 126b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_SUCCESS(status) && len > 0) { 12750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return result.setTo(s, len); 12850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 12950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return result.setTo(UnicodeString(itemKey, -1, US_INV)); 13050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 13150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 13250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString & 13350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoICUDataTable::getNoFallback(const char* tableKey, const char* subTableKey, const char* itemKey, 13450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const { 13550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 13650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t len = 0; 13750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 13850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const UChar *s = uloc_getTableStringWithFallback(path, locale.getName(), 13950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho tableKey, subTableKey, itemKey, 14050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho &len, &status); 14150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_SUCCESS(status)) { 14250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return result.setTo(s, len); 14350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 14450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 14550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho result.setToBogus(); 14650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return result; 14750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 14850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 14950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//////////////////////////////////////////////////////////////////////////////////////////////////// 15050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 151103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusLocaleDisplayNames::~LocaleDisplayNames() {} 152103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 15350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//////////////////////////////////////////////////////////////////////////////////////////////////// 15450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 15550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if 0 // currently unused 15650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 15750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoclass DefaultLocaleDisplayNames : public LocaleDisplayNames { 15850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UDialectHandling dialectHandling; 15950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 16050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehopublic: 16150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // constructor 16250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho DefaultLocaleDisplayNames(UDialectHandling dialectHandling); 16350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 16450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho virtual ~DefaultLocaleDisplayNames(); 16550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 16650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho virtual const Locale& getLocale() const; 16750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho virtual UDialectHandling getDialectHandling() const; 16854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 16950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho virtual UnicodeString& localeDisplayName(const Locale& locale, 17050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const; 17150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho virtual UnicodeString& localeDisplayName(const char* localeId, 17250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const; 17350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho virtual UnicodeString& languageDisplayName(const char* lang, 17450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const; 17550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho virtual UnicodeString& scriptDisplayName(const char* script, 17650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const; 17750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho virtual UnicodeString& scriptDisplayName(UScriptCode scriptCode, 17850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const; 17950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho virtual UnicodeString& regionDisplayName(const char* region, 18050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const; 18150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho virtual UnicodeString& variantDisplayName(const char* variant, 18250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const; 18350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho virtual UnicodeString& keyDisplayName(const char* key, 18450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const; 18550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho virtual UnicodeString& keyValueDisplayName(const char* key, 18650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char* value, 18750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const; 18850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}; 18950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 19050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoDefaultLocaleDisplayNames::DefaultLocaleDisplayNames(UDialectHandling dialectHandling) 19150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho : dialectHandling(dialectHandling) { 19250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 19350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 19450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoDefaultLocaleDisplayNames::~DefaultLocaleDisplayNames() { 19550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 19650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 19750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoconst Locale& 19850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoDefaultLocaleDisplayNames::getLocale() const { 19950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return Locale::getRoot(); 20050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 20150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 20250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUDialectHandling 20350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoDefaultLocaleDisplayNames::getDialectHandling() const { 20450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return dialectHandling; 20550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 20650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 20750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString& 20850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoDefaultLocaleDisplayNames::localeDisplayName(const Locale& locale, 20950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const { 21050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return result = UnicodeString(locale.getName(), -1, US_INV); 21150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 21250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 21350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString& 21450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoDefaultLocaleDisplayNames::localeDisplayName(const char* localeId, 21550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const { 21650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return result = UnicodeString(localeId, -1, US_INV); 21750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 21850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 21950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString& 22050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoDefaultLocaleDisplayNames::languageDisplayName(const char* lang, 22150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const { 22250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return result = UnicodeString(lang, -1, US_INV); 22350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 22450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 22550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString& 22650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoDefaultLocaleDisplayNames::scriptDisplayName(const char* script, 22750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const { 22850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return result = UnicodeString(script, -1, US_INV); 22950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 23050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 23150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString& 23250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoDefaultLocaleDisplayNames::scriptDisplayName(UScriptCode scriptCode, 23350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const { 23450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char* name = uscript_getName(scriptCode); 23550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (name) { 23650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return result = UnicodeString(name, -1, US_INV); 23750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 23850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return result.remove(); 23950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 24050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 24150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString& 24250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoDefaultLocaleDisplayNames::regionDisplayName(const char* region, 24350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const { 24450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return result = UnicodeString(region, -1, US_INV); 24550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 24650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 24750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString& 24850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoDefaultLocaleDisplayNames::variantDisplayName(const char* variant, 24950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const { 25050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return result = UnicodeString(variant, -1, US_INV); 25150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 25250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 25350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString& 25450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoDefaultLocaleDisplayNames::keyDisplayName(const char* key, 25550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const { 25650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return result = UnicodeString(key, -1, US_INV); 25750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 25850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 25950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString& 26050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoDefaultLocaleDisplayNames::keyValueDisplayName(const char* /* key */, 26150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char* value, 26250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const { 26350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return result = UnicodeString(value, -1, US_INV); 26450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 26550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 26650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif // currently unused class DefaultLocaleDisplayNames 26750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 26850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//////////////////////////////////////////////////////////////////////////////////////////////////// 26950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 27050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoclass LocaleDisplayNamesImpl : public LocaleDisplayNames { 27154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius Locale locale; 27254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UDialectHandling dialectHandling; 27354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ICUDataTable langData; 27454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ICUDataTable regionData; 27559d709d503bab6e2b61931737e662dd293b40578ccornelius MessageFormat *separatorFormat; 27654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius MessageFormat *format; 27754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius MessageFormat *keyTypeFormat; 27854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UDisplayContext capitalizationContext; 279fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius BreakIterator* capitalizationBrkIter; 28059d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString formatOpenParen; 28159d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString formatReplaceOpenParen; 28259d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString formatCloseParen; 28359d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString formatReplaceCloseParen; 28454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 28554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // Constants for capitalization context usage types. 28654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius enum CapContextUsage { 28754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius kCapContextUsageLanguage, 28854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius kCapContextUsageScript, 28954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius kCapContextUsageTerritory, 29054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius kCapContextUsageVariant, 29154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius kCapContextUsageKey, 292fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius kCapContextUsageKeyValue, 29354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius kCapContextUsageCount 29454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius }; 295fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Capitalization transforms. For each usage type, indicates whether to titlecase for 296fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // the context specified in capitalizationContext (which we know at construction time) 297fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UBool fCapitalization[kCapContextUsageCount]; 29850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 29950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehopublic: 30054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // constructor 30154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius LocaleDisplayNamesImpl(const Locale& locale, UDialectHandling dialectHandling); 30254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius LocaleDisplayNamesImpl(const Locale& locale, UDisplayContext *contexts, int32_t length); 30354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius virtual ~LocaleDisplayNamesImpl(); 30454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 30554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius virtual const Locale& getLocale() const; 30654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius virtual UDialectHandling getDialectHandling() const; 30754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius virtual UDisplayContext getContext(UDisplayContextType type) const; 30854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 30954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius virtual UnicodeString& localeDisplayName(const Locale& locale, 31054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString& result) const; 31154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius virtual UnicodeString& localeDisplayName(const char* localeId, 31254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString& result) const; 31354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius virtual UnicodeString& languageDisplayName(const char* lang, 31454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString& result) const; 31554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius virtual UnicodeString& scriptDisplayName(const char* script, 31654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString& result) const; 31754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius virtual UnicodeString& scriptDisplayName(UScriptCode scriptCode, 31854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString& result) const; 31954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius virtual UnicodeString& regionDisplayName(const char* region, 32054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString& result) const; 32154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius virtual UnicodeString& variantDisplayName(const char* variant, 32254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString& result) const; 32354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius virtual UnicodeString& keyDisplayName(const char* key, 32454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString& result) const; 32554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius virtual UnicodeString& keyValueDisplayName(const char* key, 32654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius const char* value, 32754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString& result) const; 32850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoprivate: 32954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString& localeIdName(const char* localeId, 33054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString& result) const; 33154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString& appendWithSep(UnicodeString& buffer, const UnicodeString& src) const; 33254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString& adjustForUsageAndContext(CapContextUsage usage, UnicodeString& result) const; 33354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius void initialize(void); 33450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}; 33550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 33650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoLocaleDisplayNamesImpl::LocaleDisplayNamesImpl(const Locale& locale, 33750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UDialectHandling dialectHandling) 33854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius : dialectHandling(dialectHandling) 33954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius , langData(U_ICUDATA_LANG, locale) 34054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius , regionData(U_ICUDATA_REGION, locale) 34159d709d503bab6e2b61931737e662dd293b40578ccornelius , separatorFormat(NULL) 34254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius , format(NULL) 34354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius , keyTypeFormat(NULL) 34454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius , capitalizationContext(UDISPCTX_CAPITALIZATION_NONE) 345fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius , capitalizationBrkIter(NULL) 34650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho{ 34754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius initialize(); 34854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius} 34950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 35054dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusLocaleDisplayNamesImpl::LocaleDisplayNamesImpl(const Locale& locale, 35154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UDisplayContext *contexts, int32_t length) 35254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius : dialectHandling(ULDN_STANDARD_NAMES) 35354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius , langData(U_ICUDATA_LANG, locale) 35454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius , regionData(U_ICUDATA_REGION, locale) 35559d709d503bab6e2b61931737e662dd293b40578ccornelius , separatorFormat(NULL) 35654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius , format(NULL) 35754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius , keyTypeFormat(NULL) 35854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius , capitalizationContext(UDISPCTX_CAPITALIZATION_NONE) 359fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius , capitalizationBrkIter(NULL) 36054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius{ 36154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius while (length-- > 0) { 36254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UDisplayContext value = *contexts++; 36354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UDisplayContextType selector = (UDisplayContextType)((uint32_t)value >> 8); 36454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius switch (selector) { 36554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius case UDISPCTX_TYPE_DIALECT_HANDLING: 36654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius dialectHandling = (UDialectHandling)value; 36754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius break; 36854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius case UDISPCTX_TYPE_CAPITALIZATION: 36954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius capitalizationContext = value; 37054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius break; 37154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius default: 37254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius break; 37354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 37454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 37554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius initialize(); 37654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius} 37750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 37854dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusvoid 37954dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusLocaleDisplayNamesImpl::initialize(void) { 38054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius LocaleDisplayNamesImpl *nonConstThis = (LocaleDisplayNamesImpl *)this; 38154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius nonConstThis->locale = langData.getLocale() == Locale::getRoot() 38254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ? regionData.getLocale() 38354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius : langData.getLocale(); 384103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 38559d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString sep; 38654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius langData.getNoFallback("localeDisplayPattern", "separator", sep); 38754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (sep.isBogus()) { 38859d709d503bab6e2b61931737e662dd293b40578ccornelius sep = UnicodeString("{0}, {1}", -1, US_INV); 38954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 39059d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 39159d709d503bab6e2b61931737e662dd293b40578ccornelius separatorFormat = new MessageFormat(sep, status); 39254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 39354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString pattern; 39454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius langData.getNoFallback("localeDisplayPattern", "pattern", pattern); 39554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (pattern.isBogus()) { 39654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius pattern = UnicodeString("{0} ({1})", -1, US_INV); 39754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 39854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius format = new MessageFormat(pattern, status); 39959d709d503bab6e2b61931737e662dd293b40578ccornelius if (pattern.indexOf((UChar)0xFF08) >= 0) { 40059d709d503bab6e2b61931737e662dd293b40578ccornelius formatOpenParen.setTo((UChar)0xFF08); // fullwidth ( 40159d709d503bab6e2b61931737e662dd293b40578ccornelius formatReplaceOpenParen.setTo((UChar)0xFF3B); // fullwidth [ 40259d709d503bab6e2b61931737e662dd293b40578ccornelius formatCloseParen.setTo((UChar)0xFF09); // fullwidth ) 40359d709d503bab6e2b61931737e662dd293b40578ccornelius formatReplaceCloseParen.setTo((UChar)0xFF3D); // fullwidth ] 40459d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 40559d709d503bab6e2b61931737e662dd293b40578ccornelius formatOpenParen.setTo((UChar)0x0028); // ( 40659d709d503bab6e2b61931737e662dd293b40578ccornelius formatReplaceOpenParen.setTo((UChar)0x005B); // [ 40759d709d503bab6e2b61931737e662dd293b40578ccornelius formatCloseParen.setTo((UChar)0x0029); // ) 40859d709d503bab6e2b61931737e662dd293b40578ccornelius formatReplaceCloseParen.setTo((UChar)0x005D); // ] 40959d709d503bab6e2b61931737e662dd293b40578ccornelius } 41054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 41154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString ktPattern; 41254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius langData.get("localeDisplayPattern", "keyTypePattern", ktPattern); 41354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (ktPattern.isBogus()) { 41454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ktPattern = UnicodeString("{0}={1}", -1, US_INV); 41554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 41654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius keyTypeFormat = new MessageFormat(ktPattern, status); 41754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 41854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius uprv_memset(fCapitalization, 0, sizeof(fCapitalization)); 41954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if !UCONFIG_NO_BREAK_ITERATION 42054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // The following is basically copied from DateFormatSymbols::initializeData 42154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius typedef struct { 42254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius const char * usageName; 42354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius LocaleDisplayNamesImpl::CapContextUsage usageEnum; 42454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } ContextUsageNameToEnum; 42554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius const ContextUsageNameToEnum contextUsageTypeMap[] = { 42654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // Entries must be sorted by usageTypeName; entry with NULL name terminates list. 42754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "key", kCapContextUsageKey }, 428fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "keyValue", kCapContextUsageKeyValue }, 42954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "languages", kCapContextUsageLanguage }, 43054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "script", kCapContextUsageScript }, 43154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "territory", kCapContextUsageTerritory }, 43254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "variant", kCapContextUsageVariant }, 43354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { NULL, (CapContextUsage)0 }, 43454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius }; 435fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Only get the context data if we need it! This is a const object so we know now... 436fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Also check whether we will need a break iterator (depends on the data) 437fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UBool needBrkIter = FALSE; 438fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (capitalizationContext == UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU || capitalizationContext == UDISPCTX_CAPITALIZATION_FOR_STANDALONE) { 439fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius int32_t len = 0; 440fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UResourceBundle *localeBundle = ures_open(NULL, locale.getName(), &status); 44154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_SUCCESS(status)) { 442fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UResourceBundle *contextTransforms = ures_getByKeyWithFallback(localeBundle, "contextTransforms", NULL, &status); 443fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_SUCCESS(status)) { 444fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UResourceBundle *contextTransformUsage; 445fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius while ( (contextTransformUsage = ures_getNextResource(contextTransforms, NULL, &status)) != NULL ) { 446fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const int32_t * intVector = ures_getIntVector(contextTransformUsage, &len, &status); 447fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_SUCCESS(status) && intVector != NULL && len >= 2) { 448fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char* usageKey = ures_getKey(contextTransformUsage); 449fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (usageKey != NULL) { 450fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const ContextUsageNameToEnum * typeMapPtr = contextUsageTypeMap; 451fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius int32_t compResult = 0; 452fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // linear search; list is short and we cannot be sure that bsearch is available 453fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius while ( typeMapPtr->usageName != NULL && (compResult = uprv_strcmp(usageKey, typeMapPtr->usageName)) > 0 ) { 454fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius ++typeMapPtr; 455fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 456fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (typeMapPtr->usageName != NULL && compResult == 0) { 457fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius int32_t titlecaseInt = (capitalizationContext == UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU)? intVector[0]: intVector[1]; 458fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (titlecaseInt != 0) { 459fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius fCapitalization[typeMapPtr->usageEnum] = TRUE;; 460fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius needBrkIter = TRUE; 461fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 462fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 46354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 46454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 465fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius status = U_ZERO_ERROR; 466fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius ures_close(contextTransformUsage); 46754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 468fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius ures_close(contextTransforms); 46954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 470fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius ures_close(localeBundle); 471fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 472fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 473fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Get a sentence break iterator if we will need it 474fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (needBrkIter || capitalizationContext == UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE) { 475fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius status = U_ZERO_ERROR; 476fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius capitalizationBrkIter = BreakIterator::createSentenceInstance(locale, status); 477fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) { 478fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius delete capitalizationBrkIter; 479fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius capitalizationBrkIter = NULL; 48054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 48154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 48254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 48350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 48450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 48550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoLocaleDisplayNamesImpl::~LocaleDisplayNamesImpl() { 48659d709d503bab6e2b61931737e662dd293b40578ccornelius delete separatorFormat; 48754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius delete format; 48854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius delete keyTypeFormat; 489fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius delete capitalizationBrkIter; 49054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 49150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 49250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoconst Locale& 49350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoLocaleDisplayNamesImpl::getLocale() const { 49454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return locale; 49550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 49650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 49750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUDialectHandling 49850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoLocaleDisplayNamesImpl::getDialectHandling() const { 49954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return dialectHandling; 50054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius} 50154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 50254dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusUDisplayContext 50354dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusLocaleDisplayNamesImpl::getContext(UDisplayContextType type) const { 50454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius switch (type) { 50554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius case UDISPCTX_TYPE_DIALECT_HANDLING: 50654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return (UDisplayContext)dialectHandling; 50754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius case UDISPCTX_TYPE_CAPITALIZATION: 50854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return capitalizationContext; 50954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius default: 51054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius break; 51154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 51254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return (UDisplayContext)0; 51354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius} 51454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 51554dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusUnicodeString& 51654dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusLocaleDisplayNamesImpl::adjustForUsageAndContext(CapContextUsage usage, 51754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString& result) const { 51854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if !UCONFIG_NO_BREAK_ITERATION 51954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // check to see whether we need to titlecase result 520fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if ( result.length() > 0 && u_islower(result.char32At(0)) && capitalizationBrkIter!= NULL && 521fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius ( capitalizationContext==UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE || fCapitalization[usage] ) ) { 522fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // note fCapitalization[usage] won't be set unless capitalizationContext is UI_LIST_OR_MENU or STANDALONE 523fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius result.toTitle(capitalizationBrkIter, locale, U_TITLECASE_NO_LOWERCASE | U_TITLECASE_NO_BREAK_ADJUSTMENT); 52454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 52554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 52654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return result; 52750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 52850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 52950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString& 53050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoLocaleDisplayNamesImpl::localeDisplayName(const Locale& locale, 53150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const { 53250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString resultName; 53350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 53450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char* lang = locale.getLanguage(); 53550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (uprv_strlen(lang) == 0) { 53650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho lang = "root"; 53750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 53850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char* script = locale.getScript(); 53950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char* country = locale.getCountry(); 54050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char* variant = locale.getVariant(); 54150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 54250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool hasScript = uprv_strlen(script) > 0; 54350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool hasCountry = uprv_strlen(country) > 0; 54450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool hasVariant = uprv_strlen(variant) > 0; 54550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 54650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (dialectHandling == ULDN_DIALECT_NAMES) { 54750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho char buffer[ULOC_FULLNAME_CAPACITY]; 54850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho do { // loop construct is so we can break early out of search 54950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (hasScript && hasCountry) { 55050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ncat(buffer, ULOC_FULLNAME_CAPACITY, lang, "_", script, "_", country, (char *)0); 55150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho localeIdName(buffer, resultName); 55250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (!resultName.isBogus()) { 55350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho hasScript = FALSE; 55450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho hasCountry = FALSE; 55550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 55650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 55750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 55850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (hasScript) { 55950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ncat(buffer, ULOC_FULLNAME_CAPACITY, lang, "_", script, (char *)0); 56050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho localeIdName(buffer, resultName); 56150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (!resultName.isBogus()) { 56250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho hasScript = FALSE; 56350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 56450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 56550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 56650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (hasCountry) { 56750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ncat(buffer, ULOC_FULLNAME_CAPACITY, lang, "_", country, (char*)0); 56850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho localeIdName(buffer, resultName); 56950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (!resultName.isBogus()) { 57050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho hasCountry = FALSE; 57150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 57250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 57350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 57450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } while (FALSE); 57550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 57650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (resultName.isBogus() || resultName.isEmpty()) { 57750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho localeIdName(lang, resultName); 57850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 57950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 58050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString resultRemainder; 58150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString temp; 58250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho StringEnumeration *e = NULL; 58350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 58450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 58550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (hasScript) { 58650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho resultRemainder.append(scriptDisplayName(script, temp)); 58750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 58850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (hasCountry) { 58950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho appendWithSep(resultRemainder, regionDisplayName(country, temp)); 59050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 59150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (hasVariant) { 59250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho appendWithSep(resultRemainder, variantDisplayName(variant, temp)); 59350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 59459d709d503bab6e2b61931737e662dd293b40578ccornelius resultRemainder.findAndReplace(formatOpenParen, formatReplaceOpenParen); 59559d709d503bab6e2b61931737e662dd293b40578ccornelius resultRemainder.findAndReplace(formatCloseParen, formatReplaceCloseParen); 59650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 59750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho e = locale.createKeywords(status); 59850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (e && U_SUCCESS(status)) { 59950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString temp2; 60050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho char value[ULOC_KEYWORD_AND_VALUES_CAPACITY]; // sigh, no ULOC_VALUE_CAPACITY 60150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char* key; 60250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho while ((key = e->next((int32_t *)0, status)) != NULL) { 60350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho locale.getKeywordValue(key, value, ULOC_KEYWORD_AND_VALUES_CAPACITY, status); 604103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius keyDisplayName(key, temp); 60559d709d503bab6e2b61931737e662dd293b40578ccornelius temp.findAndReplace(formatOpenParen, formatReplaceOpenParen); 60659d709d503bab6e2b61931737e662dd293b40578ccornelius temp.findAndReplace(formatCloseParen, formatReplaceCloseParen); 607103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius keyValueDisplayName(key, value, temp2); 60859d709d503bab6e2b61931737e662dd293b40578ccornelius temp2.findAndReplace(formatOpenParen, formatReplaceOpenParen); 60959d709d503bab6e2b61931737e662dd293b40578ccornelius temp2.findAndReplace(formatCloseParen, formatReplaceCloseParen); 610103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (temp2 != UnicodeString(value, -1, US_INV)) { 611103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius appendWithSep(resultRemainder, temp2); 612103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else if (temp != UnicodeString(key, -1, US_INV)) { 613103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString temp3; 614103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Formattable data[] = { 615103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius temp, 616103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius temp2 617103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius }; 618103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius FieldPosition fpos; 619103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius status = U_ZERO_ERROR; 620103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius keyTypeFormat->format(data, 2, temp3, fpos, status); 621103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius appendWithSep(resultRemainder, temp3); 622103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else { 623103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius appendWithSep(resultRemainder, temp) 624b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho .append((UChar)0x3d /* = */) 625103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius .append(temp2); 626103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 62750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 62850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete e; 62950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 63050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 63150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (!resultRemainder.isEmpty()) { 63250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Formattable data[] = { 63350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho resultName, 63450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho resultRemainder 63550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }; 63650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FieldPosition fpos; 63750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho status = U_ZERO_ERROR; 63850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho format->format(data, 2, result, fpos, status); 63954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return adjustForUsageAndContext(kCapContextUsageLanguage, result); 64050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 64150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 64254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius result = resultName; 64354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return adjustForUsageAndContext(kCapContextUsageLanguage, result); 64450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 64550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 64650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString& 64750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoLocaleDisplayNamesImpl::appendWithSep(UnicodeString& buffer, const UnicodeString& src) const { 64859d709d503bab6e2b61931737e662dd293b40578ccornelius if (buffer.isEmpty()) { 64959d709d503bab6e2b61931737e662dd293b40578ccornelius buffer.setTo(src); 65059d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 65159d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString combined; 65259d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable data[] = { 65359d709d503bab6e2b61931737e662dd293b40578ccornelius buffer, 65459d709d503bab6e2b61931737e662dd293b40578ccornelius src 65559d709d503bab6e2b61931737e662dd293b40578ccornelius }; 65659d709d503bab6e2b61931737e662dd293b40578ccornelius FieldPosition fpos; 65759d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 65859d709d503bab6e2b61931737e662dd293b40578ccornelius separatorFormat->format(data, 2, combined, fpos, status); 65959d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_SUCCESS(status)) { 66059d709d503bab6e2b61931737e662dd293b40578ccornelius buffer.setTo(combined); 66159d709d503bab6e2b61931737e662dd293b40578ccornelius } 66254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 66354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return buffer; 66450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 66550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 66650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString& 66750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoLocaleDisplayNamesImpl::localeDisplayName(const char* localeId, 66850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const { 66954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return localeDisplayName(Locale(localeId), result); 67050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 67150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 67254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius// private 67350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString& 67450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoLocaleDisplayNamesImpl::localeIdName(const char* localeId, 67550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const { 67654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return langData.getNoFallback("Languages", localeId, result); 67750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 67850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 67950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString& 68050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoLocaleDisplayNamesImpl::languageDisplayName(const char* lang, 68150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const { 68254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (uprv_strcmp("root", lang) == 0 || uprv_strchr(lang, '_') != NULL) { 68354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return result = UnicodeString(lang, -1, US_INV); 68454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 68554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius langData.get("Languages", lang, result); 68654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return adjustForUsageAndContext(kCapContextUsageLanguage, result); 68750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 68850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 68950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString& 69050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoLocaleDisplayNamesImpl::scriptDisplayName(const char* script, 69150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const { 69254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius langData.get("Scripts", script, result); 69354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return adjustForUsageAndContext(kCapContextUsageScript, result); 69450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 69550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 69650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString& 69750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoLocaleDisplayNamesImpl::scriptDisplayName(UScriptCode scriptCode, 69850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const { 69954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius const char* name = uscript_getName(scriptCode); 70054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius langData.get("Scripts", name, result); 70154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return adjustForUsageAndContext(kCapContextUsageScript, result); 70250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 70350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 70450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString& 70550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoLocaleDisplayNamesImpl::regionDisplayName(const char* region, 70650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const { 70754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius regionData.get("Countries", region, result); 70854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return adjustForUsageAndContext(kCapContextUsageTerritory, result); 70950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 71050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 71150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString& 71250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoLocaleDisplayNamesImpl::variantDisplayName(const char* variant, 71350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const { 71454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius langData.get("Variants", variant, result); 71554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return adjustForUsageAndContext(kCapContextUsageVariant, result); 71650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 71750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 71850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString& 71950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoLocaleDisplayNamesImpl::keyDisplayName(const char* key, 72050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const { 72154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius langData.get("Keys", key, result); 72254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return adjustForUsageAndContext(kCapContextUsageKey, result); 72350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 72450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 72550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString& 72650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoLocaleDisplayNamesImpl::keyValueDisplayName(const char* key, 72750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char* value, 72850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& result) const { 72954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius langData.get("Types", key, value, result); 730fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return adjustForUsageAndContext(kCapContextUsageKeyValue, result); 73150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 73250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 73350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//////////////////////////////////////////////////////////////////////////////////////////////////// 73450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 73550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoLocaleDisplayNames* 73650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoLocaleDisplayNames::createInstance(const Locale& locale, 73750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UDialectHandling dialectHandling) { 73854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return new LocaleDisplayNamesImpl(locale, dialectHandling); 73954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius} 74054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 74154dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusLocaleDisplayNames* 74254dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusLocaleDisplayNames::createInstance(const Locale& locale, 74354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UDisplayContext *contexts, int32_t length) { 74454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (contexts == NULL) { 74554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius length = 0; 74654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 74754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return new LocaleDisplayNamesImpl(locale, contexts, length); 74850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 74950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 75050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_NAMESPACE_END 75150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 75250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//////////////////////////////////////////////////////////////////////////////////////////////////// 75350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 75450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_NAMESPACE_USE 75550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 75654dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI ULocaleDisplayNames * U_EXPORT2 75750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehouldn_open(const char * locale, 75850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UDialectHandling dialectHandling, 75950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode *pErrorCode) { 76050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_FAILURE(*pErrorCode)) { 76150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return 0; 76250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 76350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (locale == NULL) { 76450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho locale = uloc_getDefault(); 76550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 76650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return (ULocaleDisplayNames *)LocaleDisplayNames::createInstance(Locale(locale), dialectHandling); 76750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 76850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 76954dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI ULocaleDisplayNames * U_EXPORT2 77054dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusuldn_openForContext(const char * locale, 77154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UDisplayContext *contexts, int32_t length, 77254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UErrorCode *pErrorCode) { 77354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_FAILURE(*pErrorCode)) { 77454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return 0; 77554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 77654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (locale == NULL) { 77754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius locale = uloc_getDefault(); 77854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 77954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return (ULocaleDisplayNames *)LocaleDisplayNames::createInstance(Locale(locale), contexts, length); 78054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius} 78154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 78254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 78354dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI void U_EXPORT2 78450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehouldn_close(ULocaleDisplayNames *ldn) { 78550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete (LocaleDisplayNames *)ldn; 78650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 78750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 78854dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI const char * U_EXPORT2 78950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehouldn_getLocale(const ULocaleDisplayNames *ldn) { 79050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (ldn) { 79150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return ((const LocaleDisplayNames *)ldn)->getLocale().getName(); 79250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 79350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return NULL; 79450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 79550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 79654dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI UDialectHandling U_EXPORT2 79750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehouldn_getDialectHandling(const ULocaleDisplayNames *ldn) { 79850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (ldn) { 79950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return ((const LocaleDisplayNames *)ldn)->getDialectHandling(); 80050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 80150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return ULDN_STANDARD_NAMES; 80250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 80350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 80454dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI UDisplayContext U_EXPORT2 80554dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusuldn_getContext(const ULocaleDisplayNames *ldn, 80654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UDisplayContextType type, 80754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UErrorCode *pErrorCode) { 80854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_FAILURE(*pErrorCode)) { 80954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return (UDisplayContext)0; 81054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 81154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return ((const LocaleDisplayNames *)ldn)->getContext(type); 81254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius} 81354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 81454dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI int32_t U_EXPORT2 81550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehouldn_localeDisplayName(const ULocaleDisplayNames *ldn, 81650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *locale, 81750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UChar *result, 81850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t maxResultSize, 81950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode *pErrorCode) { 82050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_FAILURE(*pErrorCode)) { 82150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return 0; 82250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 82350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (ldn == NULL || locale == NULL || (result == NULL && maxResultSize > 0) || maxResultSize < 0) { 82450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR; 82550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return 0; 82650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 82750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString temp(result, 0, maxResultSize); 82850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ((const LocaleDisplayNames *)ldn)->localeDisplayName(locale, temp); 82950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return temp.extract(result, maxResultSize, *pErrorCode); 83050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 83150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 83254dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI int32_t U_EXPORT2 83350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehouldn_languageDisplayName(const ULocaleDisplayNames *ldn, 83450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *lang, 83550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UChar *result, 83650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t maxResultSize, 83750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode *pErrorCode) { 83850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_FAILURE(*pErrorCode)) { 83950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return 0; 84050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 84150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (ldn == NULL || lang == NULL || (result == NULL && maxResultSize > 0) || maxResultSize < 0) { 84250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR; 84350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return 0; 84450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 84550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString temp(result, 0, maxResultSize); 84650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ((const LocaleDisplayNames *)ldn)->languageDisplayName(lang, temp); 84750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return temp.extract(result, maxResultSize, *pErrorCode); 84850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 84950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 85054dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI int32_t U_EXPORT2 85150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehouldn_scriptDisplayName(const ULocaleDisplayNames *ldn, 85250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *script, 85350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UChar *result, 85450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t maxResultSize, 85550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode *pErrorCode) { 85650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_FAILURE(*pErrorCode)) { 85750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return 0; 85850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 85950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (ldn == NULL || script == NULL || (result == NULL && maxResultSize > 0) || maxResultSize < 0) { 86050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR; 86150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return 0; 86250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 86350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString temp(result, 0, maxResultSize); 86450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ((const LocaleDisplayNames *)ldn)->scriptDisplayName(script, temp); 86550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return temp.extract(result, maxResultSize, *pErrorCode); 86650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 86750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 86854dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI int32_t U_EXPORT2 86950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehouldn_scriptCodeDisplayName(const ULocaleDisplayNames *ldn, 87050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UScriptCode scriptCode, 87150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UChar *result, 87250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t maxResultSize, 87350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode *pErrorCode) { 87450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return uldn_scriptDisplayName(ldn, uscript_getName(scriptCode), result, maxResultSize, pErrorCode); 87550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 87650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 87754dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI int32_t U_EXPORT2 87850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehouldn_regionDisplayName(const ULocaleDisplayNames *ldn, 87950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *region, 88050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UChar *result, 88150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t maxResultSize, 88250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode *pErrorCode) { 88350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_FAILURE(*pErrorCode)) { 88450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return 0; 88550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 88650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (ldn == NULL || region == NULL || (result == NULL && maxResultSize > 0) || maxResultSize < 0) { 88750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR; 88850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return 0; 88950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 89050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString temp(result, 0, maxResultSize); 89150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ((const LocaleDisplayNames *)ldn)->regionDisplayName(region, temp); 89250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return temp.extract(result, maxResultSize, *pErrorCode); 89350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 89450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 89554dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI int32_t U_EXPORT2 89650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehouldn_variantDisplayName(const ULocaleDisplayNames *ldn, 89750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *variant, 89850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UChar *result, 89950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t maxResultSize, 90050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode *pErrorCode) { 90150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_FAILURE(*pErrorCode)) { 90250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return 0; 90350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 90450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (ldn == NULL || variant == NULL || (result == NULL && maxResultSize > 0) || maxResultSize < 0) { 90550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR; 90650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return 0; 90750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 90850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString temp(result, 0, maxResultSize); 90950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ((const LocaleDisplayNames *)ldn)->variantDisplayName(variant, temp); 91050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return temp.extract(result, maxResultSize, *pErrorCode); 91150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 91250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 91354dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI int32_t U_EXPORT2 91450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehouldn_keyDisplayName(const ULocaleDisplayNames *ldn, 91550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *key, 91650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UChar *result, 91750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t maxResultSize, 91850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode *pErrorCode) { 91950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_FAILURE(*pErrorCode)) { 92050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return 0; 92150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 92250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (ldn == NULL || key == NULL || (result == NULL && maxResultSize > 0) || maxResultSize < 0) { 92350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR; 92450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return 0; 92550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 92650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString temp(result, 0, maxResultSize); 92750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ((const LocaleDisplayNames *)ldn)->keyDisplayName(key, temp); 92850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return temp.extract(result, maxResultSize, *pErrorCode); 92950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 93050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 93154dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI int32_t U_EXPORT2 93250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehouldn_keyValueDisplayName(const ULocaleDisplayNames *ldn, 93350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *key, 93450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *value, 93550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UChar *result, 93650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t maxResultSize, 93750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode *pErrorCode) { 93850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_FAILURE(*pErrorCode)) { 93950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return 0; 94050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 94150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (ldn == NULL || key == NULL || value == NULL || (result == NULL && maxResultSize > 0) 94250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho || maxResultSize < 0) { 94350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR; 94450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return 0; 94550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 94650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString temp(result, 0, maxResultSize); 94750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ((const LocaleDisplayNames *)ldn)->keyValueDisplayName(key, value, temp); 94850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return temp.extract(result, maxResultSize, *pErrorCode); 94950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 95050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 95150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif 952