mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 09:48:11 +00:00
LibJS+LibUnicode: Support multiple identifiers within format pattern
This wasn't the case for compact patterns, but unit patterns can contain multiple (up to 2, really) identifiers that must each be recognized by LibJS. Each generated NumberFormat object now stores an array of identifiers parsed. The format pattern itself is encoded with the index into this array for that identifier, e.g. the compact format string "0K" will become "{number}{compactIdentifier:0}".
This commit is contained in:
parent
3b68370212
commit
04b8b87c17
3 changed files with 72 additions and 40 deletions
|
@ -962,11 +962,14 @@ Vector<PatternPartition> partition_notation_sub_pattern(NumberFormat& number_for
|
|||
}
|
||||
// iv. Else if p is equal to "compactSymbol", then
|
||||
// v. Else if p is equal to "compactName", then
|
||||
else if (part == "compactIdentifier"sv) {
|
||||
else if (part.starts_with("compactIdentifier:"sv)) {
|
||||
// Note: Our implementation combines "compactSymbol" and "compactName" into one field, "compactIdentifier".
|
||||
|
||||
auto identifier_index = part.substring_view("compactIdentifier:"sv.length()).to_uint();
|
||||
VERIFY(identifier_index.has_value());
|
||||
|
||||
// 1. Let compactSymbol be an ILD string representing exponent in short form, which may depend on x in languages having different plural forms. The implementation must be able to provide this string, or else the pattern would not have a "{compactSymbol}" placeholder.
|
||||
auto compact_identifier = number_format.compact_format().identifier;
|
||||
auto compact_identifier = number_format.compact_format().identifiers[*identifier_index];
|
||||
|
||||
// 2. Append a new Record { [[Type]]: "compact", [[Value]]: compactSymbol } as the last element of result.
|
||||
result.append({ "compact"sv, compact_identifier });
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue