Make locale ordering transitive

The ordering function used to sort the locale data generated for
QLocale attempted to sort the default territory for a given language
and script before other territories, but was too tangled for it to be
obvious this is what it was doing. The result turned out to be
non-transitive. Replace with code that implements the same preference
but only applies it where the result is compatible with transitivity.

This leads to a shuffling of the order of the Serbian-language
locales, which sorts the Cyrillic ones before the Latin ones. This is
consistent with my reading of the CLDR data, which fills in Cyrillic
and Serbia for Serbian; Serbian/Cyrillic/Serbia did previously sort
before all other Serbian variants.

Thanks to Ievgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io> for
discovering the non-transitivity.

Pick-to: 6.2
Change-Id: I0ce9f78e620e714f980f32b85b7100ed0f92ad74
Reviewed-by: Ievgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
This commit is contained in:
Edward Welbourne 2021-07-06 12:33:05 +02:00
parent 41a5480cc7
commit 7dec56c6a5
5 changed files with 81 additions and 72 deletions

View File

@ -77,7 +77,7 @@ static const int ImperialMeasurementSystemsCount =
// GENERATED PART STARTS HERE
/*
This part of the file was generated on 2021-04-09 from the
This part of the file was generated on 2021-07-06 from the
Common Locale Data Repository v39
http://www.unicode.org/cldr/
@ -1641,13 +1641,13 @@ static const QLocaleData locale_data[] = {
{ 249, 66, 117, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 13, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Sardinian/Latin/Italy
{ 251, 66, 160, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,16712,16712,16766,16766,16793,16793, 0, 0, 0, 5, 22, 272, 4324, 0, 0, 5023, 4690, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 54, 54, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 21, 4, 0, 4, 10, {77,90,78}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Sena/Latin/Mozambique
{ 252, 27, 207, 0, 0, 117, 117, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0,16806,16806,16857,16857, 2341, 2341, 589, 608, 916, 5, 22, 303, 4345, 19, 24, 5027, 5033, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 51, 51, 27, 27, 13, 13, 9, 8, 7, 17, 23, 3, 12, 5, 7, 6, 6, {82,83,68}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Serbian/Cyrillic/Serbia
{ 252, 66, 29, 0, 0, 110, 110, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0, 2149, 2149, 2206,16884, 2233, 2233, 598, 616, 216, 5, 22, 133, 575, 19, 24, 5039, 581, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 57, 57, 27, 27, 13, 13, 11, 8, 7, 17, 23, 2, 40, 5, 7, 6, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Bosnia And Herzegovina
{ 252, 66, 207, 0, 0, 110, 110, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0,16911,16911,16884,16884, 2233, 2233, 609, 616, 216, 5, 22, 303, 4357, 19, 24, 5039, 5045, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 53, 53, 27, 27, 13, 13, 9, 8, 7, 17, 23, 3, 12, 5, 7, 6, 6, {82,83,68}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Serbia
{ 252, 27, 29, 0, 0, 117, 117, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0, 2259, 2259, 2314,16857, 2341, 2341, 101, 608, 916, 5, 22, 135, 4369, 19, 24, 5027, 608, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 55, 55, 27, 27, 13, 13, 11, 8, 7, 17, 23, 2, 40, 5, 7, 6, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Cyrillic/Bosnia And Herzegovina
{ 252, 27, 126, 0, 0, 117, 117, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0,16806,16806,16857,16857, 2341, 2341, 589, 608, 916, 5, 22, 13, 4409, 19, 24, 5027, 5051, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 51, 51, 27, 27, 13, 13, 9, 8, 7, 17, 23, 1, 4, 5, 7, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Cyrillic/Kosovo
{ 252, 27, 157, 0, 0, 117, 117, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0,16964,16964,16857,16857, 2341, 2341, 101, 608, 916, 5, 22, 13, 4409, 19, 24, 5027, 5057, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 54, 54, 27, 27, 13, 13, 11, 8, 7, 17, 23, 1, 4, 5, 7, 6, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Cyrillic/Montenegro
{ 252, 66, 126, 0, 0, 110, 110, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0,16911,16911,16884,16884, 2233, 2233, 609, 616, 216, 5, 22, 13, 4413, 19, 24, 5039, 5066, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 53, 53, 27, 27, 13, 13, 9, 8, 7, 17, 23, 1, 4, 5, 7, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Kosovo
{ 252, 66, 157, 0, 0, 110, 110, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0,17018,17018,16884,16884, 2233, 2233, 598, 616, 216, 5, 22, 13, 4413, 19, 24, 5039, 5072, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 56, 56, 27, 27, 13, 13, 11, 8, 7, 17, 23, 1, 4, 5, 7, 6, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Montenegro
{ 252, 27, 29, 0, 0, 117, 117, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0, 2259, 2259, 2314,16857, 2341, 2341, 101, 608, 916, 5, 22, 135, 4357, 19, 24, 5027, 608, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 55, 55, 27, 27, 13, 13, 11, 8, 7, 17, 23, 2, 40, 5, 7, 6, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Cyrillic/Bosnia And Herzegovina
{ 252, 27, 126, 0, 0, 117, 117, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0,16806,16806,16857,16857, 2341, 2341, 589, 608, 916, 5, 22, 13, 4397, 19, 24, 5027, 5039, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 51, 51, 27, 27, 13, 13, 9, 8, 7, 17, 23, 1, 4, 5, 7, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Cyrillic/Kosovo
{ 252, 27, 157, 0, 0, 117, 117, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0,16884,16884,16857,16857, 2341, 2341, 101, 608, 916, 5, 22, 13, 4397, 19, 24, 5027, 5045, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 54, 54, 27, 27, 13, 13, 11, 8, 7, 17, 23, 1, 4, 5, 7, 6, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Cyrillic/Montenegro
{ 252, 66, 29, 0, 0, 110, 110, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0, 2149, 2149, 2206,16938, 2233, 2233, 598, 616, 216, 5, 22, 133, 575, 19, 24, 5054, 581, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 57, 57, 27, 27, 13, 13, 11, 8, 7, 17, 23, 2, 40, 5, 7, 6, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Bosnia And Herzegovina
{ 252, 66, 126, 0, 0, 110, 110, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0,16965,16965,16938,16938, 2233, 2233, 609, 616, 216, 5, 22, 13, 4401, 19, 24, 5054, 5060, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 53, 53, 27, 27, 13, 13, 9, 8, 7, 17, 23, 1, 4, 5, 7, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Kosovo
{ 252, 66, 157, 0, 0, 110, 110, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0,17018,17018,16938,16938, 2233, 2233, 598, 616, 216, 5, 22, 13, 4401, 19, 24, 5054, 5066, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 56, 56, 27, 27, 13, 13, 11, 8, 7, 17, 23, 1, 4, 5, 7, 6, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Montenegro
{ 252, 66, 207, 0, 0, 110, 110, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0,16965,16965,16938,16938, 2233, 2233, 609, 616, 216, 5, 22, 303, 4405, 19, 24, 5054, 5075, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 53, 53, 27, 27, 13, 13, 9, 8, 7, 17, 23, 3, 12, 5, 7, 6, 6, {82,83,68}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Serbia
{ 253, 66, 230, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,17074,17074,17136,17136,17163,17163, 618, 624, 0, 5, 22, 118, 4417, 0, 0, 5081, 2025, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 62, 62, 27, 27, 13, 13, 5, 8, 4, 17, 23, 3, 20, 4, 0, 9, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Shambala/Latin/Tanzania
{ 254, 66, 261, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 11, 11, 13, 13, 27, 44, 0, 0,17176,17176,17230,17230,17257,17257, 0, 0, 0, 5, 22, 145, 4437, 9, 13, 5090, 2191, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 54, 54, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 15, 4, 6, 8, 8, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Shona/Latin/Zimbabwe
{ 255, 141, 50, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 10, 22,17270,17270,17297,17297,17317,17317, 623, 632, 0, 5, 22, 151, 0, 4, 0, 5098, 5101, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 27, 27, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 3, 2, {67,78,89}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Sichuan Yi/Yi/China
@ -2799,13 +2799,13 @@ static const char16_t days_data[] = {
0x430, 0x43a, 0x3b, 0x443, 0x442, 0x43e, 0x440, 0x430, 0x43a, 0x3b, 0x441, 0x440, 0x435, 0x434, 0x430, 0x3b, 0x447, 0x435, 0x442, 0x432,
0x440, 0x442, 0x430, 0x43a, 0x3b, 0x43f, 0x435, 0x442, 0x430, 0x43a, 0x3b, 0x441, 0x443, 0x431, 0x43e, 0x442, 0x430, 0x43d, 0x435, 0x434,
0x3b, 0x43f, 0x43e, 0x43d, 0x3b, 0x443, 0x442, 0x43e, 0x3b, 0x441, 0x440, 0x435, 0x3b, 0x447, 0x435, 0x442, 0x3b, 0x43f, 0x435, 0x442,
0x3b, 0x441, 0x443, 0x431, 0x6e, 0x65, 0x64, 0x3b, 0x70, 0x6f, 0x6e, 0x3b, 0x75, 0x74, 0x6f, 0x3b, 0x73, 0x72, 0x65, 0x3b,
0x10d, 0x65, 0x74, 0x3b, 0x70, 0x65, 0x74, 0x3b, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x64, 0x65, 0x6c, 0x6a, 0x61, 0x3b, 0x70,
0x6f, 0x6e, 0x65, 0x64, 0x65, 0x6c, 0x6a, 0x61, 0x6b, 0x3b, 0x75, 0x74, 0x6f, 0x72, 0x61, 0x6b, 0x3b, 0x73, 0x72, 0x65,
0x64, 0x61, 0x3b, 0x10d, 0x65, 0x74, 0x76, 0x72, 0x74, 0x61, 0x6b, 0x3b, 0x70, 0x65, 0x74, 0x61, 0x6b, 0x3b, 0x73, 0x75,
0x62, 0x6f, 0x74, 0x61, 0x43d, 0x435, 0x434, 0x458, 0x435, 0x459, 0x430, 0x3b, 0x43f, 0x43e, 0x43d, 0x435, 0x434, 0x435, 0x459, 0x430,
0x3b, 0x441, 0x443, 0x431, 0x43d, 0x435, 0x434, 0x458, 0x435, 0x459, 0x430, 0x3b, 0x43f, 0x43e, 0x43d, 0x435, 0x434, 0x435, 0x459, 0x430,
0x43a, 0x3b, 0x443, 0x442, 0x43e, 0x440, 0x430, 0x43a, 0x3b, 0x441, 0x440, 0x438, 0x458, 0x435, 0x434, 0x430, 0x3b, 0x447, 0x435, 0x442,
0x432, 0x440, 0x442, 0x430, 0x43a, 0x3b, 0x43f, 0x435, 0x442, 0x430, 0x43a, 0x3b, 0x441, 0x443, 0x431, 0x43e, 0x442, 0x430, 0x6e, 0x65,
0x64, 0x3b, 0x70, 0x6f, 0x6e, 0x3b, 0x75, 0x74, 0x6f, 0x3b, 0x73, 0x72, 0x65, 0x3b, 0x10d, 0x65, 0x74, 0x3b, 0x70, 0x65,
0x74, 0x3b, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x64, 0x65, 0x6c, 0x6a, 0x61, 0x3b, 0x70, 0x6f, 0x6e, 0x65, 0x64, 0x65, 0x6c,
0x6a, 0x61, 0x6b, 0x3b, 0x75, 0x74, 0x6f, 0x72, 0x61, 0x6b, 0x3b, 0x73, 0x72, 0x65, 0x64, 0x61, 0x3b, 0x10d, 0x65, 0x74,
0x76, 0x72, 0x74, 0x61, 0x6b, 0x3b, 0x70, 0x65, 0x74, 0x61, 0x6b, 0x3b, 0x73, 0x75, 0x62, 0x6f, 0x74, 0x61, 0x6e, 0x65,
0x64, 0x6a, 0x65, 0x6c, 0x6a, 0x61, 0x3b, 0x70, 0x6f, 0x6e, 0x65, 0x64, 0x65, 0x6c, 0x6a, 0x61, 0x6b, 0x3b, 0x75, 0x74,
0x6f, 0x72, 0x61, 0x6b, 0x3b, 0x73, 0x72, 0x69, 0x6a, 0x65, 0x64, 0x61, 0x3b, 0x10d, 0x65, 0x74, 0x76, 0x72, 0x74, 0x61,
0x6b, 0x3b, 0x70, 0x65, 0x74, 0x61, 0x6b, 0x3b, 0x73, 0x75, 0x62, 0x6f, 0x74, 0x61, 0x4a, 0x75, 0x6d, 0x61, 0x61, 0x70,
@ -3446,10 +3446,10 @@ static const char16_t currency_display_name_data[] = {
0x20, 0x79, 0x61, 0x20, 0x54, 0x61, 0x6e, 0x73, 0x61, 0x6e, 0x69, 0x79, 0x61, 0x92d, 0x93e, 0x930, 0x924, 0x940, 0x92f, 0x20,
0x930, 0x942, 0x92a, 0x94d, 0x92f, 0x915, 0x92e, 0x94d, 0x1c65, 0x1c64, 0x1c67, 0x1c5a, 0x1c5b, 0x20, 0x1c68, 0x1c6e, 0x1c71, 0x1c5f, 0x1c5c, 0x20,
0x1c74, 0x1c5f, 0x1c60, 0x1c5f, 0x4d, 0x65, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x64, 0x65, 0x20, 0x4d, 0x6f, 0xe7, 0x61, 0x6d,
0x62, 0x69, 0x71, 0x75, 0x65, 0x421, 0x440, 0x43f, 0x441, 0x43a, 0x438, 0x20, 0x434, 0x438, 0x43d, 0x430, 0x440, 0x53, 0x72, 0x70,
0x73, 0x6b, 0x69, 0x20, 0x64, 0x69, 0x6e, 0x61, 0x72, 0x411, 0x43e, 0x441, 0x430, 0x43d, 0x441, 0x43a, 0x43e, 0x445, 0x435, 0x440,
0x446, 0x435, 0x433, 0x43e, 0x432, 0x430, 0x447, 0x43a, 0x430, 0x20, 0x43a, 0x43e, 0x43d, 0x432, 0x435, 0x440, 0x442, 0x438, 0x431, 0x438,
0x43b, 0x43d, 0x430, 0x20, 0x43c, 0x430, 0x440, 0x43a, 0x430, 0x415, 0x432, 0x440, 0x43e, 0x45, 0x76, 0x72, 0x6f, 0x73, 0x68, 0x69,
0x62, 0x69, 0x71, 0x75, 0x65, 0x421, 0x440, 0x43f, 0x441, 0x43a, 0x438, 0x20, 0x434, 0x438, 0x43d, 0x430, 0x440, 0x411, 0x43e, 0x441,
0x430, 0x43d, 0x441, 0x43a, 0x43e, 0x445, 0x435, 0x440, 0x446, 0x435, 0x433, 0x43e, 0x432, 0x430, 0x447, 0x43a, 0x430, 0x20, 0x43a, 0x43e,
0x43d, 0x432, 0x435, 0x440, 0x442, 0x438, 0x431, 0x438, 0x43b, 0x43d, 0x430, 0x20, 0x43c, 0x430, 0x440, 0x43a, 0x430, 0x415, 0x432, 0x440,
0x43e, 0x45, 0x76, 0x72, 0x6f, 0x53, 0x72, 0x70, 0x73, 0x6b, 0x69, 0x20, 0x64, 0x69, 0x6e, 0x61, 0x72, 0x73, 0x68, 0x69,
0x6c, 0x69, 0x6e, 0x67, 0x69, 0x20, 0x79, 0x61, 0x20, 0x54, 0x61, 0x6e, 0x7a, 0x61, 0x6e, 0x69, 0x61, 0x44, 0x6f, 0x72,
0x61, 0x20, 0x72, 0x65, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x6b, 0x61, 0x67e, 0x627, 0x6aa, 0x633, 0x62a, 0x627, 0x646, 0x64a,
0x20, 0x631, 0x67e, 0x64a, 0x939, 0x93f, 0x902, 0x926, 0x941, 0x938, 0x94d, 0x924, 0x93e, 0x928, 0x940, 0x20, 0x930, 0x941, 0x92a, 0x92f,
@ -3761,9 +3761,9 @@ static const char16_t endonyms_data[] = {
0xea, 0x73, 0x65, 0x20, 0x74, 0xee, 0x20, 0x42, 0xea, 0x61, 0x66, 0x72, 0xee, 0x6b, 0x61, 0x49, 0x73, 0x68, 0x69, 0x73,
0x61, 0x6e, 0x67, 0x75, 0x54, 0x61, 0x6e, 0x73, 0x61, 0x6e, 0x69, 0x79, 0x61, 0x938, 0x902, 0x938, 0x94d, 0x915, 0x943, 0x924,
0x20, 0x92d, 0x93e, 0x937, 0x93e, 0x92d, 0x93e, 0x930, 0x924, 0x903, 0x1c65, 0x1c5f, 0x1c71, 0x1c5b, 0x1c5f, 0x1c72, 0x1c64, 0x1c64, 0x1c71, 0x1c70,
0x1c64, 0x1c6d, 0x1c5f, 0x73, 0x65, 0x6e, 0x61, 0x441, 0x440, 0x43f, 0x441, 0x43a, 0x438, 0x421, 0x440, 0x431, 0x438, 0x458, 0x430, 0x73,
0x72, 0x70, 0x73, 0x6b, 0x69, 0x53, 0x72, 0x62, 0x69, 0x6a, 0x61, 0x41a, 0x43e, 0x441, 0x43e, 0x432, 0x43e, 0x426, 0x440, 0x43d,
0x430, 0x20, 0x413, 0x43e, 0x440, 0x430, 0x4b, 0x6f, 0x73, 0x6f, 0x76, 0x6f, 0x43, 0x72, 0x6e, 0x61, 0x20, 0x47, 0x6f, 0x72,
0x1c64, 0x1c6d, 0x1c5f, 0x73, 0x65, 0x6e, 0x61, 0x441, 0x440, 0x43f, 0x441, 0x43a, 0x438, 0x421, 0x440, 0x431, 0x438, 0x458, 0x430, 0x41a,
0x43e, 0x441, 0x43e, 0x432, 0x43e, 0x426, 0x440, 0x43d, 0x430, 0x20, 0x413, 0x43e, 0x440, 0x430, 0x73, 0x72, 0x70, 0x73, 0x6b, 0x69,
0x4b, 0x6f, 0x73, 0x6f, 0x76, 0x6f, 0x43, 0x72, 0x6e, 0x61, 0x20, 0x47, 0x6f, 0x72, 0x61, 0x53, 0x72, 0x62, 0x69, 0x6a,
0x61, 0x4b, 0x69, 0x73, 0x68, 0x61, 0x6d, 0x62, 0x61, 0x61, 0x63, 0x68, 0x69, 0x53, 0x68, 0x6f, 0x6e, 0x61, 0xa188, 0xa320,
0xa259, 0xa34f, 0xa1e9, 0x633, 0x646, 0x68c, 0x64a, 0x67e, 0x627, 0x6aa, 0x633, 0x62a, 0x627, 0x646, 0x938, 0x93f, 0x928, 0x94d, 0x927, 0x940,
0xdc3, 0xdd2, 0xd82, 0xdc4, 0xdbd, 0xdc1, 0xdca, 0x200d, 0xdbb, 0xdd3, 0x20, 0xdbd, 0xd82, 0xd9a, 0xdcf, 0xdc0, 0x73, 0x6c, 0x6f, 0x76,

View File

@ -59,7 +59,7 @@ QT_BEGIN_NAMESPACE
// GENERATED PART STARTS HERE
/*
This part of the file was generated on 2021-04-09 from the
This part of the file was generated on 2021-07-06 from the
Common Locale Data Repository v39
http://www.unicode.org/cldr/
@ -561,13 +561,13 @@ static const QCalendarLocale locale_data[] = {
{ 249, 66, 117, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Sardinian/Latin/Italy
{ 251, 66, 160, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Sena/Latin/Mozambique
{ 252, 27, 207, 1032, 1122, 1219, 1219, 184, 184, 90, 97, 69, 69, 26, 26 },// Serbian/Cyrillic/Serbia
{ 252, 66, 29, 7959, 8053, 8150, 8150, 184, 184, 94, 97, 72, 72, 26, 26 },// Serbian/Latin/Bosnia And Herzegovina
{ 252, 66, 207, 7959, 8053, 8150, 8150, 184, 184, 94, 97, 72, 72, 26, 26 },// Serbian/Latin/Serbia
{ 252, 27, 29, 1032, 1122, 1219, 1219, 184, 184, 90, 97, 69, 69, 26, 26 },// Serbian/Cyrillic/Bosnia And Herzegovina
{ 252, 27, 126, 1032, 1122, 1219, 1219, 184, 184, 90, 97, 69, 69, 26, 26 },// Serbian/Cyrillic/Kosovo
{ 252, 27, 157, 1032, 1122, 1219, 1219, 184, 184, 90, 97, 69, 69, 26, 26 },// Serbian/Cyrillic/Montenegro
{ 252, 66, 29, 7959, 8053, 8150, 8150, 184, 184, 94, 97, 72, 72, 26, 26 },// Serbian/Latin/Bosnia And Herzegovina
{ 252, 66, 126, 7959, 8053, 8150, 8150, 184, 184, 94, 97, 72, 72, 26, 26 },// Serbian/Latin/Kosovo
{ 252, 66, 157, 7959, 8053, 8150, 8150, 184, 184, 94, 97, 72, 72, 26, 26 },// Serbian/Latin/Montenegro
{ 252, 66, 207, 7959, 8053, 8150, 8150, 184, 184, 94, 97, 72, 72, 26, 26 },// Serbian/Latin/Serbia
{ 253, 66, 230, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Shambala/Latin/Tanzania
{ 254, 66, 261, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Shona/Latin/Zimbabwe
{ 255, 141, 50, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Sichuan Yi/Yi/China

View File

@ -59,7 +59,7 @@ QT_BEGIN_NAMESPACE
// GENERATED PART STARTS HERE
/*
This part of the file was generated on 2021-04-09 from the
This part of the file was generated on 2021-07-06 from the
Common Locale Data Repository v39
http://www.unicode.org/cldr/
@ -561,13 +561,13 @@ static const QCalendarLocale locale_data[] = {
{ 249, 66, 117, 0, 0, 0, 0, 153, 153, 83, 83, 83, 83, 26, 26 },// Sardinian/Latin/Italy
{ 251, 66, 160, 0, 0, 0, 0, 153, 153, 83, 83, 83, 83, 26, 26 },// Sena/Latin/Mozambique
{ 252, 27, 207, 447, 447, 447, 447, 153, 153, 80, 80, 80, 80, 26, 26 },// Serbian/Cyrillic/Serbia
{ 252, 66, 29, 3513, 3513, 3513, 3513, 153, 153, 80, 80, 80, 80, 26, 26 },// Serbian/Latin/Bosnia And Herzegovina
{ 252, 66, 207, 3513, 3513, 3513, 3513, 153, 153, 80, 80, 80, 80, 26, 26 },// Serbian/Latin/Serbia
{ 252, 27, 29, 447, 447, 447, 447, 153, 153, 80, 80, 80, 80, 26, 26 },// Serbian/Cyrillic/Bosnia And Herzegovina
{ 252, 27, 126, 447, 447, 447, 447, 153, 153, 80, 80, 80, 80, 26, 26 },// Serbian/Cyrillic/Kosovo
{ 252, 27, 157, 447, 447, 447, 447, 153, 153, 80, 80, 80, 80, 26, 26 },// Serbian/Cyrillic/Montenegro
{ 252, 66, 29, 3513, 3513, 3513, 3513, 153, 153, 80, 80, 80, 80, 26, 26 },// Serbian/Latin/Bosnia And Herzegovina
{ 252, 66, 126, 3513, 3513, 3513, 3513, 153, 153, 80, 80, 80, 80, 26, 26 },// Serbian/Latin/Kosovo
{ 252, 66, 157, 3513, 3513, 3513, 3513, 153, 153, 80, 80, 80, 80, 26, 26 },// Serbian/Latin/Montenegro
{ 252, 66, 207, 3513, 3513, 3513, 3513, 153, 153, 80, 80, 80, 80, 26, 26 },// Serbian/Latin/Serbia
{ 253, 66, 230, 0, 0, 0, 0, 153, 153, 83, 83, 83, 83, 26, 26 },// Shambala/Latin/Tanzania
{ 254, 66, 261, 0, 0, 0, 0, 153, 153, 83, 83, 83, 83, 26, 26 },// Shona/Latin/Zimbabwe
{ 255, 141, 50, 0, 0, 0, 0, 153, 153, 83, 83, 83, 83, 26, 26 },// Sichuan Yi/Yi/China

View File

@ -59,8 +59,8 @@ QT_BEGIN_NAMESPACE
// GENERATED PART STARTS HERE
/*
This part of the file was generated on 2021-03-12 from the
Common Locale Data Repository v38
This part of the file was generated on 2021-07-06 from the
Common Locale Data Repository v39
http://www.unicode.org/cldr/
@ -561,13 +561,13 @@ static const QCalendarLocale locale_data[] = {
{ 249, 66, 117, 181, 181, 181, 181, 155, 155, 47, 47, 47, 47, 26, 26 },// Sardinian/Latin/Italy
{ 251, 66, 160,31965,31965,32052,32052, 132, 132, 87, 87, 47, 47, 23, 23 },// Sena/Latin/Mozambique
{ 252, 27, 207,32099,32099,32179,32179, 5154, 5154, 80, 80, 47, 47, 23, 23 },// Serbian/Cyrillic/Serbia
{ 252, 66, 29,32226,32226,32306,32306, 5002, 5002, 80, 80, 47, 47, 23, 23 },// Serbian/Latin/Bosnia And Herzegovina
{ 252, 66, 207,32226,32226,32306,32306, 5002, 5002, 80, 80, 47, 47, 23, 23 },// Serbian/Latin/Serbia
{ 252, 27, 29,32099,32099,32179,32179, 5154, 5154, 80, 80, 47, 47, 23, 23 },// Serbian/Cyrillic/Bosnia And Herzegovina
{ 252, 27, 126,32099,32099,32353,32353, 5154, 5154, 80, 80, 49, 49, 23, 23 },// Serbian/Cyrillic/Kosovo
{ 252, 27, 157,32099,32099,32353,32353, 5154, 5154, 80, 80, 49, 49, 23, 23 },// Serbian/Cyrillic/Montenegro
{ 252, 66, 126,32226,32226,32402,32402, 5002, 5002, 80, 80, 49, 49, 23, 23 },// Serbian/Latin/Kosovo
{ 252, 66, 157,32226,32226,32402,32402, 5002, 5002, 80, 80, 49, 49, 23, 23 },// Serbian/Latin/Montenegro
{ 252, 27, 126,32099,32099,32226,32226, 5154, 5154, 80, 80, 49, 49, 23, 23 },// Serbian/Cyrillic/Kosovo
{ 252, 27, 157,32099,32099,32226,32226, 5154, 5154, 80, 80, 49, 49, 23, 23 },// Serbian/Cyrillic/Montenegro
{ 252, 66, 29,32275,32275,32355,32355, 5002, 5002, 80, 80, 47, 47, 23, 23 },// Serbian/Latin/Bosnia And Herzegovina
{ 252, 66, 126,32275,32275,32402,32402, 5002, 5002, 80, 80, 49, 49, 23, 23 },// Serbian/Latin/Kosovo
{ 252, 66, 157,32275,32275,32402,32402, 5002, 5002, 80, 80, 49, 49, 23, 23 },// Serbian/Latin/Montenegro
{ 252, 66, 207,32275,32275,32355,32355, 5002, 5002, 80, 80, 47, 47, 23, 23 },// Serbian/Latin/Serbia
{ 253, 66, 230,32451,32451,22360,22360, 132, 132, 83, 83, 47, 47, 23, 23 },// Shambala/Latin/Tanzania
{ 254, 66, 261,32534,32534,32633,32633,32680,32680, 99, 99, 47, 47, 23, 23 },// Shona/Latin/Zimbabwe
{ 255, 141, 50,32703,32703,32703,32703, 155, 155, 37, 37, 37, 37, 26, 26 },// Sichuan Yi/Yi/China
@ -2303,16 +2303,16 @@ static const char16_t months_data[] = {
0x440, 0x3b, 0x43d, 0x43e, 0x432, 0x435, 0x43c, 0x431, 0x430, 0x440, 0x3b, 0x434, 0x435, 0x446, 0x435, 0x43c, 0x431, 0x430, 0x440, 0x458,
0x430, 0x43d, 0x3b, 0x444, 0x435, 0x431, 0x3b, 0x43c, 0x430, 0x440, 0x3b, 0x430, 0x43f, 0x440, 0x3b, 0x43c, 0x430, 0x458, 0x3b, 0x458,
0x443, 0x43d, 0x3b, 0x458, 0x443, 0x43b, 0x3b, 0x430, 0x432, 0x433, 0x3b, 0x441, 0x435, 0x43f, 0x3b, 0x43e, 0x43a, 0x442, 0x3b, 0x43d,
0x43e, 0x432, 0x3b, 0x434, 0x435, 0x446, 0x6a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x3b, 0x66, 0x65, 0x62, 0x72, 0x75, 0x61, 0x72,
0x3b, 0x6d, 0x61, 0x72, 0x74, 0x3b, 0x61, 0x70, 0x72, 0x69, 0x6c, 0x3b, 0x6d, 0x61, 0x6a, 0x3b, 0x6a, 0x75, 0x6e, 0x3b,
0x6a, 0x75, 0x6c, 0x3b, 0x61, 0x76, 0x67, 0x75, 0x73, 0x74, 0x3b, 0x73, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62, 0x61, 0x72,
0x3b, 0x6f, 0x6b, 0x74, 0x6f, 0x62, 0x61, 0x72, 0x3b, 0x6e, 0x6f, 0x76, 0x65, 0x6d, 0x62, 0x61, 0x72, 0x3b, 0x64, 0x65,
0x63, 0x65, 0x6d, 0x62, 0x61, 0x72, 0x6a, 0x61, 0x6e, 0x3b, 0x66, 0x65, 0x62, 0x3b, 0x6d, 0x61, 0x72, 0x3b, 0x61, 0x70,
0x72, 0x3b, 0x6d, 0x61, 0x6a, 0x3b, 0x6a, 0x75, 0x6e, 0x3b, 0x6a, 0x75, 0x6c, 0x3b, 0x61, 0x76, 0x67, 0x3b, 0x73, 0x65,
0x70, 0x3b, 0x6f, 0x6b, 0x74, 0x3b, 0x6e, 0x6f, 0x76, 0x3b, 0x64, 0x65, 0x63, 0x458, 0x430, 0x43d, 0x3b, 0x444, 0x435, 0x431,
0x3b, 0x43c, 0x430, 0x440, 0x442, 0x3b, 0x430, 0x43f, 0x440, 0x3b, 0x43c, 0x430, 0x458, 0x3b, 0x458, 0x443, 0x43d, 0x3b, 0x458, 0x443,
0x43b, 0x3b, 0x430, 0x432, 0x433, 0x3b, 0x441, 0x435, 0x43f, 0x442, 0x3b, 0x43e, 0x43a, 0x442, 0x3b, 0x43d, 0x43e, 0x432, 0x3b, 0x434,
0x435, 0x446, 0x6a, 0x61, 0x6e, 0x3b, 0x66, 0x65, 0x62, 0x3b, 0x6d, 0x61, 0x72, 0x74, 0x3b, 0x61, 0x70, 0x72, 0x3b, 0x6d,
0x43e, 0x432, 0x3b, 0x434, 0x435, 0x446, 0x458, 0x430, 0x43d, 0x3b, 0x444, 0x435, 0x431, 0x3b, 0x43c, 0x430, 0x440, 0x442, 0x3b, 0x430,
0x43f, 0x440, 0x3b, 0x43c, 0x430, 0x458, 0x3b, 0x458, 0x443, 0x43d, 0x3b, 0x458, 0x443, 0x43b, 0x3b, 0x430, 0x432, 0x433, 0x3b, 0x441,
0x435, 0x43f, 0x442, 0x3b, 0x43e, 0x43a, 0x442, 0x3b, 0x43d, 0x43e, 0x432, 0x3b, 0x434, 0x435, 0x446, 0x6a, 0x61, 0x6e, 0x75, 0x61,
0x72, 0x3b, 0x66, 0x65, 0x62, 0x72, 0x75, 0x61, 0x72, 0x3b, 0x6d, 0x61, 0x72, 0x74, 0x3b, 0x61, 0x70, 0x72, 0x69, 0x6c,
0x3b, 0x6d, 0x61, 0x6a, 0x3b, 0x6a, 0x75, 0x6e, 0x3b, 0x6a, 0x75, 0x6c, 0x3b, 0x61, 0x76, 0x67, 0x75, 0x73, 0x74, 0x3b,
0x73, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62, 0x61, 0x72, 0x3b, 0x6f, 0x6b, 0x74, 0x6f, 0x62, 0x61, 0x72, 0x3b, 0x6e, 0x6f,
0x76, 0x65, 0x6d, 0x62, 0x61, 0x72, 0x3b, 0x64, 0x65, 0x63, 0x65, 0x6d, 0x62, 0x61, 0x72, 0x6a, 0x61, 0x6e, 0x3b, 0x66,
0x65, 0x62, 0x3b, 0x6d, 0x61, 0x72, 0x3b, 0x61, 0x70, 0x72, 0x3b, 0x6d, 0x61, 0x6a, 0x3b, 0x6a, 0x75, 0x6e, 0x3b, 0x6a,
0x75, 0x6c, 0x3b, 0x61, 0x76, 0x67, 0x3b, 0x73, 0x65, 0x70, 0x3b, 0x6f, 0x6b, 0x74, 0x3b, 0x6e, 0x6f, 0x76, 0x3b, 0x64,
0x65, 0x63, 0x6a, 0x61, 0x6e, 0x3b, 0x66, 0x65, 0x62, 0x3b, 0x6d, 0x61, 0x72, 0x74, 0x3b, 0x61, 0x70, 0x72, 0x3b, 0x6d,
0x61, 0x6a, 0x3b, 0x6a, 0x75, 0x6e, 0x3b, 0x6a, 0x75, 0x6c, 0x3b, 0x61, 0x76, 0x67, 0x3b, 0x73, 0x65, 0x70, 0x74, 0x3b,
0x6f, 0x6b, 0x74, 0x3b, 0x6e, 0x6f, 0x76, 0x3b, 0x64, 0x65, 0x63, 0x4a, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x69, 0x3b, 0x46,
0x65, 0x62, 0x6c, 0x75, 0x61, 0x6c, 0x69, 0x3b, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x3b, 0x41, 0x70, 0x6c, 0x69, 0x6c, 0x69,

View File

@ -1,7 +1,7 @@
#!/usr/bin/env python2
#############################################################################
##
## Copyright (C) 2020 The Qt Company Ltd.
## Copyright (C) 2021 The Qt Company Ltd.
## Contact: https://www.qt.io/licensing/
##
## This file is part of the test suite of the Qt Toolkit.
@ -39,40 +39,49 @@ import datetime
from qlocalexml import QLocaleXmlReader
from localetools import unicode2hex, wrap_list, Error, Transcriber, SourceFileEditor
def compareLocaleKeys(key1, key2):
if key1 == key2:
def compareLocaleKeys(left, right):
"""Compares two (language, script, territory) triples.
Returns a negative value if left should sort before right,
positive if left should sort after right and zero if they are
equal.
Loosely, it sorts by (language, script, territory) *but* sorts a
triple with the default territory for its language and script
before all other triples for that language, unless they meet the
same condition. In the case of the same language in two scripts,
if just one triple does have its default territory then it wins;
but if both have their respective default the special treatment of
default territory is skipped."""
# TODO: study the relationship between this and CLDR's likely
# sub-tags algorithm. Work out how locale sort-order impacts
# QLocale's likely sub-tag matching algorithms. Make sure this is
# sorting in an order compatible with those algorithms.
# TODO: should we compare territory before or after script ?
if left == right:
return 0
if key1[0] != key2[0]: # First sort by language:
return key1[0] - key2[0]
if left[0] != right[0]: # First sort by language:
return left[0] - right[0]
defaults = compareLocaleKeys.default_map
# maps {(language, script): territory} by ID
try:
territory = defaults[key1[:2]]
except KeyError:
pass
else:
if key1[2] == territory:
return -1
if key2[2] == territory:
leftLand = defaults.get(left[:2])
rightLand = defaults.get(right[:2])
# If just one matches its default territory, it wins:
if leftLand is None or left[2] != leftLand:
if rightLand is not None and right[2] == rightLand:
return 1
# else: Neither matches
elif rightLand is None or right[2] != rightLand:
return -1
# else: Both match
if key1[1] == key2[1]:
return key1[2] - key2[2]
try:
territory = defaults[key2[:2]]
except KeyError:
pass
else:
if key2[2] == territory:
return 1
if key1[2] == territory:
return -1
return key1[1] - key2[1]
# Compare script first, territory after:
return left[1] - right[1] or left[2] - right[2]
class StringDataToken:
def __init__(self, index, length, bits):