From a1f0ca59aebe3ed8c1bd0f2a4f968e73fd519521 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Thu, 16 Dec 2021 12:24:01 -0500 Subject: [PATCH] LibUnicode: Dynamically load the generated UnicodeNumberFormat symbols --- .../GenerateUnicodeNumberFormat.cpp | 31 ++++-------- .../Libraries/LibUnicode/NumberFormat.cpp | 47 +++++++------------ .../Libraries/LibUnicode/UnicodeSymbols.cpp | 7 +++ .../Libraries/LibUnicode/UnicodeSymbols.h | 8 ++++ 4 files changed, 40 insertions(+), 53 deletions(-) diff --git a/Meta/Lagom/Tools/CodeGenerators/LibUnicode/GenerateUnicodeNumberFormat.cpp b/Meta/Lagom/Tools/CodeGenerators/LibUnicode/GenerateUnicodeNumberFormat.cpp index 3508960e9b8..188b629e7ac 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibUnicode/GenerateUnicodeNumberFormat.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibUnicode/GenerateUnicodeNumberFormat.cpp @@ -713,30 +713,9 @@ static void generate_unicode_locale_header(Core::File& file, UnicodeLocaleData&) StringBuilder builder; SourceGenerator generator { builder }; + // FIXME: Update unicode_data.cmake to not require a header. generator.append(R"~~~( #pragma once - -#include -#include -#include -#include - -namespace Unicode { -)~~~"); - - generator.append(R"~~~( -namespace Detail { - -Optional get_number_system_symbol(StringView locale, StringView system, Unicode::NumericSymbol symbol); -Optional get_number_system_groupings(StringView locale, StringView system); -Optional get_standard_number_system_format(StringView locale, StringView system, StandardNumberFormatType type); -Vector get_compact_number_system_formats(StringView locale, StringView system, CompactNumberFormatType type); -Vector get_unit_formats(StringView locale, StringView unit, Style style); -Optional numeric_symbol_from_string(StringView numeric_symbol); - -} - -} )~~~"); VERIFY(file.write(generator.as_string_view())); @@ -755,7 +734,10 @@ static void generate_unicode_locale_implementation(Core::File& file, UnicodeLoca generator.append(R"~~~( #include #include +#include #include +#include +#include #include #include #include @@ -868,6 +850,7 @@ static NumberSystem const* find_number_system(StringView locale, StringView syst return nullptr; } +Optional get_number_system_symbol(StringView locale, StringView system, Unicode::NumericSymbol symbol) asm("unicode_get_number_system_symbol"); Optional get_number_system_symbol(StringView locale, StringView system, Unicode::NumericSymbol symbol) { if (auto const* number_system = find_number_system(locale, system); number_system != nullptr) { @@ -883,6 +866,7 @@ Optional get_number_system_symbol(StringView locale, StringView syst return {}; } +Optional get_number_system_groupings(StringView locale, StringView system) asm("unicode_get_number_system_groupings"); Optional get_number_system_groupings(StringView locale, StringView system) { if (auto const* number_system = find_number_system(locale, system); number_system != nullptr) @@ -890,6 +874,7 @@ Optional get_number_system_groupings(StringView locale, StringV return {}; } +Optional get_standard_number_system_format(StringView locale, StringView system, StandardNumberFormatType type) asm("unicode_get_standard_number_system_format"); Optional get_standard_number_system_format(StringView locale, StringView system, StandardNumberFormatType type) { if (auto const* number_system = find_number_system(locale, system); number_system != nullptr) { @@ -919,6 +904,7 @@ Optional get_standard_number_system_format(StringView loc return {}; } +Vector get_compact_number_system_formats(StringView locale, StringView system, CompactNumberFormatType type) asm("unicode_get_compact_number_system_formats"); Vector get_compact_number_system_formats(StringView locale, StringView system, CompactNumberFormatType type) { Vector formats; @@ -970,6 +956,7 @@ static Unit const* find_units(StringView locale, StringView unit) return nullptr; } +Vector get_unit_formats(StringView locale, StringView unit, Style style) asm("unicode_get_unit_formats"); Vector get_unit_formats(StringView locale, StringView unit, Style style) { Vector formats; diff --git a/Userland/Libraries/LibUnicode/NumberFormat.cpp b/Userland/Libraries/LibUnicode/NumberFormat.cpp index 7933dd005cd..b642f6450bb 100644 --- a/Userland/Libraries/LibUnicode/NumberFormat.cpp +++ b/Userland/Libraries/LibUnicode/NumberFormat.cpp @@ -8,57 +8,42 @@ #include #include #include +#include #if ENABLE_UNICODE_DATA # include -# include #endif namespace Unicode { -Optional get_number_system_symbol([[maybe_unused]] StringView locale, [[maybe_unused]] StringView system, [[maybe_unused]] NumericSymbol symbol) +Optional get_number_system_symbol(StringView locale, StringView system, NumericSymbol symbol) { -#if ENABLE_UNICODE_DATA - return Detail::get_number_system_symbol(locale, system, symbol); -#else - return {}; -#endif + static auto const& symbols = Detail::Symbols::ensure_loaded(); + return symbols.get_number_system_symbol(locale, system, symbol); } -Optional get_number_system_groupings([[maybe_unused]] StringView locale, [[maybe_unused]] StringView system) +Optional get_number_system_groupings(StringView locale, StringView system) { -#if ENABLE_UNICODE_DATA - return Detail::get_number_system_groupings(locale, system); -#else - return {}; -#endif + static auto const& symbols = Detail::Symbols::ensure_loaded(); + return symbols.get_number_system_groupings(locale, system); } -Optional get_standard_number_system_format([[maybe_unused]] StringView locale, [[maybe_unused]] StringView system, [[maybe_unused]] StandardNumberFormatType type) +Optional get_standard_number_system_format(StringView locale, StringView system, StandardNumberFormatType type) { -#if ENABLE_UNICODE_DATA - return Detail::get_standard_number_system_format(locale, system, type); -#else - return {}; -#endif + static auto const& symbols = Detail::Symbols::ensure_loaded(); + return symbols.get_standard_number_system_format(locale, system, type); } -Vector get_compact_number_system_formats([[maybe_unused]] StringView locale, [[maybe_unused]] StringView system, [[maybe_unused]] CompactNumberFormatType type) +Vector get_compact_number_system_formats(StringView locale, StringView system, CompactNumberFormatType type) { -#if ENABLE_UNICODE_DATA - return Detail::get_compact_number_system_formats(locale, system, type); -#else - return {}; -#endif + static auto const& symbols = Detail::Symbols::ensure_loaded(); + return symbols.get_compact_number_system_formats(locale, system, type); } -Vector get_unit_formats([[maybe_unused]] StringView locale, [[maybe_unused]] StringView unit, [[maybe_unused]] Style style) +Vector get_unit_formats(StringView locale, StringView unit, Style style) { -#if ENABLE_UNICODE_DATA - return Detail::get_unit_formats(locale, unit, style); -#else - return {}; -#endif + static auto const& symbols = Detail::Symbols::ensure_loaded(); + return symbols.get_unit_formats(locale, unit, style); } Optional select_pattern_with_plurality(Vector const& formats, double number) diff --git a/Userland/Libraries/LibUnicode/UnicodeSymbols.cpp b/Userland/Libraries/LibUnicode/UnicodeSymbols.cpp index 3befd134322..76898ded47b 100644 --- a/Userland/Libraries/LibUnicode/UnicodeSymbols.cpp +++ b/Userland/Libraries/LibUnicode/UnicodeSymbols.cpp @@ -16,6 +16,7 @@ #else # include # include +# include #endif namespace Unicode::Detail { @@ -110,6 +111,12 @@ Symbols const& Symbols::ensure_loaded() load_symbol(symbols.add_likely_subtags, "unicode_add_likely_subtags"); load_symbol(symbols.resolve_most_likely_territory, "unicode_resolve_most_likely_territory"); + load_symbol(symbols.get_number_system_symbol, "unicode_get_number_system_symbol"); + load_symbol(symbols.get_number_system_groupings, "unicode_get_number_system_groupings"); + load_symbol(symbols.get_standard_number_system_format, "unicode_get_standard_number_system_format"); + load_symbol(symbols.get_compact_number_system_formats, "unicode_get_compact_number_system_formats"); + load_symbol(symbols.get_unit_formats, "unicode_get_unit_formats"); + initialized = true; return symbols; } diff --git a/Userland/Libraries/LibUnicode/UnicodeSymbols.h b/Userland/Libraries/LibUnicode/UnicodeSymbols.h index 4e1e2d2b709..b2d662f4e98 100644 --- a/Userland/Libraries/LibUnicode/UnicodeSymbols.h +++ b/Userland/Libraries/LibUnicode/UnicodeSymbols.h @@ -64,6 +64,14 @@ struct Symbols { Optional (*add_likely_subtags)(LanguageID const&); Optional (*resolve_most_likely_territory)(LanguageID const&); + // Loaded from UnicodeNumberFormat.cpp: + + Optional (*get_number_system_symbol)(StringView, StringView, NumericSymbol); + Optional (*get_number_system_groupings)(StringView, StringView); + Optional (*get_standard_number_system_format)(StringView, StringView, StandardNumberFormatType); + Vector (*get_compact_number_system_formats)(StringView, StringView, CompactNumberFormatType); + Vector (*get_unit_formats)(StringView, StringView, Style); + private: Symbols() = default; };