summaryrefslogtreecommitdiff
path: root/internal/calendar/temporal_ef.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/calendar/temporal_ef.go')
-rw-r--r--internal/calendar/temporal_ef.go44
1 files changed, 44 insertions, 0 deletions
diff --git a/internal/calendar/temporal_ef.go b/internal/calendar/temporal_ef.go
index 2ead3e3..877545c 100644
--- a/internal/calendar/temporal_ef.go
+++ b/internal/calendar/temporal_ef.go
@@ -114,6 +114,10 @@ func temporalEF(date time.Time) temporalDay {
return efCel(TimeAfterPentecost, "ef-sacred-heart", White, RankClass1, 0)
case sameDay(date, efChristTheKing(y)):
return efCel(TimeAfterPentecost, "ef-christ-the-king", White, RankClass1, 0)
+ case sameDay(date, easter.AddDate(0, 0, 38)): // Wednesday: Vigil of the Ascension (II class)
+ return efCel(Easter_, "ef-ascension-vigil", White, RankClass2, 0)
+ case sameDay(date, easter.AddDate(0, 0, 48)): // Saturday: Vigil of Pentecost / Whitsun Eve (I class)
+ return efCel(Easter_, "ef-pentecost-vigil", Red, RankClass1, 0)
}
// Sundays vs ferias of the current season.
@@ -146,12 +150,52 @@ func temporalEF(date time.Time) temporalDay {
// the temporal office win, matching the 1962 occurrence rules.
rank = RankClass1
}
+ // The Ember Days of September and Advent (Wednesday, Friday, Saturday after
+ // the third Sunday of the month/season) are II class privileged ferias in
+ // violet; they displace a III class saint (only commemorated). The Lenten
+ // Ember days are already III class Lenten ferias, and the Whitsun Ember days
+ // fall inside the I class Pentecost octave handled above.
+ if es, ok := efEmberSlug(date, y); ok {
+ return efCel(season, es, Violet, RankClass2, week)
+ }
// Unique ferial slug (season-week-weekday) so proper ferias (Lent, Advent,
// Holy Week, Ember days) can key their own readings; green-season ferias
// simply have no lectionary entry and fall back to the Sunday.
return efCel(season, "ef-"+string(season)+"-"+strconv.Itoa(week)+"-"+weekdayLower(date), col, rank, week)
}
+// thirdSundayOfSeptember returns the third Sunday in September of year y.
+func thirdSundayOfSeptember(y int) time.Time {
+ d := time.Date(y, time.September, 1, 0, 0, 0, 0, time.UTC)
+ for d.Weekday() != time.Sunday {
+ d = d.AddDate(0, 0, 1)
+ }
+ return d.AddDate(0, 0, 14)
+}
+
+// efEmberSlug returns the Ember-day slug for date, if it is an Ember Wednesday,
+// Friday or Saturday of September or Advent (the day after the third Sunday +
+// 3/5/6). Returns ("", false) otherwise.
+func efEmberSlug(date time.Time, y int) (string, bool) {
+ for _, e := range []struct {
+ third time.Time
+ season string
+ }{
+ {thirdSundayOfSeptember(y), "september"},
+ {adventStart(y).AddDate(0, 0, 14), "advent"}, // 3rd Sunday of Advent
+ } {
+ switch {
+ case sameDay(date, e.third.AddDate(0, 0, 3)):
+ return "ef-" + e.season + "-ember-wed", true
+ case sameDay(date, e.third.AddDate(0, 0, 5)):
+ return "ef-" + e.season + "-ember-fri", true
+ case sameDay(date, e.third.AddDate(0, 0, 6)):
+ return "ef-" + e.season + "-ember-sat", true
+ }
+ }
+ return "", false
+}
+
func weekdayLower(d time.Time) string {
return strings.ToLower(d.Weekday().String())
}