X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/73c04bcfe1096173b00431f0cdc742894b15eef0..HEAD:/icuSources/common/unicode/ures.h diff --git a/icuSources/common/unicode/ures.h b/icuSources/common/unicode/ures.h index f6e3b347..839779fa 100644 --- a/icuSources/common/unicode/ures.h +++ b/icuSources/common/unicode/ures.h @@ -1,6 +1,8 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** -* Copyright (C) 1997-2006, International Business Machines +* Copyright (C) 1997-2016, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * @@ -12,9 +14,9 @@ * 04/01/97 aliu Creation. * 02/22/99 damiba overhaul. * 04/04/99 helena Fixed internal header inclusion. -* 04/15/99 Madhu Updated Javadoc +* 04/15/99 Madhu Updated Javadoc * 06/14/99 stephen Removed functions taking a filename suffix. -* 07/20/99 stephen Language-independent ypedef to void* +* 07/20/99 stephen Language-independent typedef to void* * 11/09/99 weiv Added ures_getLocale() * 06/24/02 weiv Added support for resource sharing ****************************************************************************** @@ -25,10 +27,11 @@ #include "unicode/utypes.h" #include "unicode/uloc.h" +#include "unicode/localpointer.h" /** * \file - * \brief C API: Resource Bundle + * \brief C API: Resource Bundle * *

C API: Resource Bundle

* @@ -38,9 +41,9 @@ * locale and then ask it for individual resources. *

* Resource bundles in ICU4C are currently defined using text files which conform to the following - * BNF definition. - * More on resource bundle concepts and syntax can be found in the - * Users Guide. + * BNF definition. + * More on resource bundle concepts and syntax can be found in the + * Users Guide. *

