summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--internal/caldata/roman-calendar.ini246
-rw-r--r--scripts/gen-sanctoral.go47
2 files changed, 225 insertions, 68 deletions
diff --git a/internal/caldata/roman-calendar.ini b/internal/caldata/roman-calendar.ini
index a11655c..63fd703 100644
--- a/internal/caldata/roman-calendar.ini
+++ b/internal/caldata/roman-calendar.ini
@@ -61,21 +61,21 @@ name.en = Saint Anthony of Egypt, abbot
name.pl = św. Antoniego, opata
name.la = S. Antonii, abbatis
-[fabian-pope-and-martyr]
+[sebastian-martyr]
date = 01-20
rank = optional
class = saint
colour = red
-name.en = Saint Fabian, pope and martyr
-name.la = S. Fabiani, papae et martyris
+name.en = Saint Sebastian, martyr
+name.la = S. Sebastiani, martyris
-[sebastian-martyr]
+[fabian-pope-and-martyr]
date = 01-20
rank = optional
class = saint
colour = red
-name.en = Saint Sebastian, martyr
-name.la = S. Sebastiani, martyris
+name.en = Saint Fabian, pope and martyr
+name.la = S. Fabiani, papae et martyris
[agnes-virgin-and-martyr]
date = 01-21
@@ -255,6 +255,14 @@ name.en = Chair of Saint Peter, apostle
name.pl = katedry św. Piotra Apostoła
name.la = Cathedrae S. Petri, apostoli
+[polycarp-bishop-and-martyr]
+date = 02-23
+rank = memorial
+class = saint
+colour = red
+name.en = Saint Polycarp, bishop and martyr
+name.la = S. Polycarpi, episcopi et martyris
+
[casimir]
date = 03-04
rank = optional
@@ -263,6 +271,46 @@ colour = white
name.en = Saint Casimir
name.la = S. Casimiri
+[saints-perpetua-and-felicity-martyrs]
+date = 03-07
+rank = optional
+class = saint
+colour = violet
+name.en = Saints Perpetua and Felicity, martyrs
+name.la = Ss. Perpetuae et Felicitatis, martyrum
+
+[john-of-god-religious]
+date = 03-08
+rank = optional
+class = saint
+colour = violet
+name.en = Saint John of God, religious
+name.la = S. Ioannis a Deo, religiosi
+
+[frances-of-rome-religious]
+date = 03-09
+rank = optional
+class = saint
+colour = violet
+name.en = Saint Frances of Rome, religious
+name.la = S. Franciscae Romanae, religiosae
+
+[patrick-bishop]
+date = 03-17
+rank = optional
+class = saint
+colour = violet
+name.en = Saint Patrick, bishop
+name.la = S. Patricii, episcopi
+
+[cyril-of-jerusalem-bishop-and-doctor]
+date = 03-18
+rank = optional
+class = saint
+colour = violet
+name.en = Saint Cyril of Jerusalem, bishop and doctor
+name.la = S. Cyrilli Hierosolymitani, episcopi et Ecclesiae doctoris
+
[joseph-husband-of-the-blessed-virgin-mary]
date = 03-19
rank = solemnity
@@ -272,6 +320,14 @@ name.en = Saint Joseph Husband of the Blessed Virgin Mary
name.pl = św. Józefa, Oblubieńca Najświętszej Maryi Panny
name.la = S. IOSEPH, SPONSI B. M. V.
+[turibius-of-mogrovejo-bishop]
+date = 03-23
+rank = optional
+class = saint
+colour = violet
+name.en = Saint Turibius of Mogrovejo, bishop
+name.la = S. Turibii de Mongrovejo, episcopi
+
[annunciation-of-the-lord]
date = 03-25
rank = solemnity
@@ -281,6 +337,30 @@ name.en = Annunciation of the Lord
name.pl = Zwiastowania Pańskiego
name.la = IN ANNUNTIATIONE DOMINI
+[francis-of-paola-hermit]
+date = 04-02
+rank = optional
+class = saint
+colour = violet
+name.en = Saint Francis of Paola, hermit
+name.la = S. Francisci de Paola, eremitae
+
+[isidore-bishop-and-doctor-of-the-church]
+date = 04-04
+rank = optional
+class = saint
+colour = violet
+name.en = Saint Isidore, bishop and doctor of the Church
+name.la = S. Isidori, episcopi et Ecclesiae doctoris
+
+[vincent-ferrer-priest]
+date = 04-05
+rank = optional
+class = saint
+colour = violet
+name.en = Saint Vincent Ferrer, priest
+name.la = S. Vincentii Ferrer, presbyteri
+
[john-baptist-de-la-salle-priest]
date = 04-07
rank = memorial
@@ -289,6 +369,14 @@ colour = white
name.en = Saint John Baptist de la Salle, priest
name.la = S. Ioannis Baptistae de la Salle, presbyteri
+[stanislaus-bishop-and-martyr]
+date = 04-11
+rank = memorial
+class = saint
+colour = red
+name.en = Saint Stanislaus, bishop and martyr
+name.la = S. Stanislai, episcopi et martyris
+
[martin-i-pope-and-martyr]
date = 04-13
rank = optional
@@ -305,21 +393,21 @@ colour = white
name.en = Saint Anselm of Canterbury, bishop and doctor of the Church
name.la = S. Anselmi, episcopi et Ecclesiae doctoris
-[george-martyr]
+[adalbert-bishop-and-martyr]
date = 04-23
rank = optional
class = saint
colour = red
-name.en = Saint George, martyr
-name.la = S. Georgii, martyris
+name.en = Saint Adalbert, bishop and martyr
+name.la = S. Adalberti, episcopi et martyris
-[adalbert-bishop-and-martyr]
+[george-martyr]
date = 04-23
rank = optional
class = saint
colour = red
-name.en = Saint Adalbert, bishop and martyr
-name.la = S. Adalberti, episcopi et martyris
+name.en = Saint George, martyr
+name.la = S. Georgii, martyris
[fidelis-of-sigmaringen-priest-and-martyr]
date = 04-24
@@ -396,21 +484,21 @@ name.en = Saints Philip and James, Apostles
name.pl = Najświętszej Maryi Panny, Królowej Polski
name.la = Ss. Philippi et Iacobi, apostolorum
-[pancras-martyr]
+[saints-nereus-and-achilleus-martyrs]
date = 05-12
rank = optional
class = saint
colour = red
-name.en = Saint Pancras, martyr
-name.la = S. Pancratii, martyris
+name.en = Saints Nereus and Achilleus, martyrs
+name.la = Ss. Nerei et Achillei, martyrum
-[saints-nereus-and-achilleus-martyrs]
+[pancras-martyr]
date = 05-12
rank = optional
class = saint
colour = red
-name.en = Saints Nereus and Achilleus, martyrs
-name.la = Ss. Nerei et Achillei, martyrum
+name.en = Saint Pancras, martyr
+name.la = S. Pancratii, martyris
[our-lady-of-fatima]
date = 05-13
@@ -461,14 +549,6 @@ colour = white
name.en = Saint Rita of Cascia
name.la = S. Ritae de Cascia, religiosae
-[mary-magdalene-de-pazzi-virgin]
-date = 05-25
-rank = optional
-class = saint
-colour = white
-name.en = Saint Mary Magdalene de Pazzi, virgin
-name.la = S. Mariae Magdalenae de' Pazzi, virginis
-
[bede-the-venerable-priest-and-doctor]
date = 05-25
rank = optional
@@ -485,6 +565,14 @@ colour = white
name.en = Saint Gregory VII, pope
name.la = S. Gregorii VII, papae
+[mary-magdalene-de-pazzi-virgin]
+date = 05-25
+rank = optional
+class = saint
+colour = white
+name.en = Saint Mary Magdalene de Pazzi, virgin
+name.la = S. Mariae Magdalenae de' Pazzi, virginis
+
[philip-neri-priest]
date = 05-26
rank = memorial
@@ -631,7 +719,7 @@ name.la = S. Cyrilli Alexandrini, episcopi et Ecclesiae doctoris
[irenaeus-bishop-and-martyr]
date = 06-28
-rank = optional
+rank = memorial
class = saint
colour = red
name.en = Saint Irenaeus, bishop and martyr
@@ -872,14 +960,6 @@ name.en = Transfiguration of the Lord
name.pl = Przemienienia Pańskiego
name.la = IN TRANSFIGURATIONE DOMINI
-[cajetan-priest]
-date = 08-07
-rank = optional
-class = saint
-colour = white
-name.en = Saint Cajetan, priest
-name.la = S. Caietani, presbyteri
-
[sixtus-ii-pope-and-companions-martyrs]
date = 08-07
rank = optional
@@ -888,6 +968,14 @@ colour = red
name.en = Saint Sixtus II, pope, and companions, martyrs
name.la = Ss. Xysti, papae, et sociorum, martyrum
+[cajetan-priest]
+date = 08-07
+rank = optional
+class = saint
+colour = white
+name.en = Saint Cajetan, priest
+name.la = S. Caietani, presbyteri
+
[dominic-priest]
date = 08-08
rank = memorial
@@ -1186,21 +1274,21 @@ name.en = Saint Vincent de Paul, priest
name.pl = św. Wincentego à Paulo, prezbitera
name.la = S. Vincentii de Paul, presbyteri
-[saints-lawrence-ruiz-and-companions-martyrs]
+[wenceslaus-martyr]
date = 09-28
rank = optional
class = saint
colour = red
-name.en = Saints Lawrence Ruiz and companions, martyrs
-name.la = S. Laurentii Ruiz et sociorum, martyrum
+name.en = Saint Wenceslaus, martyr
+name.la = S. Venceslai, martyris
-[wenceslaus-martyr]
+[saints-lawrence-ruiz-and-companions-martyrs]
date = 09-28
rank = optional
class = saint
colour = red
-name.en = Saint Wenceslaus, martyr
-name.la = S. Venceslai, martyris
+name.en = Saints Lawrence Ruiz and companions, martyrs
+name.la = S. Laurentii Ruiz et sociorum, martyrum
[saints-michael-gabriel-and-raphael-archangels]
date = 09-29
@@ -1264,14 +1352,6 @@ name.en = Our Lady of the Rosary
name.pl = Najświętszej Maryi Panny Różańcowej
name.la = B. Mariae Virginis a Rosario
-[denis-and-companions-martyrs]
-date = 10-09
-rank = optional
-class = saint
-colour = red
-name.en = Saint Denis and companions, martyrs
-name.la = Ss. Dionysii, episcopi, et sociorum, martyrum
-
[john-leonardi-priest]
date = 10-09
rank = optional
@@ -1280,6 +1360,14 @@ colour = white
name.en = Saint John Leonardi, priest
name.la = S. Ioannis Leonardi, presbyteri
+[denis-and-companions-martyrs]
+date = 10-09
+rank = optional
+class = saint
+colour = red
+name.en = Saint Denis and companions, martyrs
+name.la = Ss. Dionysii, episcopi, et sociorum, martyrum
+
[john-xxiii-pope]
date = 10-11
rank = optional
@@ -1465,21 +1553,21 @@ colour = white
name.en = Saint Albert the Great, bishop and doctor
name.la = S. Alberti Magni, episcopi et Ecclesiae doctoris
-[gertrude-the-great-virgin]
+[margaret-of-scotland]
date = 11-16
rank = optional
class = saint
colour = white
-name.en = Saint Gertrude the Great, virgin
-name.la = S. Gertrudis, virginis
+name.en = Saint Margaret of Scotland
+name.la = S. Margaritae Scotiae
-[margaret-of-scotland]
+[gertrude-the-great-virgin]
date = 11-16
rank = optional
class = saint
colour = white
-name.en = Saint Margaret of Scotland
-name.la = S. Margaritae Scotiae
+name.en = Saint Gertrude the Great, virgin
+name.la = S. Gertrudis, virginis
[elizabeth-of-hungary-religious]
date = 11-17
@@ -1516,14 +1604,6 @@ name.en = Saint Cecilia, virgin and martyr
name.pl = św. Cecylii, dziewicy i męczennicy
name.la = S. Caeciliae, virginis et martyris
-[columban-religious]
-date = 11-23
-rank = optional
-class = saint
-colour = white
-name.en = Saint Columban, religious
-name.la = S. Columbani, abbatis
-
[clement-i-pope-and-martyr]
date = 11-23
rank = optional
@@ -1532,6 +1612,14 @@ colour = red
name.en = Saint Clement I, pope and martyr
name.la = S. Clementis I, papae et martyris
+[columban-religious]
+date = 11-23
+rank = optional
+class = saint
+colour = white
+name.en = Saint Columban, religious
+name.la = S. Columbani, abbatis
+
[andrew-dung-lac-and-his-companions-martyrs]
date = 11-24
rank = memorial
@@ -1640,6 +1728,22 @@ colour = white
name.en = Saint John of the Cross, priest and doctor
name.la = S. Ioannis a Cruce, presbyteri et Ecclesiae doctoris
+[peter-canisius-priest-and-doctor]
+date = 12-21
+rank = optional
+class = saint
+colour = violet
+name.en = Saint Peter Canisius, priest and doctor
+name.la = S. Petri Canisii, presbyteri et Ecclesiae doctoris
+
+[john-of-kanty-priest]
+date = 12-23
+rank = optional
+class = saint
+colour = violet
+name.en = Saint John of Kanty, priest
+name.la = S. Ioannis de Kęty, presbyteri
+
[stephen-the-first-martyr]
date = 12-26
rank = feast
@@ -1665,3 +1769,19 @@ class = saint
colour = red
name.en = Holy Innocents, martyrs
name.la = Ss. Innocentium, martyrum
+
+[thomas-becket-bishop-and-martyr]
+date = 12-29
+rank = optional
+class = saint
+colour = white
+name.en = Saint Thomas Becket, bishop and martyr
+name.la = S. Thomae Becket, episcopi et martyris
+
+[sylvester-i-pope]
+date = 12-31
+rank = optional
+class = saint
+colour = white
+name.en = Saint Sylvester I, pope
+name.la = S. Silvestri I, papae
diff --git a/scripts/gen-sanctoral.go b/scripts/gen-sanctoral.go
index 6d81d66..db2e490 100644
--- a/scripts/gen-sanctoral.go
+++ b/scripts/gen-sanctoral.go
@@ -61,11 +61,32 @@ func fetchMonth(cal string, y, m int) ([]calDay, error) {
}
var (
- rankMap = map[string]calendar.Rank{"solemnity": calendar.RankSolemnity, "feast": calendar.RankFeast, "memorial": calendar.RankMemorial, "optional memorial": calendar.RankOptional}
+ // "commemoration" is calapi's rank for a saint reduced to a commemoration by a
+ // privileged season (Lent, late Advent, the Christmas octave). Such a saint is
+ // never the observed day, so it maps to an optional memorial for lectio; its
+ // true (higher) rank is recovered from a year where its date is an ordinary
+ // weekday (see rankBand + the highest-rank-wins merge below).
+ rankMap = map[string]calendar.Rank{"solemnity": calendar.RankSolemnity, "feast": calendar.RankFeast, "memorial": calendar.RankMemorial, "optional memorial": calendar.RankOptional, "commemoration": calendar.RankOptional}
slugStripRe = regexp.MustCompile(`[^a-z0-9]+`)
plPrefixRe = regexp.MustCompile(`^(?:Uroczystość|Święto|Wspomnienie(?: obowiązkowe)?)\s+`)
)
+// rankBand orders OF ranks for the highest-rank-wins merge (higher = higher rank).
+func rankBand(r calendar.Rank) int {
+ switch r {
+ case calendar.RankSolemnity:
+ return 5
+ case calendar.RankFeast:
+ return 4
+ case calendar.RankMemorial:
+ return 3
+ case calendar.RankOptional:
+ return 2
+ default:
+ return 0
+ }
+}
+
func slugify(title string) string {
s := strings.ToLower(title)
s = strings.NewReplacer("ł", "l", "æ", "ae", "é", "e", "è", "e", "ô", "o", "ç", "c").Replace(s)
@@ -121,9 +142,13 @@ func main() {
"the-memorial-of-the-blessed-virgin-mary-on-saturday": true, // any free Saturday
}
- // Reference years: cover every weekday so a saint whose date is a Sunday in
- // one year is captured in another. 2025 is past -> niedziela gives pl names.
- for _, y := range []int{2025, 2026, 2027} {
+ // Reference years: enough spread that every fixed date falls on an ordinary
+ // weekday (not a Sunday, not inside a privileged season) in at least one year,
+ // so each saint is seen with its true rank. Start at 2025 (past -> niedziela
+ // gives pl names; also the date of a transferred feast is taken from the first
+ // year it is observed, and 2025 observes Joseph/Annunciation on their proper
+ // fixed dates).
+ for _, y := range []int{2025, 2026, 2027, 2028, 2029} {
for m := 1; m <= 12; m++ {
en, err := fetchMonth("general-en", y, m)
if err != nil {
@@ -167,7 +192,19 @@ func main() {
if slug == "" || movableSkip[slug] {
continue
}
- if _, seen := entries[slug]; seen {
+ // Highest-rank-wins: a saint seen as a commemoration in a
+ // privileged season one year and as its full rank on an ordinary
+ // weekday another year keeps the higher rank. Date/name/pl are
+ // kept from the first (proper-date) occurrence; rank/colour/class
+ // are upgraded.
+ if cur, seen := entries[slug]; seen {
+ if rankBand(rk) > rankBand(calendar.Rank(cur.rank)) {
+ cur.rank = string(rk)
+ cur.colour = c.Colour
+ cur.class = classOf(c.Title)
+ cur.rankNum = c.RankNum
+ entries[slug] = cur
+ }
continue
}
laTitle := ""