langid: sync Windows build

Signed-off-by: Simon Rozman <simon@rozman.si>
This commit is contained in:
Simon Rozman 2024-08-19 13:01:29 +02:00
parent e24bd3d1fa
commit 8bd8143c6b
4 changed files with 108 additions and 130 deletions

View File

@ -121,6 +121,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" /> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<ItemGroup> <ItemGroup>
<ClCompile Include="hash.cpp" /> <ClCompile Include="hash.cpp" />
<ClCompile Include="langid.cpp" />
<ClCompile Include="math.cpp" /> <ClCompile Include="math.cpp" />
<ClCompile Include="parser.cpp" /> <ClCompile Include="parser.cpp" />
<ClCompile Include="pch.cpp"> <ClCompile Include="pch.cpp">

View File

@ -84,6 +84,9 @@
<ClCompile Include="zlib\zutil.c"> <ClCompile Include="zlib\zutil.c">
<Filter>Source Files\zlib</Filter> <Filter>Source Files\zlib</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="langid.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="pch.hpp"> <ClInclude Include="pch.hpp">

View File

@ -15,21 +15,21 @@ namespace UnitTests
void langid::from_rfc1766() void langid::from_rfc1766()
{ {
Assert::AreEqual<stdex::langid>(9, stdex::langid_from_rfc1766("en")); Assert::AreEqual<stdex::langid>(9, stdex::langid_from_rfc1766("en"));
Assert::AreEqual<stdex::langid>(1033, stdex::langid_from_rfc1766("en.US")); Assert::AreEqual<stdex::langid>(1033, stdex::langid_from_rfc1766("en-US"));
Assert::AreEqual<stdex::langid>(1033, stdex::langid_from_rfc1766("en_US")); Assert::AreEqual<stdex::langid>(1033, stdex::langid_from_rfc1766("en_US"));
Assert::AreEqual<stdex::langid>(2057, stdex::langid_from_rfc1766("en.GB")); Assert::AreEqual<stdex::langid>(2057, stdex::langid_from_rfc1766("en-GB"));
Assert::AreEqual<stdex::langid>(2057, stdex::langid_from_rfc1766("en_GB")); Assert::AreEqual<stdex::langid>(2057, stdex::langid_from_rfc1766("en_GB"));
Assert::AreEqual<stdex::langid>(9, stdex::langid_from_rfc1766("EN")); Assert::AreEqual<stdex::langid>(9, stdex::langid_from_rfc1766("EN"));
Assert::AreEqual<stdex::langid>(1033, stdex::langid_from_rfc1766("EN.US")); Assert::AreEqual<stdex::langid>(1033, stdex::langid_from_rfc1766("EN-US"));
Assert::AreEqual<stdex::langid>(1033, stdex::langid_from_rfc1766("EN_US")); Assert::AreEqual<stdex::langid>(1033, stdex::langid_from_rfc1766("EN_US"));
Assert::AreEqual<stdex::langid>(2057, stdex::langid_from_rfc1766("EN.GB")); Assert::AreEqual<stdex::langid>(2057, stdex::langid_from_rfc1766("EN-GB"));
Assert::AreEqual<stdex::langid>(2057, stdex::langid_from_rfc1766("EN_GB")); Assert::AreEqual<stdex::langid>(2057, stdex::langid_from_rfc1766("EN_GB"));
Assert::AreEqual<stdex::langid>(1060, stdex::langid_from_rfc1766("sl")); Assert::AreEqual<stdex::langid>(1060, stdex::langid_from_rfc1766("sl"));
Assert::AreEqual<stdex::langid>(1060, stdex::langid_from_rfc1766("sl.SI")); Assert::AreEqual<stdex::langid>(1060, stdex::langid_from_rfc1766("sl-SI"));
Assert::AreEqual<stdex::langid>(1060, stdex::langid_from_rfc1766("sl_SI")); Assert::AreEqual<stdex::langid>(1060, stdex::langid_from_rfc1766("sl_SI"));
Assert::AreEqual<stdex::langid>(1060, stdex::langid_from_rfc1766("SL")); Assert::AreEqual<stdex::langid>(1060, stdex::langid_from_rfc1766("SL"));
Assert::AreEqual<stdex::langid>(1060, stdex::langid_from_rfc1766("SL.SI")); Assert::AreEqual<stdex::langid>(1060, stdex::langid_from_rfc1766("SL-SI"));
Assert::AreEqual<stdex::langid>(1060, stdex::langid_from_rfc1766("SL_SI")); Assert::AreEqual<stdex::langid>(1060, stdex::langid_from_rfc1766("SL_SI"));
} }
} }

