From 8c806348c326bf0084f7bca7e5eaf4cadeac7030 Mon Sep 17 00:00:00 2001 From: Eike Rathke Date: Tue, 12 Dec 2017 22:54:19 +0100 Subject: Determine possibly localized keywords early and once .. instead of in every GetKeyWord() call, and force to EnglishOnly if there aren't. Change-Id: I56941298c0e02d041b80cdb5805905e24116405e (cherry picked from commit 38a3886fc1464e635985f9ec82b48e0a69f6e536) Reviewed-on: https://gerrit.libreoffice.org/46384 Reviewed-by: Eike Rathke Tested-by: Eike Rathke --- svl/source/numbers/zforscan.cxx | 131 +++++++++++++++++++++------------------- 1 file changed, 69 insertions(+), 62 deletions(-) (limited to 'svl') diff --git a/svl/source/numbers/zforscan.cxx b/svl/source/numbers/zforscan.cxx index ed3edf731096..d29ecddb1d16 100644 --- a/svl/source/numbers/zforscan.cxx +++ b/svl/source/numbers/zforscan.cxx @@ -301,7 +301,60 @@ void ImpSvNumberformatScan::SetDependentKeywords() sKeyword[NF_KEY_THAI_T] = sEnglishKeyword[NF_KEY_THAI_T]; } - const bool bL10n = (meKeywordLocalization != KeywordLocalization::EnglishOnly); + bool bL10n = (meKeywordLocalization != KeywordLocalization::EnglishOnly); + if (bL10n) + { + // Check if this actually is a locale that uses any localized keywords, + // if not then disable localized keywords completely. + if ( !eLang.anyOf( LANGUAGE_GERMAN, + LANGUAGE_GERMAN_SWISS, + LANGUAGE_GERMAN_AUSTRIAN, + LANGUAGE_GERMAN_LUXEMBOURG, + LANGUAGE_GERMAN_LIECHTENSTEIN, + LANGUAGE_DUTCH, + LANGUAGE_DUTCH_BELGIAN, + LANGUAGE_FRENCH, + LANGUAGE_FRENCH_BELGIAN, + LANGUAGE_FRENCH_CANADIAN, + LANGUAGE_FRENCH_SWISS, + LANGUAGE_FRENCH_LUXEMBOURG, + LANGUAGE_FRENCH_MONACO, + LANGUAGE_FINNISH, + LANGUAGE_ITALIAN, + LANGUAGE_ITALIAN_SWISS, + LANGUAGE_DANISH, + LANGUAGE_NORWEGIAN, + LANGUAGE_NORWEGIAN_BOKMAL, + LANGUAGE_NORWEGIAN_NYNORSK, + LANGUAGE_SWEDISH, + LANGUAGE_SWEDISH_FINLAND, + LANGUAGE_PORTUGUESE, + LANGUAGE_PORTUGUESE_BRAZILIAN, + LANGUAGE_SPANISH_MODERN, + LANGUAGE_SPANISH_DATED, + LANGUAGE_SPANISH_MEXICAN, + LANGUAGE_SPANISH_GUATEMALA, + LANGUAGE_SPANISH_COSTARICA, + LANGUAGE_SPANISH_PANAMA, + LANGUAGE_SPANISH_DOMINICAN_REPUBLIC, + LANGUAGE_SPANISH_VENEZUELA, + LANGUAGE_SPANISH_COLOMBIA, + LANGUAGE_SPANISH_PERU, + LANGUAGE_SPANISH_ARGENTINA, + LANGUAGE_SPANISH_ECUADOR, + LANGUAGE_SPANISH_CHILE, + LANGUAGE_SPANISH_URUGUAY, + LANGUAGE_SPANISH_PARAGUAY, + LANGUAGE_SPANISH_BOLIVIA, + LANGUAGE_SPANISH_EL_SALVADOR, + LANGUAGE_SPANISH_HONDURAS, + LANGUAGE_SPANISH_NICARAGUA, + LANGUAGE_SPANISH_PUERTO_RICO )) + { + bL10n = false; + meKeywordLocalization = KeywordLocalization::EnglishOnly; + } + } if ( bL10n && eLang.anyOf( LANGUAGE_GERMAN, @@ -663,71 +716,25 @@ short ImpSvNumberformatScan::GetKeyWord( const OUString& sSymbol, sal_Int32 nPos if (i == 0 && meKeywordLocalization == KeywordLocalization::AllowEnglish) { // No localized (if so) keyword, try English keywords if keywords - // are localized. - LanguageType eLang = pFormatter->GetLocaleData()->getLoadedLanguageTag().getLanguageType( false); - if ( eLang.anyOf( LANGUAGE_GERMAN, - LANGUAGE_GERMAN_SWISS, - LANGUAGE_GERMAN_AUSTRIAN, - LANGUAGE_GERMAN_LUXEMBOURG, - LANGUAGE_GERMAN_LIECHTENSTEIN, - LANGUAGE_DUTCH, - LANGUAGE_DUTCH_BELGIAN, - LANGUAGE_FRENCH, - LANGUAGE_FRENCH_BELGIAN, - LANGUAGE_FRENCH_CANADIAN, - LANGUAGE_FRENCH_SWISS, - LANGUAGE_FRENCH_LUXEMBOURG, - LANGUAGE_FRENCH_MONACO, - LANGUAGE_FINNISH, - LANGUAGE_ITALIAN, - LANGUAGE_ITALIAN_SWISS, - LANGUAGE_DANISH, - LANGUAGE_NORWEGIAN, - LANGUAGE_NORWEGIAN_BOKMAL, - LANGUAGE_NORWEGIAN_NYNORSK, - LANGUAGE_SWEDISH, - LANGUAGE_SWEDISH_FINLAND, - LANGUAGE_PORTUGUESE, - LANGUAGE_PORTUGUESE_BRAZILIAN, - LANGUAGE_SPANISH_MODERN, - LANGUAGE_SPANISH_DATED, - LANGUAGE_SPANISH_MEXICAN, - LANGUAGE_SPANISH_GUATEMALA, - LANGUAGE_SPANISH_COSTARICA, - LANGUAGE_SPANISH_PANAMA, - LANGUAGE_SPANISH_DOMINICAN_REPUBLIC, - LANGUAGE_SPANISH_VENEZUELA, - LANGUAGE_SPANISH_COLOMBIA, - LANGUAGE_SPANISH_PERU, - LANGUAGE_SPANISH_ARGENTINA, - LANGUAGE_SPANISH_ECUADOR, - LANGUAGE_SPANISH_CHILE, - LANGUAGE_SPANISH_URUGUAY, - LANGUAGE_SPANISH_PARAGUAY, - LANGUAGE_SPANISH_BOLIVIA, - LANGUAGE_SPANISH_EL_SALVADOR, - LANGUAGE_SPANISH_HONDURAS, - LANGUAGE_SPANISH_NICARAGUA, - LANGUAGE_SPANISH_PUERTO_RICO ) ) + // are localized. That was already checked in + // SetDependentKeywords(). + i = NF_KEY_LASTKEYWORD; + while ( i > 0 && sString.indexOf(sEnglishKeyword[i]) != 0 ) { - i = NF_KEY_LASTKEYWORD; - while ( i > 0 && sString.indexOf(sEnglishKeyword[i]) != 0 ) + i--; + } + if ( i > NF_KEY_LASTOLDKEYWORD && sString != sEnglishKeyword[i] ) + { + // found something, but maybe it's something else? + // e.g. new NNN is found in NNNN, for NNNN we must search on + short j = i - 1; + while ( j > 0 && sString.indexOf(sEnglishKeyword[j]) != 0 ) { - i--; + j--; } - if ( i > NF_KEY_LASTOLDKEYWORD && sString != sEnglishKeyword[i] ) + if ( j && sEnglishKeyword[j].getLength() > sEnglishKeyword[i].getLength() ) { - // found something, but maybe it's something else? - // e.g. new NNN is found in NNNN, for NNNN we must search on - short j = i - 1; - while ( j > 0 && sString.indexOf(sEnglishKeyword[j]) != 0 ) - { - j--; - } - if ( j && sEnglishKeyword[j].getLength() > sEnglishKeyword[i].getLength() ) - { - return j; - } + return j; } } } -- cgit v1.2.3