Skip to content

Commit

Permalink
Add formatting for Dangi calendar (#3846)
Browse files Browse the repository at this point in the history
* Add Dangi to more places in AnyCalendar

* Add Dangi calendar formatting

* FFI
  • Loading branch information
atcupps authored Aug 11, 2023
1 parent 2f4b6c2 commit c34d0f7
Show file tree
Hide file tree
Showing 102 changed files with 31,475 additions and 5 deletions.
41 changes: 41 additions & 0 deletions components/calendar/src/any_calendar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,7 @@ macro_rules! match_cal_and_date {
) => $e,
(&Self::Hebrew(ref $cal_matched), &AnyDateInner::Hebrew(ref $date_matched)) => $e,
(&Self::Coptic(ref $cal_matched), &AnyDateInner::Coptic(ref $date_matched)) => $e,
(&Self::Dangi(ref $cal_matched), &AnyDateInner::Dangi(ref $date_matched)) => $e,
(&Self::Roc(ref $cal_matched), &AnyDateInner::Roc(ref $date_matched)) => $e,
(&Self::Iso(ref $cal_matched), &AnyDateInner::Iso(ref $date_matched)) => $e,
_ => panic!(
Expand Down Expand Up @@ -319,6 +320,9 @@ impl Calendar for AnyCalendar {
(Self::Coptic(c), &mut AnyDateInner::Coptic(ref mut d)) => {
c.offset_date(d, offset.cast_unit())
}
(Self::Dangi(c), &mut AnyDateInner::Dangi(ref mut d)) => {
c.offset_date(d, offset.cast_unit())
}
(Self::Iso(c), &mut AnyDateInner::Iso(ref mut d)) => {
c.offset_date(d, offset.cast_unit())
}
Expand Down Expand Up @@ -477,6 +481,14 @@ impl Calendar for AnyCalendar {
) => c1
.until(d1, d2, c2, largest_unit, smallest_unit)
.cast_unit(),
(
Self::Dangi(c1),
Self::Dangi(c2),
AnyDateInner::Dangi(d1),
AnyDateInner::Dangi(d2),
) => c1
.until(d1, d2, c2, largest_unit, smallest_unit)
.cast_unit(),
(Self::Iso(c1), Self::Iso(c2), AnyDateInner::Iso(d1), AnyDateInner::Iso(d2)) => c1
.until(d1, d2, c2, largest_unit, smallest_unit)
.cast_unit(),
Expand Down Expand Up @@ -909,6 +921,7 @@ impl AnyCalendarKind {
b"indian" => AnyCalendarKind::Indian,
b"chinese" => AnyCalendarKind::Chinese,
b"coptic" => AnyCalendarKind::Coptic,
b"dangi" => AnyCalendarKind::Dangi,
b"iso" => AnyCalendarKind::Iso,
b"islamic" => AnyCalendarKind::IslamicObservational,
b"islamic_civil" => AnyCalendarKind::IslamicCivil,
Expand Down Expand Up @@ -945,6 +958,8 @@ impl AnyCalendarKind {
AnyCalendarKind::Chinese
} else if *x == value!("coptic") {
AnyCalendarKind::Coptic
} else if *x == value!("dangi") {
AnyCalendarKind::Dangi
} else if *x == value!("iso") {
AnyCalendarKind::Iso
} else if *x == value!("islamic") {
Expand Down Expand Up @@ -1188,6 +1203,18 @@ impl IntoAnyCalendar for Coptic {
}
}

impl IntoAnyCalendar for Dangi {
fn to_any(self) -> AnyCalendar {
AnyCalendar::Dangi(Dangi)
}
fn to_any_cloned(&self) -> AnyCalendar {
AnyCalendar::Dangi(Dangi)
}
fn date_to_any(&self, d: &Self::DateInner) -> AnyDateInner {
AnyDateInner::Dangi(*d)
}
}

impl IntoAnyCalendar for Persian {
fn to_any(self) -> AnyCalendar {
AnyCalendar::Persian(Persian)
Expand Down Expand Up @@ -1361,6 +1388,7 @@ mod tests {
fn test_any_construction() {
let buddhist = AnyCalendar::new(AnyCalendarKind::Buddhist);
let coptic = AnyCalendar::new(AnyCalendarKind::Coptic);
let dangi = AnyCalendar::new(AnyCalendarKind::Dangi);
let ethiopian = AnyCalendar::new(AnyCalendarKind::Ethiopian);
let ethioaa = AnyCalendar::new(AnyCalendarKind::EthiopianAmeteAlem);
let gregorian = AnyCalendar::new(AnyCalendarKind::Gregorian);
Expand All @@ -1378,6 +1406,7 @@ mod tests {
let roc = AnyCalendar::new(AnyCalendarKind::Roc);
let buddhist = Ref(&buddhist);
let coptic = Ref(&coptic);
let dangi = Ref(&dangi);
let ethiopian = Ref(&ethiopian);
let ethioaa = Ref(&ethioaa);
let gregorian = Ref(&gregorian);
Expand Down Expand Up @@ -1497,6 +1526,18 @@ mod tests {
CalendarError::UnknownMonthCode("M13".parse().unwrap(), "Chinese"),
);

single_test_roundtrip(dangi, "dangi", 400, "M02", 5);
single_test_roundtrip(dangi, "dangi", 4660, "M08", 29);
single_test_roundtrip(dangi, "dangi", -1300, "M11", 12);
single_test_error(
dangi,
"dangi",
10393,
"M00L",
1,
CalendarError::UnknownMonthCode("M00L".parse().unwrap(), "Dangi"),
);

single_test_roundtrip(japanese, "reiwa", 3, "M03", 1);
single_test_roundtrip(japanese, "heisei", 6, "M12", 1);
single_test_roundtrip(japanese, "meiji", 10, "M03", 1);
Expand Down
2 changes: 2 additions & 0 deletions components/datetime/data/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
"datetime/chinese/datesymbols@1",
"datetime/coptic/datelengths@1",
"datetime/coptic/datesymbols@1",
"datetime/dangi/datelengths@1",
"datetime/dangi/datesymbols@1",
"datetime/ethiopic/datelengths@1",
"datetime/ethiopic/datesymbols@1",
"datetime/gregory/datelengths@1",
Expand Down
10 changes: 10 additions & 0 deletions components/datetime/data/data/macros.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit c34d0f7

Please sign in to comment.