Revision control

++ // Copyright (C) 2021 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
++ // Qt-Security score:significant reason:default
++
++ #include "xt9languagemap.h"
++
++ QT_BEGIN_NAMESPACE
++ namespace QtVirtualKeyboard {
++
++ const Xt9LanguageMap::SimpleLanguageMapEntry Xt9LanguageMap::SIMPLE_LANGUAGE_MAP[] = {
++ { ET9PLIDAbkhazian, QLocale::Language::Abkhazian },
++ { ET9PLIDAfar, QLocale::Language::Afar },
++ { ET9PLIDAfrikaans, QLocale::Language::Afrikaans },
++ { ET9PLIDAlbanian, QLocale::Language::Albanian },
++ { ET9PLIDAmharic, QLocale::Language::Amharic },
++ { ET9PLIDArabic, QLocale::Language::Arabic },
++ { ET9PLIDArmenian, QLocale::Language::Armenian },
++ { ET9PLIDAssamese, QLocale::Language::Assamese },
++ { ET9PLIDAymara, QLocale::Language::Aymara },
++ { ET9PLIDAzerbaijani, QLocale::Language::Azerbaijani },
++ { ET9PLIDBashkir, QLocale::Language::Bashkir },
++ { ET9PLIDBasque, QLocale::Language::Basque },
++ { ET9PLIDBelarusian, QLocale::Language::Belarusian },
++ { ET9PLIDBengali, QLocale::Language::Bengali },
++ { ET9PLIDBislama, QLocale::Language::Bislama },
++ { ET9PLIDBosnian, QLocale::Language::Bosnian },
++ { ET9PLIDBreton, QLocale::Language::Breton },
++ { ET9PLIDBulgarian, QLocale::Language::Bulgarian },
++ { ET9PLIDBurmese, QLocale::Language::Burmese },
++ { ET9PLIDCatalan, QLocale::Language::Catalan },
++ { ET9PLIDChineseSimplified, QLocale::Language::Chinese },
++ { ET9PLIDCorsican, QLocale::Language::Corsican },
++ { ET9PLIDCroatian, QLocale::Language::Croatian },
++ { ET9PLIDCzech, QLocale::Language::Czech },
++ { ET9PLIDDanish, QLocale::Language::Danish },
++ { ET9PLIDDutch, QLocale::Language::Dutch },
++ { ET9PLIDEnglish, QLocale::Language::English },
++ { ET9PLIDEsperanto, QLocale::Language::Esperanto },
++ { ET9PLIDEstonian, QLocale::Language::Estonian },
++ { ET9PLIDFilipino, QLocale::Language::Filipino },
++ { ET9PLIDFinnish, QLocale::Language::Finnish },
++ { ET9PLIDFrench, QLocale::Language::French },
++ { ET9PLIDGalician, QLocale::Language::Galician },
++ { ET9PLIDGeorgian, QLocale::Language::Georgian },
++ { ET9PLIDGerman, QLocale::Language::German },
++ { ET9PLIDGerman, QLocale::Language::LowGerman },
++ { ET9PLIDGerman, QLocale::Language::SwissGerman },
++ { ET9PLIDGreek, QLocale::Language::Greek },
++ { ET9PLIDGreenlandic, QLocale::Language::Greenlandic },
++ { ET9PLIDGuarani, QLocale::Language::Guarani },
++ { ET9PLIDGujarati, QLocale::Language::Gujarati },
++ { ET9PLIDHausa, QLocale::Language::Hausa },
++ { ET9PLIDHawaiian, QLocale::Language::Hawaiian },
++ { ET9PLIDHebrew, QLocale::Language::Hebrew },
++ { ET9PLIDHindi, QLocale::Language::Hindi },
++ { ET9PLIDHungarian, QLocale::Language::Hungarian },
++ { ET9PLIDIcelandic, QLocale::Language::Icelandic },
++ { ET9PLIDIgbo, QLocale::Language::Igbo },
++ { ET9PLIDIndonesian, QLocale::Language::Indonesian },
++ { ET9PLIDInterlingua, QLocale::Language::Interlingua },
++ { ET9PLIDInterlingue, QLocale::Language::Interlingue },
++ { ET9PLIDInuktitut, QLocale::Language::Inuktitut },
++ { ET9PLIDInupiak, QLocale::Language::Inupiak },
++ { ET9PLIDIrish, QLocale::Language::Irish },
++ { ET9PLIDItalian, QLocale::Language::Italian },
++ { ET9PLIDJapanese, QLocale::Language::Japanese },
++ { ET9PLIDJavanese, QLocale::Language::Javanese },
++ { ET9PLIDKannada, QLocale::Language::Kannada },
++ { ET9PLIDKashmiri, QLocale::Language::Kashmiri },
++ { ET9PLIDKazakh, QLocale::Language::Kazakh },
++ { ET9PLIDKhmer, QLocale::Language::Khmer },
++ { ET9PLIDKirghiz, QLocale::Language::Kirghiz },
++ { ET9PLIDKonkani, QLocale::Language::Konkani },
++ { ET9PLIDKorean, QLocale::Language::Korean },
++ { ET9PLIDKurdish, QLocale::Language::Kurdish },
++ { ET9PLIDLao, QLocale::Language::Lao },
++ { ET9PLIDLatin, QLocale::Language::Latin },
++ { ET9PLIDLatvian, QLocale::Language::Latvian },
++ { ET9PLIDLingala, QLocale::Language::Lingala },
++ { ET9PLIDLithuanian, QLocale::Language::Lithuanian },
++ { ET9PLIDMacedonian, QLocale::Language::Macedonian },
++ { ET9PLIDMalagasy, QLocale::Language::Malagasy },
++ { ET9PLIDMalay, QLocale::Language::Malay },
++ { ET9PLIDMalayalam, QLocale::Language::Malayalam },
++ { ET9PLIDMaltese, QLocale::Language::Maltese },
++ { ET9PLIDMaori, QLocale::Language::Maori },
++ { ET9PLIDMarathi, QLocale::Language::Marathi },
++ { ET9PLIDMongolian, QLocale::Language::Mongolian },
++ { ET9PLIDNepali, QLocale::Language::Nepali },
++ { ET9PLIDNorwegian, QLocale::Language::NorwegianBokmal },
++ { ET9PLIDNorwegian, QLocale::Language::NorwegianNynorsk },
++ { ET9PLIDOccitan, QLocale::Language::Occitan },
++ { ET9PLIDOriya, QLocale::Language::Oriya },
++ { ET9PLIDOromo, QLocale::Language::Oromo },
++ { ET9PLIDPashto, QLocale::Language::Pashto },
++ { ET9PLIDPersian, QLocale::Language::Persian },
++ { ET9PLIDPolish, QLocale::Language::Polish },
++ { ET9PLIDPortuguese, QLocale::Language::Portuguese },
++ { ET9PLIDPunjabi, QLocale::Language::Punjabi },
++ { ET9PLIDQuechua, QLocale::Language::Quechua },
++ { ET9PLIDRomanian, QLocale::Language::Romanian },
++ { ET9PLIDRussian, QLocale::Language::Russian },
++ { ET9PLIDSami, QLocale::Language::NorthernSami },
++ { ET9PLIDSamoan, QLocale::Language::Samoan },
++ { ET9PLIDSangho, QLocale::Language::Sango },
++ { ET9PLIDSanskrit, QLocale::Language::Sanskrit },
++ { ET9PLIDSerbian, QLocale::Language::Serbian },
++ { ET9PLIDSesotho, QLocale::Language::NorthernSotho },
++ { ET9PLIDSesotho, QLocale::Language::SouthernSotho },
++ { ET9PLIDShona, QLocale::Language::Shona },
++ { ET9PLIDSindhi, QLocale::Language::Sindhi },
++ { ET9PLIDSinhala, QLocale::Language::Sinhala },
++ { ET9PLIDSiswati, QLocale::Language::Swati },
++ { ET9PLIDSlovak, QLocale::Language::Slovak },
++ { ET9PLIDSlovenian, QLocale::Language::Slovenian },
++ { ET9PLIDSomali, QLocale::Language::Somali },
++ { ET9PLIDSpanish, QLocale::Language::Spanish },
++ { ET9PLIDSundanese, QLocale::Language::Sundanese },
++ { ET9PLIDSwahili, QLocale::Language::Swahili },
++ { ET9PLIDSwedish, QLocale::Language::Swedish },
++ { ET9PLIDTajik, QLocale::Language::Tajik },
++ { ET9PLIDTamil, QLocale::Language::Tamil },
++ { ET9PLIDTatar, QLocale::Language::Tatar },
++ { ET9PLIDTelugu, QLocale::Language::Telugu },
++ { ET9PLIDThai, QLocale::Language::Thai },
++ { ET9PLIDTibetan, QLocale::Language::Tibetan },
++ { ET9PLIDTigrinya, QLocale::Language::Tigrinya },
++ { ET9PLIDTonga, QLocale::Language::Tongan },
++ { ET9PLIDTsonga, QLocale::Language::Tsonga },
++ { ET9PLIDTswana, QLocale::Language::Tswana },
++ { ET9PLIDTurkish, QLocale::Language::Turkish },
++ { ET9PLIDTurkmen, QLocale::Language::Turkmen },
++ { ET9PLIDUkrainian, QLocale::Language::Ukrainian },
++ { ET9PLIDUrdu, QLocale::Language::Urdu },
++ { ET9PLIDUzbek, QLocale::Language::Uzbek },
++ { ET9PLIDVenda, QLocale::Language::Venda },
++ { ET9PLIDVietnamese, QLocale::Language::Vietnamese },
++ { ET9PLIDVolapuk, QLocale::Language::Volapuk },
++ { ET9PLIDWelsh, QLocale::Language::Welsh },
++ { ET9PLIDWolof, QLocale::Language::Wolof },
++ { ET9PLIDXhosa, QLocale::Language::Xhosa },
++ { ET9PLIDYiddish, QLocale::Language::Yiddish },
++ { ET9PLIDYoruba, QLocale::Language::Yoruba },
++ { ET9PLIDZhuang, QLocale::Language::Zhuang },
++ { ET9PLIDZulu, QLocale::Language::Zulu },
++ // End-of-map
++ { ET9PLIDNone, QLocale::Language::AnyLanguage }
++ };
++
++ const struct Xt9LanguageMap::LanguageMapEntry Xt9LanguageMap::LANGUAGE_MAP[] = {
++ { ET9LIDEnglish_UK, QLocale(QLocale::English, QLocale::UnitedKingdom) },
++ { ET9LIDEnglish_Australia, QLocale(QLocale::English, QLocale::Australia) },
++ { ET9LIDEnglish_India, QLocale(QLocale::English, QLocale::India) },
++ { ET9LIDEnglish_US, QLocale(QLocale::English, QLocale::UnitedStates) },
++ { ET9PLIDEnglish|ET9SLIDDEFAULT, QLocale(QLocale::English, QLocale::UnitedKingdom) },
++ { ET9LIDSpanish_LatinAmerican, QLocale(QLocale::Spanish, QLocale::LatinAmerica) },
++ { ET9PLIDSpanish|ET9SLIDDEFAULT, QLocale(QLocale::Spanish, QLocale::Spain) },
++ { ET9LIDFrench_Canada, QLocale(QLocale::French, QLocale::Canada) },
++ { ET9LIDFrench_Switzerland, QLocale(QLocale::French, QLocale::Switzerland) },
++ { ET9PLIDFrench|ET9SLIDDEFAULT, QLocale(QLocale::French, QLocale::France) },
++ { ET9LIDItalian_Switzerland, QLocale(QLocale::Italian, QLocale::Switzerland) },
++ { ET9LIDDutch_Belgium, QLocale(QLocale::Dutch, QLocale::Belgium) },
++ { ET9PLIDPortuguese|ET9SLIDDEFAULT, QLocale(QLocale::Portuguese, QLocale::Portugal) },
++ { ET9LIDPortuguese_Brazil, QLocale(QLocale::Portuguese, QLocale::Brazil) },
++ { ET9PLIDChineseSimplified, QLocale(QLocale::Chinese, QLocale::SimplifiedHanScript, QLocale::China) },
++ { ET9PLIDChineseTraditional, QLocale(QLocale::Chinese, QLocale::TraditionalHanScript, QLocale::Taiwan) },
++ { ET9PLIDChineseHongkong, QLocale(QLocale::Chinese, QLocale::TraditionalHanScript, QLocale::HongKong) },
++ { ET9PLIDChineseSingapore, QLocale(QLocale::Chinese, QLocale::TraditionalHanScript, QLocale::Singapore) },
++ { ET9LIDJapanese_Hiragana, QLocale(QLocale::Japanese) },
++ // End-of-map
++ { 0, QLocale(QLocale::AnyLanguage) },
++ };
++
++ ET9U32 Xt9LanguageMap::languageId(const QLocale &locale)
++ {
++ const QLocale::Language localeLanguage = locale.language();
++ const QLocale::Territory localeTerritory = locale.territory();
++
++ for (int i = 0; LANGUAGE_MAP[i].languageId != 0; ++i) {
++ const QLocale &item = LANGUAGE_MAP[i].locale;
++ if (item.language() == localeLanguage && item.territory() == localeTerritory)
++ return LANGUAGE_MAP[i].languageId;
++ }
++
++ const SimpleLanguageMapEntry *simpleLanguageMapIterator = SIMPLE_LANGUAGE_MAP;
++ for (; simpleLanguageMapIterator->localeLanguage != QLocale::Language::AnyLanguage;
++ simpleLanguageMapIterator++) {
++ if (simpleLanguageMapIterator->localeLanguage == localeLanguage)
++ return simpleLanguageMapIterator->languageId;
++ }
++
++ return ET9PLIDNone;
++ }
++
++ QLocale Xt9LanguageMap::locale(ET9U32 languageId)
++ {
++ for (int i = 0; LANGUAGE_MAP[i].languageId != 0; ++i) {
++ if (LANGUAGE_MAP[i].languageId == languageId)
++ return LANGUAGE_MAP[i].locale;
++ }
++
++ if (!(languageId & ET9SLIDMASK) &&
++ (languageId < ET9PLIDChineseTraditional || languageId > ET9PLIDChineseSingapore)) {
++
++ languageId |= ET9SLIDDEFAULT;
++
++ for (int i = 0; LANGUAGE_MAP[i].languageId != 0; ++i) {
++ if (LANGUAGE_MAP[i].languageId == languageId)
++ return LANGUAGE_MAP[i].locale;
++ }
++ }
++
++ const ET9U32 plid = languageId & ET9PLIDMASK;
++ const SimpleLanguageMapEntry *simpleLanguageMapIterator = SIMPLE_LANGUAGE_MAP;
++ for (; simpleLanguageMapIterator->localeLanguage != QLocale::Language::AnyLanguage;
++ simpleLanguageMapIterator++) {
++ if (simpleLanguageMapIterator->languageId == plid)
++ return QLocale(simpleLanguageMapIterator->localeLanguage);
++ }
++
++ return QLocale(QLocale::AnyLanguage);
++ }
++
++ } // namespace QtVirtualKeyboard
++ QT_END_NAMESPACE