12e5b6d6dSopenharmony_ci// © 2016 and later: Unicode, Inc. and others. 22e5b6d6dSopenharmony_ci// License & terms of use: http://www.unicode.org/copyright.html 32e5b6d6dSopenharmony_ci/** 42e5b6d6dSopenharmony_ci ******************************************************************************* 52e5b6d6dSopenharmony_ci * Copyright (C) 2001-2014, International Business Machines Corporation and * 62e5b6d6dSopenharmony_ci * others. All Rights Reserved. * 72e5b6d6dSopenharmony_ci ******************************************************************************* 82e5b6d6dSopenharmony_ci * 92e5b6d6dSopenharmony_ci ******************************************************************************* 102e5b6d6dSopenharmony_ci */ 112e5b6d6dSopenharmony_ci#include "unicode/utypes.h" 122e5b6d6dSopenharmony_ci 132e5b6d6dSopenharmony_ci#if !UCONFIG_NO_SERVICE 142e5b6d6dSopenharmony_ci 152e5b6d6dSopenharmony_ci#include "unicode/resbund.h" 162e5b6d6dSopenharmony_ci#include "uresimp.h" 172e5b6d6dSopenharmony_ci#include "cmemory.h" 182e5b6d6dSopenharmony_ci#include "servloc.h" 192e5b6d6dSopenharmony_ci#include "ustrfmt.h" 202e5b6d6dSopenharmony_ci#include "uhash.h" 212e5b6d6dSopenharmony_ci#include "charstr.h" 222e5b6d6dSopenharmony_ci#include "ucln_cmn.h" 232e5b6d6dSopenharmony_ci#include "uassert.h" 242e5b6d6dSopenharmony_ci 252e5b6d6dSopenharmony_ci#define UNDERSCORE_CHAR ((UChar)0x005f) 262e5b6d6dSopenharmony_ci#define AT_SIGN_CHAR ((UChar)64) 272e5b6d6dSopenharmony_ci#define PERIOD_CHAR ((UChar)46) 282e5b6d6dSopenharmony_ci 292e5b6d6dSopenharmony_ciU_NAMESPACE_BEGIN 302e5b6d6dSopenharmony_ci 312e5b6d6dSopenharmony_ciICUResourceBundleFactory::ICUResourceBundleFactory() 322e5b6d6dSopenharmony_ci : LocaleKeyFactory(VISIBLE) 332e5b6d6dSopenharmony_ci , _bundleName() 342e5b6d6dSopenharmony_ci{ 352e5b6d6dSopenharmony_ci} 362e5b6d6dSopenharmony_ci 372e5b6d6dSopenharmony_ciICUResourceBundleFactory::ICUResourceBundleFactory(const UnicodeString& bundleName) 382e5b6d6dSopenharmony_ci : LocaleKeyFactory(VISIBLE) 392e5b6d6dSopenharmony_ci , _bundleName(bundleName) 402e5b6d6dSopenharmony_ci{ 412e5b6d6dSopenharmony_ci} 422e5b6d6dSopenharmony_ci 432e5b6d6dSopenharmony_ciICUResourceBundleFactory::~ICUResourceBundleFactory() {} 442e5b6d6dSopenharmony_ci 452e5b6d6dSopenharmony_ciconst Hashtable* 462e5b6d6dSopenharmony_ciICUResourceBundleFactory::getSupportedIDs(UErrorCode& status) const 472e5b6d6dSopenharmony_ci{ 482e5b6d6dSopenharmony_ci if (U_SUCCESS(status)) { 492e5b6d6dSopenharmony_ci return LocaleUtility::getAvailableLocaleNames(_bundleName); 502e5b6d6dSopenharmony_ci } 512e5b6d6dSopenharmony_ci return NULL; 522e5b6d6dSopenharmony_ci} 532e5b6d6dSopenharmony_ci 542e5b6d6dSopenharmony_ciUObject* 552e5b6d6dSopenharmony_ciICUResourceBundleFactory::handleCreate(const Locale& loc, int32_t /* kind */, const ICUService* /* service */, UErrorCode& status) const 562e5b6d6dSopenharmony_ci{ 572e5b6d6dSopenharmony_ci if (U_SUCCESS(status)) { 582e5b6d6dSopenharmony_ci // _bundleName is a package name 592e5b6d6dSopenharmony_ci // and should only contain invariant characters 602e5b6d6dSopenharmony_ci // ??? is it always true that the max length of the bundle name is 19? 612e5b6d6dSopenharmony_ci // who made this change? -- dlf 622e5b6d6dSopenharmony_ci char pkg[20]; 632e5b6d6dSopenharmony_ci int32_t length; 642e5b6d6dSopenharmony_ci length=_bundleName.extract(0, INT32_MAX, pkg, (int32_t)sizeof(pkg), US_INV); 652e5b6d6dSopenharmony_ci if(length>=(int32_t)sizeof(pkg)) { 662e5b6d6dSopenharmony_ci return NULL; 672e5b6d6dSopenharmony_ci } 682e5b6d6dSopenharmony_ci return new ResourceBundle(pkg, loc, status); 692e5b6d6dSopenharmony_ci } 702e5b6d6dSopenharmony_ci return NULL; 712e5b6d6dSopenharmony_ci} 722e5b6d6dSopenharmony_ci 732e5b6d6dSopenharmony_ci#ifdef SERVICE_DEBUG 742e5b6d6dSopenharmony_ciUnicodeString& 752e5b6d6dSopenharmony_ciICUResourceBundleFactory::debug(UnicodeString& result) const 762e5b6d6dSopenharmony_ci{ 772e5b6d6dSopenharmony_ci LocaleKeyFactory::debug(result); 782e5b6d6dSopenharmony_ci result.append((UnicodeString)", bundle: "); 792e5b6d6dSopenharmony_ci return result.append(_bundleName); 802e5b6d6dSopenharmony_ci} 812e5b6d6dSopenharmony_ci 822e5b6d6dSopenharmony_ciUnicodeString& 832e5b6d6dSopenharmony_ciICUResourceBundleFactory::debugClass(UnicodeString& result) const 842e5b6d6dSopenharmony_ci{ 852e5b6d6dSopenharmony_ci return result.append((UnicodeString)"ICUResourceBundleFactory"); 862e5b6d6dSopenharmony_ci} 872e5b6d6dSopenharmony_ci#endif 882e5b6d6dSopenharmony_ci 892e5b6d6dSopenharmony_ciUOBJECT_DEFINE_RTTI_IMPLEMENTATION(ICUResourceBundleFactory) 902e5b6d6dSopenharmony_ci 912e5b6d6dSopenharmony_ciU_NAMESPACE_END 922e5b6d6dSopenharmony_ci 932e5b6d6dSopenharmony_ci/* !UCONFIG_NO_SERVICE */ 942e5b6d6dSopenharmony_ci#endif 952e5b6d6dSopenharmony_ci 962e5b6d6dSopenharmony_ci 97