aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-19 15:07:06 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-19 15:07:06 +0200
commit92559825f9ad3e0f751d2c2022ffe000f23358ef (patch)
treee1da646a10ca4e18b72db13d7b653c6b714cee17
parent7f263a0ec9a91d1a036cfd22ed38354d06500b1d (diff)
downloadcolitur-92559825f9ad3e0f751d2c2022ffe000f23358ef.tar.gz
colitur-92559825f9ad3e0f751d2c2022ffe000f23358ef.zip
feat(lang): Latin sanctoral names, and English
Sanctoral names are transcribed from the Missal's own calendarium and kept in the GENITIVE, as the Missal prints them -- noted in the file so nobody corrects them to the nominative. English reuses the 327 names already in data/ef/sanctoral.sexp rather than retyping them, and declares fallback = la, so an untranslated day in an English booklet shows Latin rather than a slug. The test asserts the FALLBACK works rather than that en.ini is exhaustive: that is what makes a partial translation shippable from its first line. Coverage now demands a name for every slug the engine can emit across 2020-2045, temporal and sanctoral alike.
-rw-r--r--lang/en.ini694
-rw-r--r--lang/la.ini559
-rw-r--r--test/dune1
-rw-r--r--test/test_lang_coverage.ml71
4 files changed, 1301 insertions, 24 deletions
diff --git a/lang/en.ini b/lang/en.ini
new file mode 100644
index 0000000..242b2e8
--- /dev/null
+++ b/lang/en.ini
@@ -0,0 +1,694 @@
+; colitur -- English names.
+;
+; [meta] fallback = la: an untranslated slug shows its LATIN name (from
+; lang/la.ini) rather than the bare slug -- the better degradation for a
+; liturgical text (see Lang.with_fallback / test_lang_coverage.ml's own
+; en.ini test). This file is DELIBERATELY NOT EXHAUSTIVE for the same
+; reason: a partial translation is shippable from its first line precisely
+; because the fallback chain covers every gap.
+;
+; [celebration] below covers all 391 TEMPORAL slugs (2020-2045 measured)
+; and all 214 SANCTORAL slugs, generated/translated from this file's own
+; Latin sibling (lang/la.ini) rather than the Missal directly -- English is
+; not a liturgical source language for the 1962 Missal, so there is no
+; primary text to cite line-by-line the way la.ini's own citations do.
+; Ordinary numbered ferias follow one uniform pattern throughout ("<Weekday>
+; of the Nth Week of <Season>"), matching the Missal's own week-numbering
+; convention (a week is numbered by the Sunday it follows, RG's own
+; practice for e.g. Advent/Lent/Time after Pentecost); named days (Ash
+; Wednesday, Holy Week, the Ember days, etc.) use their standard English
+; liturgical names rather than a literal translation.
+
+[meta]
+lang = en
+name = English
+fallback = la
+
+[weekday]
+sunday = Sunday
+monday = Monday
+tuesday = Tuesday
+wednesday = Wednesday
+thursday = Thursday
+friday = Friday
+saturday = Saturday
+
+[month]
+1 = January
+2 = February
+3 = March
+4 = April
+5 = May
+6 = June
+7 = July
+8 = August
+9 = September
+10 = October
+11 = November
+12 = December
+
+[season]
+advent = Advent
+christmastide = Christmastide
+time-after-epiphany = Time after Epiphany
+septuagesima = Septuagesimatide
+lent = Lent
+passiontide = Passiontide
+paschaltide = Eastertide
+time-after-pentecost = Time after Pentecost
+
+[rank]
+class-1 = 1st Class
+class-2 = 2nd Class
+class-3 = 3rd Class
+class-4 = 4th Class
+
+[colour]
+white = White
+red = Red
+green = Green
+violet = Violet
+rose = Rose
+black = Black
+
+[term]
+ordo = Ordo
+contents = Contents
+epistle = Epistle
+lesson = Lesson
+gospel = Gospel
+commemoration = Commemoration
+week = Week
+
+[celebration]
+; --- Temporal (391 slugs, 2020-2045 measured). ---
+ef-advent-1-friday = Friday of the 1st Week of Advent
+ef-advent-1-monday = Monday of the 1st Week of Advent
+ef-advent-1-saturday = Saturday of the 1st Week of Advent
+ef-advent-1-thursday = Thursday of the 1st Week of Advent
+ef-advent-1-tuesday = Tuesday of the 1st Week of Advent
+ef-advent-1-wednesday = Wednesday of the 1st Week of Advent
+ef-advent-2-friday = Friday of the 2nd Week of Advent
+ef-advent-2-monday = Monday of the 2nd Week of Advent
+ef-advent-2-saturday = Saturday of the 2nd Week of Advent
+ef-advent-2-thursday = Thursday of the 2nd Week of Advent
+ef-advent-2-tuesday = Tuesday of the 2nd Week of Advent
+ef-advent-2-wednesday = Wednesday of the 2nd Week of Advent
+ef-advent-3-monday = Monday of the 3rd Week of Advent
+ef-advent-3-thursday = Thursday of the 3rd Week of Advent
+ef-advent-3-tuesday = Tuesday of the 3rd Week of Advent
+ef-advent-4-friday = Friday of the 4th Week of Advent
+ef-advent-4-monday = Monday of the 4th Week of Advent
+ef-advent-4-thursday = Thursday of the 4th Week of Advent
+ef-advent-4-tuesday = Tuesday of the 4th Week of Advent
+ef-advent-4-wednesday = Wednesday of the 4th Week of Advent
+ef-advent-ember-fri = Advent Ember Friday
+ef-advent-ember-sat = Advent Ember Saturday
+ef-advent-ember-wed = Advent Ember Wednesday
+ef-advent-sunday-1 = 1st Sunday of Advent
+ef-advent-sunday-2 = 2nd Sunday of Advent
+ef-advent-sunday-3 = 3rd Sunday of Advent
+ef-advent-sunday-4 = 4th Sunday of Advent
+ef-ascension = The Ascension of Our Lord
+ef-ascension-vigil = Vigil of the Ascension
+ef-ash-wednesday = Ash Wednesday
+ef-christ-the-king = Christ the King
+ef-christmas-1-friday = Friday before Epiphany
+ef-christmas-1-monday = Monday before Epiphany
+ef-christmas-1-saturday = Our Lady's Saturday Office
+ef-christmas-1-thursday = Thursday before Epiphany
+ef-christmas-1-tuesday = Tuesday before Epiphany
+ef-christmas-1-wednesday = Wednesday before Epiphany
+ef-christmas-2-friday = Friday after Epiphany
+ef-christmas-2-monday = Monday after Epiphany
+ef-christmas-2-saturday = Our Lady's Saturday Office
+ef-christmas-2-thursday = Thursday after Epiphany
+ef-christmas-2-tuesday = Tuesday after Epiphany
+ef-christmas-2-wednesday = Wednesday after Epiphany
+ef-christmas-sunday-0 = Sunday within the Octave of the Nativity
+ef-circumcision = The Octave Day of the Nativity
+ef-corpus-christi = Corpus Christi
+ef-easter-1-friday = Friday of Easter Week
+ef-easter-1-monday = Monday of Easter Week
+ef-easter-1-saturday = Saturday of Easter Week
+ef-easter-1-thursday = Thursday of Easter Week
+ef-easter-1-tuesday = Tuesday of Easter Week
+ef-easter-1-wednesday = Wednesday of Easter Week
+ef-easter-2-friday = Friday of the 2nd Week of Eastertide
+ef-easter-2-monday = Monday of the 2nd Week of Eastertide
+ef-easter-2-saturday = Our Lady's Saturday Office
+ef-easter-2-thursday = Thursday of the 2nd Week of Eastertide
+ef-easter-2-tuesday = Tuesday of the 2nd Week of Eastertide
+ef-easter-2-wednesday = Wednesday of the 2nd Week of Eastertide
+ef-easter-3-friday = Friday of the 3rd Week of Eastertide
+ef-easter-3-monday = Monday of the 3rd Week of Eastertide
+ef-easter-3-saturday = Our Lady's Saturday Office
+ef-easter-3-thursday = Thursday of the 3rd Week of Eastertide
+ef-easter-3-tuesday = Tuesday of the 3rd Week of Eastertide
+ef-easter-3-wednesday = Wednesday of the 3rd Week of Eastertide
+ef-easter-4-friday = Friday of the 4th Week of Eastertide
+ef-easter-4-monday = Monday of the 4th Week of Eastertide
+ef-easter-4-saturday = Our Lady's Saturday Office
+ef-easter-4-thursday = Thursday of the 4th Week of Eastertide
+ef-easter-4-tuesday = Tuesday of the 4th Week of Eastertide
+ef-easter-4-wednesday = Wednesday of the 4th Week of Eastertide
+ef-easter-5-friday = Friday of the 5th Week of Eastertide
+ef-easter-5-monday = Monday of the 5th Week of Eastertide
+ef-easter-5-saturday = Our Lady's Saturday Office
+ef-easter-5-thursday = Thursday of the 5th Week of Eastertide
+ef-easter-5-tuesday = Tuesday of the 5th Week of Eastertide
+ef-easter-5-wednesday = Wednesday of the 5th Week of Eastertide
+ef-easter-6-friday = Friday of the 6th Week of Eastertide
+ef-easter-6-saturday = Our Lady's Saturday Office
+ef-easter-7-friday = Friday of the 7th Week of Eastertide
+ef-easter-7-monday = Monday of the 7th Week of Eastertide
+ef-easter-7-thursday = Thursday of the 7th Week of Eastertide
+ef-easter-7-tuesday = Tuesday of the 7th Week of Eastertide
+ef-easter-7-wednesday = Wednesday of the 7th Week of Eastertide
+ef-easter-8-monday = Monday of Pentecost Week
+ef-easter-8-thursday = Thursday of Pentecost Week
+ef-easter-8-tuesday = Tuesday of Pentecost Week
+ef-easter-sunday = Easter Sunday
+ef-easter-sunday-3 = 2nd Sunday after Easter
+ef-easter-sunday-4 = 3rd Sunday after Easter
+ef-easter-sunday-5 = 4th Sunday after Easter
+ef-easter-sunday-6 = 5th Sunday after Easter
+ef-easter-sunday-7 = Sunday after the Ascension
+ef-epiphany = The Epiphany of Our Lord
+ef-holy-name = The Holy Name of Jesus
+ef-holy-name-sunday = The Holy Name of Jesus
+ef-lent-1-monday = Monday of the 1st Week of Lent
+ef-lent-1-thursday = Thursday of the 1st Week of Lent
+ef-lent-1-tuesday = Tuesday of the 1st Week of Lent
+ef-lent-2-friday = Friday of the 2nd Week of Lent
+ef-lent-2-monday = Monday of the 2nd Week of Lent
+ef-lent-2-saturday = Saturday of the 2nd Week of Lent
+ef-lent-2-thursday = Thursday of the 2nd Week of Lent
+ef-lent-2-tuesday = Tuesday of the 2nd Week of Lent
+ef-lent-2-wednesday = Wednesday of the 2nd Week of Lent
+ef-lent-3-friday = Friday of the 3rd Week of Lent
+ef-lent-3-monday = Monday of the 3rd Week of Lent
+ef-lent-3-saturday = Saturday of the 3rd Week of Lent
+ef-lent-3-thursday = Thursday of the 3rd Week of Lent
+ef-lent-3-tuesday = Tuesday of the 3rd Week of Lent
+ef-lent-3-wednesday = Wednesday of the 3rd Week of Lent
+ef-lent-4-friday = Friday of the 4th Week of Lent
+ef-lent-4-monday = Monday of the 4th Week of Lent
+ef-lent-4-saturday = Saturday of the 4th Week of Lent
+ef-lent-4-thursday = Thursday of the 4th Week of Lent
+ef-lent-4-tuesday = Tuesday of the 4th Week of Lent
+ef-lent-4-wednesday = Wednesday of the 4th Week of Lent
+ef-lent-after-ashes-friday = Friday after Ash Wednesday
+ef-lent-after-ashes-saturday = Saturday after Ash Wednesday
+ef-lent-after-ashes-thursday = Thursday after Ash Wednesday
+ef-lent-ember-fri = Lenten Ember Friday
+ef-lent-ember-sat = Lenten Ember Saturday
+ef-lent-ember-wed = Lenten Ember Wednesday
+ef-lent-sunday-1 = 1st Sunday of Lent
+ef-lent-sunday-2 = 2nd Sunday of Lent
+ef-lent-sunday-3 = 3rd Sunday of Lent
+ef-lent-sunday-4 = 4th Sunday of Lent
+ef-low-sunday = Low Sunday (Sunday in Easter Octave)
+ef-nativity = The Nativity of Our Lord (Christmas)
+ef-nativity-octave-day-5 = 5th Day within the Octave of the Nativity
+ef-nativity-octave-day-6 = 6th Day within the Octave of the Nativity
+ef-nativity-octave-day-7 = 7th Day within the Octave of the Nativity
+ef-nativity-vigil = Vigil of the Nativity (Christmas Eve)
+ef-palm-sunday = Palm Sunday
+ef-passion-sunday = Passion Sunday
+ef-passiontide-1-friday = Friday of the 1st Week of Passion Week
+ef-passiontide-1-monday = Monday of the 1st Week of Passion Week
+ef-passiontide-1-saturday = Saturday of the 1st Week of Passion Week
+ef-passiontide-1-thursday = Thursday of the 1st Week of Passion Week
+ef-passiontide-1-tuesday = Tuesday of the 1st Week of Passion Week
+ef-passiontide-1-wednesday = Wednesday of the 1st Week of Passion Week
+ef-passiontide-2-friday = Good Friday
+ef-passiontide-2-monday = Monday of Holy Week
+ef-passiontide-2-saturday = Holy Saturday
+ef-passiontide-2-thursday = Holy Thursday (Maundy Thursday)
+ef-passiontide-2-tuesday = Tuesday of Holy Week
+ef-passiontide-2-wednesday = Wednesday of Holy Week (Spy Wednesday)
+ef-pentecost = Pentecost Sunday (Whitsunday)
+ef-pentecost-ember-fri = Pentecost Ember Friday
+ef-pentecost-ember-sat = Pentecost Ember Saturday
+ef-pentecost-ember-wed = Pentecost Ember Wednesday
+ef-pentecost-vigil = Vigil of Pentecost
+ef-rogation-monday = Rogation Monday
+ef-rogation-tuesday = Rogation Tuesday
+ef-sacred-heart = The Sacred Heart of Jesus
+ef-september-ember-fri = September Ember Friday
+ef-september-ember-sat = September Ember Saturday
+ef-september-ember-wed = September Ember Wednesday
+ef-septuagesima-1-friday = Friday of the 1st Week of Septuagesimatide
+ef-septuagesima-1-monday = Monday of the 1st Week of Septuagesimatide
+ef-septuagesima-1-saturday = Our Lady's Saturday Office
+ef-septuagesima-1-thursday = Thursday of the 1st Week of Septuagesimatide
+ef-septuagesima-1-tuesday = Tuesday of the 1st Week of Septuagesimatide
+ef-septuagesima-1-wednesday = Wednesday of the 1st Week of Septuagesimatide
+ef-septuagesima-2-friday = Friday of the 2nd Week of Septuagesimatide
+ef-septuagesima-2-monday = Monday of the 2nd Week of Septuagesimatide
+ef-septuagesima-2-saturday = Our Lady's Saturday Office
+ef-septuagesima-2-thursday = Thursday of the 2nd Week of Septuagesimatide
+ef-septuagesima-2-tuesday = Tuesday of the 2nd Week of Septuagesimatide
+ef-septuagesima-2-wednesday = Wednesday of the 2nd Week of Septuagesimatide
+ef-septuagesima-3-monday = Monday of the 3rd Week of Septuagesimatide
+ef-septuagesima-3-tuesday = Tuesday of the 3rd Week of Septuagesimatide
+ef-septuagesima-sunday-1 = Septuagesima Sunday
+ef-septuagesima-sunday-2 = Sexagesima Sunday
+ef-septuagesima-sunday-3 = Quinquagesima Sunday
+ef-time-after-epiphany-1-friday = Friday of the 1st Week of the Time after Epiphany
+ef-time-after-epiphany-1-monday = Monday of the 1st Week of the Time after Epiphany
+ef-time-after-epiphany-1-saturday = Our Lady's Saturday Office
+ef-time-after-epiphany-1-thursday = Thursday of the 1st Week of the Time after Epiphany
+ef-time-after-epiphany-1-tuesday = Tuesday of the 1st Week of the Time after Epiphany
+ef-time-after-epiphany-1-wednesday = Wednesday of the 1st Week of the Time after Epiphany
+ef-time-after-epiphany-2-friday = Friday of the 2nd Week of the Time after Epiphany
+ef-time-after-epiphany-2-monday = Monday of the 2nd Week of the Time after Epiphany
+ef-time-after-epiphany-2-thursday = Thursday of the 2nd Week of the Time after Epiphany
+ef-time-after-epiphany-2-tuesday = Tuesday of the 2nd Week of the Time after Epiphany
+ef-time-after-epiphany-2-wednesday = Wednesday of the 2nd Week of the Time after Epiphany
+ef-time-after-epiphany-4-friday = Friday of the 4th Week of the Time after Epiphany
+ef-time-after-epiphany-4-monday = Monday of the 4th Week of the Time after Epiphany
+ef-time-after-epiphany-4-thursday = Thursday of the 4th Week of the Time after Epiphany
+ef-time-after-epiphany-4-wednesday = Wednesday of the 4th Week of the Time after Epiphany
+ef-time-after-epiphany-5-friday = Friday of the 5th Week of the Time after Epiphany
+ef-time-after-epiphany-5-saturday = Our Lady's Saturday Office
+ef-time-after-epiphany-5-thursday = Thursday of the 5th Week of the Time after Epiphany
+ef-time-after-epiphany-5-wednesday = Wednesday of the 5th Week of the Time after Epiphany
+ef-time-after-epiphany-6-friday = Friday of the 6th Week of the Time after Epiphany
+ef-time-after-epiphany-6-monday = Monday of the 6th Week of the Time after Epiphany
+ef-time-after-epiphany-6-saturday = Our Lady's Saturday Office
+ef-time-after-epiphany-6-thursday = Thursday of the 6th Week of the Time after Epiphany
+ef-time-after-epiphany-6-tuesday = Tuesday of the 6th Week of the Time after Epiphany
+ef-time-after-epiphany-6-wednesday = Wednesday of the 6th Week of the Time after Epiphany
+ef-time-after-epiphany-sunday-1 = The Holy Family
+ef-time-after-epiphany-sunday-2 = 2nd Sunday after Epiphany
+ef-time-after-epiphany-sunday-3 = 3rd Sunday after Epiphany
+ef-time-after-epiphany-sunday-4 = 4th Sunday after Epiphany
+ef-time-after-epiphany-sunday-5 = 5th Sunday after Epiphany
+ef-time-after-epiphany-sunday-6 = 6th Sunday after Epiphany
+ef-time-after-pentecost-1-friday = Friday of the 1st Week of the Time after Pentecost
+ef-time-after-pentecost-1-monday = Monday of the 1st Week of the Time after Pentecost
+ef-time-after-pentecost-1-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-1-tuesday = Tuesday of the 1st Week of the Time after Pentecost
+ef-time-after-pentecost-1-wednesday = Wednesday of the 1st Week of the Time after Pentecost
+ef-time-after-pentecost-10-friday = Friday of the 10th Week of the Time after Pentecost
+ef-time-after-pentecost-10-monday = Monday of the 10th Week of the Time after Pentecost
+ef-time-after-pentecost-10-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-10-thursday = Thursday of the 10th Week of the Time after Pentecost
+ef-time-after-pentecost-10-tuesday = Tuesday of the 10th Week of the Time after Pentecost
+ef-time-after-pentecost-10-wednesday = Wednesday of the 10th Week of the Time after Pentecost
+ef-time-after-pentecost-11-friday = Friday of the 11th Week of the Time after Pentecost
+ef-time-after-pentecost-11-monday = Monday of the 11th Week of the Time after Pentecost
+ef-time-after-pentecost-11-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-11-thursday = Thursday of the 11th Week of the Time after Pentecost
+ef-time-after-pentecost-11-tuesday = Tuesday of the 11th Week of the Time after Pentecost
+ef-time-after-pentecost-11-wednesday = Wednesday of the 11th Week of the Time after Pentecost
+ef-time-after-pentecost-12-friday = Friday of the 12th Week of the Time after Pentecost
+ef-time-after-pentecost-12-monday = Monday of the 12th Week of the Time after Pentecost
+ef-time-after-pentecost-12-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-12-thursday = Thursday of the 12th Week of the Time after Pentecost
+ef-time-after-pentecost-12-tuesday = Tuesday of the 12th Week of the Time after Pentecost
+ef-time-after-pentecost-12-wednesday = Wednesday of the 12th Week of the Time after Pentecost
+ef-time-after-pentecost-13-friday = Friday of the 13th Week of the Time after Pentecost
+ef-time-after-pentecost-13-monday = Monday of the 13th Week of the Time after Pentecost
+ef-time-after-pentecost-13-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-13-thursday = Thursday of the 13th Week of the Time after Pentecost
+ef-time-after-pentecost-13-tuesday = Tuesday of the 13th Week of the Time after Pentecost
+ef-time-after-pentecost-13-wednesday = Wednesday of the 13th Week of the Time after Pentecost
+ef-time-after-pentecost-14-friday = Friday of the 14th Week of the Time after Pentecost
+ef-time-after-pentecost-14-monday = Monday of the 14th Week of the Time after Pentecost
+ef-time-after-pentecost-14-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-14-thursday = Thursday of the 14th Week of the Time after Pentecost
+ef-time-after-pentecost-14-tuesday = Tuesday of the 14th Week of the Time after Pentecost
+ef-time-after-pentecost-14-wednesday = Wednesday of the 14th Week of the Time after Pentecost
+ef-time-after-pentecost-15-friday = Friday of the 15th Week of the Time after Pentecost
+ef-time-after-pentecost-15-monday = Monday of the 15th Week of the Time after Pentecost
+ef-time-after-pentecost-15-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-15-thursday = Thursday of the 15th Week of the Time after Pentecost
+ef-time-after-pentecost-15-tuesday = Tuesday of the 15th Week of the Time after Pentecost
+ef-time-after-pentecost-15-wednesday = Wednesday of the 15th Week of the Time after Pentecost
+ef-time-after-pentecost-16-friday = Friday of the 16th Week of the Time after Pentecost
+ef-time-after-pentecost-16-monday = Monday of the 16th Week of the Time after Pentecost
+ef-time-after-pentecost-16-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-16-thursday = Thursday of the 16th Week of the Time after Pentecost
+ef-time-after-pentecost-16-tuesday = Tuesday of the 16th Week of the Time after Pentecost
+ef-time-after-pentecost-16-wednesday = Wednesday of the 16th Week of the Time after Pentecost
+ef-time-after-pentecost-17-friday = Friday of the 17th Week of the Time after Pentecost
+ef-time-after-pentecost-17-monday = Monday of the 17th Week of the Time after Pentecost
+ef-time-after-pentecost-17-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-17-thursday = Thursday of the 17th Week of the Time after Pentecost
+ef-time-after-pentecost-17-tuesday = Tuesday of the 17th Week of the Time after Pentecost
+ef-time-after-pentecost-17-wednesday = Wednesday of the 17th Week of the Time after Pentecost
+ef-time-after-pentecost-18-friday = Friday of the 18th Week of the Time after Pentecost
+ef-time-after-pentecost-18-monday = Monday of the 18th Week of the Time after Pentecost
+ef-time-after-pentecost-18-thursday = Thursday of the 18th Week of the Time after Pentecost
+ef-time-after-pentecost-18-tuesday = Tuesday of the 18th Week of the Time after Pentecost
+ef-time-after-pentecost-18-wednesday = Wednesday of the 18th Week of the Time after Pentecost
+ef-time-after-pentecost-19-friday = Friday of the 19th Week of the Time after Pentecost
+ef-time-after-pentecost-19-monday = Monday of the 19th Week of the Time after Pentecost
+ef-time-after-pentecost-19-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-19-thursday = Thursday of the 19th Week of the Time after Pentecost
+ef-time-after-pentecost-19-tuesday = Tuesday of the 19th Week of the Time after Pentecost
+ef-time-after-pentecost-19-wednesday = Wednesday of the 19th Week of the Time after Pentecost
+ef-time-after-pentecost-2-monday = Monday of the 2nd Week of the Time after Pentecost
+ef-time-after-pentecost-2-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-2-thursday = Thursday of the 2nd Week of the Time after Pentecost
+ef-time-after-pentecost-2-tuesday = Tuesday of the 2nd Week of the Time after Pentecost
+ef-time-after-pentecost-2-wednesday = Wednesday of the 2nd Week of the Time after Pentecost
+ef-time-after-pentecost-20-friday = Friday of the 20th Week of the Time after Pentecost
+ef-time-after-pentecost-20-monday = Monday of the 20th Week of the Time after Pentecost
+ef-time-after-pentecost-20-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-20-thursday = Thursday of the 20th Week of the Time after Pentecost
+ef-time-after-pentecost-20-tuesday = Tuesday of the 20th Week of the Time after Pentecost
+ef-time-after-pentecost-20-wednesday = Wednesday of the 20th Week of the Time after Pentecost
+ef-time-after-pentecost-21-friday = Friday of the 21st Week of the Time after Pentecost
+ef-time-after-pentecost-21-monday = Monday of the 21st Week of the Time after Pentecost
+ef-time-after-pentecost-21-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-21-thursday = Thursday of the 21st Week of the Time after Pentecost
+ef-time-after-pentecost-21-tuesday = Tuesday of the 21st Week of the Time after Pentecost
+ef-time-after-pentecost-21-wednesday = Wednesday of the 21st Week of the Time after Pentecost
+ef-time-after-pentecost-22-friday = Friday of the 22nd Week of the Time after Pentecost
+ef-time-after-pentecost-22-monday = Monday of the 22nd Week of the Time after Pentecost
+ef-time-after-pentecost-22-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-22-thursday = Thursday of the 22nd Week of the Time after Pentecost
+ef-time-after-pentecost-22-tuesday = Tuesday of the 22nd Week of the Time after Pentecost
+ef-time-after-pentecost-22-wednesday = Wednesday of the 22nd Week of the Time after Pentecost
+ef-time-after-pentecost-23-friday = Friday of the 23rd Week of the Time after Pentecost
+ef-time-after-pentecost-23-monday = Monday of the 23rd Week of the Time after Pentecost
+ef-time-after-pentecost-23-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-23-thursday = Thursday of the 23rd Week of the Time after Pentecost
+ef-time-after-pentecost-23-tuesday = Tuesday of the 23rd Week of the Time after Pentecost
+ef-time-after-pentecost-23-wednesday = Wednesday of the 23rd Week of the Time after Pentecost
+ef-time-after-pentecost-24-friday = Friday of the 24th Week of the Time after Pentecost
+ef-time-after-pentecost-24-monday = Monday of the 24th Week of the Time after Pentecost
+ef-time-after-pentecost-24-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-24-thursday = Thursday of the 24th Week of the Time after Pentecost
+ef-time-after-pentecost-24-tuesday = Tuesday of the 24th Week of the Time after Pentecost
+ef-time-after-pentecost-24-wednesday = Wednesday of the 24th Week of the Time after Pentecost
+ef-time-after-pentecost-25-friday = Friday of the 25th Week of the Time after Pentecost
+ef-time-after-pentecost-25-monday = Monday of the 25th Week of the Time after Pentecost
+ef-time-after-pentecost-25-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-25-thursday = Thursday of the 25th Week of the Time after Pentecost
+ef-time-after-pentecost-25-tuesday = Tuesday of the 25th Week of the Time after Pentecost
+ef-time-after-pentecost-25-wednesday = Wednesday of the 25th Week of the Time after Pentecost
+ef-time-after-pentecost-26-friday = Friday of the 26th Week of the Time after Pentecost
+ef-time-after-pentecost-26-monday = Monday of the 26th Week of the Time after Pentecost
+ef-time-after-pentecost-26-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-26-thursday = Thursday of the 26th Week of the Time after Pentecost
+ef-time-after-pentecost-26-tuesday = Tuesday of the 26th Week of the Time after Pentecost
+ef-time-after-pentecost-26-wednesday = Wednesday of the 26th Week of the Time after Pentecost
+ef-time-after-pentecost-27-friday = Friday of the 27th Week of the Time after Pentecost
+ef-time-after-pentecost-27-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-27-thursday = Thursday of the 27th Week of the Time after Pentecost
+ef-time-after-pentecost-27-tuesday = Tuesday of the 27th Week of the Time after Pentecost
+ef-time-after-pentecost-27-wednesday = Wednesday of the 27th Week of the Time after Pentecost
+ef-time-after-pentecost-28-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-28-thursday = Thursday of the 28th Week of the Time after Pentecost
+ef-time-after-pentecost-28-tuesday = Tuesday of the 28th Week of the Time after Pentecost
+ef-time-after-pentecost-28-wednesday = Wednesday of the 28th Week of the Time after Pentecost
+ef-time-after-pentecost-3-friday = Friday of the 3rd Week of the Time after Pentecost
+ef-time-after-pentecost-3-monday = Monday of the 3rd Week of the Time after Pentecost
+ef-time-after-pentecost-3-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-3-thursday = Thursday of the 3rd Week of the Time after Pentecost
+ef-time-after-pentecost-3-tuesday = Tuesday of the 3rd Week of the Time after Pentecost
+ef-time-after-pentecost-3-wednesday = Wednesday of the 3rd Week of the Time after Pentecost
+ef-time-after-pentecost-4-friday = Friday of the 4th Week of the Time after Pentecost
+ef-time-after-pentecost-4-monday = Monday of the 4th Week of the Time after Pentecost
+ef-time-after-pentecost-4-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-4-thursday = Thursday of the 4th Week of the Time after Pentecost
+ef-time-after-pentecost-4-tuesday = Tuesday of the 4th Week of the Time after Pentecost
+ef-time-after-pentecost-4-wednesday = Wednesday of the 4th Week of the Time after Pentecost
+ef-time-after-pentecost-5-friday = Friday of the 5th Week of the Time after Pentecost
+ef-time-after-pentecost-5-monday = Monday of the 5th Week of the Time after Pentecost
+ef-time-after-pentecost-5-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-5-thursday = Thursday of the 5th Week of the Time after Pentecost
+ef-time-after-pentecost-5-tuesday = Tuesday of the 5th Week of the Time after Pentecost
+ef-time-after-pentecost-5-wednesday = Wednesday of the 5th Week of the Time after Pentecost
+ef-time-after-pentecost-6-friday = Friday of the 6th Week of the Time after Pentecost
+ef-time-after-pentecost-6-monday = Monday of the 6th Week of the Time after Pentecost
+ef-time-after-pentecost-6-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-6-thursday = Thursday of the 6th Week of the Time after Pentecost
+ef-time-after-pentecost-6-tuesday = Tuesday of the 6th Week of the Time after Pentecost
+ef-time-after-pentecost-6-wednesday = Wednesday of the 6th Week of the Time after Pentecost
+ef-time-after-pentecost-7-friday = Friday of the 7th Week of the Time after Pentecost
+ef-time-after-pentecost-7-monday = Monday of the 7th Week of the Time after Pentecost
+ef-time-after-pentecost-7-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-7-thursday = Thursday of the 7th Week of the Time after Pentecost
+ef-time-after-pentecost-7-tuesday = Tuesday of the 7th Week of the Time after Pentecost
+ef-time-after-pentecost-7-wednesday = Wednesday of the 7th Week of the Time after Pentecost
+ef-time-after-pentecost-8-friday = Friday of the 8th Week of the Time after Pentecost
+ef-time-after-pentecost-8-monday = Monday of the 8th Week of the Time after Pentecost
+ef-time-after-pentecost-8-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-8-thursday = Thursday of the 8th Week of the Time after Pentecost
+ef-time-after-pentecost-8-tuesday = Tuesday of the 8th Week of the Time after Pentecost
+ef-time-after-pentecost-8-wednesday = Wednesday of the 8th Week of the Time after Pentecost
+ef-time-after-pentecost-9-friday = Friday of the 9th Week of the Time after Pentecost
+ef-time-after-pentecost-9-monday = Monday of the 9th Week of the Time after Pentecost
+ef-time-after-pentecost-9-saturday = Our Lady's Saturday Office
+ef-time-after-pentecost-9-thursday = Thursday of the 9th Week of the Time after Pentecost
+ef-time-after-pentecost-9-tuesday = Tuesday of the 9th Week of the Time after Pentecost
+ef-time-after-pentecost-9-wednesday = Wednesday of the 9th Week of the Time after Pentecost
+ef-time-after-pentecost-sunday-10 = 10th Sunday after Pentecost
+ef-time-after-pentecost-sunday-11 = 11th Sunday after Pentecost
+ef-time-after-pentecost-sunday-12 = 12th Sunday after Pentecost
+ef-time-after-pentecost-sunday-13 = 13th Sunday after Pentecost
+ef-time-after-pentecost-sunday-14 = 14th Sunday after Pentecost
+ef-time-after-pentecost-sunday-15 = 15th Sunday after Pentecost
+ef-time-after-pentecost-sunday-16 = 16th Sunday after Pentecost
+ef-time-after-pentecost-sunday-17 = 17th Sunday after Pentecost
+ef-time-after-pentecost-sunday-18 = 18th Sunday after Pentecost
+ef-time-after-pentecost-sunday-19 = 19th Sunday after Pentecost
+ef-time-after-pentecost-sunday-2 = 2nd Sunday after Pentecost
+ef-time-after-pentecost-sunday-20 = 20th Sunday after Pentecost
+ef-time-after-pentecost-sunday-21 = 21st Sunday after Pentecost
+ef-time-after-pentecost-sunday-22 = 22nd Sunday after Pentecost
+ef-time-after-pentecost-sunday-23 = 23rd Sunday after Pentecost
+ef-time-after-pentecost-sunday-24 = 24th and Last Sunday after Pentecost
+ef-time-after-pentecost-sunday-3 = 3rd Sunday after Pentecost
+ef-time-after-pentecost-sunday-4 = 4th Sunday after Pentecost
+ef-time-after-pentecost-sunday-5 = 5th Sunday after Pentecost
+ef-time-after-pentecost-sunday-6 = 6th Sunday after Pentecost
+ef-time-after-pentecost-sunday-7 = 7th Sunday after Pentecost
+ef-time-after-pentecost-sunday-8 = 8th Sunday after Pentecost
+ef-time-after-pentecost-sunday-9 = 9th Sunday after Pentecost
+ef-trinity = Trinity Sunday
+
+; --- Sanctoral (214 slugs, 2020-2045 measured), extracted verbatim from
+; data/ef/sanctoral.sexp's own English `en` names (already scan-verified
+; against missalemeum's own title text -- see the project's register,
+; §6.1) via `colitur table`, not retyped. ---
+agatha = St. Agatha
+agnes = St. Agnes
+albert-the-great = St. Albert the Great
+all-saints = All Saints
+aloysius-gongzaga = St. Aloysius Gongzaga
+alphonsus-liguori = St. Alphonsus Liguori
+ambrose = St. Ambrose
+andrew-avellino = St. Andrew Avellino
+andrew-corsini = St. Andrew Corsini
+andrew = St. Andrew
+angela-merici = St. Angela Merici
+anne-mother-of-the-blessed-virgin = St. Anne, Mother of the Blessed Virgin
+annunciation-of-the-blessed-virgin-mary = Annunciation of the Blessed Virgin Mary
+anselm = St. Anselm
+anthony-mary-claret = St. Anthony Mary Claret
+anthony-mary-zaccariah = St. Anthony Mary Zaccariah
+anthony-of-padua = St. Anthony of Padua
+anthony = St. Anthony
+antoninus = St. Antoninus
+apollinaris = St. Apollinaris
+assumption-of-the-blessed-virgin-mary = Assumption of the Blessed Virgin Mary
+athanasius = St. Athanasius
+augustine-of-canterbury = St. Augustine of Canterbury
+augustine = St. Augustine
+barnabas = St. Barnabas
+bartholomew = St. Bartholomew
+basil-the-great = St. Basil the Great
+bede-the-venerable = St. Bede the Venerable
+beheading-of-st-john-the-baptist = Beheading of St. John the Baptist
+bernardine-of-siena = St. Bernardine of Siena
+bernard-of-clairvaux = St. Bernard of Clairvaux
+bonaventure = St. Bonaventure
+boniface = St. Boniface
+bridget-of-sweden = St. Bridget of Sweden
+bruno = St. Bruno
+cajetan = St. Cajetan
+callistus-i = St. Callistus I
+camillus-de-lellis = Camillus de Lellis
+casimir = St. Casimir
+catherine-of-alexandria = St. Catherine of Alexandria
+catherine-of-siena = St. Catherine of Siena
+cecilia = St. Cecilia
+chair-of-st-peter = Chair of St. Peter
+charles-borromeo = St. Charles Borromeo
+clare = St. Clare
+clement-i = St. Clement I
+commemoration-of-all-souls = Commemoration of All Souls
+commemoration-of-the-baptism-of-the-lord = Commemoration of the Baptism of the Lord
+conversion-of-st-paul = Conversion of St. Paul
+cyril-of-alexandria = St. Cyril of Alexandria
+damasus-i = St. Damasus I
+dedication-of-st-michael-the-archangel = Dedication of St. Michael the Archangel
+dedication-of-the-archbasilica-of-our-holy-savior = Dedication of the Archbasilica of Our Holy Savior
+dedication-of-the-basilica-of-st-mary-major = Dedication of the Basilica of St. Mary Major
+dedication-of-the-basilicas-of-sts-peter-paul = Dedication of the Basilicas of Sts. Peter & Paul
+didacus = St. Didacus
+dominic = St. Dominic
+edward = St. Edward
+elizabeth-of-hungary = St. Elizabeth of Hungary
+elizabeth-of-portugal = St. Elizabeth of Portugal
+ephrem-of-syria = St. Ephrem of Syria
+eusebius = St. Eusebius
+exaltation-of-the-holy-cross = Exaltation of the Holy Cross
+felix-of-valois = St. Felix of Valois
+fidelis-of-sigmaringen = St. Fidelis of Sigmaringen
+frances-rome = St. Frances Rome
+francis-borgia = St. Francis Borgia
+francis-caracciolo = St. Francis Caracciolo
+francis-de-sales = St. Francis de Sales
+francis-of-assisi = St. Francis of Assisi
+francis-xavier = St. Francis Xavier
+gabriel-of-our-lady-of-sorrows = St. Gabriel of Our Lady of Sorrows
+gertrude-the-great = St. Gertrude the Great
+gregory-barbarigo = St. Gregory Barbarigo
+gregory-of-nazianzen = St. Gregory of Nazianzen
+gregory-the-wonderworker = St. Gregory the Wonderworker
+gregory-vii = St. Gregory VII
+hedwig = St. Hedwig
+henry-the-emperor = St. Henry the Emperor
+hermenegild = St. Hermenegild
+hilary = St. Hilary
+holy-guardian-angels = Holy Guardian Angels
+holy-innocents = Holy Innocents
+hyacinth = St. Hyacinth
+ignatius-loyola = St. Ignatius Loyola
+ignatius-of-antioch = St. Ignatius of Antioch
+immaculate-conception-of-the-blessed-virgin-mary = Immaculate Conception of the Blessed Virgin Mary
+immaculate-heart-of-mary = Immaculate Heart of Mary
+in-commemoratione-sancti-pauli-apostoli = In Commemoratione Sancti Pauli Apostoli
+irenaeus = St. Irenaeus
+isidore-of-seville = St. Isidore of Seville
+james-the-greater = St. James the Greater
+jane-frances-de-chantal = St. Jane Frances de Chantal
+januarius-companions = St. Januarius & Companions
+jerome-emiliani = St. Jerome Emiliani
+jerome = St. Jerome
+joachim-father-of-the-blessed-virgin = St. Joachim, Father of the Blessed Virgin
+john-baptist-de-la-salle = St. John Baptist de la Salle
+john-bosco = St. John Bosco
+john-cantius = St. John Cantius
+john-chrysostom = St. John Chrysostom
+john-eudes = St. John Eudes
+john-gualbert = St. John Gualbert
+john-leonardi = St. John Leonardi
+john-mary-vianney = St. John Mary Vianney
+john-of-god = St. John of God
+john-of-matha = St. John of Matha
+john-of-san-fecundo = St. John of San Fecundo
+john-of-the-cross = St. John of the Cross
+john-the-evangelist = St. John the Evangelist
+josaphat = St. Josaphat
+joseph-calasance = St. Joseph Calasance
+joseph-of-cupertino = St. Joseph of Cupertino
+joseph-spouse-of-the-bl-virgin-mary = St. Joseph, Spouse of the Bl. Virgin Mary
+joseph-the-workman = St. Joseph the Workman
+julia-of-falconieri = St. Julia of Falconieri
+justin = St. Justin
+laurence-of-brindisi = St. Laurence of Brindisi
+lawrence-justinian = St. Lawrence Justinian
+lawrence = St. Lawrence
+leo-the-great = St. Leo the Great
+linus = St. Linus
+louis-ix = St. Louis IX
+lucy = St. Lucy
+luke-the-evangelist = St. Luke the Evangelist
+marcellus-i = St. Marcellus I
+margaret-mary-alacoque = St. Margaret Mary Alacoque
+margaret-of-scotland = St. Margaret of Scotland
+mark = St. Mark
+martha = St. Martha
+martina = St. Martina
+martin-i = St. Martin I
+martin-of-tours = St. Martin of Tours
+mary-magdalene-de-pazzi = St. Mary Magdalene de Pazzi
+mary-magdalene = St. Mary Magdalene
+maternity-of-the-blessed-virgin-mary = Maternity of the Blessed Virgin Mary
+matthew = St. Matthew
+matthias = St. Matthias
+monica = St. Monica
+most-holy-name-of-mary = Most Holy Name of Mary
+nativity-of-st-john-the-baptist = Nativity of St. John the Baptist
+nativity-of-the-blessed-virgin-mary = Nativity of the Blessed Virgin Mary
+nicholas-of-tolentino = St. Nicholas of Tolentino
+nicholas = St. Nicholas
+norbert = St. Norbert
+our-lady-of-lourdes = Our Lady of Lourdes
+our-lady-of-the-rosary = Our Lady of the Rosary
+paschal-baylon = St. Paschal Baylon
+paulinus-of-nola = St. Paulinus of Nola
+paul-of-the-cross = St. Paul of the Cross
+paul-the-first-hermit = St. Paul, the First Hermit
+peter-canisius = St. Peter Canisius
+peter-celestine = St. Peter Celestine
+peter-chrysologus = St. Peter Chrysologus
+peter-damien = St. Peter Damien
+peter-nolasco = St. Peter Nolasco
+peter-of-alcantara = St. Peter of Alcantara
+peter-of-verona = St. Peter of Verona
+philip-benizi = St. Philip Benizi
+philip-neri = St. Philip Neri
+pius-v = St. Pius V
+pius-x = St. Pius X
+polycarp = St. Polycarp
+precious-blood-of-our-lord-jesus-christ = The Precious Blood of Our Lord Jesus Christ
+presentation-of-the-blessed-virgin-mary = Presentation of the Blessed Virgin Mary
+purification-of-the-blessed-virgin-mary = Purification of the Blessed Virgin Mary
+queenship-of-the-blessed-virgin-mary = Queenship of the Blessed Virgin Mary
+raphael-the-archangel = St. Raphael the Archangel
+raymond-nonnatus = St. Raymond Nonnatus
+raymond-of-pe-afort = St. Raymond of Peñafort
+robert-bellarmine = St. Robert Bellarmine
+romuald = St. Romuald
+rose-of-lima = St. Rose of Lima
+scholastica = St. Scholastica
+seven-holy-brothers-and-sts-rufina-secunda = Seven Holy Brothers and Sts. Rufina & Secunda
+seven-holy-servite-founders = Seven Holy Servite Founders
+seven-sorrows-of-the-blessed-virgin-mary = Seven Sorrows of the Blessed Virgin Mary
+stanislaus = St. Stanislaus
+stephen-of-hungary = St. Stephen of Hungary
+stephen = St. Stephen
+sts-cletus-marcellinus = Sts. Cletus & Marcellinus
+sts-cornelius-cyprian = Sts. Cornelius & Cyprian
+sts-cosmas-damian = Sts. Cosmas & Damian
+sts-cyril-methodius = Sts. Cyril & Methodius
+sts-fabian-sebastian = Sts. Fabian & Sebastian
+sts-felicitas-perpetua = Sts. Felicitas & Perpetua
+sts-john-paul = Sts. John & Paul
+sts-nazarius-celsus-st-victor-i-st-innocent-i = Sts. Nazarius & Celsus, St. Victor I & St. Innocent I
+sts-nereus-achilleus-domitilla-pancras = Sts. Nereus, Achilleus, Domitilla, & Pancras
+sts-peter-paul = Sts. Peter & Paul
+sts-philip-james = Sts. Philip & James
+sts-simon-jude = Sts. Simon & Jude
+sts-soter-caius = Sts. Soter & Caius
+sts-vincent-anastasius = Sts. Vincent & Anastasius
+sylvester = St. Sylvester
+teresa-of-avila = St. Teresa of Avila
+theresa-of-the-infant-jesus = St. Theresa of the Infant Jesus
+thomas-of-villanova = St. Thomas of Villanova
+thomas = St. Thomas
+timothy = St. Timothy
+titus = St. Titus
+transfiguration-of-our-lord = Transfiguration of Our Lord
+ubaldus = St. Ubaldus
+venantius = St. Venantius
+vigil-of-st-lawrence = Vigil of St. Lawrence
+vigil-of-sts-peter-paul = Vigil of Sts. Peter & Paul
+vigil-of-the-assumption = Vigil of the Assumption
+vigil-of-the-nativity-of-st-john-the-baptist = Vigil of the Nativity of St. John the Baptist
+vincent-de-paul = St. Vincent de Paul
+vincent-ferrer = St. Vincent Ferrer
+visitation-of-the-blessed-virgin-mary = Visitation of the Blessed Virgin Mary
+vivian = St. Vivian
+wenceslaus = St. Wenceslaus
+william = St. William
diff --git a/lang/la.ini b/lang/la.ini
index 570f843..98adbf2 100644
--- a/lang/la.ini
+++ b/lang/la.ini
@@ -147,10 +147,15 @@ week = Hebdomada
[celebration]
; ---------------------------------------------------------------------
-; TEMPORAL slugs only (^ef-). Sanctoral names arrive in Task 4, together
-; with the coverage test's own "^ef-" filter being removed
-; (test/test_lang_coverage.ml) -- until then this table intentionally does
-; NOT name a sanctoral slug, and that is expected, not a gap.
+; TEMPORAL slugs only (^ef-). The SANCTORAL half (a fixed saint's day, not
+; a season/week slug) is a second [celebration] block near the end of this
+; file (duplicate [section] blocks MERGE -- see lang.mli) -- kept separate
+; rather than interleaved, because it comes from a different source (the
+; Missal's own CALENDARIUM table, not the Proprium de Tempore) and carries
+; its own header note on the conventions specific to it (the genitive case,
+; above all). Task 3's own coverage-test filter that used to restrict
+; checking to "^ef-" slugs (test/test_lang_coverage.ml) is REMOVED as of
+; Task 4: every slug the engine can emit now needs a Latin name here.
; ---------------------------------------------------------------------
; Christmas cycle -- LT.txt:8627,8632,8657,8662 (Proprium de Tempore TOC).
@@ -729,3 +734,549 @@ ef-christmas-2-tuesday = Feria III post Epiphaniam
ef-christmas-2-wednesday = Feria IV post Epiphaniam
ef-christmas-2-thursday = Feria V post Epiphaniam
ef-christmas-2-friday = Feria VI post Epiphaniam
+
+[celebration]
+; ---------------------------------------------------------------------
+; SANCTORAL slugs (a fixed saint's day, not a season/week slug). Source:
+; the Missal's own CALENDARIUM table in docs/research/LT.txt (a compact,
+; 14-page, month-by-month grid -- distinct from the Proprium de Tempore
+; TOC the temporal block above draws on, and from the Proprium Sanctorum
+; body text, which this transcription mostly lacks -- see sources.md).
+; Every entry below cites the calendarium's own day-row line number(s);
+; the rank suffix ("III classis"/"II cl."/etc.) is stripped, since it is
+; already carried by the engine's own Celebration.rank, not this table.
+;
+; THE NAMES ARE IN THE GENITIVE, exactly as the Missal's calendarium
+; prints them ("S. Hilarii Ep." = "[the feast] of St Hilary") -- do NOT
+; "correct" them to the nominative.
+;
+; The typographic normalisations disclosed at the top of this file (ae/oe
+; for the ligatures, consonantal i for j) are applied here too. TWO further
+; normalisations are specific to this block, both disclosed once here
+; rather than per entry:
+; - CASE. The calendarium prints every I/II-class feast's own heading in
+; ALL CAPS (a typesetting choice of that one compact table -- III/IV
+; class headings in the very same table are ordinary mixed case, and
+; nothing in the Missal's actual orthography changes between them).
+; Transcribing the capitals literally would read as a claim about the
+; Missal's own spelling that is not true, and would put a sanctoral
+; entry in a visibly different style from every temporal entry above
+; it in this same file. Re-cased here to match this file's own
+; dominant convention throughout (confirmed against hundreds of
+; temporal entries above, and independently against real mixed-case
+; RG-body occurrences of some of these same phrases, e.g. "Omnium
+; Sanctorum" at LT.txt line 1880, "In Commemoratione omnium Fidelium
+; defunctorum" at LT.txt lines 2307/2777/3316/19655, "commemoratio
+; septem Dolorum B. Mariae Virg." at LT.txt line 5056 -- not cited in
+; "LT.txt:N" form here, since none of these lines is evidence for THIS
+; block's own entries, only for the general case-style claim above):
+; capitalise the sentence-
+; initial word plus every substantive word; lowercase a small, fixed
+; set of prepositions/conjunctions when NOT sentence-initial (in, de,
+; a, ab, post, ante, ad, cum, per, et, ac, atque, vel, seu, ex) --
+; exactly the pattern already visible in "Feria V post Cineres" and
+; "Dominica in Septuagesima" above. This is a case-only change (this
+; file's own header already carries "case aside" for exactly this
+; reason); no word is added, dropped or reordered.
+; - A handful of individual entries print a stray capital "Et" mid-
+; phrase (e.g. "Pp. Et Mm.") where the identical word is lowercase
+; "et" in the very next nearly-identical entry -- a transcription
+; inconsistency, not a grammatical fact (Latin has no reason to
+; capitalise a mid-phrase "and"); lowercased for the same internal-
+; consistency reason as the case rule above.
+; Two source typos (a missing period after an abbreviation the other 212
+; entries all print with one: "S Ioannis" for john-bosco, "Conf" for
+; edward) are corrected in place and flagged at their own entry, per this
+; file's standing rule that a normalisation changing WORDS, not merely
+; case, must be visible at the entry it touches.
+;
+; "D. N. I. C." (Domini Nostri Iesu Christi) is abbreviated in the source
+; and KEPT abbreviated here, unlike this file's own ef-christ-the-king
+; entry ("D. N. Iesu Christi Regis") -- that entry's own comment explains
+; it is expanded because ITS OWN citation happens to also carry the words
+; spelled out nearby (that entry's own first cited line, a Proprium
+; Sanctorum page-title reading "D.ni Nostri Jesu Christi Regis"). The
+; three sanctoral entries below
+; that also carry this abbreviation (13 Jan, 1 Jul, 6 Aug) have no such
+; nearby spelled-out occurrence -- the calendarium is their only source,
+; and it never spells the phrase out anywhere in this document -- so
+; expanding would be an unattested guess at wording rather than a
+; transcription, and check-citations.py could never confirm it. Left
+; abbreviated, exactly as the calendarium prints it.
+;
+; Two entries needed a citation the calendarium itself cannot supply. Its
+; four "vigil" rows print the bare word "Vigilia" with no saint named
+; (the compact table relies on the reader's own sense of position, not on
+; the printed word, to say whose vigil it is) -- RG 30-32 (Caput V, "De
+; Vigiliis") name all four explicitly, and that fuller, unambiguous
+; wording is used instead, cited to both the calendarium row (day/rank)
+; and the RG paragraph (the actual words). St Mark's own row also carries
+; a "Litania Maior. – " annotation ahead of his title, marking that the
+; Major Litanies (RG 80/81, a separate commemoration-only entity already
+; in data/ef/adjustments.sexp) fall on his date -- stripped, since it is
+; not part of his own title.
+; ---------------------------------------------------------------------
+; January.
+commemoration-of-the-baptism-of-the-lord = In Commemoratione Baptismatis D. N. I. C.
+; LT.txt:4940.
+hilary = S. Hilarii Ep., Conf. et Eccl. Doct.
+; LT.txt:4941.
+paul-the-first-hermit = S. Pauli Primi Eremitae, Conf.
+; LT.txt:4943.
+marcellus-i = S. Marcelli I Papae et Mart.
+; LT.txt:4945.
+anthony = S. Antonii Abb.
+; LT.txt:4946.
+sts-fabian-sebastian = Ss. Fabiani Papae et Sebastiani Mm.
+; LT.txt:4953.
+agnes = S. Agnetis Virg. et Mart.
+; LT.txt:4954.
+sts-vincent-anastasius = Ss. Vincentii et Anastasii Mm.
+; LT.txt:4955.
+raymond-of-pe-afort = S. Raymundi de Peñafort Conf.
+; LT.txt:4956.
+timothy = S. Timothei Ep. et Mart.
+; LT.txt:4958.
+conversion-of-st-paul = In Conversione S. Pauli Ap.
+; LT.txt:4959.
+polycarp = S. Polycarpi Ep. et Mart.
+; LT.txt:4961.
+john-chrysostom = S. Ioannis Chrysostomi Ep., Conf. et Eccl. Doct.
+; LT.txt:4962.
+peter-nolasco = S. Petri Nolasci Conf.
+; LT.txt:4963.
+francis-de-sales = S. Francisci Salesii Ep., Conf. et Eccl. Doct.
+; LT.txt:4965.
+martina = S. Martinae Virg. et Mart.
+; LT.txt:4966.
+john-bosco = S. Ioannis Bosco Conf.
+; LT.txt:4967. Source prints "S Ioannis" (missing period after the abbreviated "S"); corrected for consistency -- every other entry in this block abbreviates the saint marker "S."/"Ss." with its period, and no other reading of a bare "S" is available.
+
+; February.
+ignatius-of-antioch = S. Ignatii Ep. et Mart.
+; LT.txt:4976.
+purification-of-the-blessed-virgin-mary = In Purificatione B. Mariae Virg.
+; LT.txt:4977.
+andrew-corsini = S. Andreae Corsini Ep. et Conf.
+; LT.txt:4979.
+agatha = S. Agathae Virg. et Mart.
+; LT.txt:4980.
+titus = S. Titi Ep. et Conf.
+; LT.txt:4981.
+romuald = S. Romualdi Abb.
+; LT.txt:4983.
+john-of-matha = S. Ioannis de Matha Conf.
+; LT.txt:4984.
+cyril-of-alexandria = S. Cyrilli Ep. Alexandrini, Conf. et Eccl. Doct.
+; LT.txt:4985.
+scholastica = S. Scholasticae Virg.
+; LT.txt:4987.
+our-lady-of-lourdes = In Apparitione B. Mariae Virg. Immaculatae
+; LT.txt:4988.
+seven-holy-servite-founders = Ss. Septem Fundatorum Ordinis Servorum B. Mariae Virg., Cc.
+; LT.txt:4989.
+chair-of-st-peter = Cathedrae S. Petri Ap.
+; LT.txt:5003.
+peter-damien = S. Petri Damiani Ep., Conf. et Eccl. Doct.
+; LT.txt:5005.
+matthias = S. Matthiae Ap.
+; LT.txt:5006.
+gabriel-of-our-lady-of-sorrows = S. Gabrielis a Virgine Perdolente Conf.
+; LT.txt:5009.
+
+; March.
+casimir = S. Casimiri Conf.
+; LT.txt:5023.
+sts-felicitas-perpetua = Ss. Perpetuae et Felicitatis Mm.
+; LT.txt:5026.
+john-of-god = S. Ioannis a Deo Conf.
+; LT.txt:5028.
+frances-rome = S. Franciscae Romanae Viduae
+; LT.txt:5029.
+joseph-spouse-of-the-bl-virgin-mary = S. Ioseph, Sponsi B. Mariae Virg., Conf. et Ecclesiae universae Patroni
+; LT.txt:5042-5043 (a genuine two-line wrap, RANGE not list -- see this
+; file's own header note on the two citation shapes).
+annunciation-of-the-blessed-virgin-mary = In Annuntiatione B. Mariae Virg.
+; LT.txt:5049.
+
+; April.
+isidore-of-seville = S. Isidori Ep., Conf. et Eccl. Doct.
+; LT.txt:5065.
+vincent-ferrer = S. Vincentii Ferrerii Conf.
+; LT.txt:5066.
+leo-the-great = S. Leonis I Papae, Conf. et Eccl. Doct.
+; LT.txt:5072.
+hermenegild = S. Hermenegildi Mart.
+; LT.txt:5078.
+justin = S. Iustini Mart.
+; LT.txt:5079.
+anselm = S. Anselmi Ep., Conf. et Eccl. Doct.
+; LT.txt:5087.
+sts-soter-caius = Ss. Soteris et Caii Pp. et Mm.
+; LT.txt:5088.
+fidelis-of-sigmaringen = S. Fidelis de Sigmaringa Mart.
+; LT.txt:5090.
+mark = S. Marci Evangelistae
+; LT.txt:5091. "Litania Maior. – " stripped from the calendarium's own text: that clause notes the Major Litanies (RG 80/81, a separate commemoration-only entity, data/ef/adjustments.sexp) fall on St Mark's own date, not part of his title.
+sts-cletus-marcellinus = Ss. Cleti et Marcellini Pp. et Mm.
+; LT.txt:5092.
+peter-canisius = S. Petri Canisii Conf. et Eccl. Doct.
+; LT.txt:5093.
+paul-of-the-cross = S. Pauli a Cruce Conf.
+; LT.txt:5094.
+peter-of-verona = S. Petri Mart.
+; LT.txt:5095.
+catherine-of-siena = S. Catharinae Senensis Virg.
+; LT.txt:5096.
+
+; May.
+joseph-the-workman = S. Ioseph Opificis Sponsi B. Mariae Virg., Conf.
+; LT.txt:5102.
+athanasius = S. Athanasii Ep., Conf. et Eccl. Doct.
+; LT.txt:5103.
+monica = S. Monicae Viduae
+; LT.txt:5105.
+pius-v = S. Pii V Papae et Conf.
+; LT.txt:5106.
+stanislaus = S. Stanislai Ep. et Mart.
+; LT.txt:5108.
+gregory-of-nazianzen = S. Gregorii Nazianzeni Ep., Conf. et Eccl. Doct.
+; LT.txt:5110.
+antoninus = S. Antonini Ep. et Conf.
+; LT.txt:5111.
+sts-philip-james = Ss. Philippi et Iacobi App.
+; LT.txt:5113.
+sts-nereus-achilleus-domitilla-pancras = Ss. Nerei, Achillei et Domitillae Virg., atque Pancratii Mm.
+; LT.txt:5114.
+robert-bellarmine = S. Roberti Bellarmino Ep., Conf. et Eccl. Doct.
+; LT.txt:5115.
+john-baptist-de-la-salle = S. Ioannis Baptistae de la Salle Conf.
+; LT.txt:5120.
+ubaldus = S. Ubaldi Ep. et Conf.
+; LT.txt:5121.
+paschal-baylon = S. Paschalis Baylon Conf.
+; LT.txt:5122.
+venantius = S. Venantii Mart.
+; LT.txt:5123.
+peter-celestine = S. Petri Caelestini Papae et Conf.
+; LT.txt:5124.
+bernardine-of-siena = S. Bernardini Senensis Conf.
+; LT.txt:5126.
+gregory-vii = S. Gregorii Papae et Conf.
+; LT.txt:5131.
+philip-neri = S. Philippi Nerii Conf.
+; LT.txt:5133.
+bede-the-venerable = S. Bedae Venerabilis Conf. et Eccl. Doct.
+; LT.txt:5135.
+augustine-of-canterbury = S. Augustini Ep. et Conf.
+; LT.txt:5137.
+mary-magdalene-de-pazzi = S. Mariae Magdalenae de Pazzis Virg.
+; LT.txt:5138.
+queenship-of-the-blessed-virgin-mary = B. Mariae Virg. Reginae
+; LT.txt:5140.
+
+; June.
+angela-merici = S. Angelae Mericiae Virg.
+; LT.txt:5147.
+francis-caracciolo = S. Francisci Caracciolo Conf.
+; LT.txt:5150.
+boniface = S. Bonifatii Ep. et Mart.
+; LT.txt:5151.
+norbert = S. Norberti Ep. et Conf.
+; LT.txt:5152.
+margaret-of-scotland = S. Margaritae Reginae, Viduae
+; LT.txt:5156.
+barnabas = S. Barnabae Apostoli
+; LT.txt:5157.
+john-of-san-fecundo = S. Ioannis a S. Facundo Conf.
+; LT.txt:5162.
+anthony-of-padua = S. Antonii de Padua Conf. et Eccl. Doct.
+; LT.txt:5164.
+basil-the-great = S. Basilii Magni Ep., Conf. et Eccl. Doct.
+; LT.txt:5165.
+gregory-barbarigo = S. Gregorii Barbadici Ep. et Conf.
+; LT.txt:5168.
+ephrem-of-syria = S. Ephraem Syri Diaconi, Conf. et Eccl. Doct.
+; LT.txt:5169.
+julia-of-falconieri = S. Iulianae de Falconeriis Virg.
+; LT.txt:5171.
+aloysius-gongzaga = S. Aloisii Gonzagae Conf.
+; LT.txt:5173.
+paulinus-of-nola = S. Paulini Ep. et Conf.
+; LT.txt:5174.
+vigil-of-the-nativity-of-st-john-the-baptist = Vigilia Nativitatis S. Ioannis Baptistae
+; LT.txt:971 (RG 31(c), "vigilia Nativitatis S. Ioannis Baptistae", the full
+; name -- the calendarium row itself, LT.txt line 5175, prints only the
+; bare word "Vigilia" with no saint named, relying on the reader's own
+; sense of position, so it cannot itself support this entry's full value
+; and is not cited as if it could).
+nativity-of-st-john-the-baptist = In Nativitate S. Ioannis Baptistae
+; LT.txt:5176.
+william = S. Gulielmi Abb.
+; LT.txt:5177.
+sts-john-paul = Ss. Ioannis et Pauli Mm.
+; LT.txt:5178.
+vigil-of-sts-peter-paul = Vigilia Ss. Petri et Pauli Apostolorum
+; LT.txt:972 (RG 31(d), "vigilia Ss. Petri et Pauli Apostolorum") --
+; the calendarium row, LT.txt line 5180, is again the bare word "Vigilia"
+; alone, same reasoning as the previous entry.
+sts-peter-paul = Ss. Petri et Pauli App.
+; LT.txt:5181.
+in-commemoratione-sancti-pauli-apostoli = In Commemoratione S. Pauli Ap.
+; LT.txt:5182.
+
+; July.
+precious-blood-of-our-lord-jesus-christ = Pretiosissimi Sanguinis D. N. I. C.
+; LT.txt:5191.
+visitation-of-the-blessed-virgin-mary = In Visitatione B. Mariae Virg.
+; LT.txt:5192.
+irenaeus = S. Irenaei Ep. et Mart.
+; LT.txt:5194.
+anthony-mary-zaccariah = S. Antonii Mariae Zaccaria Conf.
+; LT.txt:5196.
+sts-cyril-methodius = Ss. Cyrilli et Methodii Epp. et Cc.
+; LT.txt:5198.
+elizabeth-of-portugal = S. Elisabeth Reginae, Viduae
+; LT.txt:5199.
+seven-holy-brothers-and-sts-rufina-secunda = Ss. Septem Fratrum Mm., ac Ss. Rufinae et Secundae Vv. et Mm.
+; LT.txt:5204.
+john-gualbert = S. Ioannis Gualberti Abb.
+; LT.txt:5206.
+bonaventure = S. Bonaventurae Ep., Conf. et Eccl. Doct.
+; LT.txt:5208.
+henry-the-emperor = S. Henrici Imperatoris Conf.
+; LT.txt:5209.
+camillus-de-lellis = S. Camilli de Lellis Conf.
+; LT.txt:5212.
+vincent-de-paul = S. Vincenti a Paulo Conf.
+; LT.txt:5214.
+jerome-emiliani = S. Hieronymi Aemiliani Conf.
+; LT.txt:5215.
+laurence-of-brindisi = S. Laurentii de Brundusio Conf. et Eccl. Doct.
+; LT.txt:5217.
+mary-magdalene = S. Mariae Magdalenae Poenitentis
+; LT.txt:5219.
+apollinaris = S. Apollinaris Ep. et Mart.
+; LT.txt:5220.
+james-the-greater = S. Iacobi Apostoli
+; LT.txt:5223.
+anne-mother-of-the-blessed-virgin = S. Annae Matris B. M. V.
+; LT.txt:5225.
+sts-nazarius-celsus-st-victor-i-st-innocent-i = Ss. Nazarii et Celsi Mm., Victoris I Papae et Mart., ac Innocentii I Papae et Conf.
+; LT.txt:5227-5228 (a genuine two-line wrap, RANGE not list).
+martha = S. Marthae Virg.
+; LT.txt:5229.
+ignatius-loyola = S. Ignatii Conf.
+; LT.txt:5232.
+
+; August.
+alphonsus-liguori = S. Alfonsi Mariae de Ligorio Ep., Conf. et Eccl. Doct.
+; LT.txt:5239.
+dominic = S. Dominici Conf.
+; LT.txt:5245.
+dedication-of-the-basilica-of-st-mary-major = In Dedicatione S. Mariae ad Nives
+; LT.txt:5246.
+transfiguration-of-our-lord = In Transfiguratione D. N. I. C.
+; LT.txt:5247.
+cajetan = S. Caietani Conf.
+; LT.txt:5249.
+john-mary-vianney = S. Ioannis Mariae Vianney Conf.
+; LT.txt:5250.
+vigil-of-st-lawrence = Vigilia S. Laurentii
+; LT.txt:977 (RG 32, "Vigilia III classis est vigilia S. Laurentii") --
+; the calendarium row, LT.txt line 5252, is again the bare word "Vigilia"
+; alone, same reasoning as the two entries above.
+lawrence = S. Laurentii Mart.
+; LT.txt:5253.
+clare = S. Clarae Virg.
+; LT.txt:5255.
+vigil-of-the-assumption = Vigilia Assumptionis B. Mariae Virg.
+; LT.txt:970 (RG 31(b), "vigilia Assumptionis B. Mariae Virg.") -- the
+; calendarium row, LT.txt line 5257, is again the bare word "Vigilia"
+; alone, same reasoning as the three entries above.
+assumption-of-the-blessed-virgin-mary = In Assumptione B. Mariae Virg.
+; LT.txt:5258.
+joachim-father-of-the-blessed-virgin = S. Ioachim Patris B. Mariae Virg., Conf.
+; LT.txt:5259.
+hyacinth = S. Hyacinthi Conf.
+; LT.txt:5260.
+john-eudes = S. Ioannis Eudes Conf.
+; LT.txt:5262.
+bernard-of-clairvaux = S. Bernardi Abb. et Eccl. Doct.
+; LT.txt:5263.
+jane-frances-de-chantal = S. Ioannae Franciscae Frémiot de Chantal Viduae
+; LT.txt:5264.
+immaculate-heart-of-mary = Immaculati Cordis B. Mariae Virg.
+; LT.txt:5265.
+philip-benizi = S. Philippi Benitii Conf.
+; LT.txt:5267.
+bartholomew = S. Bartholomaei Ap.
+; LT.txt:5268.
+louis-ix = S. Ludovici Regis, Conf.
+; LT.txt:5269.
+joseph-calasance = S. Iosephi Calasanctii Conf.
+; LT.txt:5271.
+augustine = S. Augustini Ep., Conf. et Eccl. Doct.
+; LT.txt:5272.
+beheading-of-st-john-the-baptist = In Decollatione S. Ioannis Baptistae
+; LT.txt:5274.
+rose-of-lima = S. Rosae Limanae Virg.
+; LT.txt:5276.
+raymond-nonnatus = S. Raymundi Nonnati Conf.
+; LT.txt:5277.
+
+; September.
+stephen-of-hungary = S. Stephani Regis Conf.
+; LT.txt:5289.
+pius-x = S. Pii X Papae et Conf.
+; LT.txt:5290.
+lawrence-justinian = S. Laurentii Iustiniani Ep. et Conf.
+; LT.txt:5292.
+nativity-of-the-blessed-virgin-mary = In Nativitate B. Mariae Virg.
+; LT.txt:5295.
+nicholas-of-tolentino = S. Nicolai de Tolentino Conf.
+; LT.txt:5298.
+most-holy-name-of-mary = Sanctissimi Nominis Mariae
+; LT.txt:5300.
+exaltation-of-the-holy-cross = In Exaltatione S. Crucis
+; LT.txt:5302.
+seven-sorrows-of-the-blessed-virgin-mary = Septem Dolorum B. Mariae Virginis
+; LT.txt:5303.
+sts-cornelius-cyprian = Ss. Cornelis Papae et Cypriani Ep., Mm.
+; LT.txt:5305.
+joseph-of-cupertino = S. Iosephi de Cupertino Conf.
+; LT.txt:5308.
+januarius-companions = Ss. Ianuarii Ep. et Sociorum Mm.
+; LT.txt:5309.
+matthew = S. Matthaei Ap. et Ev.
+; LT.txt:5311.
+thomas-of-villanova = S. Thomae de Villanova Ep. et Conf.
+; LT.txt:5312.
+linus = S. Lini Papae et Mart.
+; LT.txt:5314.
+sts-cosmas-damian = Ss. Cosmae et Damiani Mm.
+; LT.txt:5319.
+wenceslaus = S. Wenceslai Ducis, Mart.
+; LT.txt:5320.
+dedication-of-st-michael-the-archangel = In Dedicatione S. Michaelis Archangeli
+; LT.txt:5321.
+jerome = S. Hieronymi Presbyteri, Conf. et Eccl. Doct.
+; LT.txt:5322.
+
+; October.
+holy-guardian-angels = Ss. Angelorum Custodum
+; LT.txt:5334.
+theresa-of-the-infant-jesus = S. Teresiae a Iesu Infante Virg.
+; LT.txt:5335.
+francis-of-assisi = S. Francisci Conf.
+; LT.txt:5336.
+bruno = S. Brunonis Conf.
+; LT.txt:5338.
+our-lady-of-the-rosary = B. Mariae Virg. a Rosario
+; LT.txt:5339.
+bridget-of-sweden = S. Birgittae Viduae
+; LT.txt:5341.
+john-leonardi = S. Ioannis Leonardi Conf.
+; LT.txt:5343.
+francis-borgia = S. Francisci Borgiae Conf.
+; LT.txt:5345.
+maternity-of-the-blessed-virgin-mary = Maternitatis B. Mariae Virg.
+; LT.txt:5346.
+edward = S. Eduardis Regis, Conf.
+; LT.txt:5348. Source prints "Conf" (missing trailing period before the rank comma); corrected for the same reason as john-bosco above.
+callistus-i = S. Callisti I Papae et Mart.
+; LT.txt:5349.
+teresa-of-avila = S. Teresiae Virg.
+; LT.txt:5350.
+hedwig = S. Hedwigis Viduae
+; LT.txt:5351.
+margaret-mary-alacoque = S. Margaritae Mariae Alacoque Virg.
+; LT.txt:5352.
+luke-the-evangelist = S. Lucae Evangelistae
+; LT.txt:5353.
+peter-of-alcantara = S. Petri de Alcantara Conf.
+; LT.txt:5354.
+john-cantius = S. Ioannis Cantii Conf.
+; LT.txt:5355.
+anthony-mary-claret = S. Antonii Mariae Claret Ep. et Conf.
+; LT.txt:5359.
+raphael-the-archangel = S. Raphaelis Archangeli
+; LT.txt:5360.
+sts-simon-jude = Ss. Simeonis et Iudae App.
+; LT.txt:5364.
+
+; November.
+all-saints = Omnium Sanctorum
+; LT.txt:5378.
+commemoration-of-all-souls = In Commemoratione Omnium Fidelium Defunctorum
+; LT.txt:5379.
+charles-borromeo = S. Caroli Ep. et Conf.
+; LT.txt:5381.
+dedication-of-the-archbasilica-of-our-holy-savior = In Dedicatione Archibasilicae Sanctissimi Salvatoris
+; LT.txt:5387.
+andrew-avellino = S. Andreae Avellini Conf.
+; LT.txt:5389.
+martin-of-tours = S. Martini Ep. et Conf.
+; LT.txt:5391.
+martin-i = S. Martini I Papae et Mart.
+; LT.txt:5393.
+didacus = S. Didaci Conf.
+; LT.txt:5394.
+josaphat = S. Iosaphat Ep. et Mart.
+; LT.txt:5395.
+albert-the-great = S. Alberti Magni Ep., Conf. et Eccl. Doct.
+; LT.txt:5396.
+gertrude-the-great = S. Gertrudis Virg.
+; LT.txt:5397.
+gregory-the-wonderworker = S. Gregorii Thaumaturgi Ep. et Conf.
+; LT.txt:5398.
+dedication-of-the-basilicas-of-sts-peter-paul = In Dedicatione Basilicarum Ss. Petri et Pauli App.
+; LT.txt:5399.
+elizabeth-of-hungary = S. Elisabeth Viduae
+; LT.txt:5400.
+felix-of-valois = S. Felicis de Valois Conf.
+; LT.txt:5402.
+presentation-of-the-blessed-virgin-mary = In Praesentatione B. Mariae Virg.
+; LT.txt:5403.
+cecilia = S. Caeciliae Virg. et Mart.
+; LT.txt:5404.
+clement-i = S. Clementis I Papae et Mart.
+; LT.txt:5405.
+john-of-the-cross = S. Ioannis a Cruce Conf. et Eccl. Doct.
+; LT.txt:5407.
+catherine-of-alexandria = S. Catharinae Virg. et Mart.
+; LT.txt:5412.
+sylvester = S. Silvestri Abb.
+; LT.txt:5413.
+andrew = S. Andreae Apostoli
+; LT.txt:5418.
+
+; December.
+vivian = S. Bibianae Virg. et Mart.
+; LT.txt:5425.
+francis-xavier = S. Francisci Xavierii Conf.
+; LT.txt:5426.
+peter-chrysologus = S. Petri Chrysologi Ep., Conf. et Eccl. Doct.
+; LT.txt:5427.
+nicholas = S. Nicolai Ep. et Conf.
+; LT.txt:5430.
+ambrose = S. Ambrosii Ep., Conf. et Eccl. Doct.
+; LT.txt:5431.
+immaculate-conception-of-the-blessed-virgin-mary = In Conceptione Immaculata B. Mariae Virg.
+; LT.txt:5432.
+damasus-i = S. Damasi I Papae et Conf.
+; LT.txt:5435.
+lucy = S. Luciae Virg. et Mart.
+; LT.txt:5437.
+eusebius = S. Eusebii Ep. et Mart.
+; LT.txt:5440.
+thomas = S. Thomae Apostoli
+; LT.txt:5445.
+stephen = S. Stephani Protomartyris
+; LT.txt:5453-5454 (a genuine two-line wrap, RANGE not list -- day-number
+; and heading print on separate physical lines here, a page-width wrap the
+; compact table falls into nowhere else in this block).
+john-the-evangelist = S. Ioannis Ap. et Ev.
+; LT.txt:5456.
+holy-innocents = Ss. Innocentium Mm.
+; LT.txt:5458.
diff --git a/test/dune b/test/dune
index 6e2ac87..c1a14fb 100644
--- a/test/dune
+++ b/test/dune
@@ -5,6 +5,7 @@
../data/ef/sanctoral.sexp
../data/ef/adjustments.sexp
../lang/la.ini
+ ../lang/en.ini
../data/ef/expected-divergences.sexp
../data/ef/expected-divergences-missalemeum.sexp
../data/ef/lectionary.sexp
diff --git a/test/test_lang_coverage.ml b/test/test_lang_coverage.ml
index d72484f..96a3383 100644
--- a/test/test_lang_coverage.ml
+++ b/test/test_lang_coverage.ml
@@ -11,19 +11,17 @@ let la () =
| Ok t -> t
| Error e -> Alcotest.failf "lang/la.ini: %s" e
-(* Every TEMPORAL slug the engine can emit must have a Latin name. THIS IS THE
- TEST THAT WOULD HAVE CAUGHT THE ORIGINAL DEFECT -- a booklet printed
- "ef-septuagesima-sunday-2" because nothing asserted coverage. It must fail
- loudly the moment a new slug appears without a name.
+(* Every slug the engine can emit -- temporal ("^ef-") AND sanctoral (a fixed
+ saint's day) alike -- must have a Latin name. THIS IS THE TEST THAT WOULD
+ HAVE CAUGHT THE ORIGINAL DEFECT -- a booklet printed "ef-septuagesima-
+ sunday-2" because nothing asserted coverage. It must fail loudly the
+ moment a new slug appears without a name.
- RESTRICTED TO "^ef-" SLUGS FOR NOW (Task 3's own scope: la.ini's
- [celebration] table currently carries the temporal half only). Task 4 adds
- the sanctoral names and REMOVES this filter -- see this file's own
- [is_temporal_slug] below, kept as one clearly-named, easy-to-find place to
- change, rather than an inline condition. *)
-let is_temporal_slug slug = String.length slug >= 3 && String.sub slug 0 3 = "ef-"
-
-let test_every_temporal_slug_has_a_latin_name () =
+ Task 3 restricted this to "^ef-" slugs only (la.ini's [celebration] table
+ carried the temporal half alone at the time); Task 4 added the sanctoral
+ half and REMOVED that filter -- every slug is now in scope, with no
+ exceptions. *)
+let test_every_slug_has_a_latin_name () =
let t = la () in
let layer = match Test_support.load_ef_layer () with Ok l -> l | Error e -> Alcotest.failf "%s" e in
let ctx = Test_support.ef_context () in
@@ -36,11 +34,8 @@ let test_every_temporal_slug_has_a_latin_name () =
d.Colitur_kernel.Liturgical_day.observed.Colitur_kernel.Celebration.slug
in
(* A miss returns the key itself, so name = slug means "no entry". *)
- if
- is_temporal_slug slug
- && L.celebration t slug = slug
- && not (List.mem slug !missing)
- then missing := slug :: !missing)
+ if L.celebration t slug = slug && not (List.mem slug !missing) then
+ missing := slug :: !missing)
(Colitur_kernel.Calendar.year ctx layer y)
done;
if !missing <> [] then
@@ -66,8 +61,44 @@ let test_vocabularies_are_complete () =
if L.month t n = string_of_int n then Alcotest.failf "no Latin month for %d" n
done
+(* lang/en.ini is DELIBERATELY partial (see its own header note): it declares
+ [meta] fallback = la, so a slug it does not carry itself should still
+ resolve through the chain to la.ini's name rather than degrade to the bare
+ slug -- that is what makes an incomplete translation shippable from its
+ first line. This test proves the CHAIN MECHANISM itself, independent of
+ how complete lang/en.ini happens to be today: a from-scratch table with NO
+ [celebration] entries at all, chained to the real la.ini, must still
+ resolve a real la.ini key -- so the test cannot be defeated simply by
+ en.ini becoming more complete over time. It also sanity-checks the real
+ shipped file: that it parses, declares the right fallback code, and that
+ at least one of its own entries resolves directly (not merely through the
+ chain). *)
+let test_en_falls_back_to_latin () =
+ let en =
+ match L.of_string (read "../lang/en.ini") with
+ | Ok t -> t
+ | Error e -> Alcotest.failf "lang/en.ini: %s" e
+ in
+ Alcotest.(check string) "declares la fallback" "la"
+ (Option.value (L.fallback_code en) ~default:"NONE");
+ (* The real shipped file: at least one of its own entries resolves without
+ needing the chain at all. *)
+ Alcotest.(check bool) "en.ini names ef-epiphany directly" true
+ (L.celebration en "ef-epiphany" <> "ef-epiphany");
+ (* The mechanism, isolated from today's en.ini coverage: an EMPTY table
+ (no [celebration] section) chained to la.ini must still resolve a real
+ la.ini-only key through the fallback. *)
+ let empty =
+ match L.of_string "[meta]\nlang = en\nfallback = la\n" with
+ | Ok t -> t
+ | Error e -> Alcotest.failf "synthetic empty en table: %s" e
+ in
+ let chained = L.with_fallback empty (la ()) in
+ Alcotest.(check bool) "empty table falls back to la.ini for a real slug" true
+ (L.celebration chained "hilary" <> "hilary")
+
let suite =
( "Lang/coverage",
- [ Alcotest.test_case "every temporal slug has a Latin name" `Slow
- test_every_temporal_slug_has_a_latin_name;
- Alcotest.test_case "vocabularies complete" `Quick test_vocabularies_are_complete ] )
+ [ Alcotest.test_case "every slug has a Latin name" `Slow test_every_slug_has_a_latin_name;
+ Alcotest.test_case "vocabularies complete" `Quick test_vocabularies_are_complete;
+ Alcotest.test_case "en.ini falls back to Latin" `Quick test_en_falls_back_to_latin ] )