summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibUnicode/Locale.cpp
diff options
context:
space:
mode:
authorTimothy Flynn <trflynn89@pm.me>2021-11-28 17:28:14 -0500
committerLinus Groh <mail@linusgroh.de>2021-11-29 22:48:46 +0000
commit6dbdfb6ba1deb222a7324c4f4088cb85c613ab1a (patch)
treefa8b459231435dbb3dfe055811afc23793b82f12 /Userland/Libraries/LibUnicode/Locale.cpp
parent71903ea7e1213f67e076cb0fc7350a6863152448 (diff)
downloadserenity-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.cpp13
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