/* * Copyright (c) 2021, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include namespace JS::Intl { using Fallback = Variant; struct LocaleOptions { Value locale_matcher; }; struct LocaleResult { String locale; String data_locale; }; struct PatternPartition { StringView type; StringView value; }; Optional is_structurally_valid_language_tag(StringView locale); String canonicalize_unicode_locale_id(Unicode::LocaleID& locale); Vector canonicalize_locale_list(GlobalObject&, Value locales); Optional best_available_locale(StringView const& locale); Vector best_fit_supported_locales(Vector const& requested_locales); Vector lookup_supported_locales(Vector const& requested_locales); Array* supported_locales(GlobalObject&, Vector const& requested_locales, Value options); Object* coerce_options_to_object(GlobalObject& global_object, Value options); Value get_option(GlobalObject& global_object, Value options, PropertyName const& property, Value::Type type, Vector const& values, Fallback fallback); Vector partition_pattern(StringView pattern); String insert_unicode_extension_and_canonicalize(Unicode::LocaleID locale_id, Unicode::LocaleExtension extension); LocaleResult resolve_locale(Vector const& requested_locales, LocaleOptions const& options, Vector const& relevant_extension_keys); Value canonical_code_for_display_names(GlobalObject&, DisplayNames::Type type, StringView code); }