mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-20 17:58:18 +03:00
LibJS+LibUnicode: Convert UnicodeLocale to link with weak symbols
This commit is contained in:
parent
cf8e11a562
commit
f576142fe8
Notes:
sideshowbarker
2024-07-17 21:39:06 +09:00
Author: https://github.com/trflynn89 Commit: https://github.com/SerenityOS/serenity/commit/f576142fe86 Pull-request: https://github.com/SerenityOS/serenity/pull/11622
@ -769,7 +769,7 @@ static void generate_unicode_locale_implementation(Core::File& file, UnicodeLoca
|
||||
#include <LibUnicode/Locale.h>
|
||||
#include <LibUnicode/UnicodeLocale.h>
|
||||
|
||||
namespace Unicode::Detail {
|
||||
namespace Unicode {
|
||||
|
||||
struct Patterns {
|
||||
ListPatternType type;
|
||||
@ -847,9 +847,9 @@ static constexpr Array<@type@, @size@> @name@ { {)~~~");
|
||||
generator.append(R"~~~(
|
||||
|
||||
struct CanonicalLanguageID {
|
||||
Unicode::LanguageID to_unicode_language_id() const
|
||||
LanguageID to_unicode_language_id() const
|
||||
{
|
||||
Unicode::LanguageID language_id {};
|
||||
LanguageID language_id {};
|
||||
language_id.variants.ensure_capacity(variants_size);
|
||||
|
||||
language_id.language = s_string_list[language];
|
||||
@ -936,7 +936,7 @@ static constexpr Array<LanguageMapping, @size@> s_@name@ { {
|
||||
append_complex_mapping("likely_subtags"sv, locale_data.likely_subtags);
|
||||
|
||||
generator.append(R"~~~(
|
||||
static LanguageMapping const* resolve_likely_subtag(Unicode::LanguageID const& language_id)
|
||||
static LanguageMapping const* resolve_likely_subtag(LanguageID const& language_id)
|
||||
{
|
||||
// https://unicode.org/reports/tr35/#Likely_Subtags
|
||||
enum class State {
|
||||
@ -951,7 +951,7 @@ static LanguageMapping const* resolve_likely_subtag(Unicode::LanguageID const& l
|
||||
auto state = State::LanguageScriptRegion;
|
||||
|
||||
while (state != State::Done) {
|
||||
Unicode::LanguageID search_key;
|
||||
LanguageID search_key;
|
||||
|
||||
switch (state) {
|
||||
case State::LanguageScriptRegion:
|
||||
@ -1032,7 +1032,6 @@ static LanguageMapping const* resolve_likely_subtag(Unicode::LanguageID const& l
|
||||
generator.set("unique_list", unique_list);
|
||||
|
||||
generator.append(R"~~~(
|
||||
Optional<StringView> get_locale_@enum_snake@_mapping(StringView locale, StringView @enum_snake@) asm("unicode_get_locale_@enum_snake@_mapping");
|
||||
Optional<StringView> get_locale_@enum_snake@_mapping(StringView locale, StringView @enum_snake@)
|
||||
{
|
||||
auto locale_value = locale_from_string(locale);
|
||||
@ -1068,7 +1067,7 @@ Optional<StringView> get_locale_@enum_snake@_mapping(StringView locale, StringVi
|
||||
for (auto const& alias : aliases)
|
||||
hashes.set(alias.alias.hash(), format_identifier(enum_title, alias.alias));
|
||||
|
||||
generate_value_from_string_for_dynamic_loading(generator, "{}_from_string"sv, enum_title, enum_snake, move(hashes));
|
||||
generate_value_from_string(generator, "{}_from_string"sv, enum_title, enum_snake, move(hashes));
|
||||
};
|
||||
|
||||
auto append_alias_search = [&](StringView enum_snake, auto const& aliases) {
|
||||
@ -1078,7 +1077,7 @@ Optional<StringView> get_locale_@enum_snake@_mapping(StringView locale, StringVi
|
||||
for (auto const& alias : aliases)
|
||||
hashes.set(alias.key.hash(), alias.value);
|
||||
|
||||
generate_value_from_string_for_dynamic_loading(generator, "resolve_{}_alias"sv, s_string_index_type, enum_snake, move(hashes), "StringView"sv, "s_string_list[{}]"sv);
|
||||
generate_value_from_string(generator, "resolve_{}_alias"sv, s_string_index_type, enum_snake, move(hashes), "StringView"sv, "s_string_list[{}]"sv);
|
||||
};
|
||||
|
||||
append_from_string("Locale"sv, "locale"sv, locale_data.locales.keys(), locale_data.locale_aliases);
|
||||
@ -1092,7 +1091,7 @@ Optional<StringView> get_locale_@enum_snake@_mapping(StringView locale, StringVi
|
||||
append_alias_search("territory"sv, locale_data.territory_aliases);
|
||||
|
||||
append_from_string("ScriptTag"sv, "script_tag"sv, locale_data.scripts);
|
||||
append_mapping_search("script_tag"sv, "script_tag"sv, "s_scripts"sv, "s_script_lists"sv);
|
||||
append_mapping_search("script"sv, "script_tag"sv, "s_scripts"sv, "s_script_lists"sv);
|
||||
append_alias_search("script_tag"sv, locale_data.script_aliases);
|
||||
|
||||
append_from_string("Currency"sv, "currency"sv, locale_data.currencies);
|
||||
@ -1111,8 +1110,7 @@ Optional<StringView> get_locale_@enum_snake@_mapping(StringView locale, StringVi
|
||||
append_from_string("ListPatternStyle"sv, "list_pattern_style"sv, locale_data.list_pattern_styles);
|
||||
|
||||
generator.append(R"~~~(
|
||||
Optional<ListPatterns> get_locale_list_pattern_mapping(StringView locale, StringView list_pattern_type, StringView list_pattern_style) asm("unicode_get_locale_list_pattern_mapping");
|
||||
Optional<ListPatterns> get_locale_list_pattern_mapping(StringView locale, StringView list_pattern_type, StringView list_pattern_style)
|
||||
Optional<ListPatterns> get_locale_list_patterns(StringView locale, StringView list_pattern_type, StringView list_pattern_style)
|
||||
{
|
||||
auto locale_value = locale_from_string(locale);
|
||||
if (!locale_value.has_value())
|
||||
@ -1147,8 +1145,7 @@ Optional<ListPatterns> get_locale_list_pattern_mapping(StringView locale, String
|
||||
return {};
|
||||
}
|
||||
|
||||
void resolve_complex_language_aliases(Unicode::LanguageID& language_id) asm("unicode_resolve_complex_language_aliases");
|
||||
void resolve_complex_language_aliases(Unicode::LanguageID& language_id)
|
||||
void resolve_complex_language_aliases(LanguageID& language_id)
|
||||
{
|
||||
for (auto const& map : s_complex_alias) {
|
||||
auto const& key_language = s_string_list[map.key.language];
|
||||
@ -1180,8 +1177,7 @@ void resolve_complex_language_aliases(Unicode::LanguageID& language_id)
|
||||
}
|
||||
}
|
||||
|
||||
Optional<Unicode::LanguageID> add_likely_subtags(Unicode::LanguageID const& language_id) asm("unicode_add_likely_subtags");
|
||||
Optional<Unicode::LanguageID> add_likely_subtags(Unicode::LanguageID const& language_id)
|
||||
Optional<LanguageID> add_likely_subtags(LanguageID const& language_id)
|
||||
{
|
||||
// https://www.unicode.org/reports/tr35/#Likely_Subtags
|
||||
auto const* likely_subtag = resolve_likely_subtag(language_id);
|
||||
@ -1207,8 +1203,7 @@ Optional<Unicode::LanguageID> add_likely_subtags(Unicode::LanguageID const& lang
|
||||
return maximized;
|
||||
}
|
||||
|
||||
Optional<String> resolve_most_likely_territory(Unicode::LanguageID const& language_id) asm("unicode_resolve_most_likely_territory");
|
||||
Optional<String> resolve_most_likely_territory(Unicode::LanguageID const& language_id)
|
||||
Optional<String> resolve_most_likely_territory(LanguageID const& language_id)
|
||||
{
|
||||
if (auto const* likely_subtag = resolve_likely_subtag(language_id); likely_subtag != nullptr)
|
||||
return s_string_list[likely_subtag->alias.region];
|
||||
|
@ -422,7 +422,7 @@ LocaleResult resolve_locale(Vector<String> const& requested_locales, LocaleOptio
|
||||
// b. Assert: Type(foundLocaleData) is Record.
|
||||
// c. Let keyLocaleData be foundLocaleData.[[<key>]].
|
||||
// d. Assert: Type(keyLocaleData) is List.
|
||||
auto key_locale_data = Unicode::get_locale_key_mapping(found_locale, key);
|
||||
auto key_locale_data = Unicode::get_locale_key_mapping_list(found_locale, key);
|
||||
|
||||
// e. Let value be keyLocaleData[0].
|
||||
// f. Assert: Type(value) is either String or Null.
|
||||
|
@ -11,7 +11,6 @@
|
||||
#include <LibUnicode/CharacterTypes.h>
|
||||
#include <LibUnicode/DateTimeFormat.h>
|
||||
#include <LibUnicode/Locale.h>
|
||||
#include <LibUnicode/UnicodeSymbols.h>
|
||||
|
||||
namespace Unicode {
|
||||
|
||||
@ -568,8 +567,6 @@ void canonicalize_unicode_extension_values(StringView key, String& value, bool r
|
||||
|
||||
static void transform_unicode_locale_id_to_canonical_syntax(LocaleID& locale_id)
|
||||
{
|
||||
static auto const& symbols = Detail::Symbols::ensure_loaded();
|
||||
|
||||
auto canonicalize_language = [&](LanguageID& language_id, bool force_lowercase) {
|
||||
language_id.language = language_id.language->to_lowercase();
|
||||
if (language_id.script.has_value())
|
||||
@ -579,7 +576,7 @@ static void transform_unicode_locale_id_to_canonical_syntax(LocaleID& locale_id)
|
||||
for (auto& variant : language_id.variants)
|
||||
variant = variant.to_lowercase();
|
||||
|
||||
symbols.resolve_complex_language_aliases(language_id);
|
||||
resolve_complex_language_aliases(language_id);
|
||||
|
||||
if (auto alias = resolve_language_alias(*language_id.language); alias.has_value()) {
|
||||
auto language_alias = parse_unicode_language_id(*alias);
|
||||
@ -601,7 +598,7 @@ static void transform_unicode_locale_id_to_canonical_syntax(LocaleID& locale_id)
|
||||
|
||||
if (language_id.region.has_value()) {
|
||||
if (auto alias = resolve_territory_alias(*language_id.region); alias.has_value())
|
||||
language_id.region = resolve_most_likely_territory(language_id, *alias);
|
||||
language_id.region = resolve_most_likely_territory_alias(language_id, *alias);
|
||||
}
|
||||
|
||||
quick_sort(language_id.variants);
|
||||
@ -744,49 +741,41 @@ bool is_locale_available(StringView locale)
|
||||
return locale_from_string(locale).has_value();
|
||||
}
|
||||
|
||||
Optional<Locale> locale_from_string(StringView locale)
|
||||
{
|
||||
static auto const& symbols = Detail::Symbols::ensure_loaded();
|
||||
return symbols.locale_from_string(locale);
|
||||
}
|
||||
|
||||
Optional<StringView> get_locale_language_mapping(StringView locale, StringView language)
|
||||
{
|
||||
static auto const& symbols = Detail::Symbols::ensure_loaded();
|
||||
return symbols.get_locale_language_mapping(locale, language);
|
||||
}
|
||||
|
||||
Optional<StringView> get_locale_territory_mapping(StringView locale, StringView territory)
|
||||
{
|
||||
static auto const& symbols = Detail::Symbols::ensure_loaded();
|
||||
return symbols.get_locale_territory_mapping(locale, territory);
|
||||
}
|
||||
|
||||
Optional<StringView> get_locale_script_mapping(StringView locale, StringView script)
|
||||
{
|
||||
static auto const& symbols = Detail::Symbols::ensure_loaded();
|
||||
return symbols.get_locale_script_tag_mapping(locale, script);
|
||||
}
|
||||
Optional<Locale> __attribute__((weak)) locale_from_string(StringView) { return {}; }
|
||||
Optional<Language> __attribute__((weak)) language_from_string(StringView) { return {}; }
|
||||
Optional<Territory> __attribute__((weak)) territory_from_string(StringView) { return {}; }
|
||||
Optional<ScriptTag> __attribute__((weak)) script_tag_from_string(StringView) { return {}; }
|
||||
Optional<Currency> __attribute__((weak)) currency_from_string(StringView) { return {}; }
|
||||
Optional<Key> __attribute__((weak)) key_from_string(StringView) { return {}; }
|
||||
Optional<ListPatternType> __attribute__((weak)) list_pattern_type_from_string(StringView) { return {}; }
|
||||
Optional<ListPatternStyle> __attribute__((weak)) list_pattern_style_from_string(StringView) { return {}; }
|
||||
Optional<StringView> __attribute__((weak)) get_locale_language_mapping(StringView, StringView) { return {}; }
|
||||
Optional<StringView> __attribute__((weak)) get_locale_territory_mapping(StringView, StringView) { return {}; }
|
||||
Optional<StringView> __attribute__((weak)) get_locale_script_mapping(StringView, StringView) { return {}; }
|
||||
Optional<StringView> __attribute__((weak)) get_locale_long_currency_mapping(StringView, StringView) { return {}; }
|
||||
Optional<StringView> __attribute__((weak)) get_locale_short_currency_mapping(StringView, StringView) { return {}; }
|
||||
Optional<StringView> __attribute__((weak)) get_locale_narrow_currency_mapping(StringView, StringView) { return {}; }
|
||||
Optional<StringView> __attribute__((weak)) get_locale_numeric_currency_mapping(StringView, StringView) { return {}; }
|
||||
|
||||
Optional<StringView> get_locale_currency_mapping(StringView locale, StringView currency, Style style)
|
||||
{
|
||||
static auto const& symbols = Detail::Symbols::ensure_loaded();
|
||||
|
||||
switch (style) {
|
||||
case Style::Long:
|
||||
return symbols.get_locale_long_currency_mapping(locale, currency);
|
||||
return get_locale_long_currency_mapping(locale, currency);
|
||||
case Style::Short:
|
||||
return symbols.get_locale_short_currency_mapping(locale, currency);
|
||||
return get_locale_short_currency_mapping(locale, currency);
|
||||
case Style::Narrow:
|
||||
return symbols.get_locale_narrow_currency_mapping(locale, currency);
|
||||
return get_locale_narrow_currency_mapping(locale, currency);
|
||||
case Style::Numeric:
|
||||
return symbols.get_locale_numeric_currency_mapping(locale, currency);
|
||||
return get_locale_numeric_currency_mapping(locale, currency);
|
||||
default:
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
}
|
||||
|
||||
Vector<StringView> get_locale_key_mapping(StringView locale, StringView keyword)
|
||||
Optional<StringView> __attribute__((weak)) get_locale_key_mapping(StringView, StringView) { return {}; }
|
||||
|
||||
Vector<StringView> get_locale_key_mapping_list(StringView locale, StringView keyword)
|
||||
{
|
||||
if (keyword == "hc"sv) {
|
||||
auto hour_cycles = get_locale_hour_cycles(locale);
|
||||
@ -800,55 +789,20 @@ Vector<StringView> get_locale_key_mapping(StringView locale, StringView keyword)
|
||||
return values;
|
||||
}
|
||||
|
||||
static auto const& symbols = Detail::Symbols::ensure_loaded();
|
||||
|
||||
if (auto values = symbols.get_locale_key_mapping(locale, keyword); values.has_value())
|
||||
if (auto values = get_locale_key_mapping(locale, keyword); values.has_value())
|
||||
return values->split_view(',');
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
Optional<ListPatterns> get_locale_list_patterns(StringView locale, StringView type, StringView style)
|
||||
{
|
||||
static auto const& symbols = Detail::Symbols::ensure_loaded();
|
||||
return symbols.get_locale_list_pattern_mapping(locale, type, style);
|
||||
}
|
||||
|
||||
Optional<StringView> resolve_language_alias(StringView language)
|
||||
{
|
||||
static auto const& symbols = Detail::Symbols::ensure_loaded();
|
||||
return symbols.resolve_language_alias(language);
|
||||
}
|
||||
|
||||
Optional<StringView> resolve_territory_alias(StringView territory)
|
||||
{
|
||||
static auto const& symbols = Detail::Symbols::ensure_loaded();
|
||||
return symbols.resolve_territory_alias(territory);
|
||||
}
|
||||
|
||||
Optional<StringView> resolve_script_tag_alias(StringView script_tag)
|
||||
{
|
||||
static auto const& symbols = Detail::Symbols::ensure_loaded();
|
||||
return symbols.resolve_script_tag_alias(script_tag);
|
||||
}
|
||||
|
||||
Optional<StringView> resolve_variant_alias(StringView variant)
|
||||
{
|
||||
static auto const& symbols = Detail::Symbols::ensure_loaded();
|
||||
return symbols.resolve_variant_alias(variant);
|
||||
}
|
||||
|
||||
Optional<StringView> resolve_subdivision_alias(StringView subdivision)
|
||||
{
|
||||
static auto const& symbols = Detail::Symbols::ensure_loaded();
|
||||
return symbols.resolve_subdivision_alias(subdivision);
|
||||
}
|
||||
|
||||
Optional<LanguageID> add_likely_subtags(LanguageID const& language_id)
|
||||
{
|
||||
static auto const& symbols = Detail::Symbols::ensure_loaded();
|
||||
return symbols.add_likely_subtags(language_id);
|
||||
}
|
||||
Optional<ListPatterns> __attribute__((weak)) get_locale_list_patterns(StringView, StringView, StringView) { return {}; }
|
||||
Optional<StringView> __attribute__((weak)) resolve_language_alias(StringView) { return {}; }
|
||||
Optional<StringView> __attribute__((weak)) resolve_territory_alias(StringView) { return {}; }
|
||||
Optional<StringView> __attribute__((weak)) resolve_script_tag_alias(StringView) { return {}; }
|
||||
Optional<StringView> __attribute__((weak)) resolve_variant_alias(StringView) { return {}; }
|
||||
Optional<StringView> __attribute__((weak)) resolve_subdivision_alias(StringView) { return {}; }
|
||||
void __attribute__((weak)) resolve_complex_language_aliases(LanguageID&) { }
|
||||
Optional<LanguageID> __attribute__((weak)) add_likely_subtags(LanguageID const&) { return {}; }
|
||||
|
||||
Optional<LanguageID> remove_likely_subtags(LanguageID const& language_id)
|
||||
{
|
||||
@ -892,13 +846,14 @@ Optional<LanguageID> remove_likely_subtags(LanguageID const& language_id)
|
||||
return return_language_and_variants(maximized.release_value(), move(variants));
|
||||
}
|
||||
|
||||
String resolve_most_likely_territory(LanguageID const& language_id, StringView territory_alias)
|
||||
Optional<String> __attribute__((weak)) resolve_most_likely_territory(LanguageID const&) { return {}; }
|
||||
|
||||
String resolve_most_likely_territory_alias(LanguageID const& language_id, StringView territory_alias)
|
||||
{
|
||||
static auto const& symbols = Detail::Symbols::ensure_loaded();
|
||||
auto aliases = territory_alias.split_view(' ');
|
||||
|
||||
if (aliases.size() > 1) {
|
||||
auto territory = symbols.resolve_most_likely_territory(language_id);
|
||||
auto territory = resolve_most_likely_territory(language_id);
|
||||
if (territory.has_value() && aliases.contains_slow(*territory))
|
||||
return territory.release_value();
|
||||
}
|
||||
|
@ -140,13 +140,26 @@ Optional<String> canonicalize_unicode_locale_id(LocaleID&);
|
||||
|
||||
String const& default_locale();
|
||||
bool is_locale_available(StringView locale);
|
||||
|
||||
Optional<Locale> locale_from_string(StringView locale);
|
||||
Optional<Language> language_from_string(StringView language);
|
||||
Optional<Territory> territory_from_string(StringView territory);
|
||||
Optional<ScriptTag> script_tag_from_string(StringView script_tag);
|
||||
Optional<Currency> currency_from_string(StringView currency);
|
||||
Optional<Key> key_from_string(StringView key);
|
||||
Optional<ListPatternType> list_pattern_type_from_string(StringView list_pattern_type);
|
||||
Optional<ListPatternStyle> list_pattern_style_from_string(StringView list_pattern_style);
|
||||
|
||||
Optional<StringView> get_locale_language_mapping(StringView locale, StringView language);
|
||||
Optional<StringView> get_locale_territory_mapping(StringView locale, StringView territory);
|
||||
Optional<StringView> get_locale_script_mapping(StringView locale, StringView script);
|
||||
Optional<StringView> get_locale_long_currency_mapping(StringView locale, StringView currency);
|
||||
Optional<StringView> get_locale_short_currency_mapping(StringView locale, StringView currency);
|
||||
Optional<StringView> get_locale_narrow_currency_mapping(StringView locale, StringView currency);
|
||||
Optional<StringView> get_locale_numeric_currency_mapping(StringView locale, StringView currency);
|
||||
Optional<StringView> get_locale_currency_mapping(StringView locale, StringView currency, Style style);
|
||||
Vector<StringView> get_locale_key_mapping(StringView locale, StringView keyword);
|
||||
Optional<StringView> get_locale_key_mapping(StringView locale, StringView keyword);
|
||||
Vector<StringView> get_locale_key_mapping_list(StringView locale, StringView keyword);
|
||||
|
||||
Optional<ListPatterns> get_locale_list_patterns(StringView locale, StringView type, StringView style);
|
||||
|
||||
@ -155,9 +168,12 @@ Optional<StringView> resolve_territory_alias(StringView territory);
|
||||
Optional<StringView> resolve_script_tag_alias(StringView script_tag);
|
||||
Optional<StringView> resolve_variant_alias(StringView variant);
|
||||
Optional<StringView> resolve_subdivision_alias(StringView subdivision);
|
||||
void resolve_complex_language_aliases(LanguageID& language_id);
|
||||
|
||||
Optional<LanguageID> add_likely_subtags(LanguageID const& language_id);
|
||||
Optional<LanguageID> remove_likely_subtags(LanguageID const& language_id);
|
||||
String resolve_most_likely_territory(LanguageID const& language_id, StringView territory_alias);
|
||||
|
||||
Optional<String> resolve_most_likely_territory(Unicode::LanguageID const& language_id);
|
||||
String resolve_most_likely_territory_alias(LanguageID const& language_id, StringView territory_alias);
|
||||
|
||||
}
|
||||
|
@ -15,7 +15,6 @@
|
||||
# endif
|
||||
#else
|
||||
# include <AK/Function.h>
|
||||
# include <LibUnicode/Locale.h>
|
||||
#endif
|
||||
|
||||
namespace Unicode::Detail {
|
||||
@ -91,25 +90,6 @@ Symbols const& Symbols::ensure_loaded()
|
||||
load_symbol(symbols.code_point_has_script, "unicode_code_point_has_script");
|
||||
load_symbol(symbols.code_point_has_script_extension, "unicode_code_point_has_script_extension");
|
||||
|
||||
load_symbol(symbols.locale_from_string, "unicode_locale_from_string");
|
||||
load_symbol(symbols.get_locale_language_mapping, "unicode_get_locale_language_mapping");
|
||||
load_symbol(symbols.get_locale_territory_mapping, "unicode_get_locale_territory_mapping");
|
||||
load_symbol(symbols.get_locale_script_tag_mapping, "unicode_get_locale_script_tag_mapping");
|
||||
load_symbol(symbols.get_locale_long_currency_mapping, "unicode_get_locale_long_currency_mapping");
|
||||
load_symbol(symbols.get_locale_short_currency_mapping, "unicode_get_locale_short_currency_mapping");
|
||||
load_symbol(symbols.get_locale_narrow_currency_mapping, "unicode_get_locale_narrow_currency_mapping");
|
||||
load_symbol(symbols.get_locale_numeric_currency_mapping, "unicode_get_locale_numeric_currency_mapping");
|
||||
load_symbol(symbols.get_locale_key_mapping, "unicode_get_locale_key_mapping");
|
||||
load_symbol(symbols.get_locale_list_pattern_mapping, "unicode_get_locale_list_pattern_mapping");
|
||||
load_symbol(symbols.resolve_language_alias, "unicode_resolve_language_alias");
|
||||
load_symbol(symbols.resolve_territory_alias, "unicode_resolve_territory_alias");
|
||||
load_symbol(symbols.resolve_script_tag_alias, "unicode_resolve_script_tag_alias");
|
||||
load_symbol(symbols.resolve_variant_alias, "unicode_resolve_variant_alias");
|
||||
load_symbol(symbols.resolve_subdivision_alias, "unicode_resolve_subdivision_alias");
|
||||
load_symbol(symbols.resolve_complex_language_aliases, "unicode_resolve_complex_language_aliases");
|
||||
load_symbol(symbols.add_likely_subtags, "unicode_add_likely_subtags");
|
||||
load_symbol(symbols.resolve_most_likely_territory, "unicode_resolve_most_likely_territory");
|
||||
|
||||
initialized = true;
|
||||
return symbols;
|
||||
}
|
||||
|
@ -38,32 +38,6 @@ struct Symbols {
|
||||
bool (*code_point_has_script)(u32, Script) { nullptr };
|
||||
bool (*code_point_has_script_extension)(u32, Script) { nullptr };
|
||||
|
||||
// Loaded from UnicodeLocale.cpp:
|
||||
|
||||
Optional<Locale> (*locale_from_string)(StringView) { nullptr };
|
||||
|
||||
Optional<StringView> (*get_locale_language_mapping)(StringView, StringView) { nullptr };
|
||||
Optional<StringView> (*get_locale_territory_mapping)(StringView, StringView) { nullptr };
|
||||
Optional<StringView> (*get_locale_script_tag_mapping)(StringView, StringView) { nullptr };
|
||||
Optional<StringView> (*get_locale_long_currency_mapping)(StringView, StringView) { nullptr };
|
||||
Optional<StringView> (*get_locale_short_currency_mapping)(StringView, StringView) { nullptr };
|
||||
Optional<StringView> (*get_locale_narrow_currency_mapping)(StringView, StringView) { nullptr };
|
||||
Optional<StringView> (*get_locale_numeric_currency_mapping)(StringView, StringView) { nullptr };
|
||||
Optional<StringView> (*get_locale_key_mapping)(StringView, StringView) { nullptr };
|
||||
|
||||
Optional<ListPatterns> (*get_locale_list_pattern_mapping)(StringView, StringView, StringView) { nullptr };
|
||||
|
||||
Optional<StringView> (*resolve_language_alias)(StringView) { nullptr };
|
||||
Optional<StringView> (*resolve_territory_alias)(StringView) { nullptr };
|
||||
Optional<StringView> (*resolve_script_tag_alias)(StringView) { nullptr };
|
||||
Optional<StringView> (*resolve_variant_alias)(StringView) { nullptr };
|
||||
Optional<StringView> (*resolve_subdivision_alias)(StringView) { nullptr };
|
||||
|
||||
void (*resolve_complex_language_aliases)(LanguageID&);
|
||||
|
||||
Optional<LanguageID> (*add_likely_subtags)(LanguageID const&);
|
||||
Optional<String> (*resolve_most_likely_territory)(LanguageID const&);
|
||||
|
||||
private:
|
||||
Symbols() = default;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user