summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimothy Flynn <trflynn89@pm.me>2021-12-16 12:24:01 -0500
committerBrian Gianforcaro <b.gianfo@gmail.com>2021-12-21 13:09:49 -0800
commita1f0ca59aebe3ed8c1bd0f2a4f968e73fd519521 (patch)
tree6c105c9b1135559515c2b53f8672a30e2ec2316e
parent09be26b5d2cb4497cda44de39ddf265de894fb75 (diff)
downloadserenity-a1f0ca59aebe3ed8c1bd0f2a4f968e73fd519521.zip
LibUnicode: Dynamically load the generated UnicodeNumberFormat symbols
-rw-r--r--Meta/Lagom/Tools/CodeGenerators/LibUnicode/GenerateUnicodeNumberFormat.cpp31
-rw-r--r--Userland/Libraries/LibUnicode/NumberFormat.cpp47
-rw-r--r--Userland/Libraries/LibUnicode/UnicodeSymbols.cpp7
-rw-r--r--Userland/Libraries/LibUnicode/UnicodeSymbols.h8
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 3508960e9b..188b629e7a 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 <AK/Optional.h>
-#include <AK/StringView.h>
-#include <AK/Vector.h>
-#include <LibUnicode/Forward.h>
-
-namespace Unicode {
-)~~~");
-
- generator.append(R"~~~(
-namespace Detail {
-
-Optional<StringView> get_number_system_symbol(StringView locale, StringView system, Unicode::NumericSymbol symbol);
-Optional<NumberGroupings> get_number_system_groupings(StringView locale, StringView system);
-Optional<NumberFormat> get_standard_number_system_format(StringView locale, StringView system, StandardNumberFormatType type);
-Vector<NumberFormat> get_compact_number_system_formats(StringView locale, StringView system, CompactNumberFormatType type);
-Vector<Unicode::NumberFormat> get_unit_formats(StringView locale, StringView unit, Style style);
-Optional<NumericSymbol> 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 <AK/Array.h>
#include <AK/BinarySearch.h>
+#include <AK/Optional.h>
#include <AK/Span.h>
+#include <AK/StringView.h>
+#include <AK/Vector.h>
#include <LibUnicode/Locale.h>
#include <LibUnicode/NumberFormat.h>
#include <LibUnicode/UnicodeNumberFormat.h>
@@ -868,6 +850,7 @@ static NumberSystem const* find_number_system(StringView locale, StringView syst
return nullptr;
}
+Optional<StringView> get_number_system_symbol(StringView locale, StringView system, Unicode::NumericSymbol symbol) asm("unicode_get_number_system_symbol");
Optional<StringView> 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<StringView> get_number_system_symbol(StringView locale, StringView syst
return {};
}
+Optional<NumberGroupings> get_number_system_groupings(StringView locale, StringView system) asm("unicode_get_number_system_groupings");
Optional<NumberGroupings> 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<NumberGroupings> get_number_system_groupings(StringView locale, StringV
return {};
}
+Optional<Unicode::NumberFormat> get_standard_number_system_format(StringView locale, StringView system, StandardNumberFormatType type) asm("unicode_get_standard_number_system_format");
Optional<Unicode::NumberFormat> 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<Unicode::NumberFormat> get_standard_number_system_format(StringView loc
return {};
}
+Vector<Unicode::NumberFormat> get_compact_number_system_formats(StringView locale, StringView system, CompactNumberFormatType type) asm("unicode_get_compact_number_system_formats");
Vector<Unicode::NumberFormat> get_compact_number_system_formats(StringView locale, StringView system, CompactNumberFormatType type)
{
Vector<Unicode::NumberFormat> formats;
@@ -970,6 +956,7 @@ static Unit const* find_units(StringView locale, StringView unit)
return nullptr;
}
+Vector<Unicode::NumberFormat> get_unit_formats(StringView locale, StringView unit, Style style) asm("unicode_get_unit_formats");
Vector<Unicode::NumberFormat> get_unit_formats(StringView locale, StringView unit, Style style)
{
Vector<Unicode::NumberFormat> formats;
diff --git a/Userland/Libraries/LibUnicode/NumberFormat.cpp b/Userland/Libraries/LibUnicode/NumberFormat.cpp
index 7933dd005c..b642f6450b 100644
--- a/Userland/Libraries/LibUnicode/NumberFormat.cpp
+++ b/Userland/Libraries/LibUnicode/NumberFormat.cpp
@@ -8,57 +8,42 @@
#include <LibUnicode/CharacterTypes.h>
#include <LibUnicode/Locale.h>
#include <LibUnicode/NumberFormat.h>
+#include <LibUnicode/UnicodeSymbols.h>
#if ENABLE_UNICODE_DATA
# include <LibUnicode/UnicodeData.h>
-# include <LibUnicode/UnicodeNumberFormat.h>
#endif
namespace Unicode {
-Optional<StringView> get_number_system_symbol([[maybe_unused]] StringView locale, [[maybe_unused]] StringView system, [[maybe_unused]] NumericSymbol symbol)
+Optional<StringView> 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<NumberGroupings> get_number_system_groupings([[maybe_unused]] StringView locale, [[maybe_unused]] StringView system)
+Optional<NumberGroupings> 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<NumberFormat> get_standard_number_system_format([[maybe_unused]] StringView locale, [[maybe_unused]] StringView system, [[maybe_unused]] StandardNumberFormatType type)
+Optional<NumberFormat> 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<NumberFormat> get_compact_number_system_formats([[maybe_unused]] StringView locale, [[maybe_unused]] StringView system, [[maybe_unused]] CompactNumberFormatType type)
+Vector<NumberFormat> 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<NumberFormat> get_unit_formats([[maybe_unused]] StringView locale, [[maybe_unused]] StringView unit, [[maybe_unused]] Style style)
+Vector<NumberFormat> 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<NumberFormat> select_pattern_with_plurality(Vector<NumberFormat> const& formats, double number)
diff --git a/Userland/Libraries/LibUnicode/UnicodeSymbols.cpp b/Userland/Libraries/LibUnicode/UnicodeSymbols.cpp
index 3befd13432..76898ded47 100644
--- a/Userland/Libraries/LibUnicode/UnicodeSymbols.cpp
+++ b/Userland/Libraries/LibUnicode/UnicodeSymbols.cpp
@@ -16,6 +16,7 @@
#else
# include <AK/Function.h>
# include <LibUnicode/Locale.h>
+# include <LibUnicode/NumberFormat.h>
#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 4e1e2d2b70..b2d662f4e9 100644
--- a/Userland/Libraries/LibUnicode/UnicodeSymbols.h
+++ b/Userland/Libraries/LibUnicode/UnicodeSymbols.h
@@ -64,6 +64,14 @@ struct Symbols {
Optional<LanguageID> (*add_likely_subtags)(LanguageID const&);
Optional<String> (*resolve_most_likely_territory)(LanguageID const&);
+ // Loaded from UnicodeNumberFormat.cpp:
+
+ Optional<StringView> (*get_number_system_symbol)(StringView, StringView, NumericSymbol);
+ Optional<NumberGroupings> (*get_number_system_groupings)(StringView, StringView);
+ Optional<NumberFormat> (*get_standard_number_system_format)(StringView, StringView, StandardNumberFormatType);
+ Vector<NumberFormat> (*get_compact_number_system_formats)(StringView, StringView, CompactNumberFormatType);
+ Vector<NumberFormat> (*get_unit_formats)(StringView, StringView, Style);
+
private:
Symbols() = default;
};