1// © 2016 and later: Unicode, Inc. and others. 2// License & terms of use: http://www.unicode.org/copyright.html 3/** 4 ******************************************************************************* 5 * Copyright (C) 2001-2014, International Business Machines Corporation and * 6 * others. All Rights Reserved. * 7 ******************************************************************************* 8 * 9 ******************************************************************************* 10 */ 11#include "unicode/utypes.h" 12 13#if !UCONFIG_NO_SERVICE 14 15#include "unicode/resbund.h" 16#include "uresimp.h" 17#include "cmemory.h" 18#include "servloc.h" 19#include "ustrfmt.h" 20#include "uhash.h" 21#include "charstr.h" 22#include "ucln_cmn.h" 23#include "uassert.h" 24 25#define UNDERSCORE_CHAR ((UChar)0x005f) 26#define AT_SIGN_CHAR ((UChar)64) 27#define PERIOD_CHAR ((UChar)46) 28 29U_NAMESPACE_BEGIN 30 31ICUResourceBundleFactory::ICUResourceBundleFactory() 32 : LocaleKeyFactory(VISIBLE) 33 , _bundleName() 34{ 35} 36 37ICUResourceBundleFactory::ICUResourceBundleFactory(const UnicodeString& bundleName) 38 : LocaleKeyFactory(VISIBLE) 39 , _bundleName(bundleName) 40{ 41} 42 43ICUResourceBundleFactory::~ICUResourceBundleFactory() {} 44 45const Hashtable* 46ICUResourceBundleFactory::getSupportedIDs(UErrorCode& status) const 47{ 48 if (U_SUCCESS(status)) { 49 return LocaleUtility::getAvailableLocaleNames(_bundleName); 50 } 51 return NULL; 52} 53 54UObject* 55ICUResourceBundleFactory::handleCreate(const Locale& loc, int32_t /* kind */, const ICUService* /* service */, UErrorCode& status) const 56{ 57 if (U_SUCCESS(status)) { 58 // _bundleName is a package name 59 // and should only contain invariant characters 60 // ??? is it always true that the max length of the bundle name is 19? 61 // who made this change? -- dlf 62 char pkg[20]; 63 int32_t length; 64 length=_bundleName.extract(0, INT32_MAX, pkg, (int32_t)sizeof(pkg), US_INV); 65 if(length>=(int32_t)sizeof(pkg)) { 66 return NULL; 67 } 68 return new ResourceBundle(pkg, loc, status); 69 } 70 return NULL; 71} 72 73#ifdef SERVICE_DEBUG 74UnicodeString& 75ICUResourceBundleFactory::debug(UnicodeString& result) const 76{ 77 LocaleKeyFactory::debug(result); 78 result.append((UnicodeString)", bundle: "); 79 return result.append(_bundleName); 80} 81 82UnicodeString& 83ICUResourceBundleFactory::debugClass(UnicodeString& result) const 84{ 85 return result.append((UnicodeString)"ICUResourceBundleFactory"); 86} 87#endif 88 89UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ICUResourceBundleFactory) 90 91U_NAMESPACE_END 92 93/* !UCONFIG_NO_SERVICE */ 94#endif 95 96 97