Blob Blame History Raw
From 0d8b7bc8741b1742f1c143cf850e4ad2362aef5f Mon Sep 17 00:00:00 2001
Message-Id: <0d8b7bc8741b1742f1c143cf850e4ad2362aef5f.1439308150.git.erack@redhat.com>
From: Eike Rathke <erack@redhat.com>
Date: Fri, 10 Jul 2015 01:15:50 +0200
Subject: [PATCH] support en-GB-oxendict additionally to now deprecated
 en-GB-oed
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="------------erAck-patch-parts"

This is a multi-part message in MIME format.
--------------erAck-patch-parts
Content-Type: text/plain; charset=UTF-8; format=fixed
Content-Transfer-Encoding: 8bit


Have them separated so when saving loaded documents the same tag is used
to keep the generator happy.

When to switch in UI language listbox? Or should we have both entries?

Change-Id: If78600229c4b24f6ee598c25d5a8974fef410bb5
---
 i18nlangtag/qa/cppunit/test_languagetag.cxx    | 34 +++++++++++++++++++++++---
 i18nlangtag/source/isolang/isolang.cxx         |  3 ++-
 i18nlangtag/source/languagetag/languagetag.cxx |  9 +++++++
 include/i18nlangtag/lang.h                     |  1 +
 4 files changed, 42 insertions(+), 5 deletions(-)


--------------erAck-patch-parts
Content-Type: text/x-patch; name="0001-support-en-GB-oxendict-additionally-to-now-deprecate.patch"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="0001-support-en-GB-oxendict-additionally-to-now-deprecate.patch"

diff --git a/i18nlangtag/qa/cppunit/test_languagetag.cxx b/i18nlangtag/qa/cppunit/test_languagetag.cxx
index af95b43..6d66ff1 100644
--- a/i18nlangtag/qa/cppunit/test_languagetag.cxx
+++ b/i18nlangtag/qa/cppunit/test_languagetag.cxx
@@ -420,7 +420,8 @@ void TestLanguageTag::testAllTags()
     }
 
     // 'en-GB-oed' is known grandfathered for English, Oxford English
-    // Dictionary spelling
+    // Dictionary spelling.
+    // Deprecated as of 2015-04-17, prefer en-GB-oxendict instead.
     {
         OUString s_en_GB_oed( "en-GB-oed" );
         LanguageTag en_GB_oed( s_en_GB_oed );
@@ -436,13 +437,38 @@ void TestLanguageTag::testAllTags()
         CPPUNIT_ASSERT( en_GB_oed.getLanguageAndScript() == "en" );
         CPPUNIT_ASSERT( en_GB_oed.getVariants() == "oed" );
         ::std::vector< OUString > en_GB_oed_Fallbacks( en_GB_oed.getFallbackStrings( true));
-        CPPUNIT_ASSERT( en_GB_oed_Fallbacks.size() == 3);
+        CPPUNIT_ASSERT( en_GB_oed_Fallbacks.size() == 4);
         CPPUNIT_ASSERT( en_GB_oed_Fallbacks[0] == "en-GB-oed");
-        CPPUNIT_ASSERT( en_GB_oed_Fallbacks[1] == "en-GB");
-        CPPUNIT_ASSERT( en_GB_oed_Fallbacks[2] == "en");
+        CPPUNIT_ASSERT( en_GB_oed_Fallbacks[1] == "en-GB-oxendict");
+        CPPUNIT_ASSERT( en_GB_oed_Fallbacks[2] == "en-GB");
+        CPPUNIT_ASSERT( en_GB_oed_Fallbacks[3] == "en");
         // 'en-oed' is not a valid fallback!
     }
 
+    // 'en-GB-oxendict' as preferred over 'en-GB-oed'.
+    {
+        OUString s_en_GB_oxendict( "en-GB-oxendict" );
+        LanguageTag en_GB_oxendict( s_en_GB_oxendict );
+        lang::Locale aLocale = en_GB_oxendict.getLocale();
+        CPPUNIT_ASSERT( en_GB_oxendict.getBcp47() == s_en_GB_oxendict );
+        CPPUNIT_ASSERT( aLocale.Language == "qlt" );
+        CPPUNIT_ASSERT( aLocale.Country == "GB" );
+        CPPUNIT_ASSERT( aLocale.Variant == s_en_GB_oxendict );
+        CPPUNIT_ASSERT( en_GB_oxendict.getLanguageType() == LANGUAGE_USER_ENGLISH_UK_OXENDICT );
+        CPPUNIT_ASSERT( en_GB_oxendict.isValidBcp47() );
+        CPPUNIT_ASSERT( !en_GB_oxendict.isIsoLocale() );
+        CPPUNIT_ASSERT( !en_GB_oxendict.isIsoODF() );
+        CPPUNIT_ASSERT( en_GB_oxendict.getLanguageAndScript() == "en" );
+        CPPUNIT_ASSERT( en_GB_oxendict.getVariants() == "oxendict" );
+        ::std::vector< OUString > en_GB_oxendict_Fallbacks( en_GB_oxendict.getFallbackStrings( true));
+        CPPUNIT_ASSERT( en_GB_oxendict_Fallbacks.size() == 5);
+        CPPUNIT_ASSERT( en_GB_oxendict_Fallbacks[0] == "en-GB-oxendict");
+        CPPUNIT_ASSERT( en_GB_oxendict_Fallbacks[1] == "en-GB-oed");
+        CPPUNIT_ASSERT( en_GB_oxendict_Fallbacks[2] == "en-oxendict");
+        CPPUNIT_ASSERT( en_GB_oxendict_Fallbacks[3] == "en-GB");
+        CPPUNIT_ASSERT( en_GB_oxendict_Fallbacks[4] == "en");
+    }
+
 #if USE_LIBLANGTAG
     // 'zh-yue-HK' uses redundant 'zh-yue' and should be preferred 'yue-HK'
 #if 0
