/* * Copyright (c) 2021, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace Unicode { struct NumberGroupings { u8 primary_grouping_size { 0 }; u8 secondary_grouping_size { 0 }; }; enum class StandardNumberFormatType : u8 { Decimal, Currency, Accounting, Percent, Scientific, }; enum class CompactNumberFormatType : u8 { DecimalLong, DecimalShort, CurrencyUnit, CurrencyShort, }; struct NumberFormat { enum class Plurality : u8 { Other, Zero, Single, One, Two, Few, Many, }; u8 magnitude { 0 }; u8 exponent { 0 }; Plurality plurality { Plurality::Other }; StringView zero_format {}; StringView positive_format {}; StringView negative_format {}; Vector identifiers {}; }; enum class NumericSymbol : u8 { Decimal, Exponential, Group, Infinity, MinusSign, NaN, PercentSign, PlusSign, }; Optional get_number_system_symbol(StringView locale, StringView system, NumericSymbol symbol); Optional get_number_system_groupings(StringView locale, StringView system); Optional get_standard_number_system_format(StringView locale, StringView system, StandardNumberFormatType type); Vector get_compact_number_system_formats(StringView locale, StringView system, CompactNumberFormatType type); Vector get_unit_formats(StringView locale, StringView unit, Style style); Optional select_pattern_with_plurality(Vector const& formats, double number); Optional augment_currency_format_pattern(StringView currency_display, StringView base_pattern); }