for language, tags in sorted (ot.from_bcp_47.items (), key=lambda i: (-len (i[0]), i[0])):
lt = LanguageTag (language)
- if len (lt.subtags) == 1 or lt.grandfathered and ot.from_bcp_47[lt.subtags[0]] == tags:
+ if len (lt.subtags) == 1 or lt.grandfathered and len (lt.subtags[1]) != 3 and ot.from_bcp_47[lt.subtags[0]] == tags:
continue
print (' if (', end='')
if (lt.language == 'und' or
*count = 1;
return true;
}
+ if (0 == strcmp (lang_str, "zh-min-nan"))
+ {
+ /* Minnan, Hokkien, Amoy, Taiwanese, Southern Min, Southern Fujian, Hoklo, Southern Fukien, Ho-lo */
+ tags[0] = HB_TAG('Z','H','S',' '); /* Chinese Simplified */
+ *count = 1;
+ return true;
+ }
if (lang_matches (lang_str, "cdo-hans"))
{
/* Min Dong Chinese; Han (Simplified variant) */
*count = 1;
return true;
}
+ if (0 == strcmp (lang_str, "no-bok"))
+ {
+ /* Norwegian Bokmal */
+ tags[0] = HB_TAG('N','O','R',' '); /* Norwegian */
+ *count = 1;
+ return true;
+ }
if (0 == strcmp (lang_str, "no-nyn"))
{
/* Norwegian Nynorsk */
*count = 1;
return true;
}
+ if (0 == strcmp (lang_str, "zh-min"))
+ {
+ /* Min, Fuzhou, Hokkien, Amoy, or Taiwanese */
+ tags[0] = HB_TAG('Z','H','S',' '); /* Chinese Simplified */
+ *count = 1;
+ return true;
+ }
if (0 == strcmp (lang_str, "i-hak"))
{
/* Hakka */
return;
/* Find a language matching in the first component. */
+ s = strchr (lang_str, '-');
{
const LangTag *lang_tag;
+ if (s && limit - lang_str >= 6)
+ {
+ const char *extlang_end = strchr (s + 1, '-');
+ /* If there is an extended language tag, use it. */
+ if (3 == (extlang_end ? extlang_end - s - 1 : strlen (s + 1)) &&
+ ISALPHA (s[1]))
+ lang_str = s + 1;
+ }
lang_tag = (LangTag *) bsearch (lang_str, ot_languages,
ARRAY_LENGTH (ot_languages), sizeof (LangTag),
lang_compare_first_component);
}
}
- s = strchr (lang_str, '-');
if (!s)
s = lang_str + strlen (lang_str);
if (s - lang_str == 3) {
test_tag_from_language ("ABC", "xyz-xy-x-hbotabc-zxc");
/* Unnormalized BCP 47 tags */
+ test_tag_from_language ("ARA", "ar-aao");
test_tag_from_language ("JBO", "art-lojban");
+ test_tag_from_language ("KOK", "kok-gom");
test_tag_from_language ("LTZ", "i-lux");
test_tag_from_language ("MNG", "drh");
+ test_tag_from_language ("MOR", "ar-ary");
+ test_tag_from_language ("MOR", "ar-ary-DZ");
test_tag_from_language ("NOR", "no-bok");
test_tag_from_language ("NYN", "no-nyn");
test_tag_from_language ("ZHS", "i-hak");
test_tag_from_language ("ZHS", "zh-min");
test_tag_from_language ("ZHS", "zh-min-nan");
test_tag_from_language ("ZHS", "zh-xiang");
+
+ /* A UN M.49 region code, not an extended language subtag */
+ test_tag_from_language ("ARA", "ar-001");
}
static void