View File

@ -31,31 +31,6 @@ namespace stdex
constexpr langid langid_unknown = 127; constexpr langid langid_unknown = 127;
#ifdef _WIN32
///
/// 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 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 /// Parses language name and returns matching language code
/// ///
@ -92,22 +67,22 @@ namespace stdex
{"af", {1078, {}}}, // Afrikaans {"af", {1078, {}}}, // Afrikaans
{"ar", {0x01, // Arabic {"ar", {0x01, // Arabic
{ {
{"ae", 14337}, // Arabic(U.A.E.) {"ae", static_cast<langid>(14337)}, // Arabic(U.A.E.)
{"bh", 15361}, // Arabic(Bahrain) {"bh", static_cast<langid>(15361)}, // Arabic(Bahrain)
{"dz", 5121}, // Arabic(Algeria) {"dz", static_cast<langid>(5121)}, // Arabic(Algeria)
{"eg", 3073}, // Arabic(Egypt) {"eg", static_cast<langid>(3073)}, // Arabic(Egypt)
{"iq", 2049}, // Arabic(Iraq) {"iq", static_cast<langid>(2049)}, // Arabic(Iraq)
{"jo", 11265}, // Arabic(Jordan) {"jo", static_cast<langid>(11265)}, // Arabic(Jordan)
{"kw", 13313}, // Arabic(Kuwait) {"kw", static_cast<langid>(13313)}, // Arabic(Kuwait)
{"lb", 12289}, // Arabic(Lebanon) {"lb", static_cast<langid>(12289)}, // Arabic(Lebanon)
{"ly", 4097}, // Arabic(Libya) {"ly", static_cast<langid>(4097)}, // Arabic(Libya)
{"ma", 6145}, // Arabic(Morocco) {"ma", static_cast<langid>(6145)}, // Arabic(Morocco)
{"om", 8193}, // Arabic(Oman) {"om", static_cast<langid>(8193)}, // Arabic(Oman)
{"qa", 16385}, // Arabic(Qatar) {"qa", static_cast<langid>(16385)}, // Arabic(Qatar)
{"sa", 1025}, // Arabic(Saudi Arabia) {"sa", static_cast<langid>(1025)}, // Arabic(Saudi Arabia)
{"sy", 10241}, // Arabic(Syria) {"sy", static_cast<langid>(10241)}, // Arabic(Syria)
{"tn", 7169}, // Arabic(Tunisia) {"tn", static_cast<langid>(7169)}, // Arabic(Tunisia)
{"ye", 9217}, // Arabic(Yemen) {"ye", static_cast<langid>(9217)}, // Arabic(Yemen)
}}}, }}},
{"be", {1059, {}}}, // Belarusian {"be", {1059, {}}}, // Belarusian
{"bg", {1026, {}}}, // Bulgarian {"bg", {1026, {}}}, // Bulgarian
@ -116,48 +91,48 @@ namespace stdex
{"da", {1030, {}}}, // Danish {"da", {1030, {}}}, // Danish
{"de", {0x07, // German {"de", {0x07, // German
{ {
{"at", 3079}, // German(Austrian) {"at", static_cast<langid>(3079)}, // German(Austrian)
{"ch", 2055}, // German(Swiss) {"ch", static_cast<langid>(2055)}, // German(Swiss)
{"de", 1031}, // German(Germany) {"de", static_cast<langid>(1031)}, // German(Germany)
{"li", 5127}, // German(Liechtenstein) {"li", static_cast<langid>(5127)}, // German(Liechtenstein)
{"lu", 4103}, // German(Luxembourg) {"lu", static_cast<langid>(4103)}, // German(Luxembourg)
}}}, }}},
{"el", {1032, {}}}, // Greek {"el", {1032, {}}}, // Greek
{"en", {0x09, // English {"en", {0x09, // English
{ {
{"au", 3081}, // English(Australian) {"au", static_cast<langid>(3081)}, // English(Australian)
{"bz", 10249}, // English(Belize) {"bz", static_cast<langid>(10249)}, // English(Belize)
{"ca", 4105}, // English(Canadian) {"ca", static_cast<langid>(4105)}, // English(Canadian)
{"ca", 9225}, // English(Caribbean) {"ca", static_cast<langid>(9225)}, // English(Caribbean)
{"gb", 2057}, // English(British) {"gb", static_cast<langid>(2057)}, // English(British)
{"ie", 6153}, // English(Ireland) {"ie", static_cast<langid>(6153)}, // English(Ireland)
{"jm", 8201}, // English(Jamaica) {"jm", static_cast<langid>(8201)}, // English(Jamaica)
{"nz", 5129}, // English(New Zealand) {"nz", static_cast<langid>(5129)}, // English(New Zealand)
{"tt", 11273}, // English(Trinidad) {"tt", static_cast<langid>(11273)}, // English(Trinidad)
{"us", 1033}, // English(United States) {"us", static_cast<langid>(1033)}, // English(United States)
{"za", 7177}, // English(South Africa) {"za", static_cast<langid>(7177)}, // English(South Africa)
}}}, }}},
{"es", {0x0a, // Spanish {"es", {0x0a, // Spanish
{ {
{"ar", 11274}, // Spanish(Argentina) {"ar", static_cast<langid>(11274)}, // Spanish(Argentina)
{"bo", 16394}, // Spanish(Bolivia) {"bo", static_cast<langid>(16394)}, // Spanish(Bolivia)
{"c", 13322}, // Spanish(Chile) {"cl", static_cast<langid>(13322)}, // Spanish(Chile)
{"co", 9226}, // Spanish(Colombia) {"co", static_cast<langid>(9226)}, // Spanish(Colombia)
{"cr", 5130}, // Spanish(Costa Rica) {"cr", static_cast<langid>(5130)}, // Spanish(Costa Rica)
{"do", 7178}, // Spanish(Dominican Republic) {"do", static_cast<langid>(7178)}, // Spanish(Dominican Republic)
{"ec", 12298}, // Spanish(Ecuador) {"ec", static_cast<langid>(12298)}, // Spanish(Ecuador)
{"es", 1034}, // Spanish(Spain) {"es", static_cast<langid>(1034)}, // Spanish(Spain)
{"gt", 4106}, // Spanish(Guatemala) {"gt", static_cast<langid>(4106)}, // Spanish(Guatemala)
{"hn", 18442}, // Spanish(Honduras) {"hn", static_cast<langid>(18442)}, // Spanish(Honduras)
{"mx", 2058}, // Spanish(Mexican) {"mx", static_cast<langid>(2058)}, // Spanish(Mexican)
{"ni", 19466}, // Spanish(Nicaragua) {"ni", static_cast<langid>(19466)}, // Spanish(Nicaragua)
{"pa", 6154}, // Spanish(Panama) {"pa", static_cast<langid>(6154)}, // Spanish(Panama)
{"pe", 10250}, // Spanish(Peru) {"pe", static_cast<langid>(10250)}, // Spanish(Peru)
{"pr", 20490}, // Spanish(Puerto Rico) {"pr", static_cast<langid>(20490)}, // Spanish(Puerto Rico)
{"py", 15370}, // Spanish(Paraguay) {"py", static_cast<langid>(15370)}, // Spanish(Paraguay)
{"sv", 17418}, // Spanish(El Salvador) {"sv", static_cast<langid>(17418)}, // Spanish(El Salvador)
{"uy", 14346}, // Spanish(Uruguay) {"uy", static_cast<langid>(14346)}, // Spanish(Uruguay)
{"ve", 8202}, // Spanish(Venezuela) {"ve", static_cast<langid>(8202)}, // Spanish(Venezuela)
}}}, }}},
{"et", {1061, {}}}, // Estonian {"et", {1061, {}}}, // Estonian
{"eu", {1069, {}}}, // Basque {"eu", {1069, {}}}, // Basque
@ -166,11 +141,11 @@ namespace stdex
{"fo", {1080, {}}}, // Faeroese {"fo", {1080, {}}}, // Faeroese
{"fr", {0x0c, // French {"fr", {0x0c, // French
{ {
{"be", 2060}, // French(Belgian) {"be", static_cast<langid>(2060)}, // French(Belgian)
{"ca", 3084}, // French(Canadian) {"ca", static_cast<langid>(3084)}, // French(Canadian)
{"ch", 4108}, // French(Swiss) {"ch", static_cast<langid>(4108)}, // French(Swiss)
{"fr", 1036}, // French(Luxembourg) {"fr", static_cast<langid>(1036)}, // French(Luxembourg)
{"lu", 5132}, // French(Luxembourg) {"lu", static_cast<langid>(5132)}, // French(Luxembourg)
}}}, }}},
{"gd", {1084, {}}}, // Gaelic(Scots) {"gd", {1084, {}}}, // Gaelic(Scots)
{"he", {1037, {}}}, // Hebrew {"he", {1037, {}}}, // Hebrew
@ -181,15 +156,15 @@ namespace stdex
{"is", {1039, {}}}, // Icelandic {"is", {1039, {}}}, // Icelandic
{"it", {0x10, // Italian {"it", {0x10, // Italian
{ {
{"ch", 2064}, // Italian(Swiss) {"ch", static_cast<langid>(2064)}, // Italian(Swiss)
{"it", 1040}, // Italian(Italy) {"it", static_cast<langid>(1040)}, // Italian(Italy)
}}}, }}},
{"ja", {1041, {}}}, // Japanese {"ja", {1041, {}}}, // Japanese
{"ji", {1085, {}}}, // Yiddish {"ji", {1085, {}}}, // Yiddish
{"ko", {0x12, // Korean {"ko", {0x12, // Korean
{ {
{"johab", 2066}, // Korean(Johab) {"johab", static_cast<langid>(2066)}, // Korean(Johab)
{"kr", 1042}, // Korean(Korea) {"kr", static_cast<langid>(1042)}, // Korean(Korea)
}}}, }}},
{"lt", {1063, {}}}, // Lithuanian {"lt", {1063, {}}}, // Lithuanian
{"lv", {1062, {}}}, // Latvian {"lv", {1062, {}}}, // Latvian
@ -198,30 +173,30 @@ namespace stdex
{"mt", {1082, {}}}, // Maltese {"mt", {1082, {}}}, // Maltese
{"nl", {0x13, // Dutch {"nl", {0x13, // Dutch
{ {
{"be", 2067}, // Dutch(Belgian) {"be", static_cast<langid>(2067)}, // Dutch(Belgian)
{"nl", 1043}, // Dutch(Netherland) {"nl", static_cast<langid>(1043)}, // Dutch(Netherland)
}}}, }}},
{"no", {0x14, // Norwegian {"no", {0x14, // Norwegian
{ {
{"bokmaal", 1044}, // Norwegian(Bokmaal) {"bokmaal", static_cast<langid>(1044)}, // Norwegian(Bokmaal)
{"nynorsk", 2068}, // Norwegian(Nynorsk) {"nynorsk", static_cast<langid>(2068)}, // Norwegian(Nynorsk)
}}}, }}},
{"pl", {1045, {}}}, // Polish {"pl", {1045, {}}}, // Polish
{"pt", {0x16, // Portuguese {"pt", {0x16, // Portuguese
{ {
{"br", 1046}, // Portuguese(Brazil) {"br", static_cast<langid>(1046)}, // Portuguese(Brazil)
{"pt", 2070}, // Portuguese(Portugal) {"pt", static_cast<langid>(2070)}, // Portuguese(Portugal)
}}}, }}},
{"rm", {1047, {}}}, // Rhaeto-Romanic {"rm", {1047, {}}}, // Rhaeto-Romanic
{"ro", {0x18, // Romanian {"ro", {0x18, // Romanian
{ {
{"mo", 2072}, // Romanian(Moldavia) {"mo", static_cast<langid>(2072)}, // Romanian(Moldavia)
{"ro", 1048}, // Romanian(Romania) {"ro", static_cast<langid>(1048)}, // Romanian(Romania)
}}}, }}},
{"ru", {0x19, // Russian {"ru", {0x19, // Russian
{ {
{"mo", 2073}, // Russian(Moldavia) {"mo", static_cast<langid>(2073)}, // Russian(Moldavia)
{"ru", 1049}, // Russian(Russia) {"ru", static_cast<langid>(1049)}, // Russian(Russia)
}}}, }}},
{"sb", {1070, {}}}, // Sorbian {"sb", {1070, {}}}, // Sorbian
{"sk", {1051, {}}}, // Slovak {"sk", {1051, {}}}, // Slovak
@ -229,13 +204,13 @@ namespace stdex
{"sq", {1052, {}}}, // Albanian {"sq", {1052, {}}}, // Albanian
{"sr", {0x1a, // Serbian {"sr", {0x1a, // Serbian
{ {
{"cyrillic", 3098}, // Serbian(Cyrillic) {"cyrillic", static_cast<langid>(3098)}, // Serbian(Cyrillic)
{"latin", 2074}, // Serbian(Latin) {"latin", static_cast<langid>(2074)}, // Serbian(Latin)
}}}, }}},
{"sv", {0x1d, // Swedish {"sv", {0x1d, // Swedish
{ {
{"fi", 2077}, // Swedish(Finland) {"fi", static_cast<langid>(2077)}, // Swedish(Finland)
{"se", 1053}, // Swedish(Sweden) {"se", static_cast<langid>(1053)}, // Swedish(Sweden)
}}}, }}},
{"sx", {1072, {}}}, // Sutu {"sx", {1072, {}}}, // Sutu
{"sz", {1083, {}}}, // Sami(Lappish) {"sz", {1083, {}}}, // Sami(Lappish)
@ -250,10 +225,10 @@ namespace stdex
{"xh", {1076, {}}}, // Xhosa {"xh", {1076, {}}}, // Xhosa
{"zh", {0x04, // Chinese {"zh", {0x04, // Chinese
{ {
{"cn", 2052}, // Chinese(PRC) {"cn", static_cast<langid>(2052)}, // Chinese(PRC)
{"hk", 3076}, // Chinese(Hong Kong) {"hk", static_cast<langid>(3076)}, // Chinese(Hong Kong)
{"sg", 4100}, // Chinese(Singapore) {"sg", static_cast<langid>(4100)}, // Chinese(Singapore)
{"tw", 1028}, // Chinese(Taiwan) {"tw", static_cast<langid>(1028)}, // Chinese(Taiwan)
}}}, }}},
{"zu", {1077, {}}}, // Zulu {"zu", {1077, {}}}, // Zulu
}; };
@ -270,7 +245,6 @@ namespace stdex
} }
return langid_unknown; return langid_unknown;
} }
#endif
} }
#if defined(__GNUC__) #if defined(__GNUC__)