mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 02:17:34 +00:00
LibJS: Respect per-locale minimum grouping digits when number formatting
This commit is contained in:
parent
2d2f713426
commit
cf92bc42a2
2 changed files with 28 additions and 12 deletions
|
@ -714,27 +714,29 @@ Vector<PatternPartition> partition_number_pattern(NumberFormat& number_format, d
|
||||||
static Vector<StringView> separate_integer_into_groups(Unicode::NumberGroupings const& grouping_sizes, StringView integer)
|
static Vector<StringView> separate_integer_into_groups(Unicode::NumberGroupings const& grouping_sizes, StringView integer)
|
||||||
{
|
{
|
||||||
Utf8View utf8_integer { integer };
|
Utf8View utf8_integer { integer };
|
||||||
|
if (utf8_integer.length() <= grouping_sizes.primary_grouping_size)
|
||||||
|
return { integer };
|
||||||
|
|
||||||
|
size_t index = utf8_integer.length() - grouping_sizes.primary_grouping_size;
|
||||||
|
if (index < grouping_sizes.minimum_grouping_digits)
|
||||||
|
return { integer };
|
||||||
|
|
||||||
Vector<StringView> groups;
|
Vector<StringView> groups;
|
||||||
|
|
||||||
auto add_group = [&](size_t index, size_t length) {
|
auto add_group = [&](size_t index, size_t length) {
|
||||||
groups.prepend(utf8_integer.unicode_substring_view(index, length).as_string());
|
groups.prepend(utf8_integer.unicode_substring_view(index, length).as_string());
|
||||||
};
|
};
|
||||||
|
|
||||||
if (utf8_integer.length() > grouping_sizes.primary_grouping_size) {
|
add_group(index, grouping_sizes.primary_grouping_size);
|
||||||
size_t index = utf8_integer.length() - grouping_sizes.primary_grouping_size;
|
|
||||||
add_group(index, grouping_sizes.primary_grouping_size);
|
|
||||||
|
|
||||||
while (index > grouping_sizes.secondary_grouping_size) {
|
while (index > grouping_sizes.secondary_grouping_size) {
|
||||||
index -= grouping_sizes.secondary_grouping_size;
|
index -= grouping_sizes.secondary_grouping_size;
|
||||||
add_group(index, grouping_sizes.secondary_grouping_size);
|
add_group(index, grouping_sizes.secondary_grouping_size);
|
||||||
}
|
|
||||||
|
|
||||||
if (index > 0)
|
|
||||||
add_group(0, index);
|
|
||||||
} else {
|
|
||||||
groups.append(integer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (index > 0)
|
||||||
|
add_group(0, index);
|
||||||
|
|
||||||
return groups;
|
return groups;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -378,6 +378,13 @@ describe("style=decimal", () => {
|
||||||
expect(ar.format(12345)).toBe("\u0661\u0662\u066c\u0663\u0664\u0665");
|
expect(ar.format(12345)).toBe("\u0661\u0662\u066c\u0663\u0664\u0665");
|
||||||
expect(ar.format(123456)).toBe("\u0661\u0662\u0663\u066c\u0664\u0665\u0666");
|
expect(ar.format(123456)).toBe("\u0661\u0662\u0663\u066c\u0664\u0665\u0666");
|
||||||
expect(ar.format(1234567)).toBe("\u0661\u066c\u0662\u0663\u0664\u066c\u0665\u0666\u0667");
|
expect(ar.format(1234567)).toBe("\u0661\u066c\u0662\u0663\u0664\u066c\u0665\u0666\u0667");
|
||||||
|
|
||||||
|
const plPl = new Intl.NumberFormat("pl-PL", { useGrouping: true });
|
||||||
|
expect(plPl.format(123)).toBe("123");
|
||||||
|
expect(plPl.format(1234)).toBe("1234");
|
||||||
|
expect(plPl.format(12345)).toBe("12\u00a0345");
|
||||||
|
expect(plPl.format(123456)).toBe("123\u00a0456");
|
||||||
|
expect(plPl.format(1234567)).toBe("1\u00a0234\u00a0567");
|
||||||
});
|
});
|
||||||
|
|
||||||
test("useGrouping=false", () => {
|
test("useGrouping=false", () => {
|
||||||
|
@ -401,6 +408,13 @@ describe("style=decimal", () => {
|
||||||
expect(ar.format(12345)).toBe("\u0661\u0662\u0663\u0664\u0665");
|
expect(ar.format(12345)).toBe("\u0661\u0662\u0663\u0664\u0665");
|
||||||
expect(ar.format(123456)).toBe("\u0661\u0662\u0663\u0664\u0665\u0666");
|
expect(ar.format(123456)).toBe("\u0661\u0662\u0663\u0664\u0665\u0666");
|
||||||
expect(ar.format(1234567)).toBe("\u0661\u0662\u0663\u0664\u0665\u0666\u0667");
|
expect(ar.format(1234567)).toBe("\u0661\u0662\u0663\u0664\u0665\u0666\u0667");
|
||||||
|
|
||||||
|
const plPl = new Intl.NumberFormat("pl-PL", { useGrouping: false });
|
||||||
|
expect(plPl.format(123)).toBe("123");
|
||||||
|
expect(plPl.format(1234)).toBe("1234");
|
||||||
|
expect(plPl.format(12345)).toBe("12345");
|
||||||
|
expect(plPl.format(123456)).toBe("123456");
|
||||||
|
expect(plPl.format(1234567)).toBe("1234567");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue