From 671eaa0c59c8ac27106c29cc48651cf0577e3b06 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Sat, 28 Aug 2021 13:02:20 -0400 Subject: [PATCH] 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. --- Userland/Libraries/LibUnicode/Locale.cpp | 41 +++++++++++++++--------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/Userland/Libraries/LibUnicode/Locale.cpp b/Userland/Libraries/LibUnicode/Locale.cpp index 9dda3c2bba2..7d6ff44c745 100644 --- a/Userland/Libraries/LibUnicode/Locale.cpp +++ b/Userland/Libraries/LibUnicode/Locale.cpp @@ -485,27 +485,38 @@ Optional 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 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.