1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 18:17:44 +00:00

LibUnicode: Canonicalize the subtag "yes" to "true"

This commit is contained in:
Timothy Flynn 2021-08-30 15:51:08 -04:00 committed by Linus Groh
parent 556374a904
commit f907a7dc38
2 changed files with 18 additions and 0 deletions

View file

@ -480,6 +480,17 @@ Optional<LocaleID> parse_unicode_locale_id(StringView locale)
return locale_id;
}
static void perform_hard_coded_key_value_substitutions(String& key, String& value)
{
// FIXME: In the XML export of CLDR, there are some aliases defined in the following file:
// https://github.com/unicode-org/cldr-staging/blob/master/production/common/bcp47/collation.xml
//
// There doesn't seem to be a counterpart in the JSON export. Since there aren't many such
// aliases, until an XML parser is implemented, those aliases are implemented here.
if (key.is_one_of("kb"sv, "kc"sv, "kh"sv, "kk"sv, "kn"sv) && (value == "yes"sv))
value = "true"sv;
}
static void transform_unicode_locale_id_to_canonical_syntax(LocaleID& locale_id)
{
auto canonicalize_language = [](LanguageID& language_id, bool force_lowercase) {
@ -542,6 +553,7 @@ static void transform_unicode_locale_id_to_canonical_syntax(LocaleID& locale_id)
for (auto& value : raw_values) {
value = value.to_lowercase();
perform_hard_coded_key_value_substitutions(key, value);
// Note: The spec says to remove "true" type and tfield values but that is believed to be a bug in the spec
// because, for tvalues, that would result in invalid syntax: