From 8bd8143c6b6f428303aeafccd38b5cd1e1d68aef Mon Sep 17 00:00:00 2001 From: Simon Rozman Date: Mon, 19 Aug 2024 13:01:29 +0200 Subject: [PATCH] langid: sync Windows build Signed-off-by: Simon Rozman --- UnitTests/UnitTests.vcxproj | 1 + UnitTests/UnitTests.vcxproj.filters | 3 + UnitTests/langid.cpp | 12 +- include/stdex/langid.hpp | 222 ++++++++++++---------------- 4 files changed, 108 insertions(+), 130 deletions(-) diff --git a/UnitTests/UnitTests.vcxproj b/UnitTests/UnitTests.vcxproj index 89c46ab3b..2d1890357 100644 --- a/UnitTests/UnitTests.vcxproj +++ b/UnitTests/UnitTests.vcxproj @@ -121,6 +121,7 @@ + diff --git a/UnitTests/UnitTests.vcxproj.filters b/UnitTests/UnitTests.vcxproj.filters index ae96287e0..ad9c8869b 100644 --- a/UnitTests/UnitTests.vcxproj.filters +++ b/UnitTests/UnitTests.vcxproj.filters @@ -84,6 +84,9 @@ Source Files\zlib + + Source Files + diff --git a/UnitTests/langid.cpp b/UnitTests/langid.cpp index 9cd906241..5f2ccfe49 100644 --- a/UnitTests/langid.cpp +++ b/UnitTests/langid.cpp @@ -15,21 +15,21 @@ namespace UnitTests void langid::from_rfc1766() { Assert::AreEqual(9, stdex::langid_from_rfc1766("en")); - Assert::AreEqual(1033, stdex::langid_from_rfc1766("en.US")); + Assert::AreEqual(1033, stdex::langid_from_rfc1766("en-US")); Assert::AreEqual(1033, stdex::langid_from_rfc1766("en_US")); - Assert::AreEqual(2057, stdex::langid_from_rfc1766("en.GB")); + Assert::AreEqual(2057, stdex::langid_from_rfc1766("en-GB")); Assert::AreEqual(2057, stdex::langid_from_rfc1766("en_GB")); Assert::AreEqual(9, stdex::langid_from_rfc1766("EN")); - Assert::AreEqual(1033, stdex::langid_from_rfc1766("EN.US")); + Assert::AreEqual(1033, stdex::langid_from_rfc1766("EN-US")); Assert::AreEqual(1033, stdex::langid_from_rfc1766("EN_US")); - Assert::AreEqual(2057, stdex::langid_from_rfc1766("EN.GB")); + Assert::AreEqual(2057, stdex::langid_from_rfc1766("EN-GB")); Assert::AreEqual(2057, stdex::langid_from_rfc1766("EN_GB")); Assert::AreEqual(1060, stdex::langid_from_rfc1766("sl")); - Assert::AreEqual(1060, stdex::langid_from_rfc1766("sl.SI")); + Assert::AreEqual(1060, stdex::langid_from_rfc1766("sl-SI")); Assert::AreEqual(1060, stdex::langid_from_rfc1766("sl_SI")); Assert::AreEqual(1060, stdex::langid_from_rfc1766("SL")); - Assert::AreEqual(1060, stdex::langid_from_rfc1766("SL.SI")); + Assert::AreEqual(1060, stdex::langid_from_rfc1766("SL-SI")); Assert::AreEqual(1060, stdex::langid_from_rfc1766("SL_SI")); } } diff --git a/include/stdex/langid.hpp b/include/stdex/langid.hpp index b66080f4a..1c74d6242 100644 --- a/include/stdex/langid.hpp +++ b/include/stdex/langid.hpp @@ -31,7 +31,6 @@ namespace stdex constexpr langid langid_unknown = 127; -#ifdef _WIN32 /// /// Parses language name and returns matching language code /// @@ -39,35 +38,11 @@ namespace stdex /// /// \returns Language code or `langid_unknown` if match not found /// - langid langid_from_rfc1766(_In_z_ const char *rfc1766) - { - return LANGIDFROMLCID(LocaleNameToLCID(str2wstr(rfc1766, langid::utf8).c_str(), 0)); - } - - /// - /// Parses language name and returns matching language code - /// - /// \param[in] rfc1766 Language name in RFC1766 syntax - /// - /// \returns Language code or `langid_unknown` if match not found - /// - langid langid_from_rfc1766(_In_z_ const wchar_t *rfc1766) - { - return LANGIDFROMLCID(LocaleNameToLCID(rfc1766, 0)); - } -#else - /// - /// Parses language name and returns matching language code - /// - /// \param[in] rfc1766 Language name in RFC1766 syntax - /// - /// \returns Language code or `langid_unknown` if match not found - /// - inline langid langid_from_rfc1766(_In_z_ const char *rfc1766) + inline langid langid_from_rfc1766(_In_z_ const char* rfc1766) { struct stricmp_less { - bool operator()(_In_z_ const char *str1, _In_z_ const char *str2) const + bool operator()(_In_z_ const char* str1, _In_z_ const char* str2) const { stdex_assert(str1); stdex_assert(str2); @@ -85,92 +60,92 @@ namespace stdex }; struct language_mapping { - langid id; ///< Language ID - std::map sublanguages; ///< Sublanguages + langid id; ///< Language ID + std::map sublanguages; ///< Sublanguages }; - static const std::map languages = { + static const std::map languages = { {"af", {1078, {}}}, // Afrikaans - {"ar", {0x01, // Arabic + {"ar", {0x01, // Arabic { - {"ae", 14337}, // Arabic(U.A.E.) - {"bh", 15361}, // Arabic(Bahrain) - {"dz", 5121}, // Arabic(Algeria) - {"eg", 3073}, // Arabic(Egypt) - {"iq", 2049}, // Arabic(Iraq) - {"jo", 11265}, // Arabic(Jordan) - {"kw", 13313}, // Arabic(Kuwait) - {"lb", 12289}, // Arabic(Lebanon) - {"ly", 4097}, // Arabic(Libya) - {"ma", 6145}, // Arabic(Morocco) - {"om", 8193}, // Arabic(Oman) - {"qa", 16385}, // Arabic(Qatar) - {"sa", 1025}, // Arabic(Saudi Arabia) - {"sy", 10241}, // Arabic(Syria) - {"tn", 7169}, // Arabic(Tunisia) - {"ye", 9217}, // Arabic(Yemen) + {"ae", static_cast(14337)}, // Arabic(U.A.E.) + {"bh", static_cast(15361)}, // Arabic(Bahrain) + {"dz", static_cast(5121)}, // Arabic(Algeria) + {"eg", static_cast(3073)}, // Arabic(Egypt) + {"iq", static_cast(2049)}, // Arabic(Iraq) + {"jo", static_cast(11265)}, // Arabic(Jordan) + {"kw", static_cast(13313)}, // Arabic(Kuwait) + {"lb", static_cast(12289)}, // Arabic(Lebanon) + {"ly", static_cast(4097)}, // Arabic(Libya) + {"ma", static_cast(6145)}, // Arabic(Morocco) + {"om", static_cast(8193)}, // Arabic(Oman) + {"qa", static_cast(16385)}, // Arabic(Qatar) + {"sa", static_cast(1025)}, // Arabic(Saudi Arabia) + {"sy", static_cast(10241)}, // Arabic(Syria) + {"tn", static_cast(7169)}, // Arabic(Tunisia) + {"ye", static_cast(9217)}, // Arabic(Yemen) }}}, {"be", {1059, {}}}, // Belarusian {"bg", {1026, {}}}, // Bulgarian {"ca", {1027, {}}}, // Catalan {"cs", {1029, {}}}, // Czech {"da", {1030, {}}}, // Danish - {"de", {0x07, // German + {"de", {0x07, // German { - {"at", 3079}, // German(Austrian) - {"ch", 2055}, // German(Swiss) - {"de", 1031}, // German(Germany) - {"li", 5127}, // German(Liechtenstein) - {"lu", 4103}, // German(Luxembourg) + {"at", static_cast(3079)}, // German(Austrian) + {"ch", static_cast(2055)}, // German(Swiss) + {"de", static_cast(1031)}, // German(Germany) + {"li", static_cast(5127)}, // German(Liechtenstein) + {"lu", static_cast(4103)}, // German(Luxembourg) }}}, {"el", {1032, {}}}, // Greek - {"en", {0x09, // English + {"en", {0x09, // English { - {"au", 3081}, // English(Australian) - {"bz", 10249}, // English(Belize) - {"ca", 4105}, // English(Canadian) - {"ca", 9225}, // English(Caribbean) - {"gb", 2057}, // English(British) - {"ie", 6153}, // English(Ireland) - {"jm", 8201}, // English(Jamaica) - {"nz", 5129}, // English(New Zealand) - {"tt", 11273}, // English(Trinidad) - {"us", 1033}, // English(United States) - {"za", 7177}, // English(South Africa) + {"au", static_cast(3081)}, // English(Australian) + {"bz", static_cast(10249)}, // English(Belize) + {"ca", static_cast(4105)}, // English(Canadian) + {"ca", static_cast(9225)}, // English(Caribbean) + {"gb", static_cast(2057)}, // English(British) + {"ie", static_cast(6153)}, // English(Ireland) + {"jm", static_cast(8201)}, // English(Jamaica) + {"nz", static_cast(5129)}, // English(New Zealand) + {"tt", static_cast(11273)}, // English(Trinidad) + {"us", static_cast(1033)}, // English(United States) + {"za", static_cast(7177)}, // English(South Africa) }}}, - {"es", {0x0a, // Spanish + {"es", {0x0a, // Spanish { - {"ar", 11274}, // Spanish(Argentina) - {"bo", 16394}, // Spanish(Bolivia) - {"c", 13322}, // Spanish(Chile) - {"co", 9226}, // Spanish(Colombia) - {"cr", 5130}, // Spanish(Costa Rica) - {"do", 7178}, // Spanish(Dominican Republic) - {"ec", 12298}, // Spanish(Ecuador) - {"es", 1034}, // Spanish(Spain) - {"gt", 4106}, // Spanish(Guatemala) - {"hn", 18442}, // Spanish(Honduras) - {"mx", 2058}, // Spanish(Mexican) - {"ni", 19466}, // Spanish(Nicaragua) - {"pa", 6154}, // Spanish(Panama) - {"pe", 10250}, // Spanish(Peru) - {"pr", 20490}, // Spanish(Puerto Rico) - {"py", 15370}, // Spanish(Paraguay) - {"sv", 17418}, // Spanish(El Salvador) - {"uy", 14346}, // Spanish(Uruguay) - {"ve", 8202}, // Spanish(Venezuela) + {"ar", static_cast(11274)}, // Spanish(Argentina) + {"bo", static_cast(16394)}, // Spanish(Bolivia) + {"cl", static_cast(13322)}, // Spanish(Chile) + {"co", static_cast(9226)}, // Spanish(Colombia) + {"cr", static_cast(5130)}, // Spanish(Costa Rica) + {"do", static_cast(7178)}, // Spanish(Dominican Republic) + {"ec", static_cast(12298)}, // Spanish(Ecuador) + {"es", static_cast(1034)}, // Spanish(Spain) + {"gt", static_cast(4106)}, // Spanish(Guatemala) + {"hn", static_cast(18442)}, // Spanish(Honduras) + {"mx", static_cast(2058)}, // Spanish(Mexican) + {"ni", static_cast(19466)}, // Spanish(Nicaragua) + {"pa", static_cast(6154)}, // Spanish(Panama) + {"pe", static_cast(10250)}, // Spanish(Peru) + {"pr", static_cast(20490)}, // Spanish(Puerto Rico) + {"py", static_cast(15370)}, // Spanish(Paraguay) + {"sv", static_cast(17418)}, // Spanish(El Salvador) + {"uy", static_cast(14346)}, // Spanish(Uruguay) + {"ve", static_cast(8202)}, // Spanish(Venezuela) }}}, {"et", {1061, {}}}, // Estonian {"eu", {1069, {}}}, // Basque {"fa", {1065, {}}}, // Farsi {"fi", {1035, {}}}, // Finnish {"fo", {1080, {}}}, // Faeroese - {"fr", {0x0c, // French + {"fr", {0x0c, // French { - {"be", 2060}, // French(Belgian) - {"ca", 3084}, // French(Canadian) - {"ch", 4108}, // French(Swiss) - {"fr", 1036}, // French(Luxembourg) - {"lu", 5132}, // French(Luxembourg) + {"be", static_cast(2060)}, // French(Belgian) + {"ca", static_cast(3084)}, // French(Canadian) + {"ch", static_cast(4108)}, // French(Swiss) + {"fr", static_cast(1036)}, // French(Luxembourg) + {"lu", static_cast(5132)}, // French(Luxembourg) }}}, {"gd", {1084, {}}}, // Gaelic(Scots) {"he", {1037, {}}}, // Hebrew @@ -179,63 +154,63 @@ namespace stdex {"hu", {1038, {}}}, // Hungarian {"in", {1057, {}}}, // Indonesian {"is", {1039, {}}}, // Icelandic - {"it", {0x10, // Italian + {"it", {0x10, // Italian { - {"ch", 2064}, // Italian(Swiss) - {"it", 1040}, // Italian(Italy) + {"ch", static_cast(2064)}, // Italian(Swiss) + {"it", static_cast(1040)}, // Italian(Italy) }}}, {"ja", {1041, {}}}, // Japanese {"ji", {1085, {}}}, // Yiddish - {"ko", {0x12, // Korean + {"ko", {0x12, // Korean { - {"johab", 2066}, // Korean(Johab) - {"kr", 1042}, // Korean(Korea) + {"johab", static_cast(2066)}, // Korean(Johab) + {"kr", static_cast(1042)}, // Korean(Korea) }}}, {"lt", {1063, {}}}, // Lithuanian {"lv", {1062, {}}}, // Latvian {"mk", {1071, {}}}, // Macedonian (FYROM) {"ms", {1086, {}}}, // Malaysian {"mt", {1082, {}}}, // Maltese - {"nl", {0x13, // Dutch + {"nl", {0x13, // Dutch { - {"be", 2067}, // Dutch(Belgian) - {"nl", 1043}, // Dutch(Netherland) + {"be", static_cast(2067)}, // Dutch(Belgian) + {"nl", static_cast(1043)}, // Dutch(Netherland) }}}, - {"no", {0x14, // Norwegian + {"no", {0x14, // Norwegian { - {"bokmaal", 1044}, // Norwegian(Bokmaal) - {"nynorsk", 2068}, // Norwegian(Nynorsk) + {"bokmaal", static_cast(1044)}, // Norwegian(Bokmaal) + {"nynorsk", static_cast(2068)}, // Norwegian(Nynorsk) }}}, {"pl", {1045, {}}}, // Polish - {"pt", {0x16, // Portuguese + {"pt", {0x16, // Portuguese { - {"br", 1046}, // Portuguese(Brazil) - {"pt", 2070}, // Portuguese(Portugal) + {"br", static_cast(1046)}, // Portuguese(Brazil) + {"pt", static_cast(2070)}, // Portuguese(Portugal) }}}, {"rm", {1047, {}}}, // Rhaeto-Romanic - {"ro", {0x18, // Romanian + {"ro", {0x18, // Romanian { - {"mo", 2072}, // Romanian(Moldavia) - {"ro", 1048}, // Romanian(Romania) + {"mo", static_cast(2072)}, // Romanian(Moldavia) + {"ro", static_cast(1048)}, // Romanian(Romania) }}}, - {"ru", {0x19, // Russian + {"ru", {0x19, // Russian { - {"mo", 2073}, // Russian(Moldavia) - {"ru", 1049}, // Russian(Russia) + {"mo", static_cast(2073)}, // Russian(Moldavia) + {"ru", static_cast(1049)}, // Russian(Russia) }}}, {"sb", {1070, {}}}, // Sorbian {"sk", {1051, {}}}, // Slovak {"sl", {1060, {}}}, // Slovenian {"sq", {1052, {}}}, // Albanian - {"sr", {0x1a, // Serbian + {"sr", {0x1a, // Serbian { - {"cyrillic", 3098}, // Serbian(Cyrillic) - {"latin", 2074}, // Serbian(Latin) + {"cyrillic", static_cast(3098)}, // Serbian(Cyrillic) + {"latin", static_cast(2074)}, // Serbian(Latin) }}}, - {"sv", {0x1d, // Swedish + {"sv", {0x1d, // Swedish { - {"fi", 2077}, // Swedish(Finland) - {"se", 1053}, // Swedish(Sweden) + {"fi", static_cast(2077)}, // Swedish(Finland) + {"se", static_cast(1053)}, // Swedish(Sweden) }}}, {"sx", {1072, {}}}, // Sutu {"sz", {1083, {}}}, // Sami(Lappish) @@ -248,12 +223,12 @@ namespace stdex {"ve", {1075, {}}}, // Venda {"vi", {1066, {}}}, // Vietnamese {"xh", {1076, {}}}, // Xhosa - {"zh", {0x04, // Chinese + {"zh", {0x04, // Chinese { - {"cn", 2052}, // Chinese(PRC) - {"hk", 3076}, // Chinese(Hong Kong) - {"sg", 4100}, // Chinese(Singapore) - {"tw", 1028}, // Chinese(Taiwan) + {"cn", static_cast(2052)}, // Chinese(PRC) + {"hk", static_cast(3076)}, // Chinese(Hong Kong) + {"sg", static_cast(4100)}, // Chinese(Singapore) + {"tw", static_cast(1028)}, // Chinese(Taiwan) }}}, {"zu", {1077, {}}}, // Zulu }; @@ -270,7 +245,6 @@ namespace stdex } return langid_unknown; } -#endif } #if defined(__GNUC__)