From 201b9f39a5c7a20fe913d0cf309a82ded79e34b5 Mon Sep 17 00:00:00 2001 From: Vladimir Weinstein Date: Fri, 14 Nov 2003 07:06:58 +0000 Subject: [PATCH] ICU-2202 getLocale API for breakiterator. Final implementation pending discussion with Andy X-SVN-Rev: 13724 --- icu4c/source/common/brkiter.cpp | 16 ++++++++++++++++ icu4c/source/common/ubrk.cpp | 9 +++++++++ icu4c/source/common/unicode/brkiter.h | 10 ++++++++++ icu4c/source/common/unicode/ubrk.h | 14 ++++++++++++++ 4 files changed, 49 insertions(+) diff --git a/icu4c/source/common/brkiter.cpp b/icu4c/source/common/brkiter.cpp index 7aa5042d963..e21e2542b6c 100644 --- a/icu4c/source/common/brkiter.cpp +++ b/icu4c/source/common/brkiter.cpp @@ -455,6 +455,22 @@ BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status) } } +Locale +BreakIterator::getLocale(ULocDataLocaleType type, UErrorCode& status) const +{ + switch(type) { + case ULOC_VALID_LOCALE: + return validLocale; + break; + case ULOC_ACTUAL_LOCALE: + return actualLocale; + break; + default: + status = U_UNSUPPORTED_ERROR; + return Locale(""); + } +} + U_NAMESPACE_END // defined in ucln_cmn.h diff --git a/icu4c/source/common/ubrk.cpp b/icu4c/source/common/ubrk.cpp index 8cfb93c20d0..cd68f950b7b 100644 --- a/icu4c/source/common/ubrk.cpp +++ b/icu4c/source/common/ubrk.cpp @@ -265,4 +265,13 @@ ubrk_getRuleStatus(UBreakIterator *bi) return ((RuleBasedBreakIterator *)bi)->getRuleStatus(); } +U_CAPI const char* U_EXPORT2 +ubrk_getLocaleByType(const UBreakIterator *bi, + ULocDataLocaleType type, + UErrorCode* status) +{ + return (((BreakIterator *)bi)->getLocale(type, *status)).getName(); +} + + #endif /* #if !UCONFIG_NO_BREAK_ITERATION */ diff --git a/icu4c/source/common/unicode/brkiter.h b/icu4c/source/common/unicode/brkiter.h index f915c5fd136..0d818f7187e 100644 --- a/icu4c/source/common/unicode/brkiter.h +++ b/icu4c/source/common/unicode/brkiter.h @@ -562,6 +562,13 @@ public: */ static StringEnumeration* getAvailableLocales(void); + /** + * Returns the locale for this break iterator. Two flavors are available: valid and + * actual locale. + * @draft ICU 2.8 + */ + virtual Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const; + private: static BreakIterator* makeCharacterInstance(const Locale& loc, UErrorCode& status); static BreakIterator* makeWordInstance(const Locale& loc, UErrorCode& status); @@ -582,6 +589,9 @@ protected: UBool fBufferClone; /** @internal */ BreakIterator (const BreakIterator &other) : UObject(other), fBufferClone(FALSE) {} + /** @internal */ + Locale actualLocale; + Locale validLocale; private: /** * The assignment operator has no real implementation. diff --git a/icu4c/source/common/unicode/ubrk.h b/icu4c/source/common/unicode/ubrk.h index 2ace488bb04..6af8af0e42b 100644 --- a/icu4c/source/common/unicode/ubrk.h +++ b/icu4c/source/common/unicode/ubrk.h @@ -7,6 +7,7 @@ #define UBRK_H #include "unicode/utypes.h" +#include "unicode/uloc.h" /** * A text-break iterator. @@ -519,6 +520,19 @@ ubrk_isBoundary(UBreakIterator *bi, int32_t offset); U_CAPI int32_t U_EXPORT2 ubrk_getRuleStatus(UBreakIterator *bi); +/** + * Return the locale of the break iterator. You can choose between the valid and + * the actual locale. + * @param bi break iterator + * @param type locale type (valid or actual) + * @param status error code + * @return locale string + * @draft ICU 2.8 + */ +U_CAPI const char* U_EXPORT2 +ubrk_getLocaleByType(const UBreakIterator *bi, ULocDataLocaleType type, UErrorCode* status); + + #endif /* #if !UCONFIG_NO_BREAK_ITERATION */ #endif