/* * Copyright (c) 2021, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace Unicode { struct LanguageID { bool is_root { false }; Optional language {}; Optional script {}; Optional region {}; Vector variants {}; }; struct LocaleID { LanguageID language_id {}; }; // Note: These methods only verify that the provided strings match the EBNF grammar of the // Unicode identifier subtag (i.e. no validation is done that the tags actually exist). bool is_unicode_language_subtag(StringView); bool is_unicode_script_subtag(StringView); bool is_unicode_region_subtag(StringView); bool is_unicode_variant_subtag(StringView); Optional parse_unicode_language_id(StringView); Optional parse_unicode_locale_id(StringView); Optional canonicalize_unicode_locale_id(LocaleID&); String const& default_locale(); bool is_locale_available(StringView locale); Optional get_locale_language_mapping(StringView locale, StringView language); Optional get_locale_territory_mapping(StringView locale, StringView territory); Optional get_locale_script_mapping(StringView locale, StringView script); Optional get_locale_currency_mapping(StringView locale, StringView currency); }