Proposal: add uloc_setKeywordValue and uloc_removeKeyword

"Steven R. Loomis" <[email protected]> Tue, 24 Aug 2004 19:26:04 +0200
Newsgroups gmane.comp.lib.icu.general
Message-ID <[email protected]>
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);