LibUnicode: Add helper lambda for appending canonicalized strings

Once canonical extensions are implemented, the number of:

    if (optional_string.has_value() {
        builder.append('-');
        builder.append(optional_string->to_lowercase_string());
    }

Will be quite large. This commit just adds a helper lambda to handle
this pattern to prevent this function from becoming even more enormous.
This commit is contained in:
Timothy Flynn 2021-08-28 13:02:20 -04:00 committed by Linus Groh
parent 30855e6663
commit 671eaa0c59
Notes: sideshowbarker 2024-07-18 05:04:29 +09:00

View file

@ -485,27 +485,38 @@ Optional<String> canonicalize_unicode_locale_id(LocaleID& locale_id)
// https://unicode.org/reports/tr35/#Canonical_Unicode_Locale_Identifiers
StringBuilder builder;
enum class Case {
Upper,
Lower,
Title,
};
auto append_sep_and_string = [&](Optional<StringView> const& string, Case case_ = Case::Lower) {
if (!string.has_value())
return;
switch (case_) {
case Case::Upper:
builder.appendff("-{}", string->to_uppercase_string());
break;
case Case::Lower:
builder.appendff("-{}", string->to_lowercase_string());
break;
case Case::Title:
builder.appendff("-{}", string->to_titlecase_string());
break;
}
};
if (!locale_id.language_id.language.has_value())
return {};
builder.append(locale_id.language_id.language->to_lowercase_string());
if (locale_id.language_id.script.has_value()) {
builder.append('-');
builder.append(locale_id.language_id.script->to_titlecase_string());
}
if (locale_id.language_id.region.has_value()) {
builder.append('-');
builder.append(locale_id.language_id.region->to_uppercase_string());
}
append_sep_and_string(locale_id.language_id.script, Case::Title);
append_sep_and_string(locale_id.language_id.region, Case::Upper);
quick_sort(locale_id.language_id.variants);
for (auto const& variant : locale_id.language_id.variants) {
builder.append('-');
builder.append(variant.to_lowercase_string());
}
for (auto const& variant : locale_id.language_id.variants)
append_sep_and_string(variant);
// FIXME: Handle extensions and pu_extensions.