/** ******************************************************************************* * Copyright (C) 2001-2005, 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(", bundle: "); return result.append(_bundleName); } UnicodeString& ICUResourceBundleFactory::debugClass(UnicodeString& result) const { return result.append("ICUResourceBundleFactory"); } #endif UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ICUResourceBundleFactory) U_NAMESPACE_END /* !UCONFIG_NO_SERVICE */ #endif