Re: Proposal: add uloc_setKeywordValue and uloc_removeKeyword
"Steven R. Loomis" <[email protected]> Wed, 25 Aug 2004 07:30:06 +0200
| Newsgroups | gmane.comp.lib.icu.general |
|---|---|
| Message-ID | <[email protected]> |
OK Updated proposal: * Keywords will be sorted as they are added, the function will not re-sort unrelated keywords * I retract the proposal for the removeKeyword function. * 0-length OR null keyword values will result in removal On 25-Awi-2004, at 2:43 AM, George Rhoten wrote: > I like the single uloc_setKeywordValue() function idea. It seems like > less duplication of effort for removing keywords. > > Regarding the question in the proposal, I presume that the keywords > will > be sorted to any rules that uloc_getName uses for keywords. > > I presume that a Locale class API is not in this proposal, since we > don't > provide similar set functions for languages, scripts, countries or > variants. > > George Rhoten > IBM Globalization Center of Competency/ICU San José, CA, USA > ICU main website: http://oss.software.ibm.com/icu/index.html > > > > Deborah Goldsmith <[email protected]> > Sent by: [email protected] > 08/24/2004 05:00 PM > > To > "Steven R. Loomis" <[email protected]> > cc > Icu <[email protected]> > Subject > Re: Proposal: add uloc_setKeywordValue and uloc_removeKeyword > > > > > > > I don't know of a need for zero-length keyword values, I was just > saying they could be accommodated if necessary. Yes, I was suggesting > removing the removeKeyword function. > > Deborah > > On Aug 24, 2004, at 4:36 PM, Steven R. Loomis wrote: > >> That's already in the proposal, but i think you mean a modification to >> (1) allow 0-length values to be set and (2) remove the removeKeyword >> function >> >> actually i am implementing remove as just calling set with a null >> >> I believe getKeywordValue returns 0 (length 0) for both a missing and >> a 0-length value. I'd rather not allow 0-length values in that case. >> >>> * @param keywordValue value of the keyword to be set. If 0-length or >>> * NULL, will result in the keyword being removed. >> >> >> On 24-Awi-2004, at 9:44 PM, Deborah Goldsmith wrote: >> >>> 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 >>> >>> _______________________________________________ >>> icu mailing list >>> [email protected] >>> http://oss.software.ibm.com/developerworks/oss/mailman/listinfo/icu >> > > _______________________________________________ > icu mailing list > [email protected] > http://oss.software.ibm.com/developerworks/oss/mailman/listinfo/icu > > > _______________________________________________ > icu mailing list > [email protected] > http://oss.software.ibm.com/developerworks/oss/mailman/listinfo/icu