Re: Proposal: add uloc_setKeywordValue and uloc_removeKeyword
Deborah Goldsmith <[email protected]> Tue, 24 Aug 2004 12:44:10 -0700
| Newsgroups | gmane.comp.lib.icu.general |
|---|---|
| Message-ID | <[email protected]> |
A possible alternative: use a NULL keywordValue passed to uloc_setKeywordValue to mean "remove". I don't know if empty keyword values are allowed, but even if they are that can be distinguished from the case of the pointer being NULL. This makes the API a little smaller, if that's important. This is the way I did it in my own implementation. Deborah On Aug 24, 2004, at 10:26 AM, Steven R. Loomis wrote: > > Proposal: add uloc_setKeywordValue and uloc_deleteKeyword > Date: 2004 Aug 24 > Bug: 3651 http://www.jtcsv.com/cgibin/icu-bugs?findid=3651 > > Quoting from the bug: "Since the UCalendarType argument to ucal_open > is deprecated, there isn't a good way to set an explicit calendar to > override the locale. By contrast, for a numeric format you can set the > currency programmatically. > "Provide functions in uloc.h for setting keywords as well as getting > them. Right now, you have to iterate through all the keywords yourself > to see if that keyword is already present (you don't want to set two > copies of the same keyword). In addition to uloc_getKeywordValue > there would be uloc_setKeywordValue and uloc_deleteKeyword." > > Q: should the keywords be sorted? > > /** > * Set the value of the specified keyword. > * NOTA BENE: Unlike almost every other ICU function which takes a > * buffer, this function will NOT truncate the output text. If a > * BUFFER_OVERFLOW_ERROR is received, it means that the original > * buffer is untouched. This is done to prevent incorrect or possibly > * even malformed locales from being generated and used. > * Missing keywords on delete won't be marked as an error. > * > * @param keywordName name of the keyword to be set. Case insensitive. > * @param keywordValue value of the keyword to be set. If 0-length or > * NULL, will result in the keyword being removed. > * @param buffer input buffer containing locale to be modified. > * @param bufferCapacity capacity of receiving buffer > * @param status containing error code - buffer not big enough. > * @return the length needed for the buffer > * @see uloc_removeKeyword > * @draft ICU 3.2 > */ > U_DRAFT int32_t U_EXPORT2 > uloc_setKeywordValue(const char* keywordName, > const char* keywordValue, > char* buffer, int32_t bufferCapacity, > UErrorCode* status); > > > /** > * Remove a specified keyword. > * Missing keywords on delete won't be marked as an error. > * @param keywordName name of the keyword to be removed. Case > insensitive. > * @param buffer input buffer containing locale to be modified. > * @param bufferCapacity capacity of receiving buffer > * @param status containing error code - buffer not big enough. > * @return the length needed for the buffer > * @see uloc_removeKeyword > * @draft ICU 3.2 > */ > U_DRAFT int32_t U_EXPORT2 > uloc_removeKeyword(const char* keywordName, > char* buffer, int32_t bufferCapacity, > UErrorCode* status); > > _______________________________________________ > icu mailing list > [email protected] > http://oss.software.ibm.com/developerworks/oss/mailman/listinfo/icu