302 lines
8.7 KiB
C++
302 lines
8.7 KiB
C++
/*
|
|
This file is part of Telegram Desktop,
|
|
the official desktop application for the Telegram messaging service.
|
|
|
|
For license and copyright information please follow this link:
|
|
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|
*/
|
|
#include "data/data_countries.h"
|
|
|
|
namespace Data {
|
|
namespace {
|
|
|
|
const std::array<CountryInfo, 231> List = { {
|
|
{ "Afghanistan", "AF", "93" },
|
|
{ "Albania", "AL", "355" },
|
|
{ "Algeria", "DZ", "213" },
|
|
{ "American Samoa", "AS", "1684" },
|
|
{ "Andorra", "AD", "376" },
|
|
{ "Angola", "AO", "244" },
|
|
{ "Anguilla", "AI", "1264" },
|
|
{ "Antigua & Barbuda", "AG", "1268" },
|
|
{ "Argentina", "AR", "54" },
|
|
{ "Armenia", "AM", "374" },
|
|
{ "Aruba", "AW", "297" },
|
|
{ "Australia", "AU", "61" },
|
|
{ "Austria", "AT", "43" },
|
|
{ "Azerbaijan", "AZ", "994" },
|
|
{ "Bahamas", "BS", "1242" },
|
|
{ "Bahrain", "BH", "973" },
|
|
{ "Bangladesh", "BD", "880" },
|
|
{ "Barbados", "BB", "1246" },
|
|
{ "Belarus", "BY", "375" },
|
|
{ "Belgium", "BE", "32" },
|
|
{ "Belize", "BZ", "501" },
|
|
{ "Benin", "BJ", "229" },
|
|
{ "Bermuda", "BM", "1441" },
|
|
{ "Bhutan", "BT", "975" },
|
|
{ "Bolivia", "BO", "591" },
|
|
{ "Bonaire, Sint Eustatius & Saba", "BQ", "599" },
|
|
{ "Bosnia & Herzegovina", "BA", "387" },
|
|
{ "Botswana", "BW", "267" },
|
|
{ "Brazil", "BR", "55" },
|
|
{ "British Virgin Islands", "VG", "1284" },
|
|
{ "Brunei Darussalam", "BN", "673" },
|
|
{ "Bulgaria", "BG", "359" },
|
|
{ "Burkina Faso", "BF", "226" },
|
|
{ "Burundi", "BI", "257" },
|
|
{ "Cambodia", "KH", "855" },
|
|
{ "Cameroon", "CM", "237" },
|
|
{ "Canada", "CA", "1" },
|
|
{ "Cape Verde", "CV", "238" },
|
|
{ "Cayman Islands", "KY", "1345" },
|
|
{ "Central African Republic", "CF", "236" },
|
|
{ "Chad", "TD", "235" },
|
|
{ "Chile", "CL", "56" },
|
|
{ "China", "CN", "86" },
|
|
{ "Colombia", "CO", "57" },
|
|
{ "Comoros", "KM", "269" },
|
|
{ "Congo", "CG", "242" },
|
|
{ "Congo, Democratic Republic", "CD", "243" },
|
|
{ "Cook Islands", "CK", "682" },
|
|
{ "Costa Rica", "CR", "506" },
|
|
{ "Croatia", "HR", "385" },
|
|
{ "Cuba", "CU", "53" },
|
|
{ "Curaçao", "CW", "599" },
|
|
{ "Cyprus", "CY", "357" },
|
|
{ "Czech Republic", "CZ", "420" },
|
|
{ "Côte d`Ivoire", "CI", "225" },
|
|
{ "Denmark", "DK", "45" },
|
|
{ "Diego Garcia", "IO", "246" },
|
|
{ "Djibouti", "DJ", "253" },
|
|
{ "Dominica", "DM", "1767" },
|
|
{ "Dominican Republic", "DO", "1" },
|
|
{ "Ecuador", "EC", "593" },
|
|
{ "Egypt", "EG", "20" },
|
|
{ "El Salvador", "SV", "503" },
|
|
{ "Equatorial Guinea", "GQ", "240" },
|
|
{ "Eritrea", "ER", "291" },
|
|
{ "Estonia", "EE", "372" },
|
|
{ "Ethiopia", "ET", "251" },
|
|
{ "Falkland Islands", "FK", "500" },
|
|
{ "Faroe Islands", "FO", "298" },
|
|
{ "Fiji", "FJ", "679" },
|
|
{ "Finland", "FI", "358" },
|
|
{ "France", "FR", "33" },
|
|
{ "French Guiana", "GF", "594" },
|
|
{ "French Polynesia", "PF", "689" },
|
|
{ "Gabon", "GA", "241" },
|
|
{ "Gambia", "GM", "220" },
|
|
{ "Georgia", "GE", "995" },
|
|
{ "Germany", "DE", "49" },
|
|
{ "Ghana", "GH", "233" },
|
|
{ "Gibraltar", "GI", "350" },
|
|
{ "Greece", "GR", "30" },
|
|
{ "Greenland", "GL", "299" },
|
|
{ "Grenada", "GD", "1473" },
|
|
{ "Guadeloupe", "GP", "590" },
|
|
{ "Guam", "GU", "1671" },
|
|
{ "Guatemala", "GT", "502" },
|
|
{ "Guinea", "GN", "224" },
|
|
{ "Guinea-Bissau", "GW", "245" },
|
|
{ "Guyana", "GY", "592" },
|
|
{ "Haiti", "HT", "509" },
|
|
{ "Honduras", "HN", "504" },
|
|
{ "Hong Kong", "HK", "852" },
|
|
{ "Hungary", "HU", "36" },
|
|
{ "Iceland", "IS", "354" },
|
|
{ "India", "IN", "91" },
|
|
{ "Indonesia", "ID", "62" },
|
|
{ "Iran", "IR", "98" },
|
|
{ "Iraq", "IQ", "964" },
|
|
{ "Ireland", "IE", "353" },
|
|
{ "Israel", "IL", "972" },
|
|
{ "Italy", "IT", "39" },
|
|
{ "Jamaica", "JM", "1876" },
|
|
{ "Japan", "JP", "81" },
|
|
{ "Jordan", "JO", "962" },
|
|
{ "Kazakhstan", "KZ", "7" },
|
|
{ "Kenya", "KE", "254" },
|
|
{ "Kiribati", "KI", "686" },
|
|
{ "Kuwait", "KW", "965" },
|
|
{ "Kyrgyzstan", "KG", "996" },
|
|
{ "Laos", "LA", "856" },
|
|
{ "Latvia", "LV", "371" },
|
|
{ "Lebanon", "LB", "961" },
|
|
{ "Lesotho", "LS", "266" },
|
|
{ "Liberia", "LR", "231" },
|
|
{ "Libya", "LY", "218" },
|
|
{ "Liechtenstein", "LI", "423" },
|
|
{ "Lithuania", "LT", "370" },
|
|
{ "Luxembourg", "LU", "352" },
|
|
{ "Macau", "MO", "853" },
|
|
{ "Macedonia", "MK", "389" },
|
|
{ "Madagascar", "MG", "261" },
|
|
{ "Malawi", "MW", "265" },
|
|
{ "Malaysia", "MY", "60" },
|
|
{ "Maldives", "MV", "960" },
|
|
{ "Mali", "ML", "223" },
|
|
{ "Malta", "MT", "356" },
|
|
{ "Marshall Islands", "MH", "692" },
|
|
{ "Martinique", "MQ", "596" },
|
|
{ "Mauritania", "MR", "222" },
|
|
{ "Mauritius", "MU", "230" },
|
|
{ "Mexico", "MX", "52" },
|
|
{ "Micronesia", "FM", "691" },
|
|
{ "Moldova", "MD", "373" },
|
|
{ "Monaco", "MC", "377" },
|
|
{ "Mongolia", "MN", "976" },
|
|
{ "Montenegro", "ME", "382" },
|
|
{ "Montserrat", "MS", "1664" },
|
|
{ "Morocco", "MA", "212" },
|
|
{ "Mozambique", "MZ", "258" },
|
|
{ "Myanmar", "MM", "95" },
|
|
{ "Namibia", "NA", "264" },
|
|
{ "Nauru", "NR", "674" },
|
|
{ "Nepal", "NP", "977" },
|
|
{ "Netherlands", "NL", "31" },
|
|
{ "New Caledonia", "NC", "687" },
|
|
{ "New Zealand", "NZ", "64" },
|
|
{ "Nicaragua", "NI", "505" },
|
|
{ "Niger", "NE", "227" },
|
|
{ "Nigeria", "NG", "234" },
|
|
{ "Niue", "NU", "683" },
|
|
{ "Norfolk Island", "NF", "672" },
|
|
{ "North Korea", "KP", "850" },
|
|
{ "Northern Mariana Islands", "MP", "1670" },
|
|
{ "Norway", "NO", "47" },
|
|
{ "Oman", "OM", "968" },
|
|
{ "Pakistan", "PK", "92" },
|
|
{ "Palau", "PW", "680" },
|
|
{ "Palestine", "PS", "970" },
|
|
{ "Panama", "PA", "507" },
|
|
{ "Papua New Guinea", "PG", "675" },
|
|
{ "Paraguay", "PY", "595" },
|
|
{ "Peru", "PE", "51" },
|
|
{ "Philippines", "PH", "63" },
|
|
{ "Poland", "PL", "48" },
|
|
{ "Portugal", "PT", "351" },
|
|
{ "Puerto Rico", "PR", "1" },
|
|
{ "Qatar", "QA", "974" },
|
|
{ "Romania", "RO", "40" },
|
|
{ "Russian Federation", "RU", "7" },
|
|
{ "Rwanda", "RW", "250" },
|
|
{ "Réunion", "RE", "262" },
|
|
{ "Saint Helena", "SH", "247" },
|
|
{ "Saint Helena", "SH2", "290" },
|
|
{ "Saint Kitts & Nevis", "KN", "1869" },
|
|
{ "Saint Lucia", "LC", "1758" },
|
|
{ "Saint Pierre & Miquelon", "PM", "508" },
|
|
{ "Saint Vincent & the Grenadines", "VC", "1784" },
|
|
{ "Samoa", "WS", "685" },
|
|
{ "San Marino", "SM", "378" },
|
|
{ "Saudi Arabia", "SA", "966" },
|
|
{ "Senegal", "SN", "221" },
|
|
{ "Serbia", "RS", "381" },
|
|
{ "Seychelles", "SC", "248" },
|
|
{ "Sierra Leone", "SL", "232" },
|
|
{ "Singapore", "SG", "65" },
|
|
{ "Sint Maarten", "SX", "1721" },
|
|
{ "Slovakia", "SK", "421" },
|
|
{ "Slovenia", "SI", "386" },
|
|
{ "Solomon Islands", "SB", "677" },
|
|
{ "Somalia", "SO", "252" },
|
|
{ "South Africa", "ZA", "27" },
|
|
{ "South Korea", "KR", "82" },
|
|
{ "South Sudan", "SS", "211" },
|
|
{ "Spain", "ES", "34" },
|
|
{ "Sri Lanka", "LK", "94" },
|
|
{ "Sudan", "SD", "249" },
|
|
{ "Suriname", "SR", "597" },
|
|
{ "Swaziland", "SZ", "268" },
|
|
{ "Sweden", "SE", "46" },
|
|
{ "Switzerland", "CH", "41" },
|
|
{ "Syrian Arab Republic", "SY", "963" },
|
|
{ "São Tomé & Príncipe", "ST", "239" },
|
|
{ "Taiwan", "TW", "886" },
|
|
{ "Tajikistan", "TJ", "992" },
|
|
{ "Tanzania", "TZ", "255" },
|
|
{ "Thailand", "TH", "66" },
|
|
{ "Timor-Leste", "TL", "670" },
|
|
{ "Togo", "TG", "228" },
|
|
{ "Tokelau", "TK", "690" },
|
|
{ "Tonga", "TO", "676" },
|
|
{ "Trinidad & Tobago", "TT", "1868" },
|
|
{ "Tunisia", "TN", "216" },
|
|
{ "Turkey", "TR", "90" },
|
|
{ "Turkmenistan", "TM", "993" },
|
|
{ "Turks & Caicos Islands", "TC", "1649" },
|
|
{ "Tuvalu", "TV", "688" },
|
|
{ "US Virgin Islands", "VI", "1340" },
|
|
{ "USA", "US", "1", "United States of America" },
|
|
{ "Uganda", "UG", "256" },
|
|
{ "Ukraine", "UA", "380" },
|
|
{ "United Arab Emirates", "AE", "971" },
|
|
{ "United Kingdom", "GB", "44" },
|
|
{ "Uruguay", "UY", "598" },
|
|
{ "Uzbekistan", "UZ", "998" },
|
|
{ "Vanuatu", "VU", "678" },
|
|
{ "Venezuela", "VE", "58" },
|
|
{ "Vietnam", "VN", "84" },
|
|
{ "Wallis & Futuna", "WF", "681" },
|
|
{ "Yemen", "YE", "967" },
|
|
{ "Zambia", "ZM", "260" },
|
|
{ "Zimbabwe", "ZW", "263" },
|
|
} };
|
|
|
|
QHash<QString, const CountryInfo *> ByCode;
|
|
QHash<QString, const CountryInfo *> ByISO2;
|
|
|
|
} // namespace
|
|
|
|
const std::array<CountryInfo, 231> &Countries() {
|
|
return List;
|
|
}
|
|
|
|
const QHash<QString, const CountryInfo *> &CountriesByCode() {
|
|
if (ByCode.isEmpty()) {
|
|
ByCode.reserve(List.size());
|
|
for (const auto &entry : List) {
|
|
ByCode.insert(entry.code, &entry);
|
|
}
|
|
}
|
|
return ByCode;
|
|
}
|
|
|
|
const QHash<QString, const CountryInfo *> &CountriesByISO2() {
|
|
if (ByISO2.isEmpty()) {
|
|
ByISO2.reserve(List.size());
|
|
for (const auto &entry : List) {
|
|
ByISO2.insert(entry.iso2, &entry);
|
|
}
|
|
}
|
|
return ByISO2;
|
|
}
|
|
|
|
QString ValidPhoneCode(QString fullCode) {
|
|
const auto &byCode = CountriesByCode();
|
|
while (fullCode.length()) {
|
|
const auto i = byCode.constFind(fullCode);
|
|
if (i != byCode.cend()) {
|
|
return (*i)->code;
|
|
}
|
|
fullCode.chop(1);
|
|
}
|
|
return QString();
|
|
}
|
|
|
|
QString CountryNameByISO2(const QString &iso) {
|
|
const auto &byISO2 = CountriesByISO2();
|
|
const auto i = byISO2.constFind(iso);
|
|
return (i != byISO2.cend()) ? QString::fromUtf8((*i)->name) : QString();
|
|
}
|
|
|
|
QString CountryISO2ByPhone(const QString &phone) {
|
|
const auto &byCode = Data::CountriesByCode();
|
|
const auto code = Data::ValidPhoneCode(phone);
|
|
const auto i = byCode.find(code);
|
|
return (i != byCode.cend()) ? QString::fromUtf8((*i)->iso2) : QString();
|
|
}
|
|
|
|
} // namespace Data
|