Kaydet (Commit) 00de85cc authored tarafından Eike Rathke's avatar Eike Rathke

added getMatchingFallback()

Change-Id: I5805ab98049bd7dfd8ca1b58632f6c0115197bdd
üst 547affaf
...@@ -1312,4 +1312,49 @@ LanguageTag::Extraction LanguageTag::simpleExtract( const OUString& rBcp47, ...@@ -1312,4 +1312,49 @@ LanguageTag::Extraction LanguageTag::simpleExtract( const OUString& rBcp47,
} }
// static
::std::vector< com::sun::star::lang::Locale >::const_iterator LanguageTag::getMatchingFallback(
const ::std::vector< com::sun::star::lang::Locale > & rList,
const com::sun::star::lang::Locale & rReference )
{
if (rList.empty())
return rList.end();
::std::vector< lang::Locale >::const_iterator it;
// Try the simple case first without constructing fallbacks.
for (it = rList.begin(); it != rList.end(); ++it)
{
if ( (*it).Language == rReference.Language &&
(*it).Country == rReference.Country &&
(*it).Variant == rReference.Variant)
return it; // exact match
}
// 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< ::std::vector< OUString > > aListFallbacks( rList.size());
for (it = rList.begin(); it != rList.end(); ++it)
{
::std::vector< OUString > aTmp( LanguageTag( *it).getFallbackStrings());
aListFallbacks.push_back( aTmp);
}
for (::std::vector< OUString >::const_iterator rfb( aFallbacks.begin()); rfb != aFallbacks.end(); ++rfb)
{
for (::std::vector< ::std::vector< OUString > >::const_iterator lfb( aListFallbacks.begin());
lfb != aListFallbacks.end(); ++lfb)
{
for (::std::vector< OUString >::const_iterator fb( (*lfb).begin()); fb != (*lfb).end(); ++fb)
{
if (*rfb == *fb)
return rList.begin() + (lfb - aListFallbacks.begin());
}
}
}
// No match found.
return rList.end();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
...@@ -273,7 +273,7 @@ public: ...@@ -273,7 +273,7 @@ public:
::std::vector< OUString > getFallbackStrings() const; ::std::vector< OUString > getFallbackStrings() const;
/** @short search for an equal or at least for a similar locale in a list /** @short Search for an equal or at least for a similar locale in a list
of possible ones. of possible ones.
@descr First search for a locale that is equal to the reference @descr First search for a locale that is equal to the reference
...@@ -306,12 +306,39 @@ public: ...@@ -306,12 +306,39 @@ public:
@return An iterator that points to the found element inside the given @return An iterator that points to the found element inside the given
locale list. If no matching locale could be found it points to locale list. If no matching locale could be found it points to
the end of the list. the beginning of the list.
*/ */
static ::std::vector< OUString >::const_iterator getFallback( const ::std::vector< OUString > & rList, static ::std::vector< OUString >::const_iterator getFallback( const ::std::vector< OUString > & rList,
const OUString & rReference ); const OUString & rReference );
/** @short Search for an equal or for a similar locale in a list
of possible ones where at least the language matches.
@descr First search for a locale that is equal to the reference
locale.
If the reference locale could not be located, check for
"similar" locales, in the same order as obtained by
getFallbackStrings().
If no locale matches, rList.end() is returned.
@param rList
the vector of possible locales.
@param rReference
the reference locale.
@return An iterator that points to the found element inside the given
locale list. If no matching locale could be found it points to
the end of the list.
*/
static ::std::vector< com::sun::star::lang::Locale >::const_iterator getMatchingFallback(
const ::std::vector< com::sun::star::lang::Locale > & rList,
const com::sun::star::lang::Locale & rReference );
/** Test equality of two LanguageTag, possibly resolving system locale. /** Test equality of two LanguageTag, possibly resolving system locale.
@param bResolveSystem @param bResolveSystem
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment