diff options
author | Timothy Flynn <trflynn89@pm.me> | 2021-11-28 17:28:14 -0500 |
---|---|---|
committer | Linus Groh <mail@linusgroh.de> | 2021-11-29 22:48:46 +0000 |
commit | 6dbdfb6ba1deb222a7324c4f4088cb85c613ab1a (patch) | |
tree | fa8b459231435dbb3dfe055811afc23793b82f12 /Userland/Libraries/LibUnicode/Locale.cpp | |
parent | 71903ea7e1213f67e076cb0fc7350a6863152448 (diff) | |
download | serenity-6dbdfb6ba1deb222a7324c4f4088cb85c613ab1a.zip |
LibUnicode: Add special handling of hour cycle (hc) Unicode keywords
For other keywords, allowed values per locale are generated at compile
time. But since the CLDR doesn't present hour cycles on a per-locale
basis, and hour cycles lookups depend on runtime data, we must handle
hour cycle keyword lookups differently than other keywords.
Diffstat (limited to 'Userland/Libraries/LibUnicode/Locale.cpp')
-rw-r--r-- | Userland/Libraries/LibUnicode/Locale.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/Userland/Libraries/LibUnicode/Locale.cpp b/Userland/Libraries/LibUnicode/Locale.cpp index 4a61523edf..d0dce9e3ed 100644 --- a/Userland/Libraries/LibUnicode/Locale.cpp +++ b/Userland/Libraries/LibUnicode/Locale.cpp @@ -9,6 +9,7 @@ #include <AK/QuickSort.h> #include <AK/StringBuilder.h> #include <LibUnicode/CharacterTypes.h> +#include <LibUnicode/DateTimeFormat.h> #include <LibUnicode/Locale.h> #if ENABLE_UNICODE_DATA @@ -806,6 +807,18 @@ Optional<StringView> get_locale_currency_mapping([[maybe_unused]] StringView loc Vector<StringView> get_locale_key_mapping([[maybe_unused]] StringView locale, [[maybe_unused]] StringView keyword) { #if ENABLE_UNICODE_DATA + if (keyword == "hc"sv) { + auto hour_cycles = get_regional_hour_cycles(locale); + + Vector<StringView> values; + values.ensure_capacity(hour_cycles.size()); + + for (auto hour_cycle : hour_cycles) + values.unchecked_append(hour_cycle_to_string(hour_cycle)); + + return values; + } + if (auto values = Detail::get_locale_key_mapping(locale, keyword); values.has_value()) return values->split_view(','); #endif |