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:
parent
30855e6663
commit
671eaa0c59
Notes:
sideshowbarker
2024-07-18 05:04:29 +09:00
Author: https://github.com/trflynn89 Commit: https://github.com/SerenityOS/serenity/commit/671eaa0c59c Pull-request: https://github.com/SerenityOS/serenity/pull/9668 Reviewed-by: https://github.com/linusg
1 changed files with 26 additions and 15 deletions
|
@ -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.
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue