mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-30 08:41:15 +00:00
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
|
@ -485,27 +485,38 @@ Optional<String> canonicalize_unicode_locale_id(LocaleID& locale_id)
|
||||||
// https://unicode.org/reports/tr35/#Canonical_Unicode_Locale_Identifiers
|
// https://unicode.org/reports/tr35/#Canonical_Unicode_Locale_Identifiers
|
||||||
StringBuilder builder;
|
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())
|
if (!locale_id.language_id.language.has_value())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
builder.append(locale_id.language_id.language->to_lowercase_string());
|
builder.append(locale_id.language_id.language->to_lowercase_string());
|
||||||
|
append_sep_and_string(locale_id.language_id.script, Case::Title);
|
||||||
if (locale_id.language_id.script.has_value()) {
|
append_sep_and_string(locale_id.language_id.region, Case::Upper);
|
||||||
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());
|
|
||||||
}
|
|
||||||
|
|
||||||
quick_sort(locale_id.language_id.variants);
|
quick_sort(locale_id.language_id.variants);
|
||||||
|
for (auto const& variant : locale_id.language_id.variants)
|
||||||
for (auto const& variant : locale_id.language_id.variants) {
|
append_sep_and_string(variant);
|
||||||
builder.append('-');
|
|
||||||
builder.append(variant.to_lowercase_string());
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIXME: Handle extensions and pu_extensions.
|
// FIXME: Handle extensions and pu_extensions.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue