| // © 2016 and later: Unicode, Inc. and others. |
| // License & terms of use: http://www.unicode.org/copyright.html |
| /** |
| ******************************************************************************* |
| * Copyright (C) 2001-2014, International Business Machines Corporation and * |
| * others. All Rights Reserved. * |
| ******************************************************************************* |
| * |
| ******************************************************************************* |
| */ |
| #include "unicode/utypes.h" |
| |
| #if !UCONFIG_NO_SERVICE |
| |
| #include "unicode/resbund.h" |
| #include "uresimp.h" |
| #include "cmemory.h" |
| #include "servloc.h" |
| #include "ustrfmt.h" |
| #include "uhash.h" |
| #include "charstr.h" |
| #include "ucln_cmn.h" |
| #include "uassert.h" |
| |
| #define UNDERSCORE_CHAR ((UChar)0x005f) |
| #define AT_SIGN_CHAR ((UChar)64) |
| #define PERIOD_CHAR ((UChar)46) |
| |
| U_NAMESPACE_BEGIN |
| |
| ICUResourceBundleFactory::ICUResourceBundleFactory() |
| : LocaleKeyFactory(VISIBLE) |
| , _bundleName() |
| { |
| } |
| |
| ICUResourceBundleFactory::ICUResourceBundleFactory(const UnicodeString& bundleName) |
| : LocaleKeyFactory(VISIBLE) |
| , _bundleName(bundleName) |
| { |
| } |
| |
| ICUResourceBundleFactory::~ICUResourceBundleFactory() {} |
| |
| const Hashtable* |
| ICUResourceBundleFactory::getSupportedIDs(UErrorCode& status) const |
| { |
| if (U_SUCCESS(status)) { |
| return LocaleUtility::getAvailableLocaleNames(_bundleName); |
| } |
| return NULL; |
| } |
| |
| UObject* |
| ICUResourceBundleFactory::handleCreate(const Locale& loc, int32_t /* kind */, const ICUService* /* service */, UErrorCode& status) const |
| { |
| if (U_SUCCESS(status)) { |
| // _bundleName is a package name |
| // and should only contain invariant characters |
| // ??? is it always true that the max length of the bundle name is 19? |
| // who made this change? -- dlf |
| char pkg[20]; |
| int32_t length; |
| length=_bundleName.extract(0, INT32_MAX, pkg, (int32_t)sizeof(pkg), US_INV); |
| if(length>=(int32_t)sizeof(pkg)) { |
| return NULL; |
| } |
| return new ResourceBundle(pkg, loc, status); |
| } |
| return NULL; |
| } |
| |
| #ifdef SERVICE_DEBUG |
| UnicodeString& |
| ICUResourceBundleFactory::debug(UnicodeString& result) const |
| { |
| LocaleKeyFactory::debug(result); |
| result.append((UnicodeString)", bundle: "); |
| return result.append(_bundleName); |
| } |
| |
| UnicodeString& |
| ICUResourceBundleFactory::debugClass(UnicodeString& result) const |
| { |
| return result.append((UnicodeString)"ICUResourceBundleFactory"); |
| } |
| #endif |
| |
| UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ICUResourceBundleFactory) |
| |
| U_NAMESPACE_END |
| |
| /* !UCONFIG_NO_SERVICE */ |
| #endif |
| |
| |