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