*/ @@ -82,18 +85,6 @@ typedef enum { */ URES_ALIAS=3, -#ifndef U_HIDE_INTERNAL_API - - /** - * Internal use only. - * Alternative resource type constant for tables of key-value pairs. - * Never returned by ures_getType(). - * @internal - */ - URES_TABLE32=4, - -#endif /* U_HIDE_INTERNAL_API */ - /** * Resource type constant for a single 28-bit integer, interpreted as * signed or unsigned by the ures_getInt() or ures_getUInt() function. @@ -130,10 +121,14 @@ typedef enum { /** @deprecated ICU 2.6 Use the URES_ constant instead. */ RES_INT_VECTOR=URES_INT_VECTOR, /** @deprecated ICU 2.6 Not used. */ - RES_RESERVED=15, -#endif /* U_HIDE_DEPRECATED_API */ + RES_RESERVED=15, + /** + * One more than the highest normal UResType value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ URES_LIMIT = 16 +#endif // U_HIDE_DEPRECATED_API } UResType; /* @@ -143,17 +138,17 @@ typedef enum { /** * Opens a UResourceBundle, from which users can extract strings by using * their corresponding keys. - * Note that the caller is responsible of calling ures_close on each succesfully + * Note that the caller is responsible of calling ures_close on each successfully * opened resource bundle. - * @param packageName The packageName and locale together point to an ICU udata object, - * as defined by udata_open( packageName, "res", locale, err) + * @param packageName The packageName and locale together point to an ICU udata object, + * as defined by udata_open( packageName, "res", locale, err) * or equivalent. Typically, packageName will refer to a (.dat) file, or to * a package registered with udata_setAppData(). Using a full file or directory * pathname for packageName is deprecated. If NULL, ICU data will be used. * @param locale specifies the locale for which we want to open the resource * if NULL, the default locale will be used. If strlen(locale) == 0 * root locale will be used. - * + * * @param status fills in the outgoing error code. * The UErrorCode err parameter is used to return status information to the user. To * check whether the construction succeeded or not, you should check the value of @@ -161,39 +156,39 @@ typedef enum { * informational status results which still indicate success. U_USING_FALLBACK_WARNING * indicates that a fall back locale was used. For example, 'de_CH' was requested, * but nothing was found there, so 'de' was used. U_USING_DEFAULT_WARNING indicates that - * the default locale data or root locale data was used; neither the requested locale - * nor any of its fall back locales could be found. Please see the users guide for more + * the default locale data or root locale data was used; neither the requested locale + * nor any of its fall back locales could be found. Please see the users guide for more * information on this topic. * @return a newly allocated resource bundle. * @see ures_close * @stable ICU 2.0 */ -U_STABLE UResourceBundle* U_EXPORT2 +U_STABLE UResourceBundle* U_EXPORT2 ures_open(const char* packageName, - const char* locale, + const char* locale, UErrorCode* status); -/** This function does not care what kind of localeID is passed in. It simply opens a bundle with +/** This function does not care what kind of localeID is passed in. It simply opens a bundle with * that name. Fallback mechanism is disabled for the new bundle. If the requested bundle contains * an %%ALIAS directive, the results are undefined. - * @param packageName The packageName and locale together point to an ICU udata object, - * as defined by udata_open( packageName, "res", locale, err) + * @param packageName The packageName and locale together point to an ICU udata object, + * as defined by udata_open( packageName, "res", locale, err) * or equivalent. Typically, packageName will refer to a (.dat) file, or to * a package registered with udata_setAppData(). Using a full file or directory * pathname for packageName is deprecated. If NULL, ICU data will be used. * @param locale specifies the locale for which we want to open the resource * if NULL, the default locale will be used. If strlen(locale) == 0 * root locale will be used. - * + * * @param status fills in the outgoing error code. Either U_ZERO_ERROR or U_MISSING_RESOURCE_ERROR * @return a newly allocated resource bundle or NULL if it doesn't exist. * @see ures_close * @stable ICU 2.0 */ -U_STABLE UResourceBundle* U_EXPORT2 -ures_openDirect(const char* packageName, - const char* locale, +U_STABLE UResourceBundle* U_EXPORT2 +ures_openDirect(const char* packageName, + const char* locale, UErrorCode* status); /** @@ -201,8 +196,8 @@ ures_openDirect(const char* packageName, * This path will be converted to char * using the default converter, * then ures_open() is called. * - * @param packageName The packageName and locale together point to an ICU udata object, - * as defined by udata_open( packageName, "res", locale, err) + * @param packageName The packageName and locale together point to an ICU udata object, + * as defined by udata_open( packageName, "res", locale, err) * or equivalent. Typically, packageName will refer to a (.dat) file, or to * a package registered with udata_setAppData(). Using a full file or directory * pathname for packageName is deprecated. If NULL, ICU data will be used. @@ -214,20 +209,21 @@ ures_openDirect(const char* packageName, * @see ures_open * @stable ICU 2.0 */ -U_STABLE UResourceBundle* U_EXPORT2 -ures_openU(const UChar* packageName, - const char* locale, +U_STABLE UResourceBundle* U_EXPORT2 +ures_openU(const UChar* packageName, + const char* locale, UErrorCode* status); +#ifndef U_HIDE_DEPRECATED_API /** * Returns the number of strings/arrays in resource bundles. - * Better to use ures_getSize, as this function will be deprecated. + * Better to use ures_getSize, as this function will be deprecated. * *@param resourceBundle resource bundle containing the desired strings *@param resourceKey key tagging the resource *@param err fills in the outgoing error code * could be U_MISSING_RESOURCE_ERROR if the key is not found - * could be a non-failing error + * could be a non-failing error * e.g.: U_USING_FALLBACK_WARNING,U_USING_FALLBACK_WARNING *@return: for Arrays: returns the number of resources in the array * Tables: returns the number of resources in the table @@ -235,10 +231,12 @@ ures_openU(const UChar* packageName, *@see ures_getSize * @deprecated ICU 2.8 User ures_getSize instead */ -U_DEPRECATED int32_t U_EXPORT2 +U_DEPRECATED int32_t U_EXPORT2 ures_countArrayItems(const UResourceBundle* resourceBundle, const char* resourceKey, UErrorCode* err); +#endif /* U_HIDE_DEPRECATED_API */ + /** * Close a resource bundle, all pointers returned from the various ures_getXXX calls * on this particular bundle should be considered invalid henceforth. @@ -247,9 +245,29 @@ ures_countArrayItems(const UResourceBundle* resourceBundle, * @see ures_open * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 ures_close(UResourceBundle* resourceBundle); +#if U_SHOW_CPLUSPLUS_API + +U_NAMESPACE_BEGIN + +/** + * \class LocalUResourceBundlePointer + * "Smart pointer" class, closes a UResourceBundle via ures_close(). + * For most methods see the LocalPointerBase base class. + * + * @see LocalPointerBase + * @see LocalPointer + * @stable ICU 4.4 + */ +U_DEFINE_LOCAL_OPEN_POINTER(LocalUResourceBundlePointer, UResourceBundle, ures_close); + +U_NAMESPACE_END + +#endif + +#ifndef U_HIDE_DEPRECATED_API /** * Return the version number associated with this ResourceBundle as a string. Please * use ures_getVersion as this function is going to be deprecated. @@ -260,11 +278,12 @@ ures_close(UResourceBundle* resourceBundle); * @see ures_getVersion * @deprecated ICU 2.8 Use ures_getVersion instead. */ -U_DEPRECATED const char* U_EXPORT2 +U_DEPRECATED const char* U_EXPORT2 ures_getVersionNumber(const UResourceBundle* resourceBundle); +#endif /* U_HIDE_DEPRECATED_API */ /** - * Return the version number associated with this ResourceBundle as an + * Return the version number associated with this ResourceBundle as an * UVersionInfo array. * * @param resB The resource bundle for which the version is checked. @@ -272,29 +291,30 @@ ures_getVersionNumber(const UResourceBundle* resourceBundle); * as specified in the resource bundle or its parent. * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 -ures_getVersion(const UResourceBundle* resB, +U_STABLE void U_EXPORT2 +ures_getVersion(const UResourceBundle* resB, UVersionInfo versionInfo); +#ifndef U_HIDE_DEPRECATED_API /** * Return the name of the Locale associated with this ResourceBundle. This API allows - * you to query for the real locale of the resource. For example, if you requested - * "en_US_CALIFORNIA" and only "en_US" bundle exists, "en_US" will be returned. + * you to query for the real locale of the resource. For example, if you requested + * "en_US_CALIFORNIA" and only "en_US" bundle exists, "en_US" will be returned. * For subresources, the locale where this resource comes from will be returned. - * If fallback has occured, getLocale will reflect this. + * If fallback has occurred, getLocale will reflect this. * * @param resourceBundle resource bundle in question * @param status just for catching illegal arguments * @return A Locale name * @deprecated ICU 2.8 Use ures_getLocaleByType instead. */ -U_DEPRECATED const char* U_EXPORT2 -ures_getLocale(const UResourceBundle* resourceBundle, +U_DEPRECATED const char* U_EXPORT2 +ures_getLocale(const UResourceBundle* resourceBundle, UErrorCode* status); - +#endif /* U_HIDE_DEPRECATED_API */ /** - * Return the name of the Locale associated with this ResourceBundle. + * Return the name of the Locale associated with this ResourceBundle. * You can choose between requested, valid and real locale. * * @param resourceBundle resource bundle in question @@ -305,33 +325,35 @@ ures_getLocale(const UResourceBundle* resourceBundle, * @return A Locale name * @stable ICU 2.8 */ -U_STABLE const char* U_EXPORT2 -ures_getLocaleByType(const UResourceBundle* resourceBundle, - ULocDataLocaleType type, +U_STABLE const char* U_EXPORT2 +ures_getLocaleByType(const UResourceBundle* resourceBundle, + ULocDataLocaleType type, UErrorCode* status); +#ifndef U_HIDE_INTERNAL_API /** - * Same as ures_open() but uses the fill-in parameter instead of allocating - * a bundle, if r!=NULL. + * Same as ures_open() but uses the fill-in parameter instead of allocating a new bundle. + * * TODO need to revisit usefulness of this function * and usage model for fillIn parameters without knowing sizeof(UResourceBundle) - * @param r The resourcebundle to open - * @param packageName The packageName and locale together point to an ICU udata object, - * as defined by udata_open( packageName, "res", locale, err) + * @param r The existing UResourceBundle to fill in. If NULL then status will be + * set to U_ILLEGAL_ARGUMENT_ERROR. + * @param packageName The packageName and locale together point to an ICU udata object, + * as defined by udata_open( packageName, "res", locale, err) * or equivalent. Typically, packageName will refer to a (.dat) file, or to * a package registered with udata_setAppData(). Using a full file or directory * pathname for packageName is deprecated. If NULL, ICU data will be used. * @param localeID specifies the locale for which we want to open the resource - * @param status The error code - * @return a newly allocated resource bundle or NULL if it doesn't exist. + * @param status The error code. * @internal */ -U_INTERNAL void U_EXPORT2 -ures_openFillIn(UResourceBundle *r, +U_INTERNAL void U_EXPORT2 +ures_openFillIn(UResourceBundle *r, const char* packageName, - const char* localeID, + const char* localeID, UErrorCode* status); +#endif /* U_HIDE_INTERNAL_API */ /** * Returns a string from a string resource type @@ -341,7 +363,7 @@ ures_openFillIn(UResourceBundle *r, * @param status fills in the outgoing error code * could be U_MISSING_RESOURCE_ERROR if the key is not found * Always check the value of status. Don't count on returning NULL. - * could be a non-failing error + * could be a non-failing error * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING * @return a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file. * @see ures_getBinary @@ -350,9 +372,9 @@ ures_openFillIn(UResourceBundle *r, * @see ures_getUInt * @stable ICU 2.0 */ -U_STABLE const UChar* U_EXPORT2 -ures_getString(const UResourceBundle* resourceBundle, - int32_t* len, +U_STABLE const UChar* U_EXPORT2 +ures_getString(const UResourceBundle* resourceBundle, + int32_t* len, UErrorCode* status); /** @@ -400,66 +422,66 @@ ures_getString(const UResourceBundle* resourceBundle, * * @see ures_getString * @see u_strToUTF8 - * @draft ICU 3.6 + * @stable ICU 3.6 */ -U_DRAFT const char * U_EXPORT2 +U_STABLE const char * U_EXPORT2 ures_getUTF8String(const UResourceBundle *resB, char *dest, int32_t *length, UBool forceCopy, UErrorCode *status); /** - * Returns a binary data from a binary resource. + * Returns a binary data from a binary resource. * * @param resourceBundle a string resource * @param len fills in the length of resulting byte chunk * @param status fills in the outgoing error code * could be U_MISSING_RESOURCE_ERROR if the key is not found * Always check the value of status. Don't count on returning NULL. - * could be a non-failing error + * could be a non-failing error * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING - * @return a pointer to a chuck of unsigned bytes which live in a memory mapped/DLL file. + * @return a pointer to a chunk of unsigned bytes which live in a memory mapped/DLL file. * @see ures_getString * @see ures_getIntVector * @see ures_getInt * @see ures_getUInt * @stable ICU 2.0 */ -U_STABLE const uint8_t* U_EXPORT2 -ures_getBinary(const UResourceBundle* resourceBundle, - int32_t* len, +U_STABLE const uint8_t* U_EXPORT2 +ures_getBinary(const UResourceBundle* resourceBundle, + int32_t* len, UErrorCode* status); /** - * Returns a 32 bit integer array from a resource. + * Returns a 32 bit integer array from a resource. * * @param resourceBundle an int vector resource * @param len fills in the length of resulting byte chunk * @param status fills in the outgoing error code * could be U_MISSING_RESOURCE_ERROR if the key is not found * Always check the value of status. Don't count on returning NULL. - * could be a non-failing error + * could be a non-failing error * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING - * @return a pointer to a chunk of unsigned bytes which live in a memory mapped/DLL file. + * @return a pointer to a chunk of integers which live in a memory mapped/DLL file. * @see ures_getBinary * @see ures_getString * @see ures_getInt * @see ures_getUInt * @stable ICU 2.0 */ -U_STABLE const int32_t* U_EXPORT2 -ures_getIntVector(const UResourceBundle* resourceBundle, - int32_t* len, +U_STABLE const int32_t* U_EXPORT2 +ures_getIntVector(const UResourceBundle* resourceBundle, + int32_t* len, UErrorCode* status); /** - * Returns an unsigned integer from a resource. + * Returns an unsigned integer from a resource. * This integer is originally 28 bits. * * @param resourceBundle a string resource * @param status fills in the outgoing error code * could be U_MISSING_RESOURCE_ERROR if the key is not found - * could be a non-failing error + * could be a non-failing error * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING * @return an integer value * @see ures_getInt @@ -468,18 +490,18 @@ ures_getIntVector(const UResourceBundle* resourceBundle, * @see ures_getString * @stable ICU 2.0 */ -U_STABLE uint32_t U_EXPORT2 -ures_getUInt(const UResourceBundle* resourceBundle, +U_STABLE uint32_t U_EXPORT2 +ures_getUInt(const UResourceBundle* resourceBundle, UErrorCode *status); /** - * Returns a signed integer from a resource. + * Returns a signed integer from a resource. * This integer is originally 28 bit and the sign gets propagated. * * @param resourceBundle a string resource * @param status fills in the outgoing error code * could be U_MISSING_RESOURCE_ERROR if the key is not found - * could be a non-failing error + * could be a non-failing error * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING * @return an integer value * @see ures_getUInt @@ -488,21 +510,21 @@ ures_getUInt(const UResourceBundle* resourceBundle, * @see ures_getString * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 -ures_getInt(const UResourceBundle* resourceBundle, +U_STABLE int32_t U_EXPORT2 +ures_getInt(const UResourceBundle* resourceBundle, UErrorCode *status); /** - * Returns the size of a resource. Size for scalar types is always 1, + * Returns the size of a resource. Size for scalar types is always 1, * and for vector/table types is the number of child resources. - * @warning Integer array is treated as a scalar type. There are no + * @warning Integer array is treated as a scalar type. There are no * APIs to access individual members of an integer array. It * is always returned as a whole. * @param resourceBundle a resource * @return number of resources in a given resource. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ures_getSize(const UResourceBundle *resourceBundle); /** @@ -513,21 +535,21 @@ ures_getSize(const UResourceBundle *resourceBundle); * @see UResType * @stable ICU 2.0 */ -U_STABLE UResType U_EXPORT2 +U_STABLE UResType U_EXPORT2 ures_getType(const UResourceBundle *resourceBundle); /** - * Returns the key associated with a given resource. Not all the resources have a key - only + * Returns the key associated with a given resource. Not all the resources have a key - only * those that are members of a table. * * @param resourceBundle a resource * @return a key associated to this resource, or NULL if it doesn't have a key * @stable ICU 2.0 */ -U_STABLE const char * U_EXPORT2 +U_STABLE const char * U_EXPORT2 ures_getKey(const UResourceBundle *resourceBundle); -/* ITERATION API +/* ITERATION API This API provides means for iterating through a resource */ @@ -537,7 +559,7 @@ ures_getKey(const UResourceBundle *resourceBundle); * @param resourceBundle a resource * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_STABLE void U_EXPORT2 ures_resetIterator(UResourceBundle *resourceBundle); /** @@ -547,60 +569,60 @@ ures_resetIterator(UResourceBundle *resourceBundle); * @return TRUE if there are more elements, FALSE if there is no more elements * @stable ICU 2.0 */ -U_STABLE UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 ures_hasNext(const UResourceBundle *resourceBundle); /** - * Returns the next resource in a given resource or NULL if there are no more resources - * to iterate over. Features a fill-in parameter. + * Returns the next resource in a given resource or NULL if there are no more resources + * to iterate over. Features a fill-in parameter. * * @param resourceBundle a resource * @param fillIn if NULL a new UResourceBundle struct is allocated and must be closed by the caller. * Alternatively, you can supply a struct to be filled by this function. * @param status fills in the outgoing error code. You may still get a non NULL result even if an - * error occured. Check status instead. + * error occurred. Check status instead. * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must close it * @stable ICU 2.0 */ -U_STABLE UResourceBundle* U_EXPORT2 -ures_getNextResource(UResourceBundle *resourceBundle, - UResourceBundle *fillIn, +U_STABLE UResourceBundle* U_EXPORT2 +ures_getNextResource(UResourceBundle *resourceBundle, + UResourceBundle *fillIn, UErrorCode *status); /** - * Returns the next string in a given resource or NULL if there are no more resources - * to iterate over. + * Returns the next string in a given resource or NULL if there are no more resources + * to iterate over. * * @param resourceBundle a resource * @param len fill in length of the string * @param key fill in for key associated with this string. NULL if no key - * @param status fills in the outgoing error code. If an error occured, we may return NULL, but don't + * @param status fills in the outgoing error code. If an error occurred, we may return NULL, but don't * count on it. Check status instead! * @return a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file. * @stable ICU 2.0 */ -U_STABLE const UChar* U_EXPORT2 -ures_getNextString(UResourceBundle *resourceBundle, - int32_t* len, - const char ** key, +U_STABLE const UChar* U_EXPORT2 +ures_getNextString(UResourceBundle *resourceBundle, + int32_t* len, + const char ** key, UErrorCode *status); /** - * Returns the resource in a given resource at the specified index. Features a fill-in parameter. + * Returns the resource in a given resource at the specified index. Features a fill-in parameter. * * @param resourceBundle the resource bundle from which to get a sub-resource * @param indexR an index to the wanted resource. * @param fillIn if NULL a new UResourceBundle struct is allocated and must be closed by the caller. * Alternatively, you can supply a struct to be filled by this function. * @param status fills in the outgoing error code. Don't count on NULL being returned if an error has - * occured. Check status instead. + * occurred. Check status instead. * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must close it * @stable ICU 2.0 */ -U_STABLE UResourceBundle* U_EXPORT2 -ures_getByIndex(const UResourceBundle *resourceBundle, - int32_t indexR, - UResourceBundle *fillIn, +U_STABLE UResourceBundle* U_EXPORT2 +ures_getByIndex(const UResourceBundle *resourceBundle, + int32_t indexR, + UResourceBundle *fillIn, UErrorCode *status); /** @@ -609,15 +631,15 @@ ures_getByIndex(const UResourceBundle *resourceBundle, * @param resourceBundle a resource * @param indexS an index to the wanted string. * @param len fill in length of the string - * @param status fills in the outgoing error code. If an error occured, we may return NULL, but don't + * @param status fills in the outgoing error code. If an error occurred, we may return NULL, but don't * count on it. Check status instead! * @return a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file. * @stable ICU 2.0 */ -U_STABLE const UChar* U_EXPORT2 -ures_getStringByIndex(const UResourceBundle *resourceBundle, - int32_t indexS, - int32_t* len, +U_STABLE const UChar* U_EXPORT2 +ures_getStringByIndex(const UResourceBundle *resourceBundle, + int32_t indexS, + int32_t* len, UErrorCode *status); /** @@ -641,7 +663,7 @@ ures_getStringByIndex(const UResourceBundle *resourceBundle, * the output UTF-8 string is always well-formed. * * @param resB Resource bundle. - * @param index An index to the wanted string. + * @param stringIndex An index to the wanted string. * @param dest Destination buffer. Can be NULL only if capacity=*length==0. * @param pLength Input: Capacity of destination buffer. * Output: Actual length of the UTF-8 string, not counting the @@ -666,18 +688,18 @@ ures_getStringByIndex(const UResourceBundle *resourceBundle, * * @see ures_getStringByIndex * @see u_strToUTF8 - * @draft ICU 3.6 + * @stable ICU 3.6 */ -U_DRAFT const char * U_EXPORT2 +U_STABLE const char * U_EXPORT2 ures_getUTF8StringByIndex(const UResourceBundle *resB, - int32_t index, + int32_t stringIndex, char *dest, int32_t *pLength, UBool forceCopy, UErrorCode *status); /** * Returns a resource in a given resource that has a given key. This procedure works only with table - * resources. Features a fill-in parameter. + * resources. Features a fill-in parameter. * * @param resourceBundle a resource * @param key a key associated with the wanted resource @@ -687,28 +709,28 @@ ures_getUTF8StringByIndex(const UResourceBundle *resB, * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must close it * @stable ICU 2.0 */ -U_STABLE UResourceBundle* U_EXPORT2 -ures_getByKey(const UResourceBundle *resourceBundle, - const char* key, - UResourceBundle *fillIn, +U_STABLE UResourceBundle* U_EXPORT2 +ures_getByKey(const UResourceBundle *resourceBundle, + const char* key, + UResourceBundle *fillIn, UErrorCode *status); /** * Returns a string in a given resource that has a given key. This procedure works only with table - * resources. + * resources. * * @param resB a resource * @param key a key associated with the wanted string * @param len fill in length of the string - * @param status fills in the outgoing error code. If an error occured, we may return NULL, but don't + * @param status fills in the outgoing error code. If an error occurred, we may return NULL, but don't * count on it. Check status instead! * @return a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file. * @stable ICU 2.0 */ -U_STABLE const UChar* U_EXPORT2 -ures_getStringByKey(const UResourceBundle *resB, - const char* key, - int32_t* len, +U_STABLE const UChar* U_EXPORT2 +ures_getStringByKey(const UResourceBundle *resB, + const char* key, + int32_t* len, UErrorCode *status); /** @@ -759,96 +781,111 @@ ures_getStringByKey(const UResourceBundle *resB, * * @see ures_getStringByKey * @see u_strToUTF8 - * @draft ICU 3.6 + * @stable ICU 3.6 */ -U_DRAFT const char * U_EXPORT2 +U_STABLE const char * U_EXPORT2 ures_getUTF8StringByKey(const UResourceBundle *resB, const char *key, char *dest, int32_t *pLength, UBool forceCopy, UErrorCode *status); -#ifdef XP_CPLUSPLUS +#if U_SHOW_CPLUSPLUS_API #include "unicode/unistr.h" U_NAMESPACE_BEGIN /** - * returns a string from a string resource type + * Returns the string value from a string resource bundle. * - * @param resB a resource + * @param resB a resource, should have type URES_STRING * @param status: fills in the outgoing error code * could be U_MISSING_RESOURCE_ERROR if the key is not found - * could be a non-failing error + * could be a non-failing error * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING - * @return a UnicodeString object. If there is an error, string is bogus + * @return The string value, or a bogus string if there is a failure UErrorCode. * @stable ICU 2.0 */ -inline UnicodeString -ures_getUnicodeString(const UResourceBundle *resB, - UErrorCode* status) -{ +inline UnicodeString +ures_getUnicodeString(const UResourceBundle *resB, UErrorCode* status) { + UnicodeString result; int32_t len = 0; const UChar *r = ures_getString(resB, &len, status); - return UnicodeString(TRUE, r, len); + if(U_SUCCESS(*status)) { + result.setTo(TRUE, r, len); + } else { + result.setToBogus(); + } + return result; } /** - * Returns the next string in a resource or NULL if there are no more resources - * to iterate over. + * Returns the next string in a resource, or an empty string if there are no more resources + * to iterate over. + * Use ures_getNextString() instead to distinguish between + * the end of the iteration and a real empty string value. * * @param resB a resource * @param key fill in for key associated with this string * @param status fills in the outgoing error code - * @return an UnicodeString object. + * @return The string value, or a bogus string if there is a failure UErrorCode. * @stable ICU 2.0 */ -inline UnicodeString -ures_getNextUnicodeString(UResourceBundle *resB, - const char ** key, - UErrorCode* status) -{ +inline UnicodeString +ures_getNextUnicodeString(UResourceBundle *resB, const char ** key, UErrorCode* status) { + UnicodeString result; int32_t len = 0; const UChar* r = ures_getNextString(resB, &len, key, status); - return UnicodeString(TRUE, r, len); + if(U_SUCCESS(*status)) { + result.setTo(TRUE, r, len); + } else { + result.setToBogus(); + } + return result; } /** - * Returns the string in a given resource at the specified index. + * Returns the string in a given resource array or table at the specified index. * * @param resB a resource - * @param index an index to the wanted string. + * @param indexS an index to the wanted string. * @param status fills in the outgoing error code - * @return an UnicodeString object. If there is an error, string is bogus + * @return The string value, or a bogus string if there is a failure UErrorCode. * @stable ICU 2.0 */ -inline UnicodeString -ures_getUnicodeStringByIndex(const UResourceBundle *resB, - int32_t indexS, - UErrorCode* status) -{ +inline UnicodeString +ures_getUnicodeStringByIndex(const UResourceBundle *resB, int32_t indexS, UErrorCode* status) { + UnicodeString result; int32_t len = 0; const UChar* r = ures_getStringByIndex(resB, indexS, &len, status); - return UnicodeString(TRUE, r, len); + if(U_SUCCESS(*status)) { + result.setTo(TRUE, r, len); + } else { + result.setToBogus(); + } + return result; } /** - * Returns a string in a resource that has a given key. This procedure works only with table - * resources. + * Returns a string in a resource that has a given key. + * This procedure works only with table resources. * * @param resB a resource * @param key a key associated with the wanted string * @param status fills in the outgoing error code - * @return an UnicodeString object. If there is an error, string is bogus + * @return The string value, or a bogus string if there is a failure UErrorCode. * @stable ICU 2.0 */ -inline UnicodeString -ures_getUnicodeStringByKey(const UResourceBundle *resB, - const char* key, - UErrorCode* status) -{ +inline UnicodeString +ures_getUnicodeStringByKey(const UResourceBundle *resB, const char* key, UErrorCode* status) { + UnicodeString result; int32_t len = 0; const UChar* r = ures_getStringByKey(resB, key, &len, status); - return UnicodeString(TRUE, r, len); + if(U_SUCCESS(*status)) { + result.setTo(TRUE, r, len); + } else { + result.setToBogus(); + } + return result; } U_NAMESPACE_END @@ -856,7 +893,7 @@ U_NAMESPACE_END #endif /** - * Create a string enumerator, owned by the caller, of all locales located within + * Create a string enumerator, owned by the caller, of all locales located within * the specified resource tree. * @param packageName name of the tree, such as (NULL) or U_ICUDATA_ALIAS or or "ICUDATA-coll" * This call is similar to uloc_getAvailable().