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