Serenity Operating System
at master 77 lines 2.2 kB view raw
1/* 2 * Copyright (c) 2021-2023, Tim Flynn <trflynn89@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <AK/Error.h> 10#include <AK/Optional.h> 11#include <AK/String.h> 12#include <AK/StringView.h> 13#include <AK/Vector.h> 14#include <LibLocale/Forward.h> 15#include <LibLocale/PluralRules.h> 16 17namespace Locale { 18 19struct NumberGroupings { 20 u8 minimum_grouping_digits { 0 }; 21 u8 primary_grouping_size { 0 }; 22 u8 secondary_grouping_size { 0 }; 23}; 24 25enum class StandardNumberFormatType : u8 { 26 Decimal, 27 Currency, 28 Accounting, 29 Percent, 30 Scientific, 31}; 32 33enum class CompactNumberFormatType : u8 { 34 DecimalLong, 35 DecimalShort, 36 CurrencyUnit, 37 CurrencyShort, 38}; 39 40struct NumberFormat { 41 u8 magnitude { 0 }; 42 u8 exponent { 0 }; 43 PluralCategory plurality { PluralCategory::Other }; 44 StringView zero_format {}; 45 StringView positive_format {}; 46 StringView negative_format {}; 47 Vector<StringView> identifiers {}; 48}; 49 50enum class NumericSymbol : u8 { 51 ApproximatelySign, 52 Decimal, 53 Exponential, 54 Group, 55 Infinity, 56 MinusSign, 57 NaN, 58 PercentSign, 59 PlusSign, 60 RangeSeparator, 61 TimeSeparator, 62}; 63 64ErrorOr<Optional<StringView>> get_number_system_symbol(StringView locale, StringView system, NumericSymbol symbol); 65ErrorOr<Optional<NumberGroupings>> get_number_system_groupings(StringView locale, StringView system); 66 67Optional<ReadonlySpan<u32>> get_digits_for_number_system(StringView system); 68ErrorOr<String> replace_digits_for_number_system(StringView system, StringView number); 69 70ErrorOr<Optional<NumberFormat>> get_standard_number_system_format(StringView locale, StringView system, StandardNumberFormatType type); 71ErrorOr<Vector<NumberFormat>> get_compact_number_system_formats(StringView locale, StringView system, CompactNumberFormatType type); 72ErrorOr<Vector<NumberFormat>> get_unit_formats(StringView locale, StringView unit, Style style); 73 74ErrorOr<Optional<String>> augment_currency_format_pattern(StringView currency_display, StringView base_pattern); 75ErrorOr<Optional<String>> augment_range_pattern(StringView range_separator, StringView lower, StringView upper); 76 77}