summaryrefslogtreecommitdiff
path: root/i18nlangtag
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2013-08-23 22:27:14 +0200
committerEike Rathke <erack@redhat.com>2013-08-23 23:09:09 +0200
commit087ee66013916bd009eb0b29460ef1868b4d755c (patch)
tree04a68244e9fe87f35b46afbe1bb06d8331be3a9c /i18nlangtag
parent5b2a740b9cacd1e0e4d2164647e89fb6b1e6c39e (diff)
encapsulate IsoLangEntry again
Change-Id: I66475eb3914b07b4c7a045e295ef77a5de9439d4
Diffstat (limited to 'i18nlangtag')
-rw-r--r--i18nlangtag/qa/cppunit/test_languagetag.cxx23
-rw-r--r--i18nlangtag/source/isolang/isolang.cxx37
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: */