1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 08:48:11 +00:00

LibUnicode: Remove GeneralCategory::Symbol string lookup

When I originally wrote this method, I had it in LibJS, where we can't
refer to the GeneralCategory enumeration directly. This is a big TODO,
anyone outside of LibUnicode can't assume the generated enumerations
exist and must get these values by string lookup. But this function
ended up living in LibUnicode, who can reference the enumeration.
This commit is contained in:
Timothy Flynn 2021-11-13 09:40:56 -05:00 committed by Linus Groh
parent dbe70e7c55
commit ada4bab405

View file

@ -13,6 +13,7 @@
#include <LibUnicode/Locale.h>
#if ENABLE_UNICODE_DATA
# include <LibUnicode/UnicodeData.h>
# include <LibUnicode/UnicodeLocale.h>
# include <LibUnicode/UnicodeNumberFormat.h>
#endif
@ -998,6 +999,7 @@ Optional<NumberFormat> select_currency_unit_pattern(StringView locale, StringVie
// https://www.unicode.org/reports/tr35/tr35-numbers.html#Currencies
String create_currency_format_pattern(StringView currency_display, StringView base_pattern)
{
#if ENABLE_UNICODE_DATA
constexpr auto number_key = "{number}"sv;
constexpr auto currency_key = "{currency}"sv;
constexpr auto spacing = "\u00A0"sv; // No-Break Space (NBSP)
@ -1008,9 +1010,6 @@ String create_currency_format_pattern(StringView currency_display, StringView ba
auto currency_index = base_pattern.find(currency_key);
VERIFY(currency_index.has_value());
static auto symbol_category = general_category_from_string("Symbol"sv);
VERIFY(symbol_category.has_value()); // This shouldn't be reached if Unicode generation is disabled.
Utf8View utf8_currency_display { currency_display };
Optional<String> currency_display_with_spacing;
@ -1018,7 +1017,7 @@ String create_currency_format_pattern(StringView currency_display, StringView ba
if (!base_pattern.substring_view(0, *currency_index).ends_with(spacing)) {
u32 first_currency_code_point = *utf8_currency_display.begin();
if (!code_point_has_general_category(first_currency_code_point, *symbol_category))
if (!code_point_has_general_category(first_currency_code_point, GeneralCategory::Symbol))
currency_display_with_spacing = String::formatted("{}{}", spacing, currency_display);
}
} else {
@ -1027,13 +1026,14 @@ String create_currency_format_pattern(StringView currency_display, StringView ba
for (auto it = utf8_currency_display.begin(); it != utf8_currency_display.end(); ++it)
last_currency_code_point = *it;
if (!code_point_has_general_category(last_currency_code_point, *symbol_category))
if (!code_point_has_general_category(last_currency_code_point, GeneralCategory::Symbol))
currency_display_with_spacing = String::formatted("{}{}", currency_display, spacing);
}
}
if (currency_display_with_spacing.has_value())
return base_pattern.replace(currency_key, *currency_display_with_spacing);
#endif
return base_pattern.replace(currency_key, currency_display);
}