mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-09-02 15:46:33 +00:00
LibJS+LibUnicode: Port Intl.DurationFormat to UTF-16 strings
This commit is contained in:
parent
e637e148d4
commit
6fe0e13474
Notes:
github-actions[bot]
2025-07-24 08:41:19 +00:00
Author: https://github.com/trflynn89
Commit: 6fe0e13474
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5581
4 changed files with 21 additions and 21 deletions
|
@ -407,7 +407,7 @@ Vector<DurationFormatPart> format_numeric_hours(VM& vm, DurationFormat const& du
|
|||
|
||||
for (auto& part : hours_parts) {
|
||||
// a. Append the Record { [[Type]]: part.[[Type]], [[Value]]: part.[[Value]], [[Unit]]: "hour" } to result.
|
||||
result.unchecked_append({ .type = part.type, .value = part.value.to_utf8_but_should_be_ported_to_utf16(), .unit = "hour"sv });
|
||||
result.unchecked_append({ .type = part.type, .value = move(part.value), .unit = "hour"sv });
|
||||
}
|
||||
|
||||
// 13. Return result.
|
||||
|
@ -472,7 +472,7 @@ Vector<DurationFormatPart> format_numeric_minutes(VM& vm, DurationFormat const&
|
|||
|
||||
for (auto& part : minutes_parts) {
|
||||
// a. Append the Record { [[Type]]: part.[[Type]], [[Value]]: part.[[Value]], [[Unit]]: "minute" } to result.
|
||||
result.unchecked_append({ .type = part.type, .value = part.value.to_utf8_but_should_be_ported_to_utf16(), .unit = "minute"sv });
|
||||
result.unchecked_append({ .type = part.type, .value = move(part.value), .unit = "minute"sv });
|
||||
}
|
||||
|
||||
// 14. Return result.
|
||||
|
@ -560,7 +560,7 @@ Vector<DurationFormatPart> format_numeric_seconds(VM& vm, DurationFormat const&
|
|||
|
||||
for (auto& part : seconds_parts) {
|
||||
// a. Append the Record { [[Type]]: part.[[Type]], [[Value]]: part.[[Value]], [[Unit]]: "second" } to result.
|
||||
result.unchecked_append({ .type = part.type, .value = part.value.to_utf8_but_should_be_ported_to_utf16(), .unit = "second"sv });
|
||||
result.unchecked_append({ .type = part.type, .value = move(part.value), .unit = "second"sv });
|
||||
}
|
||||
|
||||
// 18. Return result.
|
||||
|
@ -786,7 +786,7 @@ Vector<DurationFormatPart> list_format_parts(VM& vm, DurationFormat const& durat
|
|||
VERIFY(list_part.type == "literal"sv);
|
||||
|
||||
// ii. Append the Record { [[Type]]: "literal", [[Value]]: listPart.[[Value]], [[Unit]]: empty } to flattenedPartsList.
|
||||
flattened_parts_list.append({ .type = "literal"sv, .value = list_part.value.to_utf8_but_should_be_ported_to_utf16(), .unit = {} });
|
||||
flattened_parts_list.append({ .type = "literal"sv, .value = move(list_part.value), .unit = {} });
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -922,7 +922,7 @@ Vector<DurationFormatPart> partition_duration_format_pattern(VM& vm, DurationFor
|
|||
|
||||
for (auto& part : parts) {
|
||||
// a. Append the Record { [[Type]]: part.[[Type]], [[Value]]: part.[[Value]], [[Unit]]: numberFormatUnit } to list.
|
||||
list.unchecked_append({ .type = part.type, .value = part.value.to_utf8_but_should_be_ported_to_utf16(), .unit = number_format_unit.as_string() });
|
||||
list.unchecked_append({ .type = part.type, .value = move(part.value), .unit = number_format_unit.as_string() });
|
||||
}
|
||||
|
||||
// 11. Append list to result.
|
||||
|
|
|
@ -82,11 +82,11 @@ public:
|
|||
void set_numbering_system(String numbering_system) { m_numbering_system = move(numbering_system); }
|
||||
String const& numbering_system() const { return m_numbering_system; }
|
||||
|
||||
void set_hour_minute_separator(String hour_minute_separator) { m_hour_minute_separator = move(hour_minute_separator); }
|
||||
String const& hour_minute_separator() const { return m_hour_minute_separator; }
|
||||
void set_hour_minute_separator(Utf16String hour_minute_separator) { m_hour_minute_separator = move(hour_minute_separator); }
|
||||
Utf16String const& hour_minute_separator() const { return m_hour_minute_separator; }
|
||||
|
||||
void set_minute_second_separator(String minute_second_separator) { m_minute_second_separator = move(minute_second_separator); }
|
||||
String const& minute_second_separator() const { return m_minute_second_separator; }
|
||||
void set_minute_second_separator(Utf16String minute_second_separator) { m_minute_second_separator = move(minute_second_separator); }
|
||||
Utf16String const& minute_second_separator() const { return m_minute_second_separator; }
|
||||
|
||||
void set_style(StringView style) { m_style = style_from_string(style); }
|
||||
Style style() const { return m_style; }
|
||||
|
@ -129,10 +129,10 @@ public:
|
|||
private:
|
||||
explicit DurationFormat(Object& prototype);
|
||||
|
||||
String m_locale; // [[Locale]]
|
||||
String m_numbering_system; // [[NumberingSystem]]
|
||||
String m_hour_minute_separator; // [[HourMinutesSeparator]]
|
||||
String m_minute_second_separator; // [[MinutesSecondsSeparator]]
|
||||
String m_locale; // [[Locale]]
|
||||
String m_numbering_system; // [[NumberingSystem]]
|
||||
Utf16String m_hour_minute_separator; // [[HourMinutesSeparator]]
|
||||
Utf16String m_minute_second_separator; // [[MinutesSecondsSeparator]]
|
||||
|
||||
Style m_style { Style::Long }; // [[Style]]
|
||||
DurationUnitOptions m_years_options; // [[YearsOptions]]
|
||||
|
@ -178,7 +178,7 @@ static constexpr auto duration_instances_components = to_array<DurationInstanceC
|
|||
|
||||
struct DurationFormatPart {
|
||||
StringView type;
|
||||
String value;
|
||||
Utf16String value;
|
||||
StringView unit;
|
||||
};
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2024, Tim Flynn <trflynn89@serenityos.org>
|
||||
* Copyright (c) 2024-2025, Tim Flynn <trflynn89@ladybird.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
@ -72,12 +72,12 @@ DigitalFormat digital_format(StringView locale)
|
|||
digital_format.uses_two_digit_hours = hours.length() == 2;
|
||||
|
||||
auto hours_minutes_separator = lexer.consume_while(is_not_ascii_digit);
|
||||
digital_format.hours_minutes_separator = MUST(String::from_utf8(hours_minutes_separator));
|
||||
digital_format.hours_minutes_separator = Utf16String::from_utf8(hours_minutes_separator);
|
||||
|
||||
lexer.ignore_while(is_ascii_digit);
|
||||
|
||||
auto minutes_seconds_separator = lexer.consume_while(is_not_ascii_digit);
|
||||
digital_format.minutes_seconds_separator = MUST(String::from_utf8(minutes_seconds_separator));
|
||||
digital_format.minutes_seconds_separator = Utf16String::from_utf8(minutes_seconds_separator);
|
||||
|
||||
locale_data->set_digital_format(move(digital_format));
|
||||
return *locale_data->digital_format();
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
/*
|
||||
* Copyright (c) 2024, Tim Flynn <trflynn89@serenityos.org>
|
||||
* Copyright (c) 2024-2025, Tim Flynn <trflynn89@ladybird.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AK/String.h>
|
||||
#include <AK/Utf16String.h>
|
||||
|
||||
namespace Unicode {
|
||||
|
||||
struct DigitalFormat {
|
||||
String hours_minutes_separator { ":"_string };
|
||||
String minutes_seconds_separator { ":"_string };
|
||||
Utf16String hours_minutes_separator { ":"_utf16 };
|
||||
Utf16String minutes_seconds_separator { ":"_utf16 };
|
||||
bool uses_two_digit_hours { false };
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue