diff options
| -rw-r--r-- | internal/caldata/caldata_test.go | 34 | ||||
| -rw-r--r-- | internal/caldata/tridentine-calendar.ini | 1 | ||||
| -rw-r--r-- | scripts/gen-sanctoral-ef.go | 35 |
3 files changed, 49 insertions, 21 deletions
diff --git a/internal/caldata/caldata_test.go b/internal/caldata/caldata_test.go index 2cf10a5..a9bc860 100644 --- a/internal/caldata/caldata_test.go +++ b/internal/caldata/caldata_test.go @@ -74,13 +74,16 @@ func TestTridentineLoads(t *testing.T) { t.Fatalf("EF sanctoral has only %d entries; expected the full calendar", len(l.Cels)) } // Landmark feasts must be present with the right rank/class: Sts Peter & Paul - // (I class, 06-29), the Purification/Presentation (II class, 02-02 -- a - // feast of the BLESSED VIRGIN, calendarium "IN PURIFICATIONE B. MARIAE - // VIRG.", NOT of the Lord; class must be empty, not "lord"), the - // Immaculate Conception (I class, 12-08). + // (I class, 06-29), the Purification/Presentation (II class, 02-02, class + // = lord -- see classOf's own doc comment in scripts/gen-sanctoral-ef.go + // for why: the calendarium's own title names the BLESSED VIRGIN, but the + // tag exists to drive OCCURRENCE behaviour, and missalemeum -- this + // data's own oracle -- shows the Purification taking a II-class Sunday's + // place outright, the "festum Domini" pattern, not the ordinary-BVM + // pattern), the Immaculate Conception (I class, 12-08). want := map[string]struct{ date, rank, class string }{ "sts-peter-paul": {"06-29", "class-1", ""}, - "purification-of-the-blessed-virgin-mary": {"02-02", "class-2", ""}, + "purification-of-the-blessed-virgin-mary": {"02-02", "class-2", "lord"}, "immaculate-conception-of-the-blessed-virgin-mary": {"12-08", "class-1", ""}, } for slug, w := range want { @@ -106,15 +109,18 @@ func TestTridentineLoads(t *testing.T) { } // TestTridentineClassOfLord: scripts/gen-sanctoral-ef.go's classOf tags -// feasts of the Lord (class = lord). Two entries were wrongly tagged lord -// (title-substring false positives: "purification" always meant the BVM's -// own feast, calendarium "IN PURIFICATIONE B. MARIAE VIRG."; "holy name" -// alone matched both "Holy Name of Jesus" and "Most Holy Name of MARY", -// calendarium "Sanctissimi Nominis Mariae"), and one was missing the tag -// entirely (13 January's title ends "of THE Lord", not "of OUR Lord", the -// only suffix classOf used to check -- calendarium "IN COMMEMORATIONE -// BAPTISMATIS D. N. I. C."). See TestTridentineLoads for the Purification's -// own class assertion (kept there, alongside its date/rank, not duplicated). +// feasts of the Lord (class = lord). "Most Holy Name of Mary" was wrongly +// tagged lord (a title-substring false positive: "holy name" alone matches +// both "Holy Name of Jesus" and "Most Holy Name of MARY", calendarium +// "Sanctissimi Nominis Mariae") and is fixed here, not contested. The +// Baptism commemoration was missing the tag entirely (13 January's title +// ends "of THE Lord", not "of OUR Lord", the only suffix classOf used to +// check -- calendarium "IN COMMEMORATIONE BAPTISMATIS D. N. I. C."), also +// fixed and not contested. The Purification is DELIBERATELY absent from +// this table: it stays tagged lord, on occurrence-behaviour evidence, not +// the calendarium's title -- see TestTridentineLoads and classOf's own doc +// comment in scripts/gen-sanctoral-ef.go for the full account of why it is +// the one contested case, not a clean-cut fix. func TestTridentineClassOfLord(t *testing.T) { l := Tridentine() want := map[string]string{ diff --git a/internal/caldata/tridentine-calendar.ini b/internal/caldata/tridentine-calendar.ini index 203f82f..9010845 100644 --- a/internal/caldata/tridentine-calendar.ini +++ b/internal/caldata/tridentine-calendar.ini @@ -220,6 +220,7 @@ reading.gospel = John 12:24-26 date = 02-02 rank = class-2 colour = white +class = lord name.en = Purification of the Blessed Virgin Mary reading.first = Mal 3:1-4 reading.gospel = Luke 2:22-32 diff --git a/scripts/gen-sanctoral-ef.go b/scripts/gen-sanctoral-ef.go index e5392d3..75ee70d 100644 --- a/scripts/gen-sanctoral-ef.go +++ b/scripts/gen-sanctoral-ef.go @@ -118,17 +118,37 @@ func rankOf(n int) calendar.Rank { // feasts of the same class are only commemorated on a Sunday, so they need no // marker. // -// Two substring checks are deliberately narrower than they once were, and one -// is new, all found by checking the calendarium's own verbatim titles -// (missale-romanum-1962.pdf) against what this function produced: -// - "purification" is NOT a lord check at all -- the calendarium's own -// title is "IN PURIFICATIONE B. MARIAE VIRG.", a feast of the BLESSED -// VIRGIN, not the Lord. It was wrongly matching here. +// Two substring checks were narrowed, and one is new, found by checking the +// calendarium's own verbatim titles (missale-romanum-1962.pdf) against what +// this function produced -- but "purification" is a THIRD, DELIBERATELY +// DIFFERENT case, kept matching rather than narrowed, and the reason is +// itself worth recording: +// - "purification" IS kept as a lord match, even though the calendarium's +// own title is "IN PURIFICATIONE B. MARIAE VIRG." (a feast of the BLESSED +// VIRGIN by name). The tag's actual job here is not naming/colour +// categorisation -- it exists solely to drive the occurrence rule +// ("a II-class feast of the Lord takes an occurring Sunday's place +// outright"), and on THAT question the calendarium's title is not the +// decisive evidence: missalemeum -- the same oracle this generator's own +// data is bootstrapped from -- shows the Purification taking a II-class +// Sunday's place OUTRIGHT with commemorations EMPTY (confirmed live, +// 2014-02-02, 2020-02-02, 2025-02-02), the exact "festum Domini" pattern, +// not the ordinary-BVM-feast pattern (control: the Nativity of the BVM, +// 8 September, on a Sunday -- 2019-09-08 -- shows the SUNDAY observed, +// the feast merely commemorated, the opposite shape). An earlier version +// of this comment (and this codebase) untagged it on the calendarium's +// title alone; that was reversed after the same live check colitur's own +// review independently ran (colitur git history: cab8b07 retags it BVM, +// then 7d3b5ec reverses that "follow the oracle... a different project +// could reasonably rule the other way on the same evidence" -- recorded +// as a genuinely contested point, not a clean-cut error, but the +// occurrence-behaviour evidence is what this tag is FOR). // - "holy name" alone is ambiguous: it matches BOTH "Holy Name of Jesus" // (a feast of the Lord) and "Most Holy Name of Mary"/"Holy Name of Mary" // (a feast of the BVM, calendarium: "Sanctissimi Nominis Mariae") -- // wrongly matching the latter too. Excluded whenever the title also -// names Mary. +// names Mary. Unlike the Purification, this one is NOT contested: its +// occurrence behaviour matches the ordinary-BVM pattern too. // - "baptism" is a new case: "Commemoration of the Baptism of the Lord" (13 // January, calendarium: "IN COMMEMORATIONE BAPTISMATIS D. N. I. C.") did // not match any existing case -- the HasSuffix check below requires "of @@ -139,6 +159,7 @@ func classOf(en string) string { switch { case strings.Contains(l, "holy cross"), // Exaltation / Finding of the Holy Cross strings.Contains(l, "transfiguration"), + strings.Contains(l, "purification"), // the Presentation of the Lord -- occurrence-behaviour evidence, see doc comment strings.Contains(l, "precious blood"), strings.Contains(l, "baptism"), strings.Contains(l, "holy name") && !strings.Contains(l, "mary"), |
