diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-07-28 08:49:57 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-07-28 08:49:57 +0200 |
| commit | 70b805018f0ae0d8424c3c7de8f1169476385a35 (patch) | |
| tree | 82de4bf52e588ab0c1f31ce0fc68d4b97b3d0de6 /scripts | |
| parent | d3b7f41c7a823bda6b7bafae3a156348c4ce687f (diff) | |
| download | lectio-70b805018f0ae0d8424c3c7de8f1169476385a35.tar.gz lectio-70b805018f0ae0d8424c3c7de8f1169476385a35.zip | |
feat: complete OF+EF calendar coverage (movable feasts, vigils, ember days, transfers)
Ordinary Form:
- Add the movable Marian memorials that have no fixed date: Mary, Mother of the
Church (Monday after Pentecost) and the Immaculate Heart (Saturday after the
Sacred Heart), computed in computeOF.
- General Norms 60: two coinciding obligatory memorials both become optional and
the ferial is observed -- except Mary, Mother of the Church, which keeps
precedence per its 2018 decree.
Extraordinary Form:
- Capture fixed-date vigils in the sanctoral harvest (Christmas, the Nativity of
St John the Baptist, Sts Peter & Paul, St Lawrence, the Assumption, All Saints,
the Immaculate Conception) -- previously filtered out.
- temporalEF: the movable vigils of the Ascension (I class eve) and Pentecost
(Whitsun Eve), and the September/Advent Ember days (II class violet ferias).
- transferIfImpededEF: the Annunciation transfers past Holy Week/the Easter
octave to the Monday after Low Sunday; All Souls moves to Nov 3 when Nov 2 is a
Sunday.
- genlect harvests proper Masses for the new Ember/vigil days.
Adds TestEFCoverage + TestOFMovableMemorials. Bumps to 0.39.0.
Verified per-day: OF 0 real errors vs calapi (2026-2028, 100% correct-observed);
EF 0 real errors vs missalemeum (2025-2027), residual = deep-tail vigil-occurrence
and St Joseph Passiontide-transfer edges (~1-2 days/yr, documented).
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/gen-sanctoral-ef.go | 11 | ||||
| -rw-r--r-- | scripts/genlect.go | 6 |
2 files changed, 13 insertions, 4 deletions
diff --git a/scripts/gen-sanctoral-ef.go b/scripts/gen-sanctoral-ef.go index f40fe34..e3ad18e 100644 --- a/scripts/gen-sanctoral-ef.go +++ b/scripts/gen-sanctoral-ef.go @@ -133,11 +133,16 @@ func classOf(en string) string { return "" } -// isSaintTitle rejects the temporal commemorations that share the sancti: -// namespace (octave days, vigils) so only genuine saints/feasts are harvested. +// isSaintTitle rejects the purely temporal offices that share the sancti: +// namespace (octave days, ferias, Ember days) so only genuine celebrations are +// harvested. Vigils of fixed feasts (Christmas, the Nativity of St John the +// Baptist, Sts Peter & Paul, St Lawrence, the Assumption, All Saints, the +// Immaculate Conception) ARE kept: they are proper liturgical days on a fixed +// date. The movable vigils (Ascension, Pentecost) live in the tempora namespace +// and are computed by the temporal engine, not harvested here. func isSaintTitle(t string) bool { l := strings.ToLower(t) - for _, bad := range []string{"octave", "vigil", "feria", "ember", "rogation", "sunday", "within the"} { + for _, bad := range []string{"octave", "feria", "ember", "rogation", "sunday", "within the"} { if strings.Contains(l, bad) { return false } diff --git a/scripts/genlect.go b/scripts/genlect.go index 85ff1c2..6d7a43b 100644 --- a/scripts/genlect.go +++ b/scripts/genlect.go @@ -100,7 +100,11 @@ func main() { } slug := day.Observed.Slug isSunday := d.Weekday() == time.Sunday - if !isSunday && !properFerial[day.Season] { + // Ember and vigil days have a proper Mass even in the green seasons, so + // harvest them regardless of season (green ferias otherwise repeat the + // preceding Sunday and are skipped). + special := strings.Contains(slug, "ember") || strings.Contains(slug, "vigil") + if !isSunday && !properFerial[day.Season] && !special { continue // green-season feria -> repeats the Sunday } if seen[slug] { |
