i18nlangtag/qa/cppunit/test_languagetag.cxx | 23 +-- i18nlangtag/source/isolang/isolang.cxx | 163 ++++++------------------- i18nlangtag/source/isolang/mslangid.cxx | 32 ---- i18nlangtag/source/languagetag/languagetag.cxx | 22 --- include/i18nlangtag/mslangid.hxx | 53 ++------ rsc/source/parser/rscibas.cxx | 10 - 6 files changed, 82 insertions(+), 221 deletions(-)
New commits: commit 087ee66013916bd009eb0b29460ef1868b4d755c Author: Eike Rathke <er...@redhat.com> Date: Fri Aug 23 22:27:14 2013 +0200 encapsulate IsoLangEntry again Change-Id: I66475eb3914b07b4c7a045e295ef77a5de9439d4 diff --git a/i18nlangtag/qa/cppunit/test_languagetag.cxx b/i18nlangtag/qa/cppunit/test_languagetag.cxx index c64d199..838f69b 100644 --- a/i18nlangtag/qa/cppunit/test_languagetag.cxx +++ b/i18nlangtag/qa/cppunit/test_languagetag.cxx @@ -299,25 +299,24 @@ void TestLanguageTag::testAllTags() void TestLanguageTag::testAllIsoLangEntries() { - const MsLangId::IsoLangEntry* pLangEntry; - sal_Int32 nIndex = 0; - while (((pLangEntry = MsLangId::getIsoLangEntry( nIndex++ )) != NULL) && (pLangEntry->mnLang != LANGUAGE_DONTKNOW)) + const ::std::vector< MsLangId::LanguagetagMapping > aList( MsLangId::getDefinedLanguagetags()); + for (::std::vector< MsLangId::LanguagetagMapping >::const_iterator it( aList.begin()); it != aList.end(); ++it) { - LanguageTag aTagString( pLangEntry->getTagString(), true); - LanguageTag aTagID( pLangEntry->mnLang); - if (pLangEntry->getTagString() != aTagString.getBcp47()) + LanguageTag aTagString( (*it).maBcp47, true); + LanguageTag aTagID( (*it).mnLang); + if ((*it).maBcp47 != aTagString.getBcp47()) { - OString aMessage( OUStringToOString( pLangEntry->getTagString(), RTL_TEXTENCODING_ASCII_US)); + OString aMessage( OUStringToOString( (*it).maBcp47, RTL_TEXTENCODING_ASCII_US)); aMessage += " -> " + OUStringToOString( aTagString.getBcp47(), RTL_TEXTENCODING_ASCII_US); - CPPUNIT_ASSERT_MESSAGE( aMessage.getStr(), pLangEntry->getTagString() == aTagString.getBcp47()); + CPPUNIT_ASSERT_MESSAGE( aMessage.getStr(), (*it).maBcp47 == aTagString.getBcp47()); } - if (pLangEntry->getTagString() != aTagID.getBcp47()) + if ((*it).maBcp47 != aTagID.getBcp47()) { // There are multiple mappings, ID must be equal after conversions. LanguageTag aTagBack( aTagID.getBcp47(), true); if (aTagString.getLanguageType() != aTagBack.getLanguageType()) { - OString aMessage( OUStringToOString( pLangEntry->getTagString(), RTL_TEXTENCODING_ASCII_US)); + OString aMessage( OUStringToOString( (*it).maBcp47, RTL_TEXTENCODING_ASCII_US)); aMessage += " " + OString::number( aTagString.getLanguageType(), 16) + " -> " + OString::number( aTagBack.getLanguageType(), 16); CPPUNIT_ASSERT_MESSAGE( aMessage.getStr(), aTagString.getLanguageType() == aTagBack.getLanguageType()); @@ -327,13 +326,13 @@ void TestLanguageTag::testAllIsoLangEntries() // This does not hold, there are cases like 'ar' // LANGUAGE_ARABIC_PRIMARY_ONLY that when mapped back results in // 'ar-SA' as default locale. - if (pLangEntry->mnLang != aTagString.getLanguageType()) + if ((*it).mnLang != aTagString.getLanguageType()) { // There are multiple mappings, string must be equal after conversions. LanguageTag aTagBack( aTagString.getLanguageType()); if (aTagID.getBcp47() != aTagBack.getBcp47()) { - OString aMessage( OUStringToOString( pLangEntry->getTagString(), RTL_TEXTENCODING_ASCII_US)); + OString aMessage( OUStringToOString( (*it).maBcp47, RTL_TEXTENCODING_ASCII_US)); aMessage += " " + OUStringToOString( aTagID.getBcp47(), RTL_TEXTENCODING_ASCII_US) + " -> " + OUStringToOString( aTagBack.getBcp47(), RTL_TEXTENCODING_ASCII_US); CPPUNIT_ASSERT_MESSAGE( aMessage.getStr(), aTagID.getBcp47() == aTagBack.getBcp47()); diff --git a/i18nlangtag/source/isolang/isolang.cxx b/i18nlangtag/source/isolang/isolang.cxx index 26ad88f..0373548 100644 --- a/i18nlangtag/source/isolang/isolang.cxx +++ b/i18nlangtag/source/isolang/isolang.cxx @@ -27,6 +27,16 @@ // ======================================================================= +struct IsoLangEntry +{ + LanguageType mnLang; + sal_Char maLangStr[4]; + sal_Char maCountry[3]; + + /** Obtain a language tag string with '-' separator. */ + OUString getTagString() const; +}; + struct IsoLangEngEntry { LanguageType mnLang; @@ -89,7 +99,7 @@ struct IsoLangOtherEntry * LANGUAGE_AZERI LANGUAGE_URDU LANGUAGE_KASHMIRI */ -static MsLangId::IsoLangEntry const aImplIsoLangEntries[] = +static IsoLangEntry const aImplIsoLangEntries[] = { // MS-LANGID codes ISO639-1/2/3 ISO3166 { LANGUAGE_ENGLISH, "en", "" }, @@ -524,10 +534,10 @@ static MsLangId::IsoLangEntry const aImplIsoLangEntries[] = { LANGUAGE_DONTKNOW, "", "" } // marks end of table }; -static MsLangId::IsoLangEntry aLastResortFallbackEntry = +static IsoLangEntry aLastResortFallbackEntry = { LANGUAGE_ENGLISH_US, "en", "US" }; -OUString MsLangId::IsoLangEntry::getTagString() const +OUString IsoLangEntry::getTagString() const { if (maCountry[0]) return OUString( OUString::createFromAscii( maLangStr) + "-" + OUString::createFromAscii( maCountry)); @@ -695,7 +705,7 @@ void MsLangId::Conversion::convertLanguageToLocaleImpl( LanguageType nLang, // ----------------------------------------------------------------------- -static const MsLangId::IsoLangEntry & lcl_lookupFallbackEntry( +static const IsoLangEntry & lcl_lookupFallbackEntry( const ::com::sun::star::lang::Locale & rLocale ) { // language is lower case in table @@ -705,8 +715,8 @@ static const MsLangId::IsoLangEntry & lcl_lookupFallbackEntry( sal_Int32 nCountryLen = aUpperCountry.getLength(); // Search for locale and remember first lang-only. - const MsLangId::IsoLangEntry* pFirstLang = NULL; - const MsLangId::IsoLangEntry* pEntry = aImplIsoLangEntries; + const IsoLangEntry* pFirstLang = NULL; + const IsoLangEntry* pEntry = aImplIsoLangEntries; do { if (aLowerLang.equalsAscii( pEntry->maLangStr)) @@ -762,7 +772,7 @@ static const MsLangId::IsoLangEntry & lcl_lookupFallbackEntry( ::com::sun::star::lang::Locale MsLangId::Conversion::lookupFallbackLocale( const ::com::sun::star::lang::Locale & rLocale ) { - const MsLangId::IsoLangEntry& rEntry = lcl_lookupFallbackEntry( rLocale); + const IsoLangEntry& rEntry = lcl_lookupFallbackEntry( rLocale); return ::com::sun::star::lang::Locale( OUString::createFromAscii( rEntry.maLangStr), OUString::createFromAscii( rEntry.maCountry), @@ -985,15 +995,16 @@ LanguageType MsLangId::convertUnxByteStringToLanguage( return Conversion::convertIsoNamesToLanguage( aLang, aCountry ); } -// ----------------------------------------------------------------------- -// pass one IsoLangEntry to the outer world of the resource compiler // static -const MsLangId::IsoLangEntry* MsLangId::getIsoLangEntry( size_t nIndex ) +::std::vector< MsLangId::LanguagetagMapping > MsLangId::getDefinedLanguagetags() { - if (nIndex < SAL_N_ELEMENTS(aImplIsoLangEntries)) - return &aImplIsoLangEntries[ nIndex]; - return 0; + ::std::vector< LanguagetagMapping > aVec; + for (const IsoLangEntry* pEntry = aImplIsoLangEntries; pEntry->mnLang != LANGUAGE_DONTKNOW; ++pEntry) + { + aVec.push_back( LanguagetagMapping( pEntry->getTagString(), pEntry->mnLang)); + } + return aVec; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/i18nlangtag/mslangid.hxx b/include/i18nlangtag/mslangid.hxx index 37bc728..14386ec 100644 --- a/include/i18nlangtag/mslangid.hxx +++ b/include/i18nlangtag/mslangid.hxx @@ -25,6 +25,7 @@ #include "i18nlangtag/i18nlangtagdllapi.h" #include "i18nlangtag/lang.h" #include <com/sun/star/lang/Locale.hpp> +#include <vector> /** Methods related to Microsoft language IDs. For details about MS-LANGIDs please see lang.h */ @@ -173,26 +174,19 @@ public: // --------------------------------------------------------------------------- - /** @internal - Access to fields of an element of the simple conversion table. - For resource compiler build environment usage only! */ - struct IsoLangEntry + struct LanguagetagMapping { - LanguageType mnLang; - sal_Char maLangStr[4]; - sal_Char maCountry[3]; + OUString maBcp47; + LanguageType mnLang; - /** Obtain a language tag string with '-' separator. */ - I18NLANGTAG_DLLPUBLIC OUString getTagString() const; + LanguagetagMapping( const OUString & rBcp47, LanguageType nLang ) : maBcp47(rBcp47), mnLang(nLang) {} }; - /** @internal - Return a pointer to the IsoLangEntry of the underlying table, - matching the offset passed by nIndex. Only meaningful for the resource - compiler to build a list of known languages. - - @returns address of IsoLangEntry, or NULL pointer if nIndex exceeds the - table elements' count. + /** @internal - Obtain a list of known locales (i.e. those that have a + defined mapping between MS-LangID and ISO codes or tags) as BCP 47 + language tag strings. */ - static const IsoLangEntry* getIsoLangEntry( size_t nIndex ); + static ::std::vector< LanguagetagMapping > getDefinedLanguagetags(); // --------------------------------------------------------------------------- diff --git a/rsc/source/parser/rscibas.cxx b/rsc/source/parser/rscibas.cxx index f4f05b5..dda165c 100644 --- a/rsc/source/parser/rscibas.cxx +++ b/rsc/source/parser/rscibas.cxx @@ -81,18 +81,18 @@ void RscLangEnum::Init( RscNameTable& rNames ) sal_Int32 nIndex = 0; mnLangId = 0x400; // stay away from selfdefined... - const MsLangId::IsoLangEntry* pLangEntry; - while ( NULL != ( pLangEntry = MsLangId::getIsoLangEntry( nIndex )) && ( pLangEntry->mnLang != LANGUAGE_DONTKNOW )) + const ::std::vector< MsLangId::LanguagetagMapping > aList( MsLangId::getDefinedLanguagetags()); + for (::std::vector< MsLangId::LanguagetagMapping >::const_iterator iTag( aList.begin()); iTag != aList.end(); ++iTag) { #if OSL_DEBUG_LEVEL > 2 fprintf( stderr, "ISO Language in : %d, 0x%04x, %s\n", (int)nIndex, - (unsigned)pLangEntry->mnLang, - OUStringToOString( pLangEntry->getTagString(), RTL_TEXTENCODING_ASCII_US).getStr()); + (unsigned)(*iTag).mnLang, + OUStringToOString( (*iTag).maBcp47, RTL_TEXTENCODING_ASCII_US).getStr()); fprintf( stderr, "ISO Language out:"); #endif - LanguageTag aLanguageTag( pLangEntry->getTagString()); + LanguageTag aLanguageTag( (*iTag).maBcp47); ::std::vector< OUString > aFallbacks( aLanguageTag.getFallbackStrings()); for (::std::vector< OUString >::const_iterator it( aFallbacks.begin()); it != aFallbacks.end(); ++it) { commit 5b2a740b9cacd1e0e4d2164647e89fb6b1e6c39e Author: Eike Rathke <er...@redhat.com> Date: Fri Aug 23 20:37:46 2013 +0200 use sensible indenting Change-Id: Iea3c9e579e8236a9b7e1a57b4e7ec1c760f278e9 diff --git a/i18nlangtag/source/isolang/isolang.cxx b/i18nlangtag/source/isolang/isolang.cxx index 5fa7d5c..26ad88f 100644 --- a/i18nlangtag/source/isolang/isolang.cxx +++ b/i18nlangtag/source/isolang/isolang.cxx @@ -946,8 +946,7 @@ LanguageType MsLangId::convertUnxByteStringToLanguage( if (nAtPos >= 0) aAtString = rString.copy( nAtPos+1 ); - if ( ((nLangSepPos >= 0) && (nLangSepPos > nCountrySepPos)) - || ((nLangSepPos < 0)) ) + if (((nLangSepPos >= 0) && (nLangSepPos > nCountrySepPos)) || (nLangSepPos < 0)) { // eg. "el.sun_eu_greek", "tchinese", "es.ISO8859-15" aLang = rString.copy( 0, nCountrySepPos ); @@ -969,14 +968,14 @@ LanguageType MsLangId::convertUnxByteStringToLanguage( const IsoLangGLIBCModifiersEntry* pGLIBCModifiersEntry = aImplIsoLangGLIBCModifiersEntries; do { // avoid embedded \0 warning - if (( aLowerLang.equals( static_cast< const char* >( pGLIBCModifiersEntry->maLangStr ))) && - ( aAtString.equals( static_cast< const char* >( pGLIBCModifiersEntry->maAtString )))) + if (aLowerLang.equals( static_cast< const char* >( pGLIBCModifiersEntry->maLangStr )) && + aAtString.equals( static_cast< const char* >( pGLIBCModifiersEntry->maAtString ))) { - if ( aUpperCountry.isEmpty() || - aUpperCountry.equals( static_cast< const char* >( pGLIBCModifiersEntry->maCountry ))) - { + if (aUpperCountry.isEmpty() || + aUpperCountry.equals( static_cast< const char* >( pGLIBCModifiersEntry->maCountry ))) + { return pGLIBCModifiersEntry->mnLang; - } + } } ++pGLIBCModifiersEntry; } commit fc0f7eaa73b671aea03b9182db3391382d6e8eb8 Author: Eike Rathke <er...@redhat.com> Date: Fri Aug 23 20:30:12 2013 +0200 do not convert to IsoLangNoneStdEntry Change-Id: I94ba55f2ab8e9b495d8f02b137c940fe5173b8fd diff --git a/i18nlangtag/source/isolang/isolang.cxx b/i18nlangtag/source/isolang/isolang.cxx index 527ace3..5fa7d5c 100644 --- a/i18nlangtag/source/isolang/isolang.cxx +++ b/i18nlangtag/source/isolang/isolang.cxx @@ -675,23 +675,6 @@ void MsLangId::Conversion::convertLanguageToLocaleImpl( LanguageType nLang, } while ( pEntry->mnLang != LANGUAGE_DONTKNOW ); - // Search for LangID if we didn't find a specific ISO combination. - // All entries in this table are allowed for mime specifications, - // but not defined ISO combinations. - const IsoLangNoneStdEntry* pNoneStdEntry = aImplIsoNoneStdLangEntries; - do - { - if ( pNoneStdEntry->mnLang == nLang ) - { - rLocale.Language = OUString::createFromAscii( pNoneStdEntry->maLangStr ); - rLocale.Country = OUString::createFromAscii( pNoneStdEntry->maCountry ); - rLocale.Variant = OUString(); - return; - } - ++pNoneStdEntry; - } - while ( pNoneStdEntry->mnLang != LANGUAGE_DONTKNOW ); - // Look for privateuse definitions. const IsoLangOtherEntry* pPrivateEntry = aImplPrivateUseEntries; do commit 5cc7914d9199833d4ef03afe62f03d88693ed1f8 Author: Eike Rathke <er...@redhat.com> Date: Fri Aug 23 20:22:04 2013 +0200 do not resolve system language here Change-Id: I77b8a3d750ba3a629252805342ab385731238ee3 diff --git a/i18nlangtag/source/isolang/isolang.cxx b/i18nlangtag/source/isolang/isolang.cxx index 31ecf08..527ace3 100644 --- a/i18nlangtag/source/isolang/isolang.cxx +++ b/i18nlangtag/source/isolang/isolang.cxx @@ -660,9 +660,6 @@ static IsoLangOtherEntry const aImplPrivateUseEntries[] = void MsLangId::Conversion::convertLanguageToLocaleImpl( LanguageType nLang, ::com::sun::star::lang::Locale & rLocale ) { - if ( nLang == LANGUAGE_SYSTEM ) - nLang = MsLangId::getSystemLanguage(); - // Search for LangID (in this table we find only defined ISO combinations) const IsoLangEntry* pEntry = aImplIsoLangEntries; do commit 54e3af6ab108774bc0065be92798137e403ea25c Author: Eike Rathke <er...@redhat.com> Date: Fri Aug 23 20:11:15 2013 +0200 passed rLocale remains unchanged if no mapping found Change-Id: I4d1494dc5cba7a92fb067191477c3cbba46b056d diff --git a/i18nlangtag/source/isolang/isolang.cxx b/i18nlangtag/source/isolang/isolang.cxx index 1e7ac84..31ecf08 100644 --- a/i18nlangtag/source/isolang/isolang.cxx +++ b/i18nlangtag/source/isolang/isolang.cxx @@ -710,10 +710,7 @@ void MsLangId::Conversion::convertLanguageToLocaleImpl( LanguageType nLang, } while ( pPrivateEntry->mnLang != LANGUAGE_DONTKNOW ); - // Not found. The effective result is the empty SYSTEM locale. - rLocale.Language = OUString(); - rLocale.Country = OUString(); - rLocale.Variant = OUString(); + // Not found. Passed rLocale argument remains unchanged. } // ----------------------------------------------------------------------- diff --git a/include/i18nlangtag/mslangid.hxx b/include/i18nlangtag/mslangid.hxx index f33b125..37bc728 100644 --- a/include/i18nlangtag/mslangid.hxx +++ b/include/i18nlangtag/mslangid.hxx @@ -242,7 +242,12 @@ public: I18NLANGTAG_DLLPRIVATE static ::com::sun::star::lang::Locale convertLanguageToLocale( LanguageType nLang, bool bResolveSystem ); - /** Used by convertLanguageToLocale(LanguageType,bool) */ + /** Used by convertLanguageToLocale(LanguageType,bool) + + @return rLocale set to mapped values, unchanged if no mapping was + found. E.g. pass empty Locale to obtain empty SYSTEM locale + for that case. + */ I18NLANGTAG_DLLPRIVATE static void convertLanguageToLocaleImpl( LanguageType nLang, ::com::sun::star::lang::Locale & rLocale ); commit f3e124f4bd759095d977a9639d226ed582ed76d7 Author: Eike Rathke <er...@redhat.com> Date: Fri Aug 23 20:05:09 2013 +0200 moved privateuse handling to convertLanguageToLocaleImpl() Change-Id: Id9cdd5734f54fd4fca43f5e0d928d9cb37e8f63f diff --git a/i18nlangtag/source/isolang/isolang.cxx b/i18nlangtag/source/isolang/isolang.cxx index 3edc599..1e7ac84 100644 --- a/i18nlangtag/source/isolang/isolang.cxx +++ b/i18nlangtag/source/isolang/isolang.cxx @@ -23,6 +23,7 @@ #include <rtl/strbuf.hxx> #include "i18nlangtag/mslangid.hxx" +#include "i18nlangtag/languagetag.hxx" // ======================================================================= @@ -670,6 +671,7 @@ void MsLangId::Conversion::convertLanguageToLocaleImpl( LanguageType nLang, { rLocale.Language = OUString::createFromAscii( pEntry->maLangStr ); rLocale.Country = OUString::createFromAscii( pEntry->maCountry ); + rLocale.Variant = OUString(); return; } ++pEntry; @@ -686,6 +688,7 @@ void MsLangId::Conversion::convertLanguageToLocaleImpl( LanguageType nLang, { rLocale.Language = OUString::createFromAscii( pNoneStdEntry->maLangStr ); rLocale.Country = OUString::createFromAscii( pNoneStdEntry->maCountry ); + rLocale.Variant = OUString(); return; } ++pNoneStdEntry; @@ -698,17 +701,19 @@ void MsLangId::Conversion::convertLanguageToLocaleImpl( LanguageType nLang, { if ( pPrivateEntry->mnLang == nLang ) { - rLocale.Language = OUString::createFromAscii( pPrivateEntry->mpLangStr ); + rLocale.Language = I18NLANGTAG_QLT; rLocale.Country = OUString(); + rLocale.Variant = OUString::createFromAscii( pPrivateEntry->mpLangStr ); return; } ++pPrivateEntry; } while ( pPrivateEntry->mnLang != LANGUAGE_DONTKNOW ); - // not found + // Not found. The effective result is the empty SYSTEM locale. rLocale.Language = OUString(); rLocale.Country = OUString(); + rLocale.Variant = OUString(); } // ----------------------------------------------------------------------- diff --git a/i18nlangtag/source/isolang/mslangid.cxx b/i18nlangtag/source/isolang/mslangid.cxx index c31fde1..a4daef86 100644 --- a/i18nlangtag/source/isolang/mslangid.cxx +++ b/i18nlangtag/source/isolang/mslangid.cxx @@ -156,13 +156,6 @@ LanguageType MsLangId::resolveSystemLanguageByScriptType( LanguageType nLang, sa if (bResolveSystem || nLang == LANGUAGE_DONTKNOW) nLang = MsLangId::getRealLanguage( nLang); convertLanguageToLocaleImpl( nLang, aLocale); - /* FIXME: this x-... is temporary until conversion will be moved up to - * LanguageTag. Also handle the nasty "*" joker as privateuse. */ - if (aLocale.Language.startsWith( "x-") || (aLocale.Language == "*")) - { - aLocale.Variant = aLocale.Language; - aLocale.Language = "qlt"; - } } return aLocale; } commit 22c19620dc44b8f619936c7dbd4b07c6a372d2de Author: Eike Rathke <er...@redhat.com> Date: Fri Aug 23 19:53:27 2013 +0200 convertLanguageToIsoNames() -> convertLanguageToLocaleImpl() Change-Id: I4e34fb09a901a414f3106883d9ace1bff81311b5 diff --git a/i18nlangtag/source/isolang/isolang.cxx b/i18nlangtag/source/isolang/isolang.cxx index e16e230..3edc599 100644 --- a/i18nlangtag/source/isolang/isolang.cxx +++ b/i18nlangtag/source/isolang/isolang.cxx @@ -656,8 +656,8 @@ static IsoLangOtherEntry const aImplPrivateUseEntries[] = // ======================================================================= // static -void MsLangId::Conversion::convertLanguageToIsoNames( LanguageType nLang, - OUString& rLangStr, OUString& rCountry ) +void MsLangId::Conversion::convertLanguageToLocaleImpl( LanguageType nLang, + ::com::sun::star::lang::Locale & rLocale ) { if ( nLang == LANGUAGE_SYSTEM ) nLang = MsLangId::getSystemLanguage(); @@ -668,8 +668,8 @@ void MsLangId::Conversion::convertLanguageToIsoNames( LanguageType nLang, { if ( pEntry->mnLang == nLang ) { - rLangStr = OUString::createFromAscii( pEntry->maLangStr ); - rCountry = OUString::createFromAscii( pEntry->maCountry ); + rLocale.Language = OUString::createFromAscii( pEntry->maLangStr ); + rLocale.Country = OUString::createFromAscii( pEntry->maCountry ); return; } ++pEntry; @@ -684,8 +684,8 @@ void MsLangId::Conversion::convertLanguageToIsoNames( LanguageType nLang, { if ( pNoneStdEntry->mnLang == nLang ) { - rLangStr = OUString::createFromAscii( pNoneStdEntry->maLangStr ); - rCountry = OUString::createFromAscii( pNoneStdEntry->maCountry ); + rLocale.Language = OUString::createFromAscii( pNoneStdEntry->maLangStr ); + rLocale.Country = OUString::createFromAscii( pNoneStdEntry->maCountry ); return; } ++pNoneStdEntry; @@ -698,8 +698,8 @@ void MsLangId::Conversion::convertLanguageToIsoNames( LanguageType nLang, { if ( pPrivateEntry->mnLang == nLang ) { - rLangStr = OUString::createFromAscii( pPrivateEntry->mpLangStr ); - rCountry = OUString(); + rLocale.Language = OUString::createFromAscii( pPrivateEntry->mpLangStr ); + rLocale.Country = OUString(); return; } ++pPrivateEntry; @@ -707,8 +707,8 @@ void MsLangId::Conversion::convertLanguageToIsoNames( LanguageType nLang, while ( pPrivateEntry->mnLang != LANGUAGE_DONTKNOW ); // not found - rLangStr = OUString(); - rCountry = OUString(); + rLocale.Language = OUString(); + rLocale.Country = OUString(); } // ----------------------------------------------------------------------- diff --git a/i18nlangtag/source/isolang/mslangid.cxx b/i18nlangtag/source/isolang/mslangid.cxx index 2e9ca7e..c31fde1 100644 --- a/i18nlangtag/source/isolang/mslangid.cxx +++ b/i18nlangtag/source/isolang/mslangid.cxx @@ -155,7 +155,7 @@ LanguageType MsLangId::resolveSystemLanguageByScriptType( LanguageType nLang, sa // but not LANGUAGE_SYSTEM or others. if (bResolveSystem || nLang == LANGUAGE_DONTKNOW) nLang = MsLangId::getRealLanguage( nLang); - convertLanguageToIsoNames( nLang, aLocale.Language, aLocale.Country); + convertLanguageToLocaleImpl( nLang, aLocale); /* FIXME: this x-... is temporary until conversion will be moved up to * LanguageTag. Also handle the nasty "*" joker as privateuse. */ if (aLocale.Language.startsWith( "x-") || (aLocale.Language == "*")) diff --git a/include/i18nlangtag/mslangid.hxx b/include/i18nlangtag/mslangid.hxx index da2e199..f33b125 100644 --- a/include/i18nlangtag/mslangid.hxx +++ b/include/i18nlangtag/mslangid.hxx @@ -243,8 +243,8 @@ public: LanguageType nLang, bool bResolveSystem ); /** Used by convertLanguageToLocale(LanguageType,bool) */ - I18NLANGTAG_DLLPRIVATE static void convertLanguageToIsoNames( - LanguageType nLang, OUString& rLangStr, OUString& rCountry ); + I18NLANGTAG_DLLPRIVATE static void convertLanguageToLocaleImpl( + LanguageType nLang, ::com::sun::star::lang::Locale & rLocale ); I18NLANGTAG_DLLPRIVATE static ::com::sun::star::lang::Locale lookupFallbackLocale( commit d85566a48e47c8b4788b77d7cce77803ff797352 Author: Eike Rathke <er...@redhat.com> Date: Fri Aug 23 19:28:36 2013 +0200 eliminated lookupFallbackLocale(LanguageType) Change-Id: I2a2a983acbd8af0487e7148f9dee2a73dc314891 diff --git a/i18nlangtag/source/isolang/isolang.cxx b/i18nlangtag/source/isolang/isolang.cxx index 6f4af1c..e16e230 100644 --- a/i18nlangtag/source/isolang/isolang.cxx +++ b/i18nlangtag/source/isolang/isolang.cxx @@ -713,73 +713,6 @@ void MsLangId::Conversion::convertLanguageToIsoNames( LanguageType nLang, // ----------------------------------------------------------------------- -// ----------------------------------------------------------------------- - -static const MsLangId::IsoLangEntry & lcl_lookupFallbackEntry( LanguageType nLang ) -{ - LanguageType nPrimary = MsLangId::getPrimaryLanguage( nLang); - - // Search for LangID and remember first lang-only. - const MsLangId::IsoLangEntry* pFirstPrimary = NULL; - const MsLangId::IsoLangEntry* pEntry = aImplIsoLangEntries; - do - { - if (pEntry->mnLang == nLang) - { - if (*pEntry->maCountry) - return *pEntry; - switch (nLang) - { - // These are known to have no country assigned. - case LANGUAGE_BASQUE: - case LANGUAGE_USER_ESPERANTO: - case LANGUAGE_USER_INTERLINGUA: - case LANGUAGE_USER_LOJBAN: - return *pEntry; - default: - ; // nothing - } - } - if (!pFirstPrimary && - MsLangId::getPrimaryLanguage( pEntry->mnLang) == nPrimary) - pFirstPrimary = pEntry; - ++pEntry; - } - while ( pEntry->mnLang != LANGUAGE_DONTKNOW ); - - // Language not found at all => use default. - if (!pFirstPrimary) - return aLastResortFallbackEntry; - - // Search for first entry of primary language with any country. - pEntry = pFirstPrimary; - do - { - if (MsLangId::getPrimaryLanguage( pEntry->mnLang) == nLang) - { - if (*pEntry->maCountry) - return *pEntry; - } - ++pEntry; - } - while ( pEntry->mnLang != LANGUAGE_DONTKNOW ); - - return aLastResortFallbackEntry; -} - - -// static -::com::sun::star::lang::Locale MsLangId::Conversion::lookupFallbackLocale( LanguageType nLang ) -{ - const MsLangId::IsoLangEntry& rEntry = lcl_lookupFallbackEntry( nLang); - return ::com::sun::star::lang::Locale( - OUString::createFromAscii( rEntry.maLangStr), - OUString::createFromAscii( rEntry.maCountry), - OUString()); -} - -// ----------------------------------------------------------------------- - static const MsLangId::IsoLangEntry & lcl_lookupFallbackEntry( const ::com::sun::star::lang::Locale & rLocale ) { diff --git a/i18nlangtag/source/isolang/mslangid.cxx b/i18nlangtag/source/isolang/mslangid.cxx index f488e9c..2e9ca7e 100644 --- a/i18nlangtag/source/isolang/mslangid.cxx +++ b/i18nlangtag/source/isolang/mslangid.cxx @@ -195,9 +195,9 @@ LanguageType MsLangId::Conversion::convertLocaleToLanguage( { // empty language => LANGUAGE_SYSTEM if (rLocale.Language.isEmpty()) - return Conversion::lookupFallbackLocale( MsLangId::getRealLanguage( LANGUAGE_SYSTEM)); - - return Conversion::lookupFallbackLocale( rLocale); + return Conversion::lookupFallbackLocale( Conversion::convertLanguageToLocale( LANGUAGE_SYSTEM, true)); + else + return Conversion::lookupFallbackLocale( rLocale); } // static diff --git a/include/i18nlangtag/mslangid.hxx b/include/i18nlangtag/mslangid.hxx index c57f528..da2e199 100644 --- a/include/i18nlangtag/mslangid.hxx +++ b/include/i18nlangtag/mslangid.hxx @@ -249,10 +249,6 @@ public: I18NLANGTAG_DLLPRIVATE static ::com::sun::star::lang::Locale lookupFallbackLocale( const ::com::sun::star::lang::Locale & rLocale ); - - /** Used by getFallbackLocale(Locale) */ - I18NLANGTAG_DLLPRIVATE static ::com::sun::star::lang::Locale lookupFallbackLocale( - LanguageType nLang ); }; private: commit 782808487510adae542ef25a9745d85f01d9dc38 Author: Eike Rathke <er...@redhat.com> Date: Fri Aug 23 17:32:05 2013 +0200 eliminated lookupFallbackLanguage(LanguageType) Change-Id: I2c69fce56151d4afcf5a68c29fd6755ff4f3b8dd diff --git a/i18nlangtag/source/isolang/isolang.cxx b/i18nlangtag/source/isolang/isolang.cxx index a581b3e..6f4af1c 100644 --- a/i18nlangtag/source/isolang/isolang.cxx +++ b/i18nlangtag/source/isolang/isolang.cxx @@ -767,12 +767,6 @@ static const MsLangId::IsoLangEntry & lcl_lookupFallbackEntry( LanguageType nLan return aLastResortFallbackEntry; } -// static -LanguageType MsLangId::Conversion::lookupFallbackLanguage( LanguageType nLang ) -{ - return lcl_lookupFallbackEntry( nLang).mnLang; -} - // static ::com::sun::star::lang::Locale MsLangId::Conversion::lookupFallbackLocale( LanguageType nLang ) diff --git a/i18nlangtag/source/languagetag/languagetag.cxx b/i18nlangtag/source/languagetag/languagetag.cxx index 585929b..62e1d9c1 100644 --- a/i18nlangtag/source/languagetag/languagetag.cxx +++ b/i18nlangtag/source/languagetag/languagetag.cxx @@ -1120,22 +1120,12 @@ LanguageTag & LanguageTag::makeFallback() { if (!mbIsFallback) { - if (mbInitializedLangID) - { - LanguageType nLang1 = getLanguageType(); - LanguageType nLang2 = MsLangId::Conversion::lookupFallbackLanguage( nLang1); - if (nLang1 != nLang2) - reset( nLang2); - } - else - { - const lang::Locale& rLocale1 = getLocale(); - lang::Locale aLocale2( MsLangId::Conversion::lookupFallbackLocale( rLocale1)); - if ( rLocale1.Language != aLocale2.Language || - rLocale1.Country != aLocale2.Country || - rLocale1.Variant != aLocale2.Variant) - reset( aLocale2); - } + const lang::Locale& rLocale1 = getLocale( true); + lang::Locale aLocale2( MsLangId::Conversion::lookupFallbackLocale( rLocale1)); + if ( rLocale1.Language != aLocale2.Language || + rLocale1.Country != aLocale2.Country || + rLocale1.Variant != aLocale2.Variant) + reset( aLocale2); mbIsFallback = true; } return *this; diff --git a/include/i18nlangtag/mslangid.hxx b/include/i18nlangtag/mslangid.hxx index 433e326..c57f528 100644 --- a/include/i18nlangtag/mslangid.hxx +++ b/include/i18nlangtag/mslangid.hxx @@ -247,8 +247,6 @@ public: LanguageType nLang, OUString& rLangStr, OUString& rCountry ); - I18NLANGTAG_DLLPRIVATE static LanguageType lookupFallbackLanguage( LanguageType nLang ); - I18NLANGTAG_DLLPRIVATE static ::com::sun::star::lang::Locale lookupFallbackLocale( const ::com::sun::star::lang::Locale & rLocale ); commit a829a352667d271408f791ee5e8a20dba844a5ff Author: Eike Rathke <er...@redhat.com> Date: Fri Aug 23 17:01:35 2013 +0200 extra convertLanguageToLocale(LanguageType,Locale) is unneeded Change-Id: I3a56e7cafeb2453b877582f6c2d1a705cb91723b diff --git a/i18nlangtag/source/isolang/mslangid.cxx b/i18nlangtag/source/isolang/mslangid.cxx index 8ef2aa3..f488e9c 100644 --- a/i18nlangtag/source/isolang/mslangid.cxx +++ b/i18nlangtag/source/isolang/mslangid.cxx @@ -141,22 +141,6 @@ LanguageType MsLangId::resolveSystemLanguageByScriptType( LanguageType nLang, sa return nLang; } -// static -void MsLangId::Conversion::convertLanguageToLocale( LanguageType nLang, - ::com::sun::star::lang::Locale & rLocale ) -{ - if (!rLocale.Variant.isEmpty()) - rLocale.Variant = OUString(); - convertLanguageToIsoNames( nLang, rLocale.Language, rLocale.Country); - /* FIXME: this x-... is temporary until conversion will be moved up to - * LanguageTag. Also handle the nasty "*" joker as privateuse. */ - if (rLocale.Language.startsWith( "x-") || (rLocale.Language == "*")) - { - rLocale.Variant = rLocale.Language; - rLocale.Language = "qlt"; - } -} - // static ::com::sun::star::lang::Locale MsLangId::Conversion::convertLanguageToLocale( @@ -171,7 +155,14 @@ void MsLangId::Conversion::convertLanguageToLocale( LanguageType nLang, // but not LANGUAGE_SYSTEM or others. if (bResolveSystem || nLang == LANGUAGE_DONTKNOW) nLang = MsLangId::getRealLanguage( nLang); - convertLanguageToLocale( nLang, aLocale); + convertLanguageToIsoNames( nLang, aLocale.Language, aLocale.Country); + /* FIXME: this x-... is temporary until conversion will be moved up to + * LanguageTag. Also handle the nasty "*" joker as privateuse. */ + if (aLocale.Language.startsWith( "x-") || (aLocale.Language == "*")) + { + aLocale.Variant = aLocale.Language; + aLocale.Language = "qlt"; + } } return aLocale; } diff --git a/include/i18nlangtag/mslangid.hxx b/include/i18nlangtag/mslangid.hxx index 4d05468..433e326 100644 --- a/include/i18nlangtag/mslangid.hxx +++ b/include/i18nlangtag/mslangid.hxx @@ -242,14 +242,7 @@ public: I18NLANGTAG_DLLPRIVATE static ::com::sun::star::lang::Locale convertLanguageToLocale( LanguageType nLang, bool bResolveSystem ); - /** Convert a LanguageType to a Locale, resolving LANGUAGE_SYSTEM. - - Used by convertLanguageToLocale(LanguageType,bool) - */ - I18NLANGTAG_DLLPRIVATE static void convertLanguageToLocale( - LanguageType nLang, ::com::sun::star::lang::Locale & rLocale ); - - /** Used by convertLanguageToLocale(LanguageType,Locale) */ + /** Used by convertLanguageToLocale(LanguageType,bool) */ I18NLANGTAG_DLLPRIVATE static void convertLanguageToIsoNames( LanguageType nLang, OUString& rLangStr, OUString& rCountry ); commit 84df29d34de7e1c36f57895f914a8b8090dff518 Author: Eike Rathke <er...@redhat.com> Date: Fri Aug 23 15:52:07 2013 +0200 extra convertLanguageToLocaleWithFallback(LanguageType) is unneeded Change-Id: I67805c7f7a238e384a3cb6c3e58186e890594c49 diff --git a/i18nlangtag/source/isolang/mslangid.cxx b/i18nlangtag/source/isolang/mslangid.cxx index 08e618e..8ef2aa3 100644 --- a/i18nlangtag/source/isolang/mslangid.cxx +++ b/i18nlangtag/source/isolang/mslangid.cxx @@ -199,20 +199,12 @@ LanguageType MsLangId::Conversion::convertLocaleToLanguage( // static -::com::sun::star::lang::Locale MsLangId::Conversion::convertLanguageToLocaleWithFallback( - LanguageType nLang ) -{ - return lookupFallbackLocale( MsLangId::getRealLanguage( nLang)); -} - - -// static ::com::sun::star::lang::Locale MsLangId::getFallbackLocale( const ::com::sun::star::lang::Locale & rLocale ) { // empty language => LANGUAGE_SYSTEM if (rLocale.Language.isEmpty()) - return Conversion::convertLanguageToLocaleWithFallback( LANGUAGE_SYSTEM); + return Conversion::lookupFallbackLocale( MsLangId::getRealLanguage( LANGUAGE_SYSTEM)); return Conversion::lookupFallbackLocale( rLocale); } diff --git a/include/i18nlangtag/mslangid.hxx b/include/i18nlangtag/mslangid.hxx index 8148d17..4d05468 100644 --- a/include/i18nlangtag/mslangid.hxx +++ b/include/i18nlangtag/mslangid.hxx @@ -259,16 +259,7 @@ public: I18NLANGTAG_DLLPRIVATE static ::com::sun::star::lang::Locale lookupFallbackLocale( const ::com::sun::star::lang::Locale & rLocale ); - - /** Convert a LanguageType to a Locale, resolving LANGUAGE_SYSTEM, - falling back to a default locale if no exact match was found. - - Used by getFallbackLocale(Locale) - */ - I18NLANGTAG_DLLPRIVATE static ::com::sun::star::lang::Locale convertLanguageToLocaleWithFallback( - LanguageType nLang ); - - /** Used by convertLanguageToLocaleWithFallback(LanguageType) */ + /** Used by getFallbackLocale(Locale) */ I18NLANGTAG_DLLPRIVATE static ::com::sun::star::lang::Locale lookupFallbackLocale( LanguageType nLang ); }; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits