LCOV - code coverage report
Current view: top level - i18nlangtag/source/isolang - mslangid.cxx (source / functions) Hit Total Coverage
Test: commit 0e63ca4fde4e446f346e35849c756a30ca294aab Lines: 86 184 46.7 %
Date: 2014-04-11 Functions: 18 26 69.2 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <sal/config.h>
      21             : #include <rtl/ustring.hxx>
      22             : #include <rtl/string.hxx>
      23             : #include <com/sun/star/i18n/ScriptType.hpp>
      24             : 
      25             : #include "i18nlangtag/mslangid.hxx"
      26             : 
      27             : // Only very limited few functions that are guaranteed to not be called from
      28             : // LanguageTag may use LanguageTag ...
      29             : #include "i18nlangtag/languagetag.hxx"
      30             : 
      31             : 
      32             : LanguageType MsLangId::nConfiguredSystemLanguage   = LANGUAGE_SYSTEM;
      33             : LanguageType MsLangId::nConfiguredSystemUILanguage = LANGUAGE_SYSTEM;
      34             : 
      35             : LanguageType MsLangId::nConfiguredWesternFallback  = LANGUAGE_SYSTEM;
      36             : LanguageType MsLangId::nConfiguredAsianFallback    = LANGUAGE_SYSTEM;
      37             : LanguageType MsLangId::nConfiguredComplexFallback  = LANGUAGE_SYSTEM;
      38             : 
      39             : // static
      40         153 : void MsLangId::LanguageTagAccess::setConfiguredSystemLanguage( LanguageType nLang )
      41             : {
      42         153 :     nConfiguredSystemLanguage = nLang;
      43         153 : }
      44             : 
      45             : 
      46             : // static
      47          80 : void MsLangId::setConfiguredSystemUILanguage( LanguageType nLang )
      48             : {
      49          80 :     nConfiguredSystemUILanguage = nLang;
      50          80 : }
      51             : 
      52             : // static
      53         240 : void MsLangId::setConfiguredWesternFallback( LanguageType nLang )
      54             : {
      55         240 :     nConfiguredWesternFallback = nLang;
      56         240 : }
      57             : 
      58             : // static
      59           0 : void MsLangId::setConfiguredAsianFallback( LanguageType nLang )
      60             : {
      61           0 :     nConfiguredAsianFallback = nLang;
      62           0 : }
      63             : 
      64             : // static
      65           0 : void MsLangId::setConfiguredComplexFallback( LanguageType nLang )
      66             : {
      67           0 :     nConfiguredComplexFallback = nLang;
      68           0 : }
      69             : 
      70             : // static
      71      307171 : inline LanguageType MsLangId::simplifySystemLanguages( LanguageType nLang )
      72             : {
      73      307171 :     switch (nLang)
      74             :     {
      75             :         case LANGUAGE_PROCESS_OR_USER_DEFAULT :
      76             :         case LANGUAGE_SYSTEM_DEFAULT :
      77             :         case LANGUAGE_SYSTEM :
      78       87148 :             nLang = LANGUAGE_SYSTEM;
      79       87148 :             break;
      80             :         default:
      81             :             ;   // nothing
      82             :     }
      83      307171 :     return nLang;
      84             : }
      85             : 
      86             : // static
      87      307171 : LanguageType MsLangId::getRealLanguage( LanguageType nLang )
      88             : {
      89      307171 :     switch (simplifySystemLanguages( nLang))
      90             :     {
      91             :         case LANGUAGE_SYSTEM :
      92       87148 :             if (nConfiguredSystemLanguage == LANGUAGE_SYSTEM)
      93       59980 :                 nLang = getSystemLanguage();
      94             :             else
      95       27168 :                 nLang = nConfiguredSystemLanguage;
      96       87148 :             break;
      97             :         case LANGUAGE_HID_HUMAN_INTERFACE_DEVICE :
      98           0 :             if (nConfiguredSystemUILanguage == LANGUAGE_SYSTEM)
      99           0 :                 nLang = getSystemUILanguage();
     100             :             else
     101           0 :                 nLang = nConfiguredSystemUILanguage;
     102           0 :             break;
     103             :         default:
     104             :             /* TODO: would this be useful here? */
     105             :             //nLang = MsLangId::getReplacementForObsoleteLanguage( nLang);
     106             :             ;   // nothing
     107             :     }
     108      307171 :     if (nLang == LANGUAGE_DONTKNOW)
     109         131 :         nLang = LANGUAGE_ENGLISH_US;
     110      307171 :     return nLang;
     111             : }
     112             : 
     113             : 
     114             : // static
     115       85257 : LanguageType MsLangId::resolveSystemLanguageByScriptType( LanguageType nLang, sal_Int16 nType )
     116             : {
     117       85257 :     if (nLang == LANGUAGE_NONE)
     118           0 :         return nLang;
     119             : 
     120       85257 :     nLang = getRealLanguage(nLang);
     121       85257 :     if (nType != ::com::sun::star::i18n::ScriptType::WEAK && getScriptType(nLang) != nType)
     122             :     {
     123       56838 :         switch(nType)
     124             :         {
     125             :             case ::com::sun::star::i18n::ScriptType::ASIAN:
     126       28419 :                 if (nConfiguredAsianFallback == LANGUAGE_SYSTEM)
     127       28419 :                     nLang = LANGUAGE_CHINESE_SIMPLIFIED;
     128             :                 else
     129           0 :                     nLang = nConfiguredAsianFallback;
     130       28419 :                 break;
     131             :             case ::com::sun::star::i18n::ScriptType::COMPLEX:
     132       28419 :                 if (nConfiguredComplexFallback == LANGUAGE_SYSTEM)
     133       28419 :                     nLang = LANGUAGE_HINDI;
     134             :                 else
     135           0 :                     nLang = nConfiguredComplexFallback;
     136       28419 :                 break;
     137             :             default:
     138           0 :                 if (nConfiguredWesternFallback == LANGUAGE_SYSTEM)
     139           0 :                     nLang = LANGUAGE_ENGLISH_US;
     140             :                 else
     141           0 :                     nLang = nConfiguredWesternFallback;
     142           0 :                 break;
     143             :         }
     144             :     }
     145       85257 :     return nLang;
     146             : }
     147             : 
     148             : 
     149             : // static
     150      219501 : ::com::sun::star::lang::Locale MsLangId::Conversion::convertLanguageToLocale(
     151             :         LanguageType nLang, bool bResolveSystem )
     152             : {
     153      219501 :     ::com::sun::star::lang::Locale aLocale;
     154      219501 :     if (!bResolveSystem && simplifySystemLanguages( nLang) == LANGUAGE_SYSTEM)
     155             :         ;   // nothing => empty locale
     156             :     else
     157             :     {
     158             :         // Still resolve LANGUAGE_DONTKNOW if resolving is not requested,
     159             :         // but not LANGUAGE_SYSTEM or others.
     160      219501 :         LanguageType nOrigLang = nLang;
     161      219501 :         if (bResolveSystem || nLang == LANGUAGE_DONTKNOW)
     162      219501 :             nLang = MsLangId::getRealLanguage( nLang);
     163      219501 :         convertLanguageToLocaleImpl( nLang, aLocale, true);
     164      219501 :         if (bResolveSystem && aLocale.Language.isEmpty() && simplifySystemLanguages( nOrigLang) == LANGUAGE_SYSTEM)
     165             :         {
     166             :             // None found but resolve requested, last resort is "en-US".
     167           0 :             aLocale.Language = "en";
     168           0 :             aLocale.Country  = "US";
     169           0 :             aLocale.Variant  = OUString();
     170             :         }
     171             :     }
     172      219501 :     return aLocale;
     173             : }
     174             : 
     175             : 
     176             : // static
     177      260254 : LanguageType MsLangId::Conversion::convertLocaleToLanguage(
     178             :         const ::com::sun::star::lang::Locale& rLocale )
     179             : {
     180             :     // empty language => LANGUAGE_SYSTEM
     181      260254 :     if (rLocale.Language.isEmpty())
     182           0 :         return LANGUAGE_SYSTEM;
     183             : 
     184      260254 :     return convertLocaleToLanguageImpl( rLocale);
     185             : }
     186             : 
     187             : 
     188             : // static
     189        1039 : ::com::sun::star::lang::Locale MsLangId::getFallbackLocale(
     190             :             const ::com::sun::star::lang::Locale & rLocale )
     191             : {
     192             :     // empty language => LANGUAGE_SYSTEM
     193        1039 :     if (rLocale.Language.isEmpty())
     194          54 :         return Conversion::lookupFallbackLocale( Conversion::convertLanguageToLocale( LANGUAGE_SYSTEM, true));
     195             :     else
     196         985 :         return Conversion::lookupFallbackLocale( rLocale);
     197             : }
     198             : 
     199             : // static
     200      731687 : bool MsLangId::isRightToLeft( LanguageType nLang )
     201             : {
     202      731687 :     switch( nLang & LANGUAGE_MASK_PRIMARY )
     203             :     {
     204             :         case LANGUAGE_ARABIC_SAUDI_ARABIA & LANGUAGE_MASK_PRIMARY :
     205             :         case LANGUAGE_HEBREW              & LANGUAGE_MASK_PRIMARY :
     206             :         case LANGUAGE_YIDDISH             & LANGUAGE_MASK_PRIMARY :
     207             :         case LANGUAGE_URDU_PAKISTAN       & LANGUAGE_MASK_PRIMARY :
     208             :         case LANGUAGE_FARSI               & LANGUAGE_MASK_PRIMARY :
     209             :         case LANGUAGE_KASHMIRI            & LANGUAGE_MASK_PRIMARY :
     210             :         case LANGUAGE_SINDHI              & LANGUAGE_MASK_PRIMARY :
     211             :         case LANGUAGE_UIGHUR_CHINA        & LANGUAGE_MASK_PRIMARY :
     212             :         case LANGUAGE_USER_KYRGYZ_CHINA   & LANGUAGE_MASK_PRIMARY :
     213             :         case LANGUAGE_USER_NKO            & LANGUAGE_MASK_PRIMARY :
     214           0 :             return true;
     215             : 
     216             :         default:
     217      731687 :             break;
     218             :     }
     219      731687 :     switch (nLang)
     220             :     {
     221             :         case LANGUAGE_USER_KURDISH_IRAN:
     222             :         case LANGUAGE_OBSOLETE_USER_KURDISH_IRAQ:
     223             :         case LANGUAGE_KURDISH_ARABIC_IRAQ:
     224             :         case LANGUAGE_KURDISH_ARABIC_LSO:
     225             :         case LANGUAGE_USER_KURDISH_SOUTHERN_IRAN:
     226             :         case LANGUAGE_USER_KURDISH_SOUTHERN_IRAQ:
     227           0 :             return true;
     228             : 
     229             :         default:
     230      731687 :             break;
     231             :     }
     232      731687 :     return false;
     233             : }
     234             : 
     235             : // static
     236         147 : bool MsLangId::isRightToLeftMath( LanguageType nLang )
     237             : {
     238             :     //http://www.w3.org/TR/arabic-math/
     239         147 :     if (nLang == LANGUAGE_FARSI || nLang == LANGUAGE_ARABIC_MOROCCO)
     240           0 :         return false;
     241         147 :     return isRightToLeft(nLang);
     242             : }
     243             : 
     244             : // static
     245       26343 : bool MsLangId::isSimplifiedChinese( LanguageType nLang )
     246             : {
     247       26343 :     return isChinese(nLang) && !isTraditionalChinese(nLang);
     248             : }
     249             : 
     250             : // static
     251           0 : bool MsLangId::isSimplifiedChinese( const ::com::sun::star::lang::Locale & rLocale )
     252             : {
     253           0 :     return rLocale.Language == "zh" && !isTraditionalChinese(rLocale);
     254             : }
     255             : 
     256             : // static
     257         242 : bool MsLangId::isTraditionalChinese( LanguageType nLang )
     258             : {
     259         242 :     bool bRet = false;
     260         242 :     switch (nLang)
     261             :     {
     262             :         case LANGUAGE_CHINESE_TRADITIONAL:
     263             :         case LANGUAGE_CHINESE_HONGKONG:
     264             :         case LANGUAGE_CHINESE_MACAU:
     265           0 :             bRet = true;
     266             :         default:
     267         242 :             break;
     268             :     }
     269         242 :     return bRet;
     270             : }
     271             : 
     272             : // static
     273           0 : bool MsLangId::isTraditionalChinese( const ::com::sun::star::lang::Locale & rLocale )
     274             : {
     275           0 :     return rLocale.Language == "zh" && (rLocale.Country == "TW" || rLocale.Country == "HK" || rLocale.Country == "MO");
     276             : }
     277             : 
     278             : //static
     279       26343 : bool MsLangId::isChinese( LanguageType nLang )
     280             : {
     281       52686 :     return MsLangId::getPrimaryLanguage(nLang) == MsLangId::getPrimaryLanguage(LANGUAGE_CHINESE) ||
     282       52686 :         MsLangId::getPrimaryLanguage(nLang) == MsLangId::getPrimaryLanguage(LANGUAGE_YUE_CHINESE_HONGKONG);
     283             : }
     284             : 
     285             : //static
     286        3192 : bool MsLangId::isKorean( LanguageType nLang )
     287             : {
     288        3192 :     return MsLangId::getPrimaryLanguage(nLang) == MsLangId::getPrimaryLanguage(LANGUAGE_KOREAN);
     289             : }
     290             : 
     291             : // static
     292         590 : bool MsLangId::isCJK( LanguageType nLang )
     293             : {
     294         590 :     switch (nLang & LANGUAGE_MASK_PRIMARY)
     295             :     {
     296             :         case LANGUAGE_CHINESE              & LANGUAGE_MASK_PRIMARY:
     297             :         case LANGUAGE_YUE_CHINESE_HONGKONG & LANGUAGE_MASK_PRIMARY:
     298             :         case LANGUAGE_JAPANESE             & LANGUAGE_MASK_PRIMARY:
     299             :         case LANGUAGE_KOREAN               & LANGUAGE_MASK_PRIMARY:
     300           0 :             return true;
     301             :         default:
     302         590 :             break;
     303             :     }
     304         590 :     return false;
     305             : }
     306             : 
     307             : // static
     308           0 : bool MsLangId::isFamilyNameFirst( LanguageType nLang )
     309             : {
     310           0 :     return isCJK(nLang) || nLang == LANGUAGE_HUNGARIAN;
     311             : }
     312             : 
     313             : // static
     314           0 : bool MsLangId::hasForbiddenCharacters( LanguageType nLang )
     315             : {
     316           0 :     return isCJK(nLang);
     317             : }
     318             : 
     319             : 
     320             : // static
     321           0 : bool MsLangId::needsSequenceChecking( LanguageType nLang )
     322             : {
     323           0 :     switch (nLang & LANGUAGE_MASK_PRIMARY)
     324             :     {
     325             :         case LANGUAGE_BURMESE & LANGUAGE_MASK_PRIMARY:
     326             :         case LANGUAGE_KHMER   & LANGUAGE_MASK_PRIMARY:
     327             :         case LANGUAGE_LAO     & LANGUAGE_MASK_PRIMARY:
     328             :         case LANGUAGE_THAI    & LANGUAGE_MASK_PRIMARY:
     329           0 :             return true;
     330             :         default:
     331           0 :             break;
     332             :     }
     333           0 :     return false;
     334             : }
     335             : 
     336             : 
     337             : // static
     338     1864820 : sal_Int16 MsLangId::getScriptType( LanguageType nLang )
     339             : {
     340             :     sal_Int16 nScript;
     341     1864820 :     switch( nLang )
     342             :     {
     343             :         // CTL
     344             :         case LANGUAGE_MONGOLIAN_MONGOLIAN_MONGOLIA:
     345             :         case LANGUAGE_MONGOLIAN_MONGOLIAN_CHINA:
     346             :         case LANGUAGE_MONGOLIAN_MONGOLIAN_LSO:
     347             :         case LANGUAGE_USER_KURDISH_IRAN:
     348             :         case LANGUAGE_OBSOLETE_USER_KURDISH_IRAQ:
     349             :         case LANGUAGE_KURDISH_ARABIC_IRAQ:
     350             :         case LANGUAGE_KURDISH_ARABIC_LSO:
     351             :         case LANGUAGE_USER_KURDISH_SOUTHERN_IRAN:
     352             :         case LANGUAGE_USER_KURDISH_SOUTHERN_IRAQ:
     353             :         case LANGUAGE_USER_KYRGYZ_CHINA:
     354           0 :             nScript = ::com::sun::star::i18n::ScriptType::COMPLEX;
     355           0 :             break;
     356             : 
     357             :         // "Western"
     358             :         case LANGUAGE_MONGOLIAN_CYRILLIC_MONGOLIA:
     359             :         case LANGUAGE_MONGOLIAN_CYRILLIC_LSO:
     360             :         case LANGUAGE_USER_KURDISH_SYRIA:
     361             :         case LANGUAGE_USER_KURDISH_TURKEY:
     362           0 :             nScript = ::com::sun::star::i18n::ScriptType::LATIN;
     363           0 :             break;
     364             : 
     365             : // currently not knowing scripttype - defaulted to LATIN:
     366             : /*
     367             : #define LANGUAGE_ARMENIAN                   0x042B
     368             : #define LANGUAGE_INDONESIAN                 0x0421
     369             : #define LANGUAGE_KAZAKH                     0x043F
     370             : #define LANGUAGE_KONKANI                    0x0457
     371             : #define LANGUAGE_MACEDONIAN                 0x042F
     372             : #define LANGUAGE_TATAR                      0x0444
     373             : */
     374             : 
     375             :         default:
     376     1864820 :             switch ( nLang & LANGUAGE_MASK_PRIMARY )
     377             :             {
     378             :                 // CJK catcher
     379             :                 case LANGUAGE_CHINESE              & LANGUAGE_MASK_PRIMARY:
     380             :                 case LANGUAGE_YUE_CHINESE_HONGKONG & LANGUAGE_MASK_PRIMARY:
     381             :                 case LANGUAGE_JAPANESE             & LANGUAGE_MASK_PRIMARY:
     382             :                 case LANGUAGE_KOREAN               & LANGUAGE_MASK_PRIMARY:
     383           0 :                     nScript = ::com::sun::star::i18n::ScriptType::ASIAN;
     384           0 :                     break;
     385             : 
     386             :                     // CTL catcher
     387             :                 case LANGUAGE_AMHARIC_ETHIOPIA    & LANGUAGE_MASK_PRIMARY:
     388             :                 case LANGUAGE_ARABIC_SAUDI_ARABIA & LANGUAGE_MASK_PRIMARY:
     389             :                 case LANGUAGE_ASSAMESE            & LANGUAGE_MASK_PRIMARY:
     390             :                 case LANGUAGE_BENGALI             & LANGUAGE_MASK_PRIMARY:
     391             :                 case LANGUAGE_BURMESE             & LANGUAGE_MASK_PRIMARY:
     392             :                 case LANGUAGE_DHIVEHI             & LANGUAGE_MASK_PRIMARY:
     393             :                 case LANGUAGE_FARSI               & LANGUAGE_MASK_PRIMARY:
     394             :                 case LANGUAGE_GUJARATI            & LANGUAGE_MASK_PRIMARY:
     395             :                 case LANGUAGE_HEBREW              & LANGUAGE_MASK_PRIMARY:
     396             :                 case LANGUAGE_HINDI               & LANGUAGE_MASK_PRIMARY:
     397             :                 case LANGUAGE_KANNADA             & LANGUAGE_MASK_PRIMARY:
     398             :                 case LANGUAGE_KASHMIRI            & LANGUAGE_MASK_PRIMARY:
     399             :                 case LANGUAGE_KHMER               & LANGUAGE_MASK_PRIMARY:
     400             :                 case LANGUAGE_LAO                 & LANGUAGE_MASK_PRIMARY:
     401             :                 case LANGUAGE_MALAYALAM           & LANGUAGE_MASK_PRIMARY:
     402             :                 case LANGUAGE_MANIPURI            & LANGUAGE_MASK_PRIMARY:
     403             :                 case LANGUAGE_MARATHI             & LANGUAGE_MASK_PRIMARY:
     404             :                 case LANGUAGE_NEPALI              & LANGUAGE_MASK_PRIMARY:
     405             :                 case LANGUAGE_ODIA                & LANGUAGE_MASK_PRIMARY:
     406             :                 case LANGUAGE_PUNJABI             & LANGUAGE_MASK_PRIMARY:
     407             :                 case LANGUAGE_SANSKRIT            & LANGUAGE_MASK_PRIMARY:
     408             :                 case LANGUAGE_SINDHI              & LANGUAGE_MASK_PRIMARY:
     409             :                 case LANGUAGE_SINHALESE_SRI_LANKA & LANGUAGE_MASK_PRIMARY:
     410             :                 case LANGUAGE_SYRIAC              & LANGUAGE_MASK_PRIMARY:
     411             :                 case LANGUAGE_TAMIL               & LANGUAGE_MASK_PRIMARY:
     412             :                 case LANGUAGE_TELUGU              & LANGUAGE_MASK_PRIMARY:
     413             :                 case LANGUAGE_THAI                & LANGUAGE_MASK_PRIMARY:
     414             :                 case LANGUAGE_TIBETAN             & LANGUAGE_MASK_PRIMARY:  // also LANGUAGE_DZONGKHA
     415             :                 case LANGUAGE_UIGHUR_CHINA        & LANGUAGE_MASK_PRIMARY:
     416             :                 case LANGUAGE_URDU_INDIA          & LANGUAGE_MASK_PRIMARY:
     417             :                 case LANGUAGE_USER_BODO_INDIA     & LANGUAGE_MASK_PRIMARY:
     418             :                 case LANGUAGE_USER_DOGRI_INDIA    & LANGUAGE_MASK_PRIMARY:
     419             :                 case LANGUAGE_USER_LIMBU          & LANGUAGE_MASK_PRIMARY:
     420             :                 case LANGUAGE_USER_MAITHILI_INDIA & LANGUAGE_MASK_PRIMARY:
     421             :                 case LANGUAGE_USER_NKO            & LANGUAGE_MASK_PRIMARY:
     422             :                 case LANGUAGE_YIDDISH             & LANGUAGE_MASK_PRIMARY:
     423           0 :                     nScript = ::com::sun::star::i18n::ScriptType::COMPLEX;
     424           0 :                     break;
     425             : 
     426             :                 // Western (actually not necessarily Latin but also Cyrillic,
     427             :                 // for example)
     428             :                 default:
     429     1864820 :                     nScript = ::com::sun::star::i18n::ScriptType::LATIN;
     430             :             }
     431     1864820 :             break;
     432             :     }
     433     1864820 :     return nScript;
     434             : }
     435             : 
     436             : 
     437             : // static
     438           0 : bool MsLangId::isNonLatinWestern( LanguageType nLang )
     439             : {
     440           0 :     switch (nLang)
     441             :     {
     442             :         case LANGUAGE_AZERI_CYRILLIC:
     443             :         case LANGUAGE_AZERI_CYRILLIC_LSO:
     444             :         case LANGUAGE_BELARUSIAN:
     445             :         case LANGUAGE_BOSNIAN_CYRILLIC_BOSNIA_HERZEGOVINA:
     446             :         case LANGUAGE_BOSNIAN_CYRILLIC_LSO:
     447             :         case LANGUAGE_BULGARIAN:
     448             :         case LANGUAGE_GREEK:
     449             :         case LANGUAGE_MONGOLIAN_CYRILLIC_LSO:
     450             :         case LANGUAGE_MONGOLIAN_CYRILLIC_MONGOLIA:
     451             :         case LANGUAGE_RUSSIAN:
     452             :         case LANGUAGE_RUSSIAN_MOLDOVA:
     453             :         case LANGUAGE_SERBIAN_CYRILLIC_BOSNIA_HERZEGOVINA:
     454             :         case LANGUAGE_SERBIAN_CYRILLIC_LSO:
     455             :         case LANGUAGE_SERBIAN_CYRILLIC_MONTENEGRO:
     456             :         case LANGUAGE_SERBIAN_CYRILLIC_SAM:
     457             :         case LANGUAGE_SERBIAN_CYRILLIC_SERBIA:
     458             :         case LANGUAGE_UKRAINIAN:
     459             :         case LANGUAGE_UZBEK_CYRILLIC:
     460             :         case LANGUAGE_UZBEK_CYRILLIC_LSO:
     461           0 :             return true;
     462             :         default:
     463             :             {
     464           0 :                 if (getScriptType( nLang) != com::sun::star::i18n::ScriptType::LATIN)
     465           0 :                     return false;
     466           0 :                 LanguageTag aLanguageTag( nLang);
     467           0 :                 if (aLanguageTag.hasScript())
     468           0 :                     return aLanguageTag.getScript() != "Latn";
     469             :             }
     470             :     }
     471           0 :     return false;
     472             : }
     473             : 
     474             : 
     475             : // static
     476         331 : LanguageType MsLangId::getReplacementForObsoleteLanguage( LanguageType nLang, bool /*bUserInterfaceSelection*/ )
     477             : {
     478         331 :     switch (nLang)
     479             :     {
     480             :         default:
     481         331 :             break;  // nothing
     482             :         case LANGUAGE_OBSOLETE_USER_LATIN:
     483           0 :             nLang = LANGUAGE_USER_LATIN_VATICAN;
     484           0 :             break;
     485             :         case LANGUAGE_OBSOLETE_USER_MAORI:
     486           0 :             nLang = LANGUAGE_MAORI_NEW_ZEALAND;
     487           0 :             break;
     488             :         case LANGUAGE_OBSOLETE_USER_KINYARWANDA:
     489           0 :             nLang = LANGUAGE_KINYARWANDA_RWANDA;
     490           0 :             break;
     491             :         case LANGUAGE_OBSOLETE_USER_UPPER_SORBIAN:
     492           0 :             nLang = LANGUAGE_UPPER_SORBIAN_GERMANY;
     493           0 :             break;
     494             :         case LANGUAGE_OBSOLETE_USER_LOWER_SORBIAN:
     495           0 :             nLang = LANGUAGE_LOWER_SORBIAN_GERMANY;
     496           0 :             break;
     497             :         case LANGUAGE_OBSOLETE_USER_OCCITAN:
     498           0 :             nLang = LANGUAGE_OCCITAN_FRANCE;
     499           0 :             break;
     500             :         case LANGUAGE_OBSOLETE_USER_BRETON:
     501           0 :             nLang = LANGUAGE_BRETON_FRANCE;
     502           0 :             break;
     503             :         case LANGUAGE_OBSOLETE_USER_KALAALLISUT:
     504           0 :             nLang = LANGUAGE_KALAALLISUT_GREENLAND;
     505           0 :             break;
     506             :         case LANGUAGE_OBSOLETE_USER_LUXEMBOURGISH:
     507           0 :             nLang = LANGUAGE_LUXEMBOURGISH_LUXEMBOURG;
     508           0 :             break;
     509             :         case LANGUAGE_OBSOLETE_USER_KABYLE:
     510           0 :             nLang = LANGUAGE_TAMAZIGHT_LATIN_ALGERIA;
     511           0 :             break;
     512             :         case LANGUAGE_OBSOLETE_USER_CATALAN_VALENCIAN:
     513           0 :             nLang = LANGUAGE_CATALAN_VALENCIAN;
     514           0 :             break;
     515             :         case LANGUAGE_OBSOLETE_USER_MALAGASY_PLATEAU:
     516           0 :             nLang = LANGUAGE_MALAGASY_PLATEAU;
     517           0 :             break;
     518             :         case LANGUAGE_GAELIC_SCOTLAND_LEGACY:
     519           0 :             nLang = LANGUAGE_GAELIC_SCOTLAND;
     520           0 :             break;
     521             :         case LANGUAGE_OBSOLETE_USER_TSWANA_BOTSWANA:
     522           0 :             nLang = LANGUAGE_TSWANA_BOTSWANA;
     523           0 :             break;
     524             :         case LANGUAGE_OBSOLETE_USER_SERBIAN_LATIN_SERBIA:
     525           0 :             nLang = LANGUAGE_SERBIAN_LATIN_SERBIA;
     526           0 :             break;
     527             :         case LANGUAGE_OBSOLETE_USER_SERBIAN_LATIN_MONTENEGRO:
     528           0 :             nLang = LANGUAGE_SERBIAN_LATIN_MONTENEGRO;
     529           0 :             break;
     530             :         case LANGUAGE_OBSOLETE_USER_SERBIAN_CYRILLIC_SERBIA:
     531           0 :             nLang = LANGUAGE_SERBIAN_CYRILLIC_SERBIA;
     532           0 :             break;
     533             :         case LANGUAGE_OBSOLETE_USER_SERBIAN_CYRILLIC_MONTENEGRO:
     534           0 :             nLang = LANGUAGE_SERBIAN_CYRILLIC_MONTENEGRO;
     535           0 :             break;
     536             :         case LANGUAGE_OBSOLETE_USER_KURDISH_IRAQ:
     537           0 :             nLang = LANGUAGE_KURDISH_ARABIC_IRAQ;
     538           0 :             break;
     539             : 
     540             :         // The following are not strictly obsolete but should be mapped to a
     541             :         // replacement locale when encountered.
     542             : 
     543             :         // no_NO is an alias for nb_NO
     544             :         case LANGUAGE_NORWEGIAN:
     545           0 :             nLang = LANGUAGE_NORWEGIAN_BOKMAL;
     546           0 :             break;
     547             : 
     548             :         // #i94435# A Spanish variant that differs only in collation details we
     549             :         // do not support.
     550             :         case LANGUAGE_SPANISH_DATED:
     551           0 :             nLang = LANGUAGE_SPANISH_MODERN;
     552           0 :             break;
     553             :     }
     554         331 :     return nLang;
     555             : }
     556             : 
     557             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10