summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2013-09-05 15:54:14 +0200
committerEike Rathke <erack@redhat.com>2013-09-05 16:51:28 +0200
commite13fd395939ff037a38172a87366a84293df7e30 (patch)
treefe13b157c41b7e4bf14c83bfd84a644951f83984
parentc2b18aa7743ffb0b3e229deafb2740322d7560b3 (diff)
getFallbackStrings() with bIncludeFullBcp47 parameter
so the various places that check the full tag first do not have to get it just to delete it again. Change-Id: Ib4e3cf1b16988464db875f1b6ac5cf4a0ab60fe5
-rw-r--r--desktop/source/deployment/misc/dp_descriptioninfoset.cxx7
-rw-r--r--desktop/source/deployment/registry/package/dp_package.cxx4
-rw-r--r--i18nlangtag/qa/cppunit/test_languagetag.cxx4
-rw-r--r--i18nlangtag/source/languagetag/languagetag.cxx25
-rw-r--r--i18npool/source/localedata/localedata.cxx3
-rw-r--r--include/i18nlangtag/languagetag.hxx19
-rw-r--r--rsc/source/parser/rscdb.cxx2
-rw-r--r--rsc/source/parser/rscibas.cxx2
-rw-r--r--sc/source/core/tool/addincol.cxx17
-rw-r--r--svx/source/gallery2/galini.cxx3
-rw-r--r--tools/source/rc/resmgr.cxx4
-rw-r--r--unotools/source/config/fontcfg.cxx5
-rw-r--r--vcl/source/app/brand.cxx2
-rw-r--r--vcl/source/gdi/impimagetree.cxx2
14 files changed, 53 insertions, 46 deletions
diff --git a/desktop/source/deployment/misc/dp_descriptioninfoset.cxx b/desktop/source/deployment/misc/dp_descriptioninfoset.cxx
index 08e78fbc988a..53d7e7f45c3f 100644
--- a/desktop/source/deployment/misc/dp_descriptioninfoset.cxx
+++ b/desktop/source/deployment/misc/dp_descriptioninfoset.cxx
@@ -728,12 +728,9 @@ DescriptionInfoset::getLocalizedChild( const OUString & sParent) const
//office: en-DE, en, en-DE-altmark
if (! nodeMatch.is())
{
- const ::std::vector< OUString > aFallbacks = getOfficeLanguageTag().getFallbackStrings();
// Already tried full tag, continue with first fallback.
- ::std::vector< OUString >::const_iterator it( aFallbacks.begin());
- if (it != aFallbacks.end())
- ++it;
- for ( ; it != aFallbacks.end(); ++it)
+ const ::std::vector< OUString > aFallbacks( getOfficeLanguageTag().getFallbackStrings( false));
+ for (::std::vector< OUString >::const_iterator it( aFallbacks.begin()); it != aFallbacks.end(); ++it)
{
nodeMatch = matchLanguageTag(xParent, *it);
if (nodeMatch.is())
diff --git a/desktop/source/deployment/registry/package/dp_package.cxx b/desktop/source/deployment/registry/package/dp_package.cxx
index 51689a6b40a6..b116378d481f 100644
--- a/desktop/source/deployment/registry/package/dp_package.cxx
+++ b/desktop/source/deployment/registry/package/dp_package.cxx
@@ -1420,7 +1420,7 @@ void BackendImpl::PackageImpl::scanBundle(
const LanguageTag& officeLocale = getOfficeLanguageTag();
- const ::std::vector< OUString > officeFallbacks( officeLocale.getFallbackStrings());
+ const ::std::vector< OUString > officeFallbacks( officeLocale.getFallbackStrings( true));
const size_t nPenaltyMax = ::std::numeric_limits<size_t>::max();
size_t descrPenalty = nPenaltyMax;
OUString descrFile;
@@ -1475,7 +1475,7 @@ void BackendImpl::PackageImpl::scanBundle(
if (officeLocale.getLanguage() == descrTag.getLanguage())
{
size_t nPenalty = nPenaltyMax;
- const ::std::vector< OUString > descrFallbacks( descrTag.getFallbackStrings());
+ const ::std::vector< OUString > descrFallbacks( descrTag.getFallbackStrings( true));
for (size_t o=0; o < officeFallbacks.size() && nPenalty == nPenaltyMax; ++o)
{
for (size_t d=0; d < descrFallbacks.size() && nPenalty == nPenaltyMax; ++d)
diff --git a/i18nlangtag/qa/cppunit/test_languagetag.cxx b/i18nlangtag/qa/cppunit/test_languagetag.cxx
index d0145cf7d126..6fb0de282d8f 100644
--- a/i18nlangtag/qa/cppunit/test_languagetag.cxx
+++ b/i18nlangtag/qa/cppunit/test_languagetag.cxx
@@ -161,7 +161,7 @@ void TestLanguageTag::testAllTags()
CPPUNIT_ASSERT( ca_ES_valencia.getCountry() == "ES" );
CPPUNIT_ASSERT( ca_ES_valencia.getScript() == "" );
CPPUNIT_ASSERT( ca_ES_valencia.getLanguageAndScript() == "ca" );
- ::std::vector< OUString > ca_ES_valencia_Fallbacks( ca_ES_valencia.getFallbackStrings());
+ ::std::vector< OUString > ca_ES_valencia_Fallbacks( ca_ES_valencia.getFallbackStrings( true));
CPPUNIT_ASSERT( ca_ES_valencia_Fallbacks.size() == 4);
CPPUNIT_ASSERT( ca_ES_valencia_Fallbacks[0] == "ca-ES-valencia");
CPPUNIT_ASSERT( ca_ES_valencia_Fallbacks[1] == "ca-valencia");
@@ -186,7 +186,7 @@ void TestLanguageTag::testAllTags()
CPPUNIT_ASSERT( ca_valencia.getCountry() == "" );
CPPUNIT_ASSERT( ca_valencia.getScript() == "" );
CPPUNIT_ASSERT( ca_valencia.getLanguageAndScript() == "ca" );
- ::std::vector< OUString > ca_valencia_Fallbacks( ca_valencia.getFallbackStrings());
+ ::std::vector< OUString > ca_valencia_Fallbacks( ca_valencia.getFallbackStrings( true));
CPPUNIT_ASSERT( ca_valencia_Fallbacks.size() == 2);
CPPUNIT_ASSERT( ca_valencia_Fallbacks[0] == "ca-valencia");
CPPUNIT_ASSERT( ca_valencia_Fallbacks[1] == "ca");
diff --git a/i18nlangtag/source/languagetag/languagetag.cxx b/i18nlangtag/source/languagetag/languagetag.cxx
index 3491d0a9d5f0..40098a95db40 100644
--- a/i18nlangtag/source/languagetag/languagetag.cxx
+++ b/i18nlangtag/source/languagetag/languagetag.cxx
@@ -74,7 +74,7 @@ static const KnownTagSet & getKnowns()
// Do not use the BCP47 string here to initialize the
// LanguageTag because then canonicalize() would call this
// getKnowns() again..
- ::std::vector< OUString > aFallbacks( LanguageTag( (*it).mnLang).getFallbackStrings());
+ ::std::vector< OUString > aFallbacks( LanguageTag( (*it).mnLang).getFallbackStrings( true));
for (::std::vector< OUString >::const_iterator fb( aFallbacks.begin()); fb != aFallbacks.end(); ++fb)
{
rKnowns.insert( *fb);
@@ -1198,8 +1198,7 @@ LanguageTag & LanguageTag::makeFallback()
{
// "en-US" is the last resort fallback, try if we get a better
// one for the fallback hierarchy of a non-"en" locale.
- ::std::vector< OUString > aFallbacks( getFallbackStrings());
- aFallbacks.erase( aFallbacks.begin()); // first is full BCP47, we already checked that
+ ::std::vector< OUString > aFallbacks( getFallbackStrings( false));
for (::std::vector< OUString >::const_iterator it( aFallbacks.begin()); it != aFallbacks.end(); ++it)
{
lang::Locale aLocale3( LanguageTag( *it).getLocale());
@@ -1219,7 +1218,7 @@ LanguageTag & LanguageTag::makeFallback()
}
-::std::vector< OUString > LanguageTag::getFallbackStrings() const
+::std::vector< OUString > LanguageTag::getFallbackStrings( bool bIncludeFullBcp47 ) const
{
::std::vector< OUString > aVec;
OUString aLanguage( getLanguage());
@@ -1228,7 +1227,8 @@ LanguageTag & LanguageTag::makeFallback()
{
if (!aCountry.isEmpty())
{
- aVec.push_back( aLanguage + "-" + aCountry);
+ if (bIncludeFullBcp47)
+ aVec.push_back( aLanguage + "-" + aCountry);
if (aLanguage == "zh")
{
// For zh-HK or zh-MO also list zh-TW, for all other zh-XX also
@@ -1239,10 +1239,13 @@ LanguageTag & LanguageTag::makeFallback()
aVec.push_back( aLanguage + "-CN");
}
}
- aVec.push_back( aLanguage);
+ else if (bIncludeFullBcp47)
+ aVec.push_back( aLanguage);
return aVec;
}
- aVec.push_back( getBcp47());
+
+ if (bIncludeFullBcp47)
+ aVec.push_back( getBcp47());
OUString aVariants( getVariants());
OUString aTmp;
if (hasScript())
@@ -1471,8 +1474,7 @@ LanguageTag::Extraction LanguageTag::simpleExtract( const OUString& rBcp47,
return it; // exact match
}
- ::std::vector< OUString > aFallbacks( LanguageTag( rReference).getFallbackStrings());
- aFallbacks.erase( aFallbacks.begin()); // first is full BCP47, we already checked that
+ ::std::vector< OUString > aFallbacks( LanguageTag( rReference).getFallbackStrings( false));
if (rReference != "en-US")
{
aFallbacks.push_back( "en-US");
@@ -1524,13 +1526,12 @@ LanguageTag::Extraction LanguageTag::simpleExtract( const OUString& rBcp47,
}
// Now for each reference fallback test the fallbacks of the list in order.
- ::std::vector< OUString > aFallbacks( LanguageTag( rReference).getFallbackStrings());
- aFallbacks.erase( aFallbacks.begin()); // first is full BCP47, we already checked that
+ ::std::vector< OUString > aFallbacks( LanguageTag( rReference).getFallbackStrings( false));
::std::vector< ::std::vector< OUString > > aListFallbacks( rList.size());
size_t i = 0;
for (it = rList.begin(); it != rList.end(); ++it, ++i)
{
- ::std::vector< OUString > aTmp( LanguageTag( *it).getFallbackStrings());
+ ::std::vector< OUString > aTmp( LanguageTag( *it).getFallbackStrings( true));
aListFallbacks[i] = aTmp;
}
for (::std::vector< OUString >::const_iterator rfb( aFallbacks.begin()); rfb != aFallbacks.end(); ++rfb)
diff --git a/i18npool/source/localedata/localedata.cxx b/i18npool/source/localedata/localedata.cxx
index 2d92c5febe24..3eb1f86be4b4 100644
--- a/i18npool/source/localedata/localedata.cxx
+++ b/i18npool/source/localedata/localedata.cxx
@@ -1649,8 +1649,7 @@ OUString LocaleDataImpl::getFirstLocaleServiceName( const com::sun::star::lang::
::std::vector< OUString > aVec;
if (rLocale.Language == I18NLANGTAG_QLT)
{
- aVec = LanguageTag( rLocale).getFallbackStrings();
- aVec.erase( aVec.begin());
+ aVec = LanguageTag( rLocale).getFallbackStrings( false);
for (::std::vector< OUString >::iterator it(aVec.begin()); it != aVec.end(); ++it)
{
*it = (*it).replace( cHyphen, cUnder);
diff --git a/include/i18nlangtag/languagetag.hxx b/include/i18nlangtag/languagetag.hxx
index 9b922f7e05ce..06baf8d27993 100644
--- a/include/i18nlangtag/languagetag.hxx
+++ b/include/i18nlangtag/languagetag.hxx
@@ -267,6 +267,17 @@ public:
lll-CC
lll
+ If the tag includes variants the order is:
+ full BCP 47 tag, same as getBcp47()
+ lll-Ssss-CC-vvvvvvvv
+ lll-Ssss-vvvvvvvv
+ lll-Ssss-CC
+ lll-Ssss
+ lll-CC-vvvvvvvv
+ lll-vvvvvvvv
+ lll-CC
+ lll
+
Only strings that differ from a higher order are included, for example
if there is no script the elements will be bcp47, lll-CC, lll; if the
bcp47 string is identical to lll-CC then only lll-CC, lll.
@@ -274,8 +285,14 @@ public:
Note that lll is only ISO 639-1/2 alpha code and CC is only ISO 3166
alpha code. If the region can not be expressed as ISO 3166 then no -CC
tags are included.
+
+ @param bIncludeFullBcp47
+ If TRUE, the full BCP 47 tag is included as first element.
+ If FALSE, the full tag is not included; used if the caller
+ obtains the fallbacks only if the full tag did not lead to a
+ match, so subsequent tries need not to include it again.
*/
- ::std::vector< OUString > getFallbackStrings() const;
+ ::std::vector< OUString > getFallbackStrings( bool bIncludeFullBcp47 ) const;
/** @short Search for an equal or at least for a similar locale in a list
diff --git a/rsc/source/parser/rscdb.cxx b/rsc/source/parser/rscdb.cxx
index c1f69a57deb0..74ee7e492351 100644
--- a/rsc/source/parser/rscdb.cxx
+++ b/rsc/source/parser/rscdb.cxx
@@ -82,7 +82,7 @@ OString RscTypCont::ChangeLanguage(const OString& rNewLang)
if (rNewLang.isEmpty())
aFallbacks.push_back( "" ); // do not resolve to SYSTEM (en-US)
else
- aFallbacks = LanguageTag( OStringToOUString( rNewLang, RTL_TEXTENCODING_ASCII_US)).getFallbackStrings();
+ aFallbacks = LanguageTag( OStringToOUString( rNewLang, RTL_TEXTENCODING_ASCII_US)).getFallbackStrings( true);
bool bAppendEnUsFallback = ! (rNewLang.equalsIgnoreAsciiCase( "en-US" ) ||
rNewLang.equalsIgnoreAsciiCase( "x-no-translate" ) );
diff --git a/rsc/source/parser/rscibas.cxx b/rsc/source/parser/rscibas.cxx
index dda165cc6e2c..bef8e5bc9e82 100644
--- a/rsc/source/parser/rscibas.cxx
+++ b/rsc/source/parser/rscibas.cxx
@@ -93,7 +93,7 @@ void RscLangEnum::Init( RscNameTable& rNames )
fprintf( stderr, "ISO Language out:");
#endif
LanguageTag aLanguageTag( (*iTag).maBcp47);
- ::std::vector< OUString > aFallbacks( aLanguageTag.getFallbackStrings());
+ ::std::vector< OUString > aFallbacks( aLanguageTag.getFallbackStrings( true));
for (::std::vector< OUString >::const_iterator it( aFallbacks.begin()); it != aFallbacks.end(); ++it)
{
OString aLang( OUStringToOString( *it, RTL_TEXTENCODING_ASCII_US));
diff --git a/sc/source/core/tool/addincol.cxx b/sc/source/core/tool/addincol.cxx
index 80497c1bf8ee..719b9c1fbad9 100644
--- a/sc/source/core/tool/addincol.cxx
+++ b/sc/source/core/tool/addincol.cxx
@@ -156,7 +156,7 @@ bool ScUnoAddInFuncData::GetExcelName( LanguageType eDestLang, OUString& rRetExc
// Second, try match of fallback search with fallback locales,
// appending also 'en-US' and 'en' to search if not queried.
- ::std::vector< OUString > aFallbackSearch( aLanguageTag.getFallbackStrings());
+ ::std::vector< OUString > aFallbackSearch( aLanguageTag.getFallbackStrings( true));
if (aSearch != "en-US")
{
aFallbackSearch.push_back( "en-US");
@@ -165,22 +165,16 @@ bool ScUnoAddInFuncData::GetExcelName( LanguageType eDestLang, OUString& rRetExc
aFallbackSearch.push_back( "en");
}
}
- bool bFirst = true;
::std::vector< OUString >::const_iterator itSearch( aFallbackSearch.begin());
for ( ; itSearch != aFallbackSearch.end(); ++itSearch)
{
itNames = rCompNames.begin();
for ( ; itNames != rCompNames.end(); ++itNames)
{
- ::std::vector< OUString > aFallbackLocales( LanguageTag( (*itNames).maLocale).getFallbackStrings());
- ::std::vector< OUString >::const_iterator itLocales( aFallbackLocales.begin());
- if (bFirst)
- {
- // We checked already the full tag, start with second.
- if (itLocales != aFallbackLocales.end())
- ++itLocales;
- }
- for ( ; itLocales != aFallbackLocales.end(); ++itLocales)
+ // We checked already the full tag, start with second.
+ ::std::vector< OUString > aFallbackLocales( LanguageTag( (*itNames).maLocale).getFallbackStrings( false));
+ for (::std::vector< OUString >::const_iterator itLocales( aFallbackLocales.begin());
+ itLocales != aFallbackLocales.end(); ++itLocales)
{
if (*itLocales == *itSearch)
{
@@ -189,7 +183,6 @@ bool ScUnoAddInFuncData::GetExcelName( LanguageType eDestLang, OUString& rRetExc
}
}
}
- bFirst = false;
}
// Third, last resort, use first (default) entry.
diff --git a/svx/source/gallery2/galini.cxx b/svx/source/gallery2/galini.cxx
index dce5ce397012..815653982dd1 100644
--- a/svx/source/gallery2/galini.cxx
+++ b/svx/source/gallery2/galini.cxx
@@ -31,7 +31,7 @@ OUString GalleryThemeEntry::ReadStrFromIni(const OUString &aKeyName )
const LanguageTag &rLangTag = Application::GetSettings().GetUILanguageTag();
- ::std::vector< OUString > aFallbacks = rLangTag.getFallbackStrings();
+ ::std::vector< OUString > aFallbacks = rLangTag.getFallbackStrings( true);
OUString aResult;
sal_Int32 nRank = 42;
@@ -71,6 +71,7 @@ OUString GalleryThemeEntry::ReadStrFromIni(const OUString &aKeyName )
// grisly language matching, is this not available somewhere else?
if( aKey == aKeyName )
{
+ /* FIXME-BCP47: what is this supposed to do? */
n = 0;
OUString aLang = aLocale.replace('_','-');
for( std::vector< OUString >::const_iterator i = aFallbacks.begin();
diff --git a/tools/source/rc/resmgr.cxx b/tools/source/rc/resmgr.cxx
index b5b86a0a1792..9199ad17963b 100644
--- a/tools/source/rc/resmgr.cxx
+++ b/tools/source/rc/resmgr.cxx
@@ -233,7 +233,7 @@ InternalResMgr* ResMgrContainer::getResMgr( const OUString& rPrefix,
LanguageTag aLocale( rLocale );
boost::unordered_map< OUString, ContainerElement, OUStringHash >::iterator it = m_aResFiles.end();
- ::std::vector< OUString > aFallbacks( aLocale.getFallbackStrings());
+ ::std::vector< OUString > aFallbacks( aLocale.getFallbackStrings( true));
if (!isAlreadyPureenUS( aLocale))
aFallbacks.push_back( "en-US"); // last resort if all fallbacks fail
@@ -356,7 +356,7 @@ InternalResMgr* ResMgrContainer::getNextFallback( InternalResMgr* pMgr )
* passed / remember a fallback list and an index within to pick the next.
* */
- ::std::vector< OUString > aFallbacks( pMgr->aLocale.getFallbackStrings());
+ ::std::vector< OUString > aFallbacks( pMgr->aLocale.getFallbackStrings( true));
// The first is the locale itself, use next fallback or en-US.
/* TODO: what happens if the chain is "en-US", "en" -> "en-US", ...
* This was already an issue with the previous code. */
diff --git a/unotools/source/config/fontcfg.cxx b/unotools/source/config/fontcfg.cxx
index 3edd9b41a5fe..a2859339d705 100644
--- a/unotools/source/config/fontcfg.cxx
+++ b/unotools/source/config/fontcfg.cxx
@@ -225,8 +225,7 @@ OUString DefaultFontConfiguration::getDefaultFont( const LanguageTag& rLanguageT
}
else
{
- ::std::vector< OUString > aFallbacks( rLanguageTag.getFallbackStrings());
- aFallbacks.erase( aFallbacks.begin()); // first is full BCP47, we already checked that
+ ::std::vector< OUString > aFallbacks( rLanguageTag.getFallbackStrings( false));
for (::std::vector< OUString >::const_iterator it( aFallbacks.begin());
it != aFallbacks.end() && aRet.isEmpty(); ++it)
{
@@ -1147,7 +1146,7 @@ const FontNameAttr* FontSubstConfiguration::getSubstInfo( const OUString& rFontN
if( aLanguageTag.isSystemLocale() )
aLanguageTag = SvtSysLocale().GetUILanguageTag();
- ::std::vector< OUString > aFallbacks( aLanguageTag.getFallbackStrings());
+ ::std::vector< OUString > aFallbacks( aLanguageTag.getFallbackStrings( true));
if (aLanguageTag.getLanguage() != "en")
aFallbacks.push_back("en");
diff --git a/vcl/source/app/brand.cxx b/vcl/source/app/brand.cxx
index 0cf0a92d89f2..3304c86d2685 100644
--- a/vcl/source/app/brand.cxx
+++ b/vcl/source/app/brand.cxx
@@ -60,7 +60,7 @@ bool Application::LoadBrandBitmap (const char* pName, BitmapEx &rBitmap)
osl_getProcessLocale (&pLoc);
LanguageTag aLanguageTag( *pLoc);
- ::std::vector< OUString > aFallbacks( aLanguageTag.getFallbackStrings());
+ ::std::vector< OUString > aFallbacks( aLanguageTag.getFallbackStrings( true));
for (size_t i=0; i < aFallbacks.size(); ++i)
{
if (tryLoadPng( aBaseDir, aBaseName + "-" + aFallbacks[i] + aPng, rBitmap))
diff --git a/vcl/source/gdi/impimagetree.cxx b/vcl/source/gdi/impimagetree.cxx
index cc32190a6594..4d549f04e92e 100644
--- a/vcl/source/gdi/impimagetree.cxx
+++ b/vcl/source/gdi/impimagetree.cxx
@@ -197,7 +197,7 @@ bool ImplImageTree::doLoadImage(
sal_Int32 pos = name.lastIndexOf('/');
if (pos != -1) {
// find() uses a reverse iterator, so push in reverse order.
- std::vector< OUString > aFallbacks( Application::GetSettings().GetUILanguageTag().getFallbackStrings());
+ std::vector< OUString > aFallbacks( Application::GetSettings().GetUILanguageTag().getFallbackStrings( true));
for (std::vector< OUString >::const_reverse_iterator it( aFallbacks.rbegin());
it != aFallbacks.rend(); ++it)
{