mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-07 22:44:49 +00:00
ICU-2755 ucol_open should fetch registered collators, still need to add test
X-SVN-Rev: 11838
This commit is contained in:
parent
8e183cbc6e
commit
fdc637b53d
5 changed files with 51 additions and 4 deletions
|
@ -165,6 +165,29 @@ hasService(void)
|
|||
return gService != NULL;
|
||||
}
|
||||
|
||||
// -------------------------------------
|
||||
|
||||
UCollator*
|
||||
Collator::createUCollator(const char *loc,
|
||||
UErrorCode *status)
|
||||
{
|
||||
UCollator *result = 0;
|
||||
if (status && U_SUCCESS(*status) && hasService()) {
|
||||
Locale desiredLocale(loc);
|
||||
Collator *col = (Collator*)gService->get(desiredLocale, *status);
|
||||
if (col && col->getDynamicClassID() == RuleBasedCollator::getStaticClassID()) {
|
||||
RuleBasedCollator *rbc = (RuleBasedCollator *)col;
|
||||
if (!rbc->dataIsOwned) {
|
||||
result = ucol_safeClone(rbc->ucollator, NULL, NULL, status);
|
||||
} else {
|
||||
result = rbc->ucollator;
|
||||
rbc->ucollator = NULL; // to prevent free on delete
|
||||
}
|
||||
}
|
||||
delete col;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// Collator public methods -----------------------------------------------
|
||||
|
||||
|
|
|
@ -336,17 +336,28 @@ tryOpeningFromRules(UResourceBundle *collElem, UErrorCode *status) {
|
|||
|
||||
}
|
||||
|
||||
U_CAPI UCollator* U_EXPORT2
|
||||
ucol_open( const char *loc,
|
||||
UErrorCode *status)
|
||||
U_NAMESPACE_BEGIN
|
||||
|
||||
U_CAPI UCollator*
|
||||
ucol_open(const char *loc,
|
||||
UErrorCode *status)
|
||||
{
|
||||
U_NAMESPACE_USE;
|
||||
|
||||
UCollator *result = NULL;
|
||||
if (status && U_SUCCESS(*status)) {
|
||||
result = Collator::createUCollator(loc, status);
|
||||
if (result) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
ucol_initUCA(status);
|
||||
|
||||
/* New version */
|
||||
if(U_FAILURE(*status)) return 0;
|
||||
|
||||
UCollator *result = NULL;
|
||||
|
||||
UResourceBundle *b = ures_open(NULL, loc, status);
|
||||
UResourceBundle *collElem = ures_getByKey(b, "CollationElements", NULL, status);
|
||||
UResourceBundle *binary = NULL;
|
||||
|
@ -431,6 +442,7 @@ clean:
|
|||
ures_close(binary);
|
||||
return result;
|
||||
}
|
||||
U_NAMESPACE_END
|
||||
|
||||
U_CAPI void U_EXPORT2
|
||||
ucol_setReqValidLocales(UCollator *coll, char *requestedLocaleToAdopt, char *validLocaleToAdopt)
|
||||
|
|
|
@ -361,6 +361,10 @@ ucol_getSortKeySize(const UCollator *coll, collIterate *s,
|
|||
U_CAPI uint8_t* U_EXPORT2
|
||||
ucol_cloneRuleData(const UCollator *coll, int32_t *length, UErrorCode *status);
|
||||
|
||||
/**
|
||||
* Used to set requested and valid locales on a collator returned by the collator
|
||||
* service.
|
||||
*/
|
||||
U_CAPI void U_EXPORT2
|
||||
ucol_setReqValidLocales(UCollator *coll, char *requestedLocaleToAdopt, char *validLocaleToAdopt);
|
||||
|
||||
|
|
|
@ -861,6 +861,13 @@ protected:
|
|||
*/
|
||||
virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale);
|
||||
|
||||
public:
|
||||
/**
|
||||
* used only by ucol_open, not for public use
|
||||
* @internal
|
||||
*/
|
||||
static UCollator* createUCollator(const char* loc, UErrorCode* status);
|
||||
|
||||
private:
|
||||
/**
|
||||
* Assignment operator. Private for now.
|
||||
|
|
|
@ -59,6 +59,7 @@
|
|||
#if !UCONFIG_NO_COLLATION
|
||||
|
||||
#include "unicode/coll.h"
|
||||
#include "unicode/ucol.h"
|
||||
#include "unicode/sortkey.h"
|
||||
#include "unicode/normlzr.h"
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue