mirror of
				https://github.com/LadybirdBrowser/ladybird.git
				synced 2025-10-31 21:30:58 +00:00 
			
		
		
		
	 c5138f0f2b
			
		
	
	
		c5138f0f2b
		
	
	
	
	
		
			
			We had a hard-coded table of number system digits copied from ECMA-402. Turns out these digits are in the CLDR, so let's parse the digits from there instead of hard-coding them.
		
			
				
	
	
		
			84 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2021, Tim Flynn <trflynn89@pm.me>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <AK/Optional.h>
 | |
| #include <AK/String.h>
 | |
| #include <AK/StringView.h>
 | |
| #include <AK/Vector.h>
 | |
| #include <LibUnicode/Forward.h>
 | |
| 
 | |
| 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<StringView> identifiers {};
 | |
| };
 | |
| 
 | |
| enum class NumericSymbol : u8 {
 | |
|     Decimal,
 | |
|     Exponential,
 | |
|     Group,
 | |
|     Infinity,
 | |
|     MinusSign,
 | |
|     NaN,
 | |
|     PercentSign,
 | |
|     PlusSign,
 | |
| };
 | |
| 
 | |
| Optional<NumberSystem> number_system_from_string(StringView system);
 | |
| Optional<StringView> get_default_number_system(StringView locale);
 | |
| 
 | |
| Optional<StringView> get_number_system_symbol(StringView locale, StringView system, NumericSymbol symbol);
 | |
| Optional<NumberGroupings> get_number_system_groupings(StringView locale, StringView system);
 | |
| 
 | |
| Optional<Span<u32 const>> get_digits_for_number_system(StringView system);
 | |
| String replace_digits_for_number_system(StringView system, StringView number);
 | |
| 
 | |
| Optional<NumberFormat> get_standard_number_system_format(StringView locale, StringView system, StandardNumberFormatType type);
 | |
| Vector<NumberFormat> get_compact_number_system_formats(StringView locale, StringView system, CompactNumberFormatType type);
 | |
| Vector<NumberFormat> get_unit_formats(StringView locale, StringView unit, Style style);
 | |
| 
 | |
| Optional<NumberFormat> select_pattern_with_plurality(Vector<NumberFormat> const& formats, double number);
 | |
| Optional<String> augment_currency_format_pattern(StringView currency_display, StringView base_pattern);
 | |
| 
 | |
| }
 |