From 8aca6db986b5e579ef15d636c5f495f3b78092cc Mon Sep 17 00:00:00 2001 From: Eike Rathke Date: Thu, 5 Sep 2013 13:00:39 +0200 Subject: use get*LocaleServiceName Change-Id: I4cd6a9a502b4bad11265ac5e42dc338b56b90598 --- .../characterclassificationImpl.cxx | 44 ++++++++++------------ 1 file changed, 19 insertions(+), 25 deletions(-) (limited to 'i18npool') diff --git a/i18npool/source/characterclassification/characterclassificationImpl.cxx b/i18npool/source/characterclassification/characterclassificationImpl.cxx index 65f8f9cc047c..00f6506763f0 100644 --- a/i18npool/source/characterclassification/characterclassificationImpl.cxx +++ b/i18npool/source/characterclassification/characterclassificationImpl.cxx @@ -19,6 +19,7 @@ #include +#include #include using namespace com::sun::star::uno; @@ -166,32 +167,25 @@ CharacterClassificationImpl::getLocaleSpecificCharacterClassification(const Loca return cachedItem->xCI; } - static sal_Unicode under = (sal_Unicode)'_'; - sal_Int32 l = rLocale.Language.getLength(); - sal_Int32 c = rLocale.Country.getLength(); - sal_Int32 v = rLocale.Variant.getLength(); - OUStringBuffer aBuf(l+c+v+3); - - // load service with name ___ - if ((l > 0 && c > 0 && v > 0 && - createLocaleSpecificCharacterClassification(aBuf.append(rLocale.Language).append(under).append( - rLocale.Country).append(under).append(rLocale.Variant).makeStringAndClear(), rLocale)) || - // load service with name __ - (l > 0 && c > 0 && - createLocaleSpecificCharacterClassification(aBuf.append(rLocale.Language).append(under).append( - rLocale.Country).makeStringAndClear(), rLocale)) || - (l > 0 && c > 0 && rLocale.Language.compareToAscii("zh") == 0 && - (rLocale.Country.compareToAscii("HK") == 0 || - rLocale.Country.compareToAscii("MO") == 0) && - // if the country code is HK or MO, one more step to try TW. - createLocaleSpecificCharacterClassification(aBuf.append(rLocale.Language).append(under).append( - "TW").makeStringAndClear(), rLocale)) || - (l > 0 && - // load service with name _ - createLocaleSpecificCharacterClassification(rLocale.Language, rLocale))) { + // Load service with name __ or + // _ and fallbacks. + bool bLoaded = createLocaleSpecificCharacterClassification( + LocaleData::getFirstLocaleServiceName( rLocale), rLocale); + if (!bLoaded) + { + ::std::vector< OUString > aFallbacks( LocaleData::getFallbackLocaleServiceNames( rLocale)); + for (::std::vector< OUString >::const_iterator it( aFallbacks.begin()); it != aFallbacks.end(); ++it) + { + bLoaded = createLocaleSpecificCharacterClassification( *it, rLocale); + if (bLoaded) + break; + } + } + if (bLoaded) return cachedItem->xCI; - } else if (xUCI.is()) { - lookupTable.push_back( cachedItem = new lookupTableItem(rLocale, OUString("Unicode"), xUCI) ); + else if (xUCI.is()) + { + lookupTable.push_back( cachedItem = new lookupTableItem( rLocale, OUString("Unicode"), xUCI)); return cachedItem->xCI; } } -- cgit