mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 15:40:19 +00:00
LibUnicode: Dynamically load the generated UnicodeNumberFormat symbols
This commit is contained in:
parent
09be26b5d2
commit
a1f0ca59ae
Notes:
sideshowbarker
2024-07-18 03:23:00 +09:00
Author: https://github.com/trflynn89 Commit: https://github.com/SerenityOS/serenity/commit/a1f0ca59aeb Pull-request: https://github.com/SerenityOS/serenity/pull/11280 Reviewed-by: https://github.com/Hendiadyoin1
4 changed files with 40 additions and 53 deletions
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue