From c379b357981f40908d870edccee54ec8ab9798e0 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Mon, 24 Jun 2024 10:22:41 -0400 Subject: [PATCH] LibUnicode: Move helper to convert StringEnumeration to a list to ICU.h This will be needed outside of UnicodeKeywords.cpp. --- Userland/Libraries/LibUnicode/ICU.h | 32 +++++++++++++++++++ .../Libraries/LibUnicode/UnicodeKeywords.cpp | 30 ----------------- 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/Userland/Libraries/LibUnicode/ICU.h b/Userland/Libraries/LibUnicode/ICU.h index 54c45532713..5cbaea76d3e 100644 --- a/Userland/Libraries/LibUnicode/ICU.h +++ b/Userland/Libraries/LibUnicode/ICU.h @@ -12,9 +12,11 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -88,4 +90,34 @@ Vector icu_string_list(ReadonlySpan strings); String icu_string_to_string(icu::UnicodeString const& string); String icu_string_to_string(UChar const*, i32 length); +template +Vector icu_string_enumeration_to_list(OwnPtr enumeration, Filter&& filter) +{ + UErrorCode status = U_ZERO_ERROR; + Vector result; + + if (!enumeration) + return {}; + + while (true) { + i32 length = 0; + auto const* keyword = enumeration->next(&length, status); + + if (icu_failure(status) || keyword == nullptr) + break; + + if (!filter(keyword)) + continue; + + result.append(MUST(String::from_utf8({ keyword, static_cast(length) }))); + } + + return result; +} + +ALWAYS_INLINE Vector icu_string_enumeration_to_list(OwnPtr enumeration) +{ + return icu_string_enumeration_to_list(move(enumeration), [](char const*) { return true; }); +} + } diff --git a/Userland/Libraries/LibUnicode/UnicodeKeywords.cpp b/Userland/Libraries/LibUnicode/UnicodeKeywords.cpp index 435ddb320c8..1713607f767 100644 --- a/Userland/Libraries/LibUnicode/UnicodeKeywords.cpp +++ b/Userland/Libraries/LibUnicode/UnicodeKeywords.cpp @@ -20,36 +20,6 @@ namespace Unicode { -template -static Vector icu_string_enumeration_to_list(OwnPtr enumeration, Filter&& filter) -{ - UErrorCode status = U_ZERO_ERROR; - Vector result; - - if (!enumeration) - return {}; - - while (true) { - i32 length = 0; - auto const* keyword = enumeration->next(&length, status); - - if (icu_failure(status) || keyword == nullptr) - break; - - if (!filter(keyword)) - continue; - - result.append(MUST(String::from_utf8({ keyword, static_cast(length) }))); - } - - return result; -} - -static Vector icu_string_enumeration_to_list(OwnPtr enumeration) -{ - return icu_string_enumeration_to_list(move(enumeration), [](char const*) { return true; }); -} - Vector available_keyword_values(StringView locale, StringView key) { if (key == "ca"sv)