ladybird/Libraries/LibUnicode
Timothy Flynn 86c8a57794 LibJS+LibUnicode: Use icu4x for Temporal calendar operations
Replace the icu4c-based calendar implementation with one built on the
icu4x Rust crate (icu_calendar).

The icu4c API does not expose the píngqì month-assignment algorithm
used by the Chinese and Dangi lunisolar calendars. Our old code had to
approximate this by walking months via epoch millisecond arithmetic and
manually tracking leap month positions, which produced incorrect month
codes and ordinal month numbers for certain years. The icu4x calendar
crate handles píngqì natively.

With this patch, which is almost a 1-to-1 mapping of ICU invocations, we
pass 100% of all Temporal test262 tests.

The end goal might be to use icu4x for all of our ICU needs. But it does
not yet provide the APIs needed for all ECMA-402 prototypes.
2026-03-11 07:09:57 -04:00
..
Rust LibJS+LibUnicode: Use icu4x for Temporal calendar operations 2026-03-11 07:09:57 -04:00
Calendar.cpp LibJS+LibUnicode: Use icu4x for Temporal calendar operations 2026-03-11 07:09:57 -04:00
Calendar.h LibJS+LibUnicode: Use icu4x for Temporal calendar operations 2026-03-11 07:09:57 -04:00
CharacterTypes.cpp LibUnicode: Add Unicode case folding support for regex matching 2026-02-16 07:51:00 -05:00
CharacterTypes.h LibUnicode: Add Unicode case folding support for regex matching 2026-02-16 07:51:00 -05:00
CMakeLists.txt LibJS+LibUnicode: Use icu4x for Temporal calendar operations 2026-03-11 07:09:57 -04:00
Collator.cpp LibUnicode: Print error codes when calls to ICU fail 2026-02-21 16:55:36 -05:00
Collator.h LibJS+LibUnicode: Port Intl.Collator to UTF-16 strings 2025-07-24 10:39:52 +02:00
CurrencyCode.cpp Everywhere: Include HashMap only where it's actually used 2024-12-09 12:31:16 +01:00
CurrencyCode.h Everywhere: Include HashMap only where it's actually used 2024-12-09 12:31:16 +01:00
DateTimeFormat.cpp LibJS+LibUnicode: Use icu4x for Temporal calendar operations 2026-03-11 07:09:57 -04:00
DateTimeFormat.h LibUnicode: Preserve original ICU pattern in CalendarPattern 2026-03-09 19:02:59 +01:00
DisplayNames.cpp LibJS+LibUnicode: Port Intl.DisplayNames to UTF-16 strings 2025-07-24 10:39:52 +02:00
DisplayNames.h LibJS+LibUnicode: Port Intl.DisplayNames to UTF-16 strings 2025-07-24 10:39:52 +02:00
DurationFormat.cpp LibJS+LibUnicode: Port Intl.DurationFormat to UTF-16 strings 2025-07-24 10:39:52 +02:00
DurationFormat.h LibJS+LibUnicode: Port Intl.DurationFormat to UTF-16 strings 2025-07-24 10:39:52 +02:00
Forward.h LibJS+LibUnicode: Migrate some Temporal calendar types to LibUnicode 2026-03-09 11:40:59 +01:00
ICU.cpp LibJS+LibUnicode: Use icu4x for Temporal calendar operations 2026-03-11 07:09:57 -04:00
ICU.h LibJS+LibUnicode: Use icu4x for Temporal calendar operations 2026-03-11 07:09:57 -04:00
IDNA.cpp Meta+LibUnicode+LibJS: Upgrade to ICU 76.1 2025-01-18 17:56:40 -05:00
IDNA.h LibUnicode: Support IgnorePunnycode option in ToAscii algorithm 2024-12-05 17:29:49 +01:00
ListFormat.cpp LibUnicode: Print error codes when calls to ICU fail 2026-02-21 16:55:36 -05:00
ListFormat.h LibJS+LibUnicode: Port Intl.ListFormat to UTF-16 strings 2025-07-24 10:39:52 +02:00
Locale.cpp LibUnicode: Print error codes when calls to ICU fail 2026-02-21 16:55:36 -05:00
Locale.h Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
Normalize.cpp Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
Normalize.h Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
NumberFormat.cpp LibUnicode: Print error codes when calls to ICU fail 2026-02-21 16:55:36 -05:00
NumberFormat.h LibJS+LibUnicode: Support Intl.MathematicalValue in Intl.PluralRules 2026-02-06 12:19:46 -05:00
PartitionRange.h Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
PluralRules.cpp LibUnicode: Port Intl.PluralRules to UTF-16 strings 2025-07-24 10:39:52 +02:00
PluralRules.h LibUnicode: Port Intl.PluralRules to UTF-16 strings 2025-07-24 10:39:52 +02:00
RelativeTimeFormat.cpp LibUnicode: Print error codes when calls to ICU fail 2026-02-21 16:55:36 -05:00
RelativeTimeFormat.h LibJS+LibUnicode: Port Intl.RelativeTimeFormat to UTF-16 strings 2025-07-24 10:39:52 +02:00
Segmenter.cpp LibUnicode: Print error codes when calls to ICU fail 2026-02-21 16:55:36 -05:00
Segmenter.h LibUnicode+LibWeb: Add infrastructure for line segmentation using ICU 2026-02-14 16:23:18 -05:00
String.cpp Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
TimeZone.cpp LibJS+LibUnicode: Implement support for handling gaps in time zones 2026-03-09 11:40:59 +01:00
TimeZone.h LibUnicode: Add ability to find time zone transitions 2026-01-16 07:00:02 -05:00
UnicodeKeywords.cpp LibJS+LibUnicode: Implement retrieval of collator keyword values 2025-06-03 09:03:33 +12:00
UnicodeKeywords.h Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
Utf16String.cpp AK+LibUnicode: Implement Unicode-aware UTF-16 case transformations 2025-07-25 18:16:22 +02:00