ICU-898 getLocale method for UCollator and RuleBasedCollator
X-SVN-Rev: 7803
This commit is contained in:
parent
41ffc2ef36
commit
8c93002e60
@ -482,6 +482,18 @@ int32_t RuleBasedCollator::hashCode() const
|
|||||||
return uhash_hashUCharsN(rules, length);
|
return uhash_hashUCharsN(rules, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return the locale of this collator
|
||||||
|
*/
|
||||||
|
const Locale RuleBasedCollator::getLocale(UErrorCode &status) const {
|
||||||
|
const char *result = ucol_getLocale(ucollator, &status);
|
||||||
|
if(result == NULL) {
|
||||||
|
return Locale("");
|
||||||
|
} else {
|
||||||
|
return Locale(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the decomposition mode of the Collator object.
|
* Set the decomposition mode of the Collator object.
|
||||||
* @param the new decomposition mode
|
* @param the new decomposition mode
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include "bocsu.h"
|
#include "bocsu.h"
|
||||||
|
|
||||||
#include "unormimp.h"
|
#include "unormimp.h"
|
||||||
|
#include "uresimp.h"
|
||||||
#include "cstring.h"
|
#include "cstring.h"
|
||||||
#include "umutex.h"
|
#include "umutex.h"
|
||||||
#include "uhash.h"
|
#include "uhash.h"
|
||||||
@ -280,7 +281,13 @@ ucol_open( const char *loc,
|
|||||||
if(*status == U_MISSING_RESOURCE_ERROR) { /* if we don't find tailoring, we'll fallback to UCA */
|
if(*status == U_MISSING_RESOURCE_ERROR) { /* if we don't find tailoring, we'll fallback to UCA */
|
||||||
*status = U_USING_DEFAULT_ERROR;
|
*status = U_USING_DEFAULT_ERROR;
|
||||||
result = ucol_initCollator(UCA->image, result, status);
|
result = ucol_initCollator(UCA->image, result, status);
|
||||||
/*result = UCA;*/
|
// if we use UCA, real locale is root
|
||||||
|
result->rb = ures_open(NULL, "", status);
|
||||||
|
if(U_FAILURE(*status)) {
|
||||||
|
goto clean;
|
||||||
|
}
|
||||||
|
ures_close(binary);
|
||||||
|
ures_close(b);
|
||||||
result->hasRealData = FALSE;
|
result->hasRealData = FALSE;
|
||||||
} else if(U_SUCCESS(*status)) { /* otherwise, we'll pick a collation data that exists */
|
} else if(U_SUCCESS(*status)) { /* otherwise, we'll pick a collation data that exists */
|
||||||
int32_t len = 0;
|
int32_t len = 0;
|
||||||
@ -302,16 +309,25 @@ ucol_open( const char *loc,
|
|||||||
}
|
}
|
||||||
result->hasRealData = FALSE;
|
result->hasRealData = FALSE;
|
||||||
}
|
}
|
||||||
|
const char *realCollationDataLocale = ures_getLocale(binary, status);
|
||||||
|
ures_close(binary);
|
||||||
|
// if the real data came from the fallback, we want to drag around
|
||||||
|
// the real resource bundle
|
||||||
|
if(uprv_strcmp(ures_getLocale(b, status), realCollationDataLocale) != NULL) {
|
||||||
|
result->rb = ures_open(NULL, realCollationDataLocale, status);
|
||||||
|
if(U_FAILURE(*status)) {
|
||||||
|
goto clean;
|
||||||
|
}
|
||||||
|
ures_close(b);
|
||||||
|
} else { // otherwise, we'll keep the initial RB around
|
||||||
|
result->rb = b;
|
||||||
|
}
|
||||||
} else { /* There is another error, and we're just gonna clean up */
|
} else { /* There is another error, and we're just gonna clean up */
|
||||||
clean:
|
clean:
|
||||||
ures_close(b);
|
ures_close(b);
|
||||||
ures_close(binary);
|
ures_close(binary);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
result->rb = b;
|
|
||||||
ures_close(binary);
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5640,3 +5656,16 @@ ucol_equal( const UCollator *coll,
|
|||||||
== UCOL_EQUAL);
|
== UCOL_EQUAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* returns the locale name the collation data comes from */
|
||||||
|
U_CAPI const char * U_EXPORT2
|
||||||
|
ucol_getLocale(const UCollator *coll, UErrorCode *status) {
|
||||||
|
if(status == NULL || U_FAILURE(*status)) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if(coll->rb != NULL) {
|
||||||
|
return ures_getLocale(coll->rb, status);
|
||||||
|
} else {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -399,6 +399,12 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual int32_t hashCode(void) const = 0;
|
virtual int32_t hashCode(void) const = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the locale of the Collator
|
||||||
|
* @draft ICU 2.1
|
||||||
|
*/
|
||||||
|
virtual const Locale getLocale(UErrorCode& status) const = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convenience method for comparing two strings based on the collation rules.
|
* Convenience method for comparing two strings based on the collation rules.
|
||||||
* @param source the source string to be compared with.
|
* @param source the source string to be compared with.
|
||||||
|
@ -335,6 +335,14 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual int32_t hashCode(void) const;
|
virtual int32_t hashCode(void) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the locale of the Collator
|
||||||
|
* @return locale where the collation data lives. If the collator
|
||||||
|
* was instantiated from rules, locale is empty.
|
||||||
|
* @draft ICU 2.1
|
||||||
|
*/
|
||||||
|
virtual const Locale getLocale(UErrorCode& status) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the table-based rules for the collation object.
|
* Gets the table-based rules for the collation object.
|
||||||
* @return returns the collation rules that the table collation object was
|
* @return returns the collation rules that the table collation object was
|
||||||
|
@ -743,6 +743,19 @@ U_CAPI void U_EXPORT2
|
|||||||
ucol_setNormalization( UCollator *coll,
|
ucol_setNormalization( UCollator *coll,
|
||||||
UNormalizationMode mode);
|
UNormalizationMode mode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gets the locale name of the collator. If the collator
|
||||||
|
* is instantiated from the rules, then this function returns
|
||||||
|
* NULL.
|
||||||
|
* @param coll The UCollator for which the locale is needed
|
||||||
|
* @param status error code of the operation
|
||||||
|
* @return real locale name from which the collation data comes.
|
||||||
|
* If the collator was instantiated from rules, returns
|
||||||
|
* NULL.
|
||||||
|
*/
|
||||||
|
U_CAPI const char * U_EXPORT2
|
||||||
|
ucol_getLocale(const UCollator *coll, UErrorCode *status);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*@deprecated Remove after Aug 2002
|
*@deprecated Remove after Aug 2002
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user