summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--internal/caldata/caldata_test.go34
-rw-r--r--internal/caldata/tridentine-calendar.ini1
-rw-r--r--scripts/gen-sanctoral-ef.go35
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"),