diff --git a/i18nlangtag/source/isolang/isolang.cxx b/i18nlangtag/source/isolang/isolang.cxx
index e91b09e..8f69623 100644
--- a/i18nlangtag/source/isolang/isolang.cxx
+++ b/i18nlangtag/source/isolang/isolang.cxx
@@ -736,7 +736,8 @@ static Bcp47CountryEntry const aImplBcp47CountryEntries[] =
     // MS-LangID                              full BCP47, ISO3166, ISO639-Variant or other fallback
     { LANGUAGE_CATALAN_VALENCIAN,       "ca-ES-valencia", "ES", "ca-valencia" },
     { LANGUAGE_OBSOLETE_USER_CATALAN_VALENCIAN, "ca-ES-valencia", "ES", "" },   // In case MS format files using the old value escaped into the wild, map them back.
-    { LANGUAGE_USER_ENGLISH_UK_OED,          "en-GB-oed", "GB", "" },   // grandfathered
+    { LANGUAGE_USER_ENGLISH_UK_OED,          "en-GB-oed", "GB", "" },   // grandfathered, deprecated, prefer en-GB-oxendict
+    { LANGUAGE_USER_ENGLISH_UK_OXENDICT,"en-GB-oxendict", "GB", "" },
 //  { LANGUAGE_YUE_CHINESE_HONGKONG,         "zh-yue-HK", "HK", "" },   // MS reserved, prefer yue-HK; do not add unless LanguageTag::simpleExtract() can handle it to not call liblangtag for rsc!
     { LANGUAGE_DONTKNOW,                    "", "", "" }    // marks end of table
 };
diff --git a/i18nlangtag/source/languagetag/languagetag.cxx b/i18nlangtag/source/languagetag/languagetag.cxx
index f0241bc..f2ebc6d 100644
--- a/i18nlangtag/source/languagetag/languagetag.cxx
+++ b/i18nlangtag/source/languagetag/languagetag.cxx
@@ -2163,6 +2163,15 @@ LanguageTag & LanguageTag::makeFallback()
     getBcp47();     // have maBcp47 now
     if (bIncludeFullBcp47)
         aVec.push_back( maBcp47);
+
+    // Special cases for deprecated tags and their replacements, include both
+    // in fallbacks in a sensible order.
+    /* TODO: could such things be generalized and automated with liblangtag? */
+    if (maBcp47 == "en-GB-oed")
+        aVec.push_back( "en-GB-oxendict");
+    else if (maBcp47 == "en-GB-oxendict")
+        aVec.push_back( "en-GB-oed");
+
     OUString aScript;
     OUString aVariants( getVariants());
     OUString aTmp;
diff --git a/include/i18nlangtag/lang.h b/include/i18nlangtag/lang.h
index 1c47be7..6c9f852 100644
--- a/include/i18nlangtag/lang.h
+++ b/include/i18nlangtag/lang.h
@@ -701,6 +701,7 @@ typedef unsigned short LanguageType;
 #define LANGUAGE_USER_FRENCH_BENIN          0x840C  /* makeLangID( 0x21, getPrimaryLanguage( LANGUAGE_FRENCH)) */
 #define LANGUAGE_USER_FRENCH_NIGER          0x880C  /* makeLangID( 0x22, getPrimaryLanguage( LANGUAGE_FRENCH)) */
 #define LANGUAGE_USER_FRENCH_TOGO           0x8C0C  /* makeLangID( 0x23, getPrimaryLanguage( LANGUAGE_FRENCH)) */
+#define LANGUAGE_USER_ENGLISH_UK_OXENDICT   0x9409  /* makeLangID( 0x25, getPrimaryLanguage( LANGUAGE_ENGLISH_UK)) */
 
 
 /* Primary language ID range for on-the-fly assignment. */

--------------erAck-patch-parts--