diff options
author | Eike Rathke <erack@redhat.com> | 2013-08-23 22:27:14 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2013-08-23 23:09:09 +0200 |
commit | 087ee66013916bd009eb0b29460ef1868b4d755c (patch) | |
tree | 04a68244e9fe87f35b46afbe1bb06d8331be3a9c /i18nlangtag | |
parent | 5b2a740b9cacd1e0e4d2164647e89fb6b1e6c39e (diff) |
encapsulate IsoLangEntry again
Change-Id: I66475eb3914b07b4c7a045e295ef77a5de9439d4
Diffstat (limited to 'i18nlangtag')
-rw-r--r-- | i18nlangtag/qa/cppunit/test_languagetag.cxx | 23 | ||||
-rw-r--r-- | i18nlangtag/source/isolang/isolang.cxx | 37 |
2 files changed, 35 insertions, 25 deletions
diff --git a/i18nlangtag/qa/cppunit/test_languagetag.cxx b/i18nlangtag/qa/cppunit/test_languagetag.cxx index c64d199fc0e4..838f69b21a24 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 26ad88fbbe6e..037354868f93 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: */ |