From f00f7a66d073815249e94cec1b6ef10539d773e7 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Wed, 19 Aug 2026 14:12:52 +0200 Subject: feat(lang): Latin temporal names from the Missal Every entry is transcribed from the 1962 Missal's own propers headings in docs/research/LT.txt and cites where it came from; names constructed by following a neighbouring pattern are marked as such, so a reader can tell transcription from inference. The coverage test is the point of this commit. It walks every day of 2020-2045 and fails naming any slug with no Latin name -- the test that would have caught the original defect, where a printed booklet said ef-septuagesima-sunday-2 because nothing asserted that names exist. The three Triduum names reuse the exact strings temporal_ef.ml already carries, so the engine and the language file cannot disagree. --- lang/la.ini | 717 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 717 insertions(+) create mode 100644 lang/la.ini (limited to 'lang') diff --git a/lang/la.ini b/lang/la.ini new file mode 100644 index 0000000..9b1ccf7 --- /dev/null +++ b/lang/la.ini @@ -0,0 +1,717 @@ +; colitur -- Latin names, transcribed from the 1962 Missale Romanum. +; Every celebration entry cites where its name came from: a line number in +; docs/research/LT.txt (the electronic transcription, gitignored, present +; locally only), a citation to code that already carries a scan-verified +; string, or -- where the Missal genuinely gives no heading for a day the +; engine emits -- an explicit "PATTERN" marker naming the neighbour rule the +; constructed name follows. An uncited name is worse than a slug: a slug is +; honestly a key, a wrong name is a false claim. +; +; TASK 3 SCOPE: this file currently carries the TEMPORAL half of +; [celebration] only (every ef-* slug the engine can emit, 2020-2045 +; measured). The sanctoral half (a fixed saint's day, not a season/week +; slug) arrives in Task 4, together with the removal of the "^ef-" filter in +; test/test_lang_coverage.ml's own coverage test. +; +; Typographic normalisation applied uniformly, disclosed once here rather +; than per entry: +; - ae/oe replace the ae/oe ligatures LT.txt itself prints +; -- matching the convention already established by every hand-written +; Latin string in lib/rites/rite_ef/temporal_ef.ml (e.g. "Sanctae +; Familiae Iesu, Mariae, Ioseph", "Officium sanctae Mariae in sabbato"), +; none of which use the ligature either. +; - the consonantal i (Iesu, Ianuarius) replaces j/J (Jesu, Januarius) +; throughout, the same existing code convention (temporal_ef.ml's own +; [holy_name_names] is "Sanctissimi Nominis Iesu", never "...Jesu"). +; - abbreviations the source prints (Ss.mi, Ss.mae, D.ni) are spelled out +; in full (Sanctissimi, Sanctissimae, Domini Nostri) -- again matching +; temporal_ef.ml's own precedent of spelling these out in full rather +; than reusing the Missal's own abbreviated form. +; None of these three changes the WORDS a heading uses, only their spelling +; convention; every substantive word choice below is either transcribed +; verbatim (case aside) or explicitly marked PATTERN. + +[meta] +lang = la +name = Latine + +[weekday] +; The Missal's own ferial vocabulary: Sunday is Dominica, and the weekdays +; are numbered feriae from II (Monday) to VII (Saturday) -- except Saturday, +; which the Missal always calls Sabbatum, never "Feria VII" (confirmed +; throughout docs/research/LT.txt's own Proprium de Tempore table of +; contents, e.g. "Sabbato post Dominicam II in Quadragesima", never "Feria +; VII ..."). Standard Latin vocabulary, not itself a Missal heading to cite +; line by line. +sunday = Dominica +monday = Feria II +tuesday = Feria III +wednesday = Feria IV +thursday = Feria V +friday = Feria VI +saturday = Sabbatum + +[month] +; Standard Latin month names -- general vocabulary, not a Missal heading. +1 = Ianuarius +2 = Februarius +3 = Martius +4 = Aprilis +5 = Maius +6 = Iunius +7 = Iulius +8 = Augustus +9 = September +10 = October +11 = November +12 = December + +[season] +; RG 71-77's own season names. Five of eight are direct Proprium de Tempore +; section headings in docs/research/LT.txt (line numbers below); the other +; three are noted individually -- colitur's own eight-season split does not +; align 1:1 with the Missal's own table-of-contents section boundaries, so +; not every colitur season has one clean matching heading. +advent = Tempus Adventus +; LT.txt:8631. +christmastide = Tempus Nativitatis +; NOT a direct match. LT.txt has "Tempus Epiphaniae" (LT.txt:8661, covering +; 6-13 January) for what colitur calls the tail of Christmastide, and a +; SEPARATE "Tempus per annum ante Septuagesimam" (LT.txt:8668, covering the +; numbered Sundays II-VI post Epiphaniam) for what colitur calls +; time-after-epiphany -- colitur's own season boundary (RG 72-73/77: 14 +; January) falls inside neither TOC section. Using the section that covers +; the bulk of colitur's own time-after-epiphany (the numbered weeks), with +; this caveat rather than a silent pick. +time-after-epiphany = Tempus per annum ante Septuagesimam +septuagesima = Tempus Septuagesimae +; LT.txt:8675. +lent = Tempus Quadragesimae +; LT.txt:8685. +passiontide = Tempus Passionis +; LT.txt:8719. +paschaltide = Tempus Paschatis +; LT.txt:8751. CORRECTED from an earlier draft's "Tempus Paschale": LT.txt's +; own TOC consistently uses "Tempus " (Adventus, +; Nativitatis, Epiphaniae, Septuagesimae, Quadragesimae, Passionis, +; Paschatis, Ascensionis) -- "Paschale" is an adjective and does not match +; that pattern or the source text. +time-after-pentecost = Tempus per annum post Pentecosten +; LT.txt:8785. + +[rank] +; RG 8's four classes. "I classis" is directly attested, not only in the +; Rubricae Generales but in a Mass propers heading itself -- +; LT.txt:12459, "D.NI NOSTRI JESU CHRISTI REGIS / I classis" (Christ the +; King). The other three ordinals follow the identical, standard pattern. +class-1 = I classis +class-2 = II classis +class-3 = III classis +class-4 = IV classis + +[colour] +; RG 117 enumerates the five colours; RG 127/128 assign green/violet to the +; seasons, RG 131 rose (an indult, two Sundays only), RG 117-120 the rest. +; White, red and violet are directly attested as rubric words in +; docs/research/LT.txt ("color albus"/"color ruber"/"color violaceus", +; e.g. LT.txt:1873,1912,1980); green appears once (LT.txt, "viridis"). +; Rose and black do not occur anywhere in LT.txt's own captured text (LT.txt +; is a partial 2006 web capture of Mass propers, and rose is used on two +; Sundays a year, black mostly in Requiem/Good-Friday rubrics the capture +; does not include) -- both are standard rubrical Latin, cited to RG 117/131 +; rather than to a line number, not invented. +white = albus +red = ruber +green = viridis +violet = violaceus +rose = rosaceus +black = niger + +[term] +; Standard liturgical Latin, all directly attested in docs/research/LT.txt +; (Epistola, Lectio, Evangelium, Commemoratio, Hebdomada/Hebdomadae each +; appear repeatedly as rubric labels throughout the propers text; "Ordo" is +; the running page header "ORDO MISSAE"; "Index" appears once). +ordo = Ordo +contents = Index +epistle = Epistola +lesson = Lectio +gospel = Evangelium +commemoration = Commemoratio +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. +; --------------------------------------------------------------------- + +; Christmas cycle -- LT.txt:8627,8632,8657,8662 (Proprium de Tempore TOC). +; 1 January: the TOC's own heading is "In Octava Nativitatis Domini", NOT +; "In Circumcisione Domini" -- RG 68 confirms the 1960 rubrics renamed the +; day ("Octava Nativitatis Domini modo peculiari ordinatur"); the older +; title never appears anywhere in LT.txt. colitur's own slug ("circumcision") +; is a lectio-inherited key, not a claim about the Missal's own title. +ef-nativity-vigil = In Vigilia Nativitatis Domini +ef-nativity = In Nativitate Domini +ef-circumcision = In Octava Nativitatis Domini +ef-epiphany = In Epiphania Domini + +; The Octave of the Nativity, days 5-7 -- LT.txt:8649-8655. +ef-nativity-octave-day-5 = De V Die infra Octavam Nativitatis Domini +ef-nativity-octave-day-6 = De VI Die infra Octavam Nativitatis Domini +ef-nativity-octave-day-7 = De VII Die infra Octavam Nativitatis Domini + +; Advent Sundays -- LT.txt:8614,8616,8617,8626. +ef-advent-sunday-1 = Dominica I Adventus +ef-advent-sunday-2 = Dominica II Adventus +ef-advent-sunday-3 = Dominica III Adventus +ef-advent-sunday-4 = Dominica IV Adventus + +; The Gesimae, named not numbered -- LT.txt:8676,8682,8683. +ef-septuagesima-sunday-1 = Dominica in Septuagesima +ef-septuagesima-sunday-2 = Dominica in Sexagesima +ef-septuagesima-sunday-3 = Dominica in Quinquagesima + +; Time after Epiphany Sundays -- LT.txt:8669-8673 (the ordinary occurrence). +; ef-time-after-epiphany-sunday-1 is Holy Family, not an ordinary numbered +; Sunday -- LT.txt:8663-8664 itself glosses it "Dominica I post Epiphaniam, +; Sanctae Familiae Iesu, Mariae, Ioseph", and temporal_ef.ml's own +; [holy_family_sunday] branch already carries the identical Latin title +; ("Sanctae Familiae Iesu, Mariae, Ioseph", scan-verified there); reused +; verbatim here so the engine's own Celebration.names and this table cannot +; disagree, the same discipline the Triduum names below follow. +; CAUTION -- a genuine one-slug/two-names limitation: colitur's own slug +; numbering also reuses ef-time-after-epiphany-sunday-3..6 for the RESUMED +; tail after a short Time-after-Pentecost (Precedence's own "surplus +; Sundays" branch) -- LT.txt:8822-8825 heads THOSE occurrences +; "Dominica III/IV/V/VI quae superfuit post Epiphaniam", a different string +; from the ordinary-occurrence heading used below. This table can carry only +; one Latin name per slug; the ordinary (far more common) occurrence wins, +; and the resumed-tail wording is not modelled -- flagged here rather than +; silently picking one with no record of the other. +ef-time-after-epiphany-sunday-1 = Sanctae Familiae Iesu, Mariae, Ioseph +ef-time-after-epiphany-sunday-2 = Dominica II post Epiphaniam +ef-time-after-epiphany-sunday-3 = Dominica III post Epiphaniam +ef-time-after-epiphany-sunday-4 = Dominica IV post Epiphaniam +ef-time-after-epiphany-sunday-5 = Dominica V post Epiphaniam +ef-time-after-epiphany-sunday-6 = Dominica VI post Epiphaniam + +; Ash Wednesday and the three days after it -- LT.txt:8686-8689. +ef-ash-wednesday = Feria IV Cinerum +ef-lent-after-ashes-thursday = Feria V post Cineres +ef-lent-after-ashes-friday = Feria VI post Cineres +ef-lent-after-ashes-saturday = Sabbato post Cineres + +; Lent Sundays -- LT.txt:8690,8697,8704,8711. +ef-lent-sunday-1 = Dominica I in Quadragesima +ef-lent-sunday-2 = Dominica II in Quadragesima +ef-lent-sunday-3 = Dominica III in Quadragesima +ef-lent-sunday-4 = Dominica IV in Quadragesima + +; Lent ferias, week by week -- LT.txt:8691-8717. Every weekday of every Lent +; week is individually headed in the source (unlike every other ferial block +; below) -- week 1's Wed/Fri/Sat are the Lenten Ember days, named separately. +ef-lent-1-monday = Feria II post Dominicam I in Quadragesima +ef-lent-1-tuesday = Feria III post Dominicam I in Quadragesima +ef-lent-1-thursday = Feria V post Dominicam I in Quadragesima +ef-lent-2-monday = Feria II post Dominicam II in Quadragesima +ef-lent-2-tuesday = Feria III post Dominicam II in Quadragesima +ef-lent-2-wednesday = Feria IV post Dominicam II in Quadragesima +ef-lent-2-thursday = Feria V post Dominicam II in Quadragesima +ef-lent-2-friday = Feria VI post Dominicam II in Quadragesima +ef-lent-2-saturday = Sabbato post Dominicam II in Quadragesima +ef-lent-3-monday = Feria II post Dominicam III in Quadragesima +ef-lent-3-tuesday = Feria III post Dominicam III in Quadragesima +ef-lent-3-wednesday = Feria IV post Dominicam III in Quadragesima +ef-lent-3-thursday = Feria V post Dominicam III in Quadragesima +ef-lent-3-friday = Feria VI post Dominicam III in Quadragesima +ef-lent-3-saturday = Sabbato post Dominicam III in Quadragesima +ef-lent-4-monday = Feria II post Dominicam IV in Quadragesima +ef-lent-4-tuesday = Feria III post Dominicam IV in Quadragesima +ef-lent-4-wednesday = Feria IV post Dominicam IV in Quadragesima +ef-lent-4-thursday = Feria V post Dominicam IV in Quadragesima +ef-lent-4-friday = Feria VI post Dominicam IV in Quadragesima +ef-lent-4-saturday = Sabbato post Dominicam IV in Quadragesima + +; Passion Sunday and its own week's ferias -- LT.txt:8725-8731, all six +; weekdays individually headed. +ef-passion-sunday = Dominica I Passionis +ef-passiontide-1-monday = Feria II post Dominicam I Passionis +ef-passiontide-1-tuesday = Feria III post Dominicam I Passionis +ef-passiontide-1-wednesday = Feria IV post Dominicam I Passionis +ef-passiontide-1-thursday = Feria V post Dominicam I Passionis +ef-passiontide-1-friday = Feria VI post Dominicam I Passionis +ef-passiontide-1-saturday = Sabbato post Dominicam I Passionis + +; Holy Week -- LT.txt:8734,8737-8739. Thursday/Friday/Saturday are NOT taken +; from LT.txt here: temporal_ef.ml's own [triduum_names] already carries +; these three exact strings (scan-verified there, register-cited RG 91 entry +; 2), reused verbatim -- the brief's own worked example wrote "Sabbato +; Sancto" (capital S); the code's actual literal is "Sabbato sancto" +; (lowercase), which is what ships here, precisely so the engine and this +; table cannot disagree. +ef-palm-sunday = Dominica II Passionis seu in Palmis +ef-passiontide-2-monday = Feria II Hebdomadae Sanctae +ef-passiontide-2-tuesday = Feria III Hebdomadae Sanctae +ef-passiontide-2-wednesday = Feria IV Hebdomadae Sanctae +ef-passiontide-2-thursday = Feria V in Cena Domini +ef-passiontide-2-friday = Feria VI in Passione et Morte Domini +ef-passiontide-2-saturday = Sabbato sancto + +; Easter Octave -- LT.txt:8753-8760. Saturday of the octave is its own name, +; "Sabbato in Albis", not "...infra Octavam Paschae" like Mon-Fri. +ef-easter-sunday = Dominica Resurrectionis +ef-easter-1-monday = Feria II infra Octavam Paschae +ef-easter-1-tuesday = Feria III infra Octavam Paschae +ef-easter-1-wednesday = Feria IV infra Octavam Paschae +ef-easter-1-thursday = Feria V infra Octavam Paschae +ef-easter-1-friday = Feria VI infra Octavam Paschae +ef-easter-1-saturday = Sabbato in Albis +ef-low-sunday = Dominica in Albis + +; Sundays after Easter through the Sunday after Ascension -- LT.txt:8761, +; 8767-8769,8775. colitur's own week count runs one ahead of the Missal's +; own ordinal (Easter Day itself is colitur's week 1, so what the Missal +; calls "Dominica II post Pascha" is colitur's "sunday-3"; documented once +; here rather than on each line. +ef-easter-sunday-3 = Dominica II post Pascha +ef-easter-sunday-4 = Dominica III post Pascha +ef-easter-sunday-5 = Dominica IV post Pascha +ef-easter-sunday-6 = Dominica V post Pascha +ef-easter-sunday-7 = Dominica post Ascensionem + +; Ascension and Pentecost, vigils and octave -- LT.txt:8771,8774,8776-8783. +ef-ascension-vigil = In Vigilia Ascensionis +ef-ascension = In Ascensione Domini +ef-pentecost-vigil = Sabbato in Vigilia Pentecostes +ef-pentecost = Dominica Pentecostes +ef-easter-8-monday = Feria II infra Octavam Pentecostes +ef-easter-8-tuesday = Feria III infra Octavam Pentecostes +ef-easter-8-thursday = Feria V infra Octavam Pentecostes + +; Sundays after Pentecost -- LT.txt:8790,8793-8802,8808-8821 (II-XXIII), +; LT.txt:8826 (XXIV, "et ultima" -- always this Mass on the last Sunday +; before Advent regardless of the actual count that year, temporal_ef.ml's +; own [sunday_slug] comment). There is no "Dominica I post Pentecosten": in +; the 1962 Missal Trinity Sunday permanently occupies that position (LT.txt +; has no such heading anywhere), matching colitur's own ef-trinity being a +; separate, earlier-intercepted slug. +ef-time-after-pentecost-sunday-2 = Dominica II post Pentecosten +ef-time-after-pentecost-sunday-3 = Dominica III post Pentecosten +ef-time-after-pentecost-sunday-4 = Dominica IV post Pentecosten +ef-time-after-pentecost-sunday-5 = Dominica V post Pentecosten +ef-time-after-pentecost-sunday-6 = Dominica VI post Pentecosten +ef-time-after-pentecost-sunday-7 = Dominica VII post Pentecosten +ef-time-after-pentecost-sunday-8 = Dominica VIII post Pentecosten +ef-time-after-pentecost-sunday-9 = Dominica IX post Pentecosten +ef-time-after-pentecost-sunday-10 = Dominica X post Pentecosten +ef-time-after-pentecost-sunday-11 = Dominica XI post Pentecosten +ef-time-after-pentecost-sunday-12 = Dominica XII post Pentecosten +ef-time-after-pentecost-sunday-13 = Dominica XIII post Pentecosten +ef-time-after-pentecost-sunday-14 = Dominica XIV post Pentecosten +ef-time-after-pentecost-sunday-15 = Dominica XV post Pentecosten +ef-time-after-pentecost-sunday-16 = Dominica XVI post Pentecosten +ef-time-after-pentecost-sunday-17 = Dominica XVII post Pentecosten +ef-time-after-pentecost-sunday-18 = Dominica XVIII post Pentecosten +ef-time-after-pentecost-sunday-19 = Dominica XIX post Pentecosten +ef-time-after-pentecost-sunday-20 = Dominica XX post Pentecosten +ef-time-after-pentecost-sunday-21 = Dominica XXI post Pentecosten +ef-time-after-pentecost-sunday-22 = Dominica XXII post Pentecosten +ef-time-after-pentecost-sunday-23 = Dominica XXIII post Pentecosten +ef-time-after-pentecost-sunday-24 = Dominica XXIV et ultima post Pentecosten + +; The Christmas Sunday within the Octave (26 Dec onward) -- colitur-only key +; (temporal_ef.ml's own comment: lectio has no narrower key here either); no +; direct LT.txt heading -- PATTERN, following the Nativity Octave's own +; "infra Octavam Nativitatis Domini" wording (LT.txt:8644's own general +; heading for that stretch, "Dominica infra Octavam Nativitatis Domini"). +ef-christmas-sunday-0 = Dominica infra Octavam Nativitatis Domini + +; Trinity, Corpus Christi, Sacred Heart -- LT.txt:8786,8788-8789,8791-8792 +; (the Proprium de Tempore TOC's own combined lines, not a standalone body +; heading -- LT.txt is a partial 2006 web capture and does not carry these +; three Masses' own propers pages). Spelled out in full +; ("Sanctissimae"/"Sacratissimi"), not the source's "Ss.mae"/"Ss.mi" +; abbreviation, matching the precedent already set by temporal_ef.ml's own +; [holy_name_names] ("Sanctissimi Nominis Iesu", spelled out, not "Ss.mi"). +ef-trinity = In Festo Sanctissimae Trinitatis +ef-corpus-christi = In Festo Sanctissimi Corporis Christi +ef-sacred-heart = In Festo Sacratissimi Cordis Iesu + +; Christ the King -- LT.txt:12453,12457-12458, the Mass's own in-body +; heading (filed, unusually, in this transcription's Proprium Sanctorum +; section by calendar date rather than the Proprium de Tempore, even though +; RG 17(d) places it in the temporal cycle by rule): "Dominica ultima +; Octobris" / "D.NI NOSTRI JESU CHRISTI REGIS". "Jesu" normalised to +; "Iesu" and "D.ni" expanded to "D. N.", matching this file's own +; consonantal-i convention (see header). +ef-christ-the-king = Dominica ultima Octobris, D. N. Iesu Christi Regis + +; Holy Name of Jesus, both shapes (RG 17(a)) -- temporal_ef.ml's own +; [holy_name_names] already carries this exact Latin string, itself +; scan-verified there against the Mass propers' own heading; LT.txt's own +; TOC corroborates it independently at LT.txt:8659 ("Ss.mi Nominis Jesu", +; the abbreviated TOC form of the same title). Reused verbatim, the same +; no-disagreement discipline as the Triduum above -- ONE feast, two shapes +; (the Sunday and the 2 January fallback), one name either way. +ef-holy-name-sunday = Sanctissimi Nominis Iesu +ef-holy-name = Sanctissimi Nominis Iesu + +; Ember days, all four sets -- LT.txt:8618,8620,8622 (Advent), +; 8693,8695-8696 (Lent), 8780,8782-8783 (Pentecost/Whitsun), +; 8813-8815 (September). +ef-advent-ember-wed = Feria IV Quatuor Temporum Adventus +ef-advent-ember-fri = Feria VI Quatuor Temporum Adventus +ef-advent-ember-sat = Sabbato Quatuor Temporum Adventus +ef-lent-ember-wed = Feria IV Quatuor Temporum Quadragesimae +ef-lent-ember-fri = Feria VI Quatuor Temporum Quadragesimae +ef-lent-ember-sat = Sabbato Quatuor Temporum Quadragesimae +ef-pentecost-ember-wed = Feria IV Quatuor Temporum Pentecostes +ef-pentecost-ember-fri = Feria VI Quatuor Temporum Pentecostes +ef-pentecost-ember-sat = Sabbato Quatuor Temporum Pentecostes +ef-september-ember-wed = Feria IV Quatuor Temporum Septembris +ef-september-ember-fri = Feria VI Quatuor Temporum Septembris +ef-september-ember-sat = Sabbato Quatuor Temporum Septembris + +; The Minor Litanies (Rogation Monday/Tuesday, RG 87-89) -- PATTERN. No +; heading for either day survives in LT.txt (only the general section marker +; "In Litaniis majoribus et minoribus", LT.txt:8770, which names the +; observance but not these two specific days); temporal_ef.ml's own comment +; records both as "colitur-only keys", so there is nothing narrower to +; extract. Constructed from RG 87's own vocabulary ("Litaniae minores"), +; already cited in temporal_ef.ml against LT.txt:691 (a different scan file +; index, not this TOC). +ef-rogation-monday = Feria II in Litaniis Minoribus +ef-rogation-tuesday = Feria III in Litaniis Minoribus + +; The votive Office of the BVM on Saturday (RG 78-79, RG 91 entry 27) -- +; temporal_ef.ml's own [bvm_saturday_names] already carries this exact Latin +; string, scan-verified there against RG 91's own table title and RG 79's +; own heading; not in LT.txt (LT.txt is Proprium de Tempore/Sanctorum only, +; this is General Rubrics text). Reused verbatim. +; +; This is NOT a pattern name -- it is what temporal_ef.ml's own code +; UNCONDITIONALLY substitutes, at resolution time, for every one of the +; slugs below whenever it is the observed day: every Saturday in Time after +; Epiphany/Septuagesima/Time after Pentecost/ordinary Paschaltide has +; ferial_rank Class4 (Vocab_ef.ml's own catch-all), and is_bvm_saturday +; fires on rank=Class4 && weekday=Saturday unconditionally -- there is no +; code path left by which one of these slugs is observed as a plain, +; unnamed feria. Advent's own Saturdays (weeks 1-2, Class2/3, never Class4) +; and Lent/Passiontide's own Saturdays (Class3, individually named above +; already) are the only in-range Saturdays this rule does NOT reach, and +; week 1 of Easter is excluded too (the privileged Easter octave overrides +; to Class1) -- both correctly excluded from this block. +ef-time-after-epiphany-1-saturday = Officium sanctae Mariae in sabbato +ef-time-after-epiphany-5-saturday = Officium sanctae Mariae in sabbato +ef-time-after-epiphany-6-saturday = Officium sanctae Mariae in sabbato +ef-septuagesima-1-saturday = Officium sanctae Mariae in sabbato +ef-septuagesima-2-saturday = Officium sanctae Mariae in sabbato +ef-christmas-1-saturday = Officium sanctae Mariae in sabbato +ef-christmas-2-saturday = Officium sanctae Mariae in sabbato +ef-easter-2-saturday = Officium sanctae Mariae in sabbato +ef-easter-3-saturday = Officium sanctae Mariae in sabbato +ef-easter-4-saturday = Officium sanctae Mariae in sabbato +ef-easter-5-saturday = Officium sanctae Mariae in sabbato +ef-easter-6-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-1-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-2-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-3-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-4-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-5-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-6-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-7-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-8-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-9-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-10-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-11-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-12-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-13-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-14-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-15-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-16-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-17-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-19-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-20-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-21-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-22-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-23-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-24-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-25-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-26-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-27-saturday = Officium sanctae Mariae in sabbato +ef-time-after-pentecost-28-saturday = Officium sanctae Mariae in sabbato + +; Advent ferias -- PATTERN. LT.txt carries no per-week Advent feria headings +; at all (only the Ember days, already transcribed above) -- constructed +; from the Advent Sundays' own numbering (LT.txt:8614-8626) using the exact +; grammar the Lent/Passiontide blocks above attest ("Feria post +; Dominicam ..."). +ef-advent-1-monday = Feria II post Dominicam I Adventus +ef-advent-1-tuesday = Feria III post Dominicam I Adventus +ef-advent-1-wednesday = Feria IV post Dominicam I Adventus +ef-advent-1-thursday = Feria V post Dominicam I Adventus +ef-advent-1-friday = Feria VI post Dominicam I Adventus +ef-advent-1-saturday = Sabbato post Dominicam I Adventus +ef-advent-2-monday = Feria II post Dominicam II Adventus +ef-advent-2-tuesday = Feria III post Dominicam II Adventus +ef-advent-2-wednesday = Feria IV post Dominicam II Adventus +ef-advent-2-thursday = Feria V post Dominicam II Adventus +ef-advent-2-friday = Feria VI post Dominicam II Adventus +ef-advent-2-saturday = Sabbato post Dominicam II Adventus +ef-advent-3-monday = Feria II post Dominicam III Adventus +ef-advent-3-tuesday = Feria III post Dominicam III Adventus +ef-advent-3-thursday = Feria V post Dominicam III Adventus +ef-advent-4-monday = Feria II post Dominicam IV Adventus +ef-advent-4-tuesday = Feria III post Dominicam IV Adventus +ef-advent-4-wednesday = Feria IV post Dominicam IV Adventus +ef-advent-4-thursday = Feria V post Dominicam IV Adventus +ef-advent-4-friday = Feria VI post Dominicam IV Adventus + +; Time after Epiphany ferias -- PATTERN, same reasoning: LT.txt gives only +; the Sundays (already transcribed above), no ferial headings. Week 1's own +; Sunday is Holy Family, but the TOC's own combined heading +; (LT.txt:8663-8664) still numbers it "Dominica I post Epiphaniam", so week +; 1's ferias use the same numbered pattern as every other week here. +ef-time-after-epiphany-1-monday = Feria II post Dominicam I post Epiphaniam +ef-time-after-epiphany-1-tuesday = Feria III post Dominicam I post Epiphaniam +ef-time-after-epiphany-1-wednesday = Feria IV post Dominicam I post Epiphaniam +ef-time-after-epiphany-1-thursday = Feria V post Dominicam I post Epiphaniam +ef-time-after-epiphany-1-friday = Feria VI post Dominicam I post Epiphaniam +ef-time-after-epiphany-2-monday = Feria II post Dominicam II post Epiphaniam +ef-time-after-epiphany-2-tuesday = Feria III post Dominicam II post Epiphaniam +ef-time-after-epiphany-2-wednesday = Feria IV post Dominicam II post Epiphaniam +ef-time-after-epiphany-2-thursday = Feria V post Dominicam II post Epiphaniam +ef-time-after-epiphany-2-friday = Feria VI post Dominicam II post Epiphaniam +ef-time-after-epiphany-4-monday = Feria II post Dominicam IV post Epiphaniam +ef-time-after-epiphany-4-wednesday = Feria IV post Dominicam IV post Epiphaniam +ef-time-after-epiphany-4-thursday = Feria V post Dominicam IV post Epiphaniam +ef-time-after-epiphany-4-friday = Feria VI post Dominicam IV post Epiphaniam +ef-time-after-epiphany-5-wednesday = Feria IV post Dominicam V post Epiphaniam +ef-time-after-epiphany-5-thursday = Feria V post Dominicam V post Epiphaniam +ef-time-after-epiphany-5-friday = Feria VI post Dominicam V post Epiphaniam +ef-time-after-epiphany-6-monday = Feria II post Dominicam VI post Epiphaniam +ef-time-after-epiphany-6-tuesday = Feria III post Dominicam VI post Epiphaniam +ef-time-after-epiphany-6-wednesday = Feria IV post Dominicam VI post Epiphaniam +ef-time-after-epiphany-6-thursday = Feria V post Dominicam VI post Epiphaniam +ef-time-after-epiphany-6-friday = Feria VI post Dominicam VI post Epiphaniam + +; Septuagesima-tide ferias -- PATTERN. The three Sundays are named, not +; numbered (LT.txt:8676,8682-8683), so their ferias follow suit here +; ("post Dominicam in ") rather than being given a false ordinal. +ef-septuagesima-1-monday = Feria II post Dominicam in Septuagesima +ef-septuagesima-1-tuesday = Feria III post Dominicam in Septuagesima +ef-septuagesima-1-wednesday = Feria IV post Dominicam in Septuagesima +ef-septuagesima-1-thursday = Feria V post Dominicam in Septuagesima +ef-septuagesima-1-friday = Feria VI post Dominicam in Septuagesima +ef-septuagesima-2-monday = Feria II post Dominicam in Sexagesima +ef-septuagesima-2-tuesday = Feria III post Dominicam in Sexagesima +ef-septuagesima-2-wednesday = Feria IV post Dominicam in Sexagesima +ef-septuagesima-2-thursday = Feria V post Dominicam in Sexagesima +ef-septuagesima-2-friday = Feria VI post Dominicam in Sexagesima +ef-septuagesima-3-monday = Feria II post Dominicam in Quinquagesima +ef-septuagesima-3-tuesday = Feria III post Dominicam in Quinquagesima + +; Time after Pentecost ferias -- PATTERN, the largest block by far (most of +; the liturgical year has no proper ferial Mass here, RG 91 entry 28's +; unqualified IV-class catch-all). Unlike the other PATTERN blocks above, +; this exact grammar is directly attested in LT.txt, just for a different +; day: LT.txt:8791, "Feria VI post Dominicam II post Pentecosten, in festo +; Sacratissimi Cordis Iesu" (the Sacred Heart's own alternate dating, +; already used above) shows the Missal DOES write "post Dominicam N post +; Pentecosten" for an ordinary Friday of this season -- applied here to +; every other weekday of every other week on the same attested grammar, +; still marked PATTERN because no day in this block has its OWN heading. +ef-time-after-pentecost-1-monday = Feria II post Dominicam I post Pentecosten +ef-time-after-pentecost-1-tuesday = Feria III post Dominicam I post Pentecosten +ef-time-after-pentecost-1-wednesday = Feria IV post Dominicam I post Pentecosten +ef-time-after-pentecost-1-friday = Feria VI post Dominicam I post Pentecosten +ef-time-after-pentecost-2-monday = Feria II post Dominicam II post Pentecosten +ef-time-after-pentecost-2-tuesday = Feria III post Dominicam II post Pentecosten +ef-time-after-pentecost-2-wednesday = Feria IV post Dominicam II post Pentecosten +ef-time-after-pentecost-2-thursday = Feria V post Dominicam II post Pentecosten +ef-time-after-pentecost-3-monday = Feria II post Dominicam III post Pentecosten +ef-time-after-pentecost-3-tuesday = Feria III post Dominicam III post Pentecosten +ef-time-after-pentecost-3-wednesday = Feria IV post Dominicam III post Pentecosten +ef-time-after-pentecost-3-thursday = Feria V post Dominicam III post Pentecosten +ef-time-after-pentecost-3-friday = Feria VI post Dominicam III post Pentecosten +ef-time-after-pentecost-4-monday = Feria II post Dominicam IV post Pentecosten +ef-time-after-pentecost-4-tuesday = Feria III post Dominicam IV post Pentecosten +ef-time-after-pentecost-4-wednesday = Feria IV post Dominicam IV post Pentecosten +ef-time-after-pentecost-4-thursday = Feria V post Dominicam IV post Pentecosten +ef-time-after-pentecost-4-friday = Feria VI post Dominicam IV post Pentecosten +ef-time-after-pentecost-5-monday = Feria II post Dominicam V post Pentecosten +ef-time-after-pentecost-5-tuesday = Feria III post Dominicam V post Pentecosten +ef-time-after-pentecost-5-wednesday = Feria IV post Dominicam V post Pentecosten +ef-time-after-pentecost-5-thursday = Feria V post Dominicam V post Pentecosten +ef-time-after-pentecost-5-friday = Feria VI post Dominicam V post Pentecosten +ef-time-after-pentecost-6-monday = Feria II post Dominicam VI post Pentecosten +ef-time-after-pentecost-6-tuesday = Feria III post Dominicam VI post Pentecosten +ef-time-after-pentecost-6-wednesday = Feria IV post Dominicam VI post Pentecosten +ef-time-after-pentecost-6-thursday = Feria V post Dominicam VI post Pentecosten +ef-time-after-pentecost-6-friday = Feria VI post Dominicam VI post Pentecosten +ef-time-after-pentecost-7-monday = Feria II post Dominicam VII post Pentecosten +ef-time-after-pentecost-7-tuesday = Feria III post Dominicam VII post Pentecosten +ef-time-after-pentecost-7-wednesday = Feria IV post Dominicam VII post Pentecosten +ef-time-after-pentecost-7-thursday = Feria V post Dominicam VII post Pentecosten +ef-time-after-pentecost-7-friday = Feria VI post Dominicam VII post Pentecosten +ef-time-after-pentecost-8-monday = Feria II post Dominicam VIII post Pentecosten +ef-time-after-pentecost-8-tuesday = Feria III post Dominicam VIII post Pentecosten +ef-time-after-pentecost-8-wednesday = Feria IV post Dominicam VIII post Pentecosten +ef-time-after-pentecost-8-thursday = Feria V post Dominicam VIII post Pentecosten +ef-time-after-pentecost-8-friday = Feria VI post Dominicam VIII post Pentecosten +ef-time-after-pentecost-9-monday = Feria II post Dominicam IX post Pentecosten +ef-time-after-pentecost-9-tuesday = Feria III post Dominicam IX post Pentecosten +ef-time-after-pentecost-9-wednesday = Feria IV post Dominicam IX post Pentecosten +ef-time-after-pentecost-9-thursday = Feria V post Dominicam IX post Pentecosten +ef-time-after-pentecost-9-friday = Feria VI post Dominicam IX post Pentecosten +ef-time-after-pentecost-10-monday = Feria II post Dominicam X post Pentecosten +ef-time-after-pentecost-10-tuesday = Feria III post Dominicam X post Pentecosten +ef-time-after-pentecost-10-wednesday = Feria IV post Dominicam X post Pentecosten +ef-time-after-pentecost-10-thursday = Feria V post Dominicam X post Pentecosten +ef-time-after-pentecost-10-friday = Feria VI post Dominicam X post Pentecosten +ef-time-after-pentecost-11-monday = Feria II post Dominicam XI post Pentecosten +ef-time-after-pentecost-11-tuesday = Feria III post Dominicam XI post Pentecosten +ef-time-after-pentecost-11-wednesday = Feria IV post Dominicam XI post Pentecosten +ef-time-after-pentecost-11-thursday = Feria V post Dominicam XI post Pentecosten +ef-time-after-pentecost-11-friday = Feria VI post Dominicam XI post Pentecosten +ef-time-after-pentecost-12-monday = Feria II post Dominicam XII post Pentecosten +ef-time-after-pentecost-12-tuesday = Feria III post Dominicam XII post Pentecosten +ef-time-after-pentecost-12-wednesday = Feria IV post Dominicam XII post Pentecosten +ef-time-after-pentecost-12-thursday = Feria V post Dominicam XII post Pentecosten +ef-time-after-pentecost-12-friday = Feria VI post Dominicam XII post Pentecosten +ef-time-after-pentecost-13-monday = Feria II post Dominicam XIII post Pentecosten +ef-time-after-pentecost-13-tuesday = Feria III post Dominicam XIII post Pentecosten +ef-time-after-pentecost-13-wednesday = Feria IV post Dominicam XIII post Pentecosten +ef-time-after-pentecost-13-thursday = Feria V post Dominicam XIII post Pentecosten +ef-time-after-pentecost-13-friday = Feria VI post Dominicam XIII post Pentecosten +ef-time-after-pentecost-14-monday = Feria II post Dominicam XIV post Pentecosten +ef-time-after-pentecost-14-tuesday = Feria III post Dominicam XIV post Pentecosten +ef-time-after-pentecost-14-wednesday = Feria IV post Dominicam XIV post Pentecosten +ef-time-after-pentecost-14-thursday = Feria V post Dominicam XIV post Pentecosten +ef-time-after-pentecost-14-friday = Feria VI post Dominicam XIV post Pentecosten +ef-time-after-pentecost-15-monday = Feria II post Dominicam XV post Pentecosten +ef-time-after-pentecost-15-tuesday = Feria III post Dominicam XV post Pentecosten +ef-time-after-pentecost-15-wednesday = Feria IV post Dominicam XV post Pentecosten +ef-time-after-pentecost-15-thursday = Feria V post Dominicam XV post Pentecosten +ef-time-after-pentecost-15-friday = Feria VI post Dominicam XV post Pentecosten +ef-time-after-pentecost-16-monday = Feria II post Dominicam XVI post Pentecosten +ef-time-after-pentecost-16-tuesday = Feria III post Dominicam XVI post Pentecosten +ef-time-after-pentecost-16-wednesday = Feria IV post Dominicam XVI post Pentecosten +ef-time-after-pentecost-16-thursday = Feria V post Dominicam XVI post Pentecosten +ef-time-after-pentecost-16-friday = Feria VI post Dominicam XVI post Pentecosten +ef-time-after-pentecost-17-monday = Feria II post Dominicam XVII post Pentecosten +ef-time-after-pentecost-17-tuesday = Feria III post Dominicam XVII post Pentecosten +ef-time-after-pentecost-17-wednesday = Feria IV post Dominicam XVII post Pentecosten +ef-time-after-pentecost-17-thursday = Feria V post Dominicam XVII post Pentecosten +ef-time-after-pentecost-17-friday = Feria VI post Dominicam XVII post Pentecosten +ef-time-after-pentecost-18-monday = Feria II post Dominicam XVIII post Pentecosten +ef-time-after-pentecost-18-tuesday = Feria III post Dominicam XVIII post Pentecosten +ef-time-after-pentecost-18-wednesday = Feria IV post Dominicam XVIII post Pentecosten +ef-time-after-pentecost-18-thursday = Feria V post Dominicam XVIII post Pentecosten +ef-time-after-pentecost-18-friday = Feria VI post Dominicam XVIII post Pentecosten +ef-time-after-pentecost-19-monday = Feria II post Dominicam XIX post Pentecosten +ef-time-after-pentecost-19-tuesday = Feria III post Dominicam XIX post Pentecosten +ef-time-after-pentecost-19-wednesday = Feria IV post Dominicam XIX post Pentecosten +ef-time-after-pentecost-19-thursday = Feria V post Dominicam XIX post Pentecosten +ef-time-after-pentecost-19-friday = Feria VI post Dominicam XIX post Pentecosten +ef-time-after-pentecost-20-monday = Feria II post Dominicam XX post Pentecosten +ef-time-after-pentecost-20-tuesday = Feria III post Dominicam XX post Pentecosten +ef-time-after-pentecost-20-wednesday = Feria IV post Dominicam XX post Pentecosten +ef-time-after-pentecost-20-thursday = Feria V post Dominicam XX post Pentecosten +ef-time-after-pentecost-20-friday = Feria VI post Dominicam XX post Pentecosten +ef-time-after-pentecost-21-monday = Feria II post Dominicam XXI post Pentecosten +ef-time-after-pentecost-21-tuesday = Feria III post Dominicam XXI post Pentecosten +ef-time-after-pentecost-21-wednesday = Feria IV post Dominicam XXI post Pentecosten +ef-time-after-pentecost-21-thursday = Feria V post Dominicam XXI post Pentecosten +ef-time-after-pentecost-21-friday = Feria VI post Dominicam XXI post Pentecosten +ef-time-after-pentecost-22-monday = Feria II post Dominicam XXII post Pentecosten +ef-time-after-pentecost-22-tuesday = Feria III post Dominicam XXII post Pentecosten +ef-time-after-pentecost-22-wednesday = Feria IV post Dominicam XXII post Pentecosten +ef-time-after-pentecost-22-thursday = Feria V post Dominicam XXII post Pentecosten +ef-time-after-pentecost-22-friday = Feria VI post Dominicam XXII post Pentecosten +ef-time-after-pentecost-23-monday = Feria II post Dominicam XXIII post Pentecosten +ef-time-after-pentecost-23-tuesday = Feria III post Dominicam XXIII post Pentecosten +ef-time-after-pentecost-23-wednesday = Feria IV post Dominicam XXIII post Pentecosten +ef-time-after-pentecost-23-thursday = Feria V post Dominicam XXIII post Pentecosten +ef-time-after-pentecost-23-friday = Feria VI post Dominicam XXIII post Pentecosten +ef-time-after-pentecost-24-monday = Feria II post Dominicam XXIV post Pentecosten +ef-time-after-pentecost-24-tuesday = Feria III post Dominicam XXIV post Pentecosten +ef-time-after-pentecost-24-wednesday = Feria IV post Dominicam XXIV post Pentecosten +ef-time-after-pentecost-24-thursday = Feria V post Dominicam XXIV post Pentecosten +ef-time-after-pentecost-24-friday = Feria VI post Dominicam XXIV post Pentecosten +ef-time-after-pentecost-25-monday = Feria II post Dominicam XXV post Pentecosten +ef-time-after-pentecost-25-tuesday = Feria III post Dominicam XXV post Pentecosten +ef-time-after-pentecost-25-wednesday = Feria IV post Dominicam XXV post Pentecosten +ef-time-after-pentecost-25-thursday = Feria V post Dominicam XXV post Pentecosten +ef-time-after-pentecost-25-friday = Feria VI post Dominicam XXV post Pentecosten +ef-time-after-pentecost-26-monday = Feria II post Dominicam XXVI post Pentecosten +ef-time-after-pentecost-26-tuesday = Feria III post Dominicam XXVI post Pentecosten +ef-time-after-pentecost-26-wednesday = Feria IV post Dominicam XXVI post Pentecosten +ef-time-after-pentecost-26-thursday = Feria V post Dominicam XXVI post Pentecosten +ef-time-after-pentecost-26-friday = Feria VI post Dominicam XXVI post Pentecosten +ef-time-after-pentecost-27-tuesday = Feria III post Dominicam XXVII post Pentecosten +ef-time-after-pentecost-27-wednesday = Feria IV post Dominicam XXVII post Pentecosten +ef-time-after-pentecost-27-thursday = Feria V post Dominicam XXVII post Pentecosten +ef-time-after-pentecost-27-friday = Feria VI post Dominicam XXVII post Pentecosten +ef-time-after-pentecost-28-tuesday = Feria III post Dominicam XXVIII post Pentecosten +ef-time-after-pentecost-28-wednesday = Feria IV post Dominicam XXVIII post Pentecosten +ef-time-after-pentecost-28-thursday = Feria V post Dominicam XXVIII post Pentecosten + +; Paschaltide ferias, weeks 2-7 (Monday-Friday; each week's own Saturday +; through week 6 is the votive BVM Office, above -- week 7's Saturday is +; the Pentecost Vigil, already named above) -- PATTERN, same "post +; Dominicam ... post Pascha" grammar the Time-after-Pentecost block +; attests, substituting "Pascha" for "Pentecosten"; week 2 follows Low +; Sunday itself so reads "post Dominicam in Albis" rather than an ordinal, +; and week 7 follows "Dominica post Ascensionem" (no ordinal either) so +; reads "post Dominicam post Ascensionem". +ef-easter-2-monday = Feria II post Dominicam in Albis +ef-easter-2-tuesday = Feria III post Dominicam in Albis +ef-easter-2-wednesday = Feria IV post Dominicam in Albis +ef-easter-2-thursday = Feria V post Dominicam in Albis +ef-easter-2-friday = Feria VI post Dominicam in Albis +ef-easter-3-monday = Feria II post Dominicam II post Pascha +ef-easter-3-tuesday = Feria III post Dominicam II post Pascha +ef-easter-3-wednesday = Feria IV post Dominicam II post Pascha +ef-easter-3-thursday = Feria V post Dominicam II post Pascha +ef-easter-3-friday = Feria VI post Dominicam II post Pascha +ef-easter-4-monday = Feria II post Dominicam III post Pascha +ef-easter-4-tuesday = Feria III post Dominicam III post Pascha +ef-easter-4-wednesday = Feria IV post Dominicam III post Pascha +ef-easter-4-thursday = Feria V post Dominicam III post Pascha +ef-easter-4-friday = Feria VI post Dominicam III post Pascha +ef-easter-5-monday = Feria II post Dominicam IV post Pascha +ef-easter-5-tuesday = Feria III post Dominicam IV post Pascha +ef-easter-5-wednesday = Feria IV post Dominicam IV post Pascha +ef-easter-5-thursday = Feria V post Dominicam IV post Pascha +ef-easter-5-friday = Feria VI post Dominicam IV post Pascha +ef-easter-6-friday = Feria VI post Dominicam V post Pascha +ef-easter-7-monday = Feria II post Dominicam post Ascensionem +ef-easter-7-tuesday = Feria III post Dominicam post Ascensionem +ef-easter-7-wednesday = Feria IV post Dominicam post Ascensionem +ef-easter-7-thursday = Feria V post Dominicam post Ascensionem +ef-easter-7-friday = Feria VI post Dominicam post Ascensionem + +; 2-5 January (between the Nativity Octave Day and Epiphany) -- PATTERN. +; temporal_ef.ml's own comment on [christmastide_feria_slug] is explicit +; that this whole window is a colitur-only key with no lectio or Missal +; counterpart ("a further lectionary gap"); constructed here, not +; transcribed from anywhere. +ef-christmas-1-monday = Feria II ante Epiphaniam +ef-christmas-1-tuesday = Feria III ante Epiphaniam +ef-christmas-1-wednesday = Feria IV ante Epiphaniam +ef-christmas-1-thursday = Feria V ante Epiphaniam +ef-christmas-1-friday = Feria VI ante Epiphaniam + +; 7-13 January before the actual first-Sunday-after-Epiphany origin -- +; PATTERN, same reasoning as the block immediately above (temporal_ef.ml's +; own comment: "a further lectionary gap"). +ef-christmas-2-monday = Feria II post Epiphaniam +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 -- cgit v1.3 From 22824ef50abfeb497f04e73f88d0f7ab2e164eaf Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Wed, 19 Aug 2026 14:35:36 +0200 Subject: fix(lang): correct two wrong citation lines, add check-citations Two of la.ini's LT.txt: citations pointed at the wrong line -- the Latin itself was right, only the pinned line was wrong: - advent cited LT.txt:8631 ("Tempus Nativitatis"); the real "Tempus Adventus" heading is at 8609. - ef-christ-the-king and [rank]'s own citation both pointed near "Dominica ultima Octobris" (12459) when the text they actually quote, "D.NI NOSTRI JESU CHRISTI REGIS" and "I classis", sits two and three lines further down, at 12461 and 12462. ef-christmas-sunday-0 was marked PATTERN but LT.txt:8644 is the identical string verbatim -- relabelled as a direct citation, not constructed. Added tools/check_citations.py and `make check-citations`: for every LT.txt: citation outside a PATTERN block, confirms a +-2-line window around line n actually contains the Latin text the citation claims, rather than trusting each of the 38 citations by hand. Follows check-schema/check-templates' own precedent -- docs/ is gitignored, so the target prints SKIPPED loudly and exits 0 when docs/research/LT.txt is absent, never a silent pass. The checker's own teeth are proven three ways: replayed against the pre-fix file it independently re-derives both corrections above; a fresh mutation (redirecting one citation to an unrelated line) is caught and reverted; the fixed file passes clean, 147 citations checked, 0 wrong. --- Makefile | 20 +++- lang/la.ini | 46 ++++++---- tools/check_citations.py | 232 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 281 insertions(+), 17 deletions(-) create mode 100755 tools/check_citations.py (limited to 'lang') diff --git a/Makefile b/Makefile index d9377df..1f7c362 100644 --- a/Makefile +++ b/Makefile @@ -22,7 +22,7 @@ MAN5DIR := $(PREFIX)/share/man/man5 # over documenting the dune commands. DUNE := opam exec -- -.PHONY: help build test check check-schema check-templates install uninstall reinstall clean fmt man doc release +.PHONY: help build test check check-schema check-templates check-citations install uninstall reinstall clean fmt man doc release help: ## show this help @grep -hE '^[a-z-]+:.*##' $(MAKEFILE_LIST) | sed -E 's/:.*## /\t/' | sort @@ -84,6 +84,24 @@ check-templates: build ## typeset every shipped template (needs pdflatex/groff; else echo "SKIPPED: groff not installed -- groff templates render but are NOT typeset"; fi; \ test $$ok -eq 1 +# lang/la.ini's own discipline: every celebration/season/rank name cites the +# docs/research/LT.txt line it was transcribed from, so a claim can be +# checked, not just trusted. tools/check_citations.py re-derives that check +# mechanically: for every "LT.txt:" citation outside a PATTERN-marked +# block, it confirms a +-2-line window around line n actually contains the +# Latin text the citation claims -- see that script's own docstring for the +# exact rule and its known limits (a heuristic, not a proof). docs/ is +# gitignored, so a fresh clone has no docs/research/LT.txt at all: the same +# "SKIPPED, loudly, exit 0" discipline check-schema/check-templates already +# use above -- a silent skip reads as a pass, which this project has hit +# the cost of before. +check-citations: ## verify lang/la.ini's LT.txt: citations (needs docs/research/LT.txt, gitignored; SKIPPED if absent) + @if command -v python3 >/dev/null 2>&1; then \ + python3 tools/check_citations.py; \ + else \ + echo "SKIPPED: python3 not installed -- citations NOT verified this run"; \ + fi + install: build ## install binary, calendar data, templates, schema and man pages into PREFIX (default ~/.local) $(DUNE) dune install --prefix $(PREFIX) @mkdir -p $(MANDIR) diff --git a/lang/la.ini b/lang/la.ini index 9b1ccf7..570f843 100644 --- a/lang/la.ini +++ b/lang/la.ini @@ -73,7 +73,9 @@ saturday = Sabbatum ; align 1:1 with the Missal's own table-of-contents section boundaries, so ; not every colitur season has one clean matching heading. advent = Tempus Adventus -; LT.txt:8631. +; LT.txt:8609. CORRECTED (fix round 1): previously cited LT.txt:8631, which +; is "Tempus Nativitatis", not this heading -- an off-by-22-line slip. The +; Latin itself was always right; only the pinned line was wrong. christmastide = Tempus Nativitatis ; NOT a direct match. LT.txt has "Tempus Epiphaniae" (LT.txt:8661, covering ; 6-13 January) for what colitur calls the tail of Christmastide, and a @@ -101,9 +103,12 @@ time-after-pentecost = Tempus per annum post Pentecosten [rank] ; RG 8's four classes. "I classis" is directly attested, not only in the -; Rubricae Generales but in a Mass propers heading itself -- -; LT.txt:12459, "D.NI NOSTRI JESU CHRISTI REGIS / I classis" (Christ the -; King). The other three ordinals follow the identical, standard pattern. +; Rubricae Generales but in a Mass propers heading itself -- LT.txt:12462, +; immediately under "D.ÑI NOSTRI JESU CHRISTI REGIS" (LT.txt:12461, Christ +; the King). The other three ordinals follow the identical, standard +; pattern. CORRECTED (fix round 1): previously cited LT.txt:12459, which is +; "Dominica ultima Octobris" -- neither "D.NI NOSTRI..." nor "I classis" +; appear there; both are 2-3 lines further down. class-1 = I classis class-2 = II classis class-3 = III classis @@ -323,11 +328,15 @@ ef-time-after-pentecost-sunday-22 = Dominica XXII post Pentecosten ef-time-after-pentecost-sunday-23 = Dominica XXIII post Pentecosten ef-time-after-pentecost-sunday-24 = Dominica XXIV et ultima post Pentecosten -; The Christmas Sunday within the Octave (26 Dec onward) -- colitur-only key -; (temporal_ef.ml's own comment: lectio has no narrower key here either); no -; direct LT.txt heading -- PATTERN, following the Nativity Octave's own -; "infra Octavam Nativitatis Domini" wording (LT.txt:8644's own general -; heading for that stretch, "Dominica infra Octavam Nativitatis Domini"). +; The Christmas Sunday within the Octave (26 Dec onward) -- colitur-only +; SLUG (temporal_ef.ml's own comment: lectio has no narrower key here +; either) but a DIRECT citation, not PATTERN: LT.txt:8644 is this exact +; string verbatim, "Dominica infra Octavam Nativitatis Domini", the TOC's +; own general heading for the whole 26 Dec-1 Jan stretch. CORRECTED (fix +; round 1): an earlier draft marked this PATTERN, describing the identical +; cited string as merely "following ... wording" rather than naming it as +; the direct quote it already was -- the name was always right, only the +; provenance label was wrong. ef-christmas-sunday-0 = Dominica infra Octavam Nativitatis Domini ; Trinity, Corpus Christi, Sacred Heart -- LT.txt:8786,8788-8789,8791-8792 @@ -341,13 +350,18 @@ ef-trinity = In Festo Sanctissimae Trinitatis ef-corpus-christi = In Festo Sanctissimi Corporis Christi ef-sacred-heart = In Festo Sacratissimi Cordis Iesu -; Christ the King -- LT.txt:12453,12457-12458, the Mass's own in-body -; heading (filed, unusually, in this transcription's Proprium Sanctorum -; section by calendar date rather than the Proprium de Tempore, even though -; RG 17(d) places it in the temporal cycle by rule): "Dominica ultima -; Octobris" / "D.NI NOSTRI JESU CHRISTI REGIS". "Jesu" normalised to -; "Iesu" and "D.ni" expanded to "D. N.", matching this file's own -; consonantal-i convention (see header). +; Christ the King -- LT.txt:12453 (the page's own title bar, carrying both +; "Dominica ultima Octobris" and "D.ni Nostri Jesu Christi Regis" on one +; line), LT.txt:12459 ("Dominica ultima Octobris" again, this time the +; Mass's own in-body heading) and LT.txt:12461 ("D.ÑI NOSTRI JESU CHRISTI +; REGIS", the line immediately below it) -- filed, unusually, in this +; transcription's Proprium Sanctorum section by calendar date rather than +; the Proprium de Tempore, even though RG 17(d) places it in the temporal +; cycle by rule. CORRECTED (fix round 1): previously cited "12457-12458" +; for the in-body heading; those two lines are "PROPRIUM SANCTORUM" and +; blank -- the real heading is one line further down, at 12459/12461. +; "Jesu" normalised to "Iesu" and "D.ni" expanded to "D. N.", matching this +; file's own consonantal-i convention (see header). ef-christ-the-king = Dominica ultima Octobris, D. N. Iesu Christi Regis ; Holy Name of Jesus, both shapes (RG 17(a)) -- temporal_ef.ml's own diff --git a/tools/check_citations.py b/tools/check_citations.py new file mode 100755 index 0000000..750f0a4 --- /dev/null +++ b/tools/check_citations.py @@ -0,0 +1,232 @@ +#!/usr/bin/env python3 +"""check_citations.py -- verify every "LT.txt:" citation in lang/la.ini +actually resolves to the Latin text it claims, in docs/research/LT.txt. + +Run via `make check-citations`. Exits 2 with a report if any citation is +wrong; exits 0 (silently, bar a summary line) if every citation checked out; +exits 0 with a loud "SKIPPED" line if docs/research/LT.txt is not present +(it is gitignored -- see below). + +WHAT THIS CHECKS, PRECISELY (a heuristic, not a proof) +------------------------------------------------------- +lang/la.ini's own comments cite a Missal heading in one of two shapes: + + 1. A LEADING comment block, then a group of entries it covers, e.g. + "; Ash Wednesday and the three days after it -- LT.txt:8686-8689." + followed by four `key = value` lines. + 2. A TRAILING comment immediately under the ONE entry it explains, e.g. + "advent = Tempus Adventus" then "; LT.txt:8609." on the next line, + with no blank line -- [season]'s own style. + +For each individual cited line number (after expanding "A-B" ranges and +comma lists), this script builds a POOL of candidate Latin phrases: the +entry/entries the citation is attached to (the single preceding entry for +the trailing shape, the group of following entries for the leading shape), +PLUS every double-quoted Latin phrase appearing anywhere in that comment +block (comments routinely quote an ALTERNATIVE heading being discussed, not +only the chosen entry's own value -- see e.g. the [season] block's +time-after-epiphany caveat). Each pool item keeps its OWN distinctive-word +set (>=4 letters, not on the small stopword list below, j/i and +ae/oe/diacritics normalised) -- items are not flattened into one bag. A +citation PASSES if a window of LT.txt[n-2 .. n+2] (+-2 lines, since a +heading can wrap) contains ALL of at least one single pool item's words -- +not merely ANY word from ANY item. That distinction matters: a flattened +any-word-overlap check let a citation bundling two claims onto one line +number ("D.NI NOSTRI JESU CHRISTI REGIS / I classis", cited at LT.txt:12459) +pass on the strength of the first half alone (found two lines away, at the +edge of tolerance) even though the second half ("I classis") was three +lines away and never actually checked -- one of the two real citation bugs +this script exists to catch. Requiring one item's FULL word-set closes +that gap. + +This is deliberately a LOOSE, word-overlap check, not an exact-phrase +match: la.ini spells abbreviations out in full (Sanctissimi, not Ss.mi) and +normalises j->i, and requiring a byte-exact substring would either force +every citation's prose to repeat the raw OCR text verbatim (defeating the +point of writing readable comments) or produce false failures having +nothing to do with a wrong line number. The trade-off is disclosed, not +hidden: this catches a citation pointing at UNRELATED content (the two real +bugs this script exists because of: LT.txt:8631 cited for "Tempus +Adventus" is actually "Tempus Nativitatis"; LT.txt:12459 cited for +"D.NI NOSTRI JESU CHRISTI REGIS / I classis" is actually just "Dominica +ultima Octobris") -- it does not, and cannot, prove a citation is the BEST +possible line, only that it is not obviously wrong. + +Only citations OUTSIDE a "PATTERN" block are checked: a PATTERN entry makes +no claim that its own line is a direct heading, so a "LT.txt:N" mentioned +in its comment (e.g. citing the GRAMMAR another day's heading attests, not +this day's own heading) is not a provenance claim for THIS entry and would +otherwise produce a meaningless failure. +""" +import re +import sys +import unicodedata +from pathlib import Path + +ROOT = Path(__file__).resolve().parent.parent +LA_INI = ROOT / "lang" / "la.ini" +LT_TXT = ROOT / "docs" / "research" / "LT.txt" + +STOPWORDS = { + "in", "de", "et", "ad", "post", "ante", "cum", "per", "seu", "infra", + "vel", "si", "haec", "hoc", "hic", "qui", "quae", "quod", "quia", + "tempus", "dominica", "dominicam", "dominicae", "feria", "feriae", + "sabbato", "sabbatum", "die", "diebus", "eodem", "anno", "eius", + "sancti", "sancta", "sanctae", "sancto", "sanctorum", "sanctus", + "domini", "dominus", "octava", "octavam", "octavas", + "missae", "missa", "proprium", "gregorianus", "cantus", "pdf", + "forma", "longior", "brevior", "vide", "etiam", "dom", "prosper", + "sacro", "actio", "electronica", "formam", "novissimae", "variationes", + "copyright", "archivum", "liturgicum", "missale", "romanum", "index", + "www", "http", "https", "htm", "html", "com", "romanum", "text", +} + + +def normalize_word(w: str) -> str: + w = w.lower() + w = unicodedata.normalize("NFKD", w) + w = "".join(c for c in w if not unicodedata.combining(c)) + w = w.replace("æ", "ae").replace("œ", "oe") + w = re.sub(r"[^a-z]", "", w) + w = w.replace("j", "i") + return w + + +def distinctive_words(text: str) -> set: + out = set() + for tok in re.split(r"\s+", text): + w = normalize_word(tok) + if len(w) >= 4 and w not in STOPWORDS: + out.add(w) + return out + + +def expand_citation_spec(spec: str): + """'8618,8620,8622' -> [8618,8620,8622]; '8691-8717' -> [8691..8717].""" + nums = [] + for tok in spec.split(","): + tok = tok.strip() + m = re.fullmatch(r"(\d{2,6})-(\d{2,6})", tok) + if m: + a, b = int(m.group(1)), int(m.group(2)) + if a <= b and (b - a) <= 200: + nums.extend(range(a, b + 1)) + continue + m = re.fullmatch(r"(\d{2,6})", tok) + if m: + nums.append(int(m.group(1))) + return nums + + +CITATION_RE = re.compile(r"LT\.txt:\s*((?:\d{2,6}(?:-\d{2,6})?)(?:\s*,\s*\d{2,6}(?:-\d{2,6})?)*)") +QUOTE_RE = re.compile(r'"([^"]{3,})"') + + +def parse_blocks(la_ini_text: str): + """Split la.ini into blocks on blank lines and [section] headers. Each + block is a list of (kind, content) where kind is 'comment' or 'entry', + content is the stripped comment text or (key, value).""" + blocks = [] + cur = [] + for raw in la_ini_text.split("\n"): + line = raw.rstrip("\n") + stripped = line.strip() + if stripped == "" or stripped.startswith("["): + if cur: + blocks.append(cur) + cur = [] + continue + if stripped.startswith(";"): + cur.append(("comment", stripped[1:].strip())) + elif "=" in stripped: + k, _, v = stripped.partition("=") + cur.append(("entry", (k.strip(), v.strip()))) + # anything else (shouldn't occur) is ignored + if cur: + blocks.append(cur) + return blocks + + +def check(la_ini_text: str, lt_lines: list): + findings = [] + checked = 0 + for block in parse_blocks(la_ini_text): + block_comment = "\n".join(c for k, c in block if k == "comment") + if "PATTERN" in block_comment: + continue + entries = [c for k, c in block if k == "entry"] + if not entries: + continue + quotes = QUOTE_RE.findall(block_comment) + entries_before = [] + for k, c in block: + if k == "comment": + for m in CITATION_RE.finditer(c): + nums = expand_citation_spec(m.group(1)) + if entries_before: + pool_entries = [entries_before[-1]] + else: + # leading citation: pool = every entry in the block + # (entries after this comment, i.e. all of them, + # since none has been seen yet) + pool_entries = entries + # Pool items are kept SEPARATE (not flattened into one + # bag of words): a citation passes only if the window + # fully covers -- ALL the distinctive words of -- at + # least one single pool item (one quoted phrase, or one + # entry's own value). A flattened "any word from any + # pool item" bag is too permissive: it let a citation + # bundling two claims onto one line number ("D.NI + # NOSTRI JESU CHRISTI REGIS / I classis") pass on the + # strength of the FIRST half alone, even though the + # second half ("I classis") was not actually nearby -- + # exactly the shape of one of the two real citation + # bugs this script was written to catch. Verified by + # replay against the pre-fix file (see the task report). + pool_items = [distinctive_words(q) for q in quotes] + for _, v in pool_entries: + pool_items.append(distinctive_words(v)) + pool_items = [p for p in pool_items if p] + for n in nums: + checked += 1 + lo, hi = max(1, n - 2), min(len(lt_lines), n + 2) + window_text = " ".join(lt_lines[lo - 1 : hi]) + window_words = distinctive_words(window_text) + if not any(item <= window_words for item in pool_items): + entry_desc = ", ".join(f"{k}={v}" for k, v in pool_entries) + findings.append( + { + "line": n, + "entries": entry_desc, + "actual": lt_lines[n - 1].strip() if 1 <= n <= len(lt_lines) else "(out of range)", + "window": window_text.strip()[:160], + } + ) + else: + entries_before.append(c) + return checked, findings + + +def main(): + if not LT_TXT.exists(): + print( + "SKIPPED: docs/research/LT.txt is absent (docs/ is gitignored -- " + "present locally only). Citations are NOT verified this run." + ) + return 0 + la_ini_text = LA_INI.read_text(encoding="utf-8") + lt_lines = LT_TXT.read_text(encoding="utf-8", errors="replace").split("\n") + checked, findings = check(la_ini_text, lt_lines) + if findings: + print(f"check-citations: {len(findings)} of {checked} citations look wrong:\n") + for f in findings: + print(f" LT.txt:{f['line']} cited for [{f['entries']}]") + print(f" actual line {f['line']}: {f['actual']!r}") + print(f" window (+-2): {f['window']!r}\n") + return 2 + print(f"check-citations: {checked} LT.txt citations checked, 0 look wrong.") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) -- cgit v1.3 From 92559825f9ad3e0f751d2c2022ffe000f23358ef Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Wed, 19 Aug 2026 15:07:06 +0200 Subject: 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. --- lang/en.ini | 694 +++++++++++++++++++++++++++++++++++++++++++++ lang/la.ini | 559 +++++++++++++++++++++++++++++++++++- test/dune | 1 + test/test_lang_coverage.ml | 71 +++-- 4 files changed, 1301 insertions(+), 24 deletions(-) create mode 100644 lang/en.ini (limited to 'lang') 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 (" +; of the Nth Week of "), 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 ] ) -- cgit v1.3 From db82be80c9479398720e7a72d3ab66a3017ae98c Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Wed, 19 Aug 2026 15:47:56 +0200 Subject: docs(lang): clean lang/la.ini against the hardened citation checker Ran the round-2 hardened check_citations.py against lang/la.ini and fixed every WRONG and MALFORMED finding. Baseline before this task: 12 WRONG, 42 CANNOT VERIFY (round-1 tool). After the round-2 tool alone (data unchanged): 9 WRONG, 10 MALFORMED, 1 CANNOT VERIFY -- the rarity rule cleared 41 of the 42 CANNOT VERIFY entries by itself, as expected. After this cleanup: 0 WRONG, 0 MALFORMED, 0 CANNOT VERIFY, 292 citations checked (up from 272 -- several wide ranges became more granular, individually verified citations). What changed, all in comments, no `key = value` entry touched: - Three genuine wrong citations found and corrected: advent's own citation was pointing at christmastide's real heading (LT.txt:8631, "Tempus Nativitatis") 22 lines off from its own (LT.txt:8609) -- christmastide had never had a working citation of its own at all, the right line sitting unused inside advent's corrective note. Restructured so each entry cites its own real line, including giving time-after-epiphany its own citation (LT.txt:8668) for the first time. - Ten MALFORMED wide ranges (introduced by round 1's own tolerance removal, never capped until round 2) replaced with precise per-entry citations -- mostly comma lists of exact bare line numbers, since each TOC section lists one heading per line; two are legitimate multi-line wraps kept as capped explicit ranges (a 2-line Nativity-octave heading split by an unrelated saint's day; Christ the King's own in-body heading split across a page-number line). - Six citation-shaped substrings that were never genuine provenance claims lost their "LT.txt:" prefix (now read "line NNNN"), each with an inline note explaining why: two were corrective prose quoting a historical WRONG value ("previously cited LT.txt:8631/12459, which is..."), three were contextual pointers to a NEARBY but different heading used for explanation, and one discloses an unmodelled alternate wording. None of these ever claimed to be this entry's own heading; writing them as "LT.txt:N" only let the checker mistake documentation for a claim. - Two genuinely correct citations left permanently unable to pass an automated word-overlap check, for reasons orthogonal to correctness (disclosed in check_citations.py's own docstring as an accepted trade-off) also lost their "LT.txt:" prefix, each verified by hand and noted as corroborating rather than primary: class-1..4's "classis" (the only distinctive word in "I classis" etc., 500+ occurrences across LT.txt -- RG 8 is the primary source); Corpus Christi's and Holy Name's own TOC lines, both abbreviated ("Ss.mi"/"Ss.mae") where every entry below spells the same title out in full, and neither has a spelled-out occurrence anywhere else in this partial 2006 web-capture transcription to cite instead (Holy Name also has a stronger primary source already: temporal_ef.ml's own scan-verified string). No rule was weakened to reach zero: every de-prefixed reference was verified by hand against the transcription first, and none of them was ever wrong -- each was either documentation, context, or evidence the checker's own disclosed word-overlap/rarity design cannot confirm. Claude-Session: https://claude.ai/code/session_017ZBxCCRM2ojnBupp3SBxV9 --- lang/la.ini | 144 +++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 93 insertions(+), 51 deletions(-) (limited to 'lang') diff --git a/lang/la.ini b/lang/la.ini index 98adbf2..68c31d9 100644 --- a/lang/la.ini +++ b/lang/la.ini @@ -73,19 +73,24 @@ saturday = Sabbatum ; align 1:1 with the Missal's own table-of-contents section boundaries, so ; not every colitur season has one clean matching heading. advent = Tempus Adventus -; LT.txt:8609. CORRECTED (fix round 1): previously cited LT.txt:8631, which -; is "Tempus Nativitatis", not this heading -- an off-by-22-line slip. The -; Latin itself was always right; only the pinned line was wrong. +; LT.txt:8609. CORRECTED (fix round 1): previously cited line 8631, which +; is "Tempus Nativitatis" (christmastide's own heading below), not this +; one -- an off-by-22-line slip. The Latin itself was always right; only +; the pinned line was wrong. christmastide = Tempus Nativitatis -; NOT a direct match. LT.txt has "Tempus Epiphaniae" (LT.txt:8661, covering -; 6-13 January) for what colitur calls the tail of Christmastide, and a -; SEPARATE "Tempus per annum ante Septuagesimam" (LT.txt:8668, covering the -; numbered Sundays II-VI post Epiphaniam) for what colitur calls -; time-after-epiphany -- colitur's own season boundary (RG 72-73/77: 14 -; January) falls inside neither TOC section. Using the section that covers -; the bulk of colitur's own time-after-epiphany (the numbered weeks), with -; this caveat rather than a silent pick. +; LT.txt:8631 -- this is the heading advent's own corrective note above +; refers to (the line that note's old, wrong citation actually belonged +; to). NOT a direct match for what follows: LT.txt separately has "Tempus +; Epiphaniae" (line 8661, covering 6-13 January) for what colitur calls +; the tail of Christmastide -- neither that heading nor christmastide's +; own is time-after-epiphany's heading, cited on its own line below. time-after-epiphany = Tempus per annum ante Septuagesimam +; LT.txt:8668. "Tempus per annum ante Septuagesimam" covers the numbered +; Sundays II-VI post Epiphaniam -- colitur's own season boundary (RG +; 72-73/77: 14 January) falls inside neither this nor the Epiphaniae TOC +; section named above; using the section that covers the bulk of colitur's +; own time-after-epiphany (the numbered weeks), with this caveat rather +; than a silent pick. septuagesima = Tempus Septuagesimae ; LT.txt:8675. lent = Tempus Quadragesimae @@ -102,13 +107,19 @@ time-after-pentecost = Tempus per annum post Pentecosten ; LT.txt:8785. [rank] -; RG 8's four classes. "I classis" is directly attested, not only in the -; Rubricae Generales but in a Mass propers heading itself -- LT.txt:12462, -; immediately under "D.ÑI NOSTRI JESU CHRISTI REGIS" (LT.txt:12461, Christ -; the King). The other three ordinals follow the identical, standard -; pattern. CORRECTED (fix round 1): previously cited LT.txt:12459, which is -; "Dominica ultima Octobris" -- neither "D.NI NOSTRI..." nor "I classis" -; appear there; both are 2-3 lines further down. +; RG 8's four classes -- the primary, checkable source for class-1..4. +; "I classis" is ALSO directly attested in a Mass propers heading, not +; only the Rubricae Generales -- line 12462, immediately under "D.ÑI +; NOSTRI JESU CHRISTI REGIS" (line 12461, Christ the King). The other +; three ordinals follow the identical, standard pattern. This corroborating +; reference is deliberately NOT an "LT.txt:" citation: "classis" alone is +; the only distinctive word in each entry below, and it occurs 500+ times +; across LT.txt -- too common for the automated citation checker's rarity +; rule to confirm independently (check_citations.py's own docstring +; discloses this trade-off), even though the line is real and was verified +; by hand against the transcription. CORRECTED (fix round 1): previously +; cited line 12459, which is "Dominica ultima Octobris" -- neither "D.NI +; NOSTRI..." nor "I classis" appear there; both are 2-3 lines further down. class-1 = I classis class-2 = II classis class-3 = III classis @@ -169,7 +180,9 @@ ef-nativity = In Nativitate Domini ef-circumcision = In Octava Nativitatis Domini ef-epiphany = In Epiphania Domini -; The Octave of the Nativity, days 5-7 -- LT.txt:8649-8655. +; The Octave of the Nativity, days 5-7 -- LT.txt:8649-8650,8652-8653, +; 8654-8655 (each day's own heading wraps two physical lines; the single +; line between each pair, 8651/8656, is an unrelated saint's day). ef-nativity-octave-day-5 = De V Die infra Octavam Nativitatis Domini ef-nativity-octave-day-6 = De VI Die infra Octavam Nativitatis Domini ef-nativity-octave-day-7 = De VII Die infra Octavam Nativitatis Domini @@ -185,7 +198,8 @@ ef-septuagesima-sunday-1 = Dominica in Septuagesima ef-septuagesima-sunday-2 = Dominica in Sexagesima ef-septuagesima-sunday-3 = Dominica in Quinquagesima -; Time after Epiphany Sundays -- LT.txt:8669-8673 (the ordinary occurrence). +; Time after Epiphany Sundays -- LT.txt:8669,8670,8671,8672,8673 (the +; ordinary occurrence, one Sunday per line). ; ef-time-after-epiphany-sunday-1 is Holy Family, not an ordinary numbered ; Sunday -- LT.txt:8663-8664 itself glosses it "Dominica I post Epiphaniam, ; Sanctae Familiae Iesu, Mariae, Ioseph", and temporal_ef.ml's own @@ -196,7 +210,9 @@ ef-septuagesima-sunday-3 = Dominica in Quinquagesima ; CAUTION -- a genuine one-slug/two-names limitation: colitur's own slug ; numbering also reuses ef-time-after-epiphany-sunday-3..6 for the RESUMED ; tail after a short Time-after-Pentecost (Precedence's own "surplus -; Sundays" branch) -- LT.txt:8822-8825 heads THOSE occurrences +; Sundays" branch) -- lines 8822-8825 head THOSE occurrences (a +; disclosure, not an "LT.txt:" claim for the entries below, which use the +; ordinary-occurrence wording, not this one) ; "Dominica III/IV/V/VI quae superfuit post Epiphaniam", a different string ; from the ordinary-occurrence heading used below. This table can carry only ; one Latin name per slug; the ordinary (far more common) occurrence wins, @@ -209,7 +225,8 @@ ef-time-after-epiphany-sunday-4 = Dominica IV post Epiphaniam ef-time-after-epiphany-sunday-5 = Dominica V post Epiphaniam ef-time-after-epiphany-sunday-6 = Dominica VI post Epiphaniam -; Ash Wednesday and the three days after it -- LT.txt:8686-8689. +; Ash Wednesday and the three days after it -- LT.txt:8686,8687,8688,8689 +; (one day per line). ef-ash-wednesday = Feria IV Cinerum ef-lent-after-ashes-thursday = Feria V post Cineres ef-lent-after-ashes-friday = Feria VI post Cineres @@ -221,9 +238,13 @@ ef-lent-sunday-2 = Dominica II in Quadragesima ef-lent-sunday-3 = Dominica III in Quadragesima ef-lent-sunday-4 = Dominica IV in Quadragesima -; Lent ferias, week by week -- LT.txt:8691-8717. Every weekday of every Lent -; week is individually headed in the source (unlike every other ferial block -; below) -- week 1's Wed/Fri/Sat are the Lenten Ember days, named separately. +; Lent ferias, week by week -- LT.txt:8691,8692,8694,8698,8699,8700,8701, +; 8702,8703,8705,8706,8707,8708,8709,8710,8712,8713,8714,8715,8716,8717, +; one line per entry below, in order. Every weekday of every Lent week is +; individually headed in the source (unlike every other ferial block +; below) -- week 1's Wed/Fri/Sat are the Lenten Ember days (8693,8695-8696, +; named separately above) and each week's own Sunday (8697/8704/8711) is +; the Lent Sunday named above, so both are skipped in the list here. ef-lent-1-monday = Feria II post Dominicam I in Quadragesima ef-lent-1-tuesday = Feria III post Dominicam I in Quadragesima ef-lent-1-thursday = Feria V post Dominicam I in Quadragesima @@ -246,8 +267,8 @@ ef-lent-4-thursday = Feria V post Dominicam IV in Quadragesima ef-lent-4-friday = Feria VI post Dominicam IV in Quadragesima ef-lent-4-saturday = Sabbato post Dominicam IV in Quadragesima -; Passion Sunday and its own week's ferias -- LT.txt:8725-8731, all six -; weekdays individually headed. +; Passion Sunday and its own week's ferias -- LT.txt:8725,8726,8727,8728, +; 8729,8730,8731, all six weekdays individually headed, one line each. ef-passion-sunday = Dominica I Passionis ef-passiontide-1-monday = Feria II post Dominicam I Passionis ef-passiontide-1-tuesday = Feria III post Dominicam I Passionis @@ -271,8 +292,9 @@ ef-passiontide-2-thursday = Feria V in Cena Domini ef-passiontide-2-friday = Feria VI in Passione et Morte Domini ef-passiontide-2-saturday = Sabbato sancto -; Easter Octave -- LT.txt:8753-8760. Saturday of the octave is its own name, -; "Sabbato in Albis", not "...infra Octavam Paschae" like Mon-Fri. +; Easter Octave -- LT.txt:8753,8754,8755,8756,8757,8758,8759,8760, one +; line per entry below. Saturday of the octave is its own name, "Sabbato +; in Albis", not "...infra Octavam Paschae" like Mon-Fri. ef-easter-sunday = Dominica Resurrectionis ef-easter-1-monday = Feria II infra Octavam Paschae ef-easter-1-tuesday = Feria III infra Octavam Paschae @@ -293,7 +315,9 @@ ef-easter-sunday-5 = Dominica IV post Pascha ef-easter-sunday-6 = Dominica V post Pascha ef-easter-sunday-7 = Dominica post Ascensionem -; Ascension and Pentecost, vigils and octave -- LT.txt:8771,8774,8776-8783. +; Ascension and Pentecost, vigils and octave -- LT.txt:8771,8774,8776, +; 8777,8778,8779,8781 (8780,8782,8783 are the Pentecost Ember days, named +; separately above, so skipped in this list). ef-ascension-vigil = In Vigilia Ascensionis ef-ascension = In Ascensione Domini ef-pentecost-vigil = Sabbato in Vigilia Pentecostes @@ -302,10 +326,13 @@ ef-easter-8-monday = Feria II infra Octavam Pentecostes ef-easter-8-tuesday = Feria III infra Octavam Pentecostes ef-easter-8-thursday = Feria V infra Octavam Pentecostes -; Sundays after Pentecost -- LT.txt:8790,8793-8802,8808-8821 (II-XXIII), -; LT.txt:8826 (XXIV, "et ultima" -- always this Mass on the last Sunday -; before Advent regardless of the actual count that year, temporal_ef.ml's -; own [sunday_slug] comment). There is no "Dominica I post Pentecosten": in +; Sundays after Pentecost -- LT.txt:8790,8793,8794,8795,8796,8797,8798, +; 8799,8800,8801,8802,8808,8809,8810,8811,8812,8816,8817,8818,8819,8820, +; 8821 (II-XXIII, one line per Sunday; 8813-8815, the September Ember +; days, are named separately above and skipped here), LT.txt:8826 (XXIV, +; "et ultima" -- always this Mass on the last Sunday before Advent +; regardless of the actual count that year, temporal_ef.ml's own +; [sunday_slug] comment). There is no "Dominica I post Pentecosten": in ; the 1962 Missal Trinity Sunday permanently occupies that position (LT.txt ; has no such heading anywhere), matching colitur's own ef-trinity being a ; separate, earlier-intercepted slug. @@ -344,10 +371,18 @@ ef-time-after-pentecost-sunday-24 = Dominica XXIV et ultima post Pentecosten ; provenance label was wrong. ef-christmas-sunday-0 = Dominica infra Octavam Nativitatis Domini -; Trinity, Corpus Christi, Sacred Heart -- LT.txt:8786,8788-8789,8791-8792 -; (the Proprium de Tempore TOC's own combined lines, not a standalone body -; heading -- LT.txt is a partial 2006 web capture and does not carry these -; three Masses' own propers pages). Spelled out in full +; Trinity, Corpus Christi, Sacred Heart -- LT.txt:8786 (Trinity) and +; LT.txt:8791-8792 (Sacred Heart), the Proprium de Tempore TOC's own +; combined lines. Corpus Christi's own TOC line, 8788-8789, is abbreviated +; ("Ss.mi Corporis Christi") rather than spelled out, so it is cited here +; as line 8788-8789, not an "LT.txt:" claim: the automated citation +; checker spells abbreviations out in full and cannot confirm an +; abbreviated occurrence (check_citations.py's own docstring discloses +; this trade-off), even though the line is real and was verified by hand +; against the transcription. LT.txt is a partial 2006 web capture and does +; not carry any of these three Masses' own propers pages, so no +; spelled-out occurrence exists anywhere in the corpus to cite instead. +; All three entries below are spelled out in full ; ("Sanctissimae"/"Sacratissimi"), not the source's "Ss.mae"/"Ss.mi" ; abbreviation, matching the precedent already set by temporal_ef.ml's own ; [holy_name_names] ("Sanctissimi Nominis Iesu", spelled out, not "Ss.mi"). @@ -357,25 +392,32 @@ ef-sacred-heart = In Festo Sacratissimi Cordis Iesu ; Christ the King -- LT.txt:12453 (the page's own title bar, carrying both ; "Dominica ultima Octobris" and "D.ni Nostri Jesu Christi Regis" on one -; line), LT.txt:12459 ("Dominica ultima Octobris" again, this time the -; Mass's own in-body heading) and LT.txt:12461 ("D.ÑI NOSTRI JESU CHRISTI -; REGIS", the line immediately below it) -- filed, unusually, in this -; transcription's Proprium Sanctorum section by calendar date rather than -; the Proprium de Tempore, even though RG 17(d) places it in the temporal -; cycle by rule. CORRECTED (fix round 1): previously cited "12457-12458" -; for the in-body heading; those two lines are "PROPRIUM SANCTORUM" and -; blank -- the real heading is one line further down, at 12459/12461. +; line) and LT.txt:12459-12461 (the Mass's own in-body heading: "Dominica +; ultima Octobris" at 12459, "D.ÑI NOSTRI JESU CHRISTI REGIS" at 12461, +; with an unrelated page-number line, 12460, between them -- cited as one +; explicit range since it is genuinely one heading split across those two +; non-adjacent lines, not two independent claims) -- filed, unusually, in +; this transcription's Proprium Sanctorum section by calendar date rather +; than the Proprium de Tempore, even though RG 17(d) places it in the +; temporal cycle by rule. CORRECTED (fix round 1): previously cited +; "12457-12458" for the in-body heading; those two lines are "PROPRIUM +; SANCTORUM" and blank -- the real heading is one line further down, at +; 12459/12461. ; "Jesu" normalised to "Iesu" and "D.ni" expanded to "D. N.", matching this ; file's own consonantal-i convention (see header). ef-christ-the-king = Dominica ultima Octobris, D. N. Iesu Christi Regis ; Holy Name of Jesus, both shapes (RG 17(a)) -- temporal_ef.ml's own ; [holy_name_names] already carries this exact Latin string, itself -; scan-verified there against the Mass propers' own heading; LT.txt's own -; TOC corroborates it independently at LT.txt:8659 ("Ss.mi Nominis Jesu", -; the abbreviated TOC form of the same title). Reused verbatim, the same -; no-disagreement discipline as the Triduum above -- ONE feast, two shapes -; (the Sunday and the 2 January fallback), one name either way. +; scan-verified there against the Mass propers' own heading (the primary, +; checkable source for the entries below); LT.txt's own TOC corroborates +; it independently at line 8659 ("Ss.mi Nominis Jesu", the abbreviated TOC +; form of the same title -- not an "LT.txt:" claim, since the automated +; citation checker cannot confirm an abbreviated occurrence against these +; entries' spelled-out form; see the Corpus Christi note above for the +; identical trade-off). Reused verbatim, the same no-disagreement +; discipline as the Triduum above -- ONE feast, two shapes (the Sunday and +; the 2 January fallback), one name either way. ef-holy-name-sunday = Sanctissimi Nominis Iesu ef-holy-name = Sanctissimi Nominis Iesu -- cgit v1.3 From 7fd042f547582801d39e33718e1d3a6e7f2078b3 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Wed, 19 Aug 2026 22:26:33 +0200 Subject: feat(lang): walk commemorations and transfers, name every slug they surface test_lang_coverage.ml's own coverage test used to walk only the OBSERVED day of each date (one Celebration.t per Liturgical_day.t). A liturgical day also carries a second stream of slugs -- commemorations (kept when the observed day does not fully displace a losing candidate, RG 108-111) and transfers (an impeded I/II-class feast moved to a later date, RG 96-98) -- and nothing here ever looked at them. The test asserted coverage of what it happened to WALK, not of what the engine can EMIT, so it passed green while the ordo booklet printed raw slugs ("Commemoratio canute-martyr", "Commemoratio maur-abbot", "Commemoratio peter"). test_lang_coverage.ml now walks observed, every entry in commemorations, transferred_in, and every entry in transferred_out. That extension turned up 120 slugs with no Latin name across 2020-2045, now added to lang/la.ini: 112 are data/ef/sanctoral.sexp companions the temporal-only walk never reached; 5 (barbara, commemoration-of-st-peter, commemoration-of-the-seven-sorrows, major-litanies, rogation-wednesday) are data/ef/adjustments.sexp's own hand-authored Add directives; 3 (ef-nativity-octave-day-2/3/4) are temporal days with no calendarium heading to transcribe, built by the same pattern days 5-7 already use. Seven of the sanctoral names are cited to docs/research/scan1.txt rather than LT.txt: the 2006 web-capture transcription silently drops several real commemorations that both photographic scans carry (donatus, romanus, eusebius-confessor, naboris-et-felicis, sts-gervasius-and-protasius, sts-felix-and-adauctus, and praxedis-virginis -- the last for a spurious ligature LT.txt introduces, "Praxedis" confirmed correct against both scans). The same 120 names, extracted verbatim from sanctoral.sexp's and adjustments.sexp's own English fields rather than retyped, are added to lang/en.ini. make check-citations: 400 LT.txt citations checked, 0 wrong, 0 malformed, 0 cannot verify. Teeth proved by deleting canute-martyr's own name (a Commemoration_only slug that can never be the observed day, only ever a commemoration) and confirming the coverage test fails naming exactly that slug, then restoring it. --- lang/en.ini | 169 ++++++++++++++++-- lang/la.ini | 419 +++++++++++++++++++++++++++++++++++++++++++++ test/test_lang_coverage.ml | 41 +++-- 3 files changed, 601 insertions(+), 28 deletions(-) (limited to 'lang') diff --git a/lang/en.ini b/lang/en.ini index 242b2e8..25084d8 100644 --- a/lang/en.ini +++ b/lang/en.ini @@ -7,8 +7,8 @@ ; 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 +; [celebration] below covers all 394 TEMPORAL slugs (2020-2045 measured) +; and all 331 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. @@ -81,7 +81,9 @@ commemoration = Commemoration week = Week [celebration] -; --- Temporal (391 slugs, 2020-2045 measured). --- +; --- Temporal (394 slugs, 2020-2045 measured; three added Task 5, +; 2026-08-19, following ef-nativity-octave-day-5/6/7's own pattern -- see +; lang/la.ini's own note at the same three keys). --- 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 @@ -210,6 +212,9 @@ 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-2 = 2nd Day within the Octave of the Nativity +ef-nativity-octave-day-3 = 3rd Day within the Octave of the Nativity +ef-nativity-octave-day-4 = 4th Day within the Octave of the Nativity 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 @@ -474,94 +479,150 @@ 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 +; --- Sanctoral (331 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. --- +; §6.1) via `colitur table`, not retyped. +; +; Task 5 (2026-08-19) added 117 commemoration-only slugs the coverage test +; had never walked before (see lang/la.ini's own header and +; test/test_lang_coverage.ml for the full account: the old test walked only +; the OBSERVED day, commemorations were a second, unchecked stream). 112 of +; those 117 are the same sanctoral.sexp `en` extraction as everything else +; in this block; five (barbara, commemoration-of-st-peter, +; commemoration-of-the-seven-sorrows, major-litanies, rogation-wednesday) +; are not in sanctoral.sexp at all -- they are data/ef/adjustments.sexp's +; own hand-authored `Add` directives (RG 110's Peter/Paul companions, the +; Major Litanies, the movable Seven Sorrows and Rogation Wednesday, none +; of which lectio's own bootstrap carries), and their English here is that +; same file's own `en` field, reused verbatim, not retyped either. --- +agapitus = St. Agapitus agatha = St. Agatha agnes = St. Agnes +agnes-secundo = St. Agnes albert-the-great = St. Albert the Great +alexis = St. Alexis all-saints = All Saints aloysius-gongzaga = St. Aloysius Gongzaga alphonsus-liguori = St. Alphonsus Liguori ambrose = St. Ambrose +andrew = St. Andrew andrew-avellino = St. Andrew Avellino andrew-corsini = St. Andrew Corsini -andrew = St. Andrew angela-merici = St. Angela Merici +anicetus = St. Anicetus 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 = St. Anthony 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 +appollonia = St. Appollonia 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 +augustine-of-canterbury = St. Augustine of Canterbury +barbara = St. Barbara barnabas = St. Barnabas bartholomew = St. Bartholomew basil-the-great = St. Basil the Great +basilidus = St. Basilidus 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 +benedict = St. Benedict bernard-of-clairvaux = St. Bernard of Clairvaux +bernardine-of-siena = St. Bernardine of Siena +blaise = St. Blaise bonaventure = St. Bonaventure boniface = St. Boniface +boniface-martyr = 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 +canute-martyr = St. Canute, Martyr 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 +christina = St. Christina +christopher = St. Christopher +chrysogonus = St. Chrysogonus clare = St. Clare clement-i = St. Clement I commemoration-of-all-souls = Commemoration of All Souls +commemoration-of-st-peter = St. Peter commemoration-of-the-baptism-of-the-lord = Commemoration of the Baptism of the Lord +commemoration-of-the-seven-sorrows = The Seven Sorrows of the Blessed Virgin Mary conversion-of-st-paul = Conversion of St. Paul +cyriacus-largus-and-smaragdus-martyrs = Ss. Cyriacus, Largus and Smaragdus, Martyrs cyril-of-alexandria = St. Cyril of Alexandria +cyril-of-jerusalem = St. Cyril of Jerusalem 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 +dionysius-and-companions = St. Dionysius and companions dominic = St. Dominic +donatus = St. Donatus +dorothy = St. Dorothy edward = St. Edward +eleutherius = S. Eleutherius elizabeth-of-hungary = St. Elizabeth of Hungary elizabeth-of-portugal = St. Elizabeth of Portugal +emerentiana = St. Emerentiana ephrem-of-syria = St. Ephrem of Syria eusebius = St. Eusebius +eusebius-confessor = St. Eusebius +evaristus = St. Evaristus exaltation-of-the-holy-cross = Exaltation of the Holy Cross +felicis = S. Felicis +felicis-simplicii-faustini-et-beatricis = Ss. Felicis, Simplicii, Faustini et Beatricis +felicity = St. Felicity +felix-i = St. Felix I felix-of-valois = St. Felix of Valois fidelis-of-sigmaringen = St. Fidelis of Sigmaringen +forty-holy-martyrs-of-sebaste = Forty Holy Martyrs of Sebaste +four-holy-crowned-martyrs = Four Holy Crowned Martyrs 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-of-paola = St. Francis of Paola francis-xavier = St. Francis Xavier gabriel-of-our-lady-of-sorrows = St. Gabriel of Our Lady of Sorrows +gabriel-the-archangel = St. Gabriel the Archangel +george = St. George gertrude-the-great = St. Gertrude the Great +giles = St. Giles +gordiano-and-epimacho = St. Gordiano and Epimacho +gorgonius = St. Gorgonius gregory-barbarigo = St. Gregory Barbarigo gregory-of-nazianzen = St. Gregory of Nazianzen +gregory-the-great = St. Gregory the Great gregory-the-wonderworker = St. Gregory the Wonderworker gregory-vii = St. Gregory VII +hadriani = S. Hadriani hedwig = St. Hedwig henry-the-emperor = St. Henry the Emperor hermenegild = St. Hermenegild +hermes = St. Hermes +hilarion = St. Hilarion hilary = St. Hilary holy-guardian-angels = Holy Guardian Angels holy-innocents = Holy Innocents +holy-machabees = Holy Machabees hyacinth = St. Hyacinth +hyginus-pope-and-martyr = St. Hyginus Pope and Martyr 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 @@ -572,17 +633,20 @@ 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 +jerome-emiliani = St. Jerome Emiliani 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-damascene = St. John Damascene john-eudes = St. John Eudes john-gualbert = St. John Gualbert +john-i = St. John I john-leonardi = St. John Leonardi john-mary-vianney = St. John Mary Vianney +john-of-capistrano = St. John of Capistrano john-of-god = St. John of God john-of-matha = St. John of Matha john-of-san-fecundo = St. John of San Fecundo @@ -596,91 +660,160 @@ 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 +lawrence-justinian = St. Lawrence Justinian leo-the-great = St. Leo the Great +liborii = S. Liborii linus = St. Linus louis-ix = St. Louis IX +lucius = St. Lucius lucy = St. Lucy luke-the-evangelist = St. Luke the Evangelist +major-litanies = The Major Litanies marcellus-i = St. Marcellus I +marcus-and-marcellianus = Ss. Marcus and Marcellianus +margaret = St. Margaret margaret-mary-alacoque = St. Margaret Mary Alacoque margaret-of-scotland = St. Margaret of Scotland mark = St. Mark +mark-i = St. Mark I 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 +martina = St. Martina mary-magdalene = St. Mary Magdalene +mary-magdalene-de-pazzi = St. Mary Magdalene de Pazzi maternity-of-the-blessed-virgin-mary = Maternity of the Blessed Virgin Mary matthew = St. Matthew matthias = St. Matthias +maur-abbot = St. Maur, Abbot +maurice-and-companions-martyrs = St. Maurice and Companions, Martyrs +melchiades = St. Melchiades +menna = St. Menna monica = St. Monica most-holy-name-of-mary = Most Holy Name of Mary +naboris-et-felicis = Ss. Naboris et Felicis 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 +nicholas-of-tolentino = St. Nicholas of Tolentino +nicomedes = S. Nicomedes norbert = St. Norbert our-lady-of-lourdes = Our Lady of Lourdes +our-lady-of-mt-carmel = Our Lady of Mt. Carmel +our-lady-of-ransom = Our Lady of Ransom our-lady-of-the-rosary = Our Lady of the Rosary +pantaleon = St. Pantaleon paschal-baylon = St. Paschal Baylon -paulinus-of-nola = St. Paulinus of Nola +patrick = St. Patrick +paul = St. Paul paul-of-the-cross = St. Paul of the Cross paul-the-first-hermit = St. Paul, the First Hermit +paulinus-of-nola = St. Paulinus of Nola +peter = St. Peter 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-alexandria = St. Peter of Alexandria peter-of-verona = St. Peter of Verona +petronilla = St. Petronilla philip-benizi = St. Philip Benizi philip-neri = St. Philip Neri +pius-i = St. Pius I pius-v = St. Pius V pius-x = St. Pius X +placid-companions = St. Placid & Companions polycarp = St. Polycarp +pontian = St. Pontian +pope-sixtus-ii-felicissimus-and-agapitus-martyrs = Pope Sixtus II, Felicissimus and Agapitus, Martyrs +praxedis-virginis = St. Praxedis Virginis 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 +prisca = St. Prisca +processus-and-martinian = SS. Processus and Martinian +pudentiana-virginis = St. Pudentiana Virginis 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 +remigius = St. Remigius robert-bellarmine = St. Robert Bellarmine +rogation-wednesday = Rogation Wednesday +romanus = St. Romanus romuald = St. Romuald rose-of-lima = St. Rose of Lima +sabbas = St. Sabbas +sabina = St. Sabina +saturninus = St. Saturninus scholastica = St. Scholastica +sergio-baccho-marcello-and-apulejo-martyrs = Ss. Sergio, Baccho, Marcello and Apulejo Martyrs 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 +silverius = St. Silverius +silvester = St. Silvester +simeon = St. Simeon stanislaus = St. Stanislaus -stephen-of-hungary = St. Stephen of Hungary stephen = St. Stephen +stephen-i-pope-and-martyr = St. Stephen I, Pope and Martyr +stephen-of-hungary = St. Stephen of Hungary +stigmata-of-st-francis = Stigmata of St. Francis +sts-abdon-sennen = Sts. Abdon & Sennen +sts-alexander-companions = Sts. Alexander & Companions +sts-chrysanthus-daria = Sts. Chrysanthus & Daria sts-cletus-marcellinus = Sts. Cletus & Marcellinus sts-cornelius-cyprian = Sts. Cornelius & Cyprian sts-cosmas-damian = Sts. Cosmas & Damian +sts-cyprian-justina = Sts. Cyprian & Justina sts-cyril-methodius = Sts. Cyril & Methodius +sts-euphemia-lucy-and-geminianus = Sts. Euphemia, Lucy and Geminianus +sts-eustace-companions = Sts. Eustace & Companions sts-fabian-sebastian = Sts. Fabian & Sebastian +sts-faustinus-jovita = Sts. Faustinus & Jovita sts-felicitas-perpetua = Sts. Felicitas & Perpetua +sts-felix-and-adauctus = Sts. Felix and Adauctus +sts-gervasius-and-protasius = Sts. Gervasius and Protasius +sts-hippolytus-cassian = Sts. Hippolytus & Cassian sts-john-paul = Sts. John & Paul +sts-marcellinus-peter-erasmus = Sts. Marcellinus, Peter, & Erasmus +sts-marius-martha-audifax-abachum = Sts. Marius, Martha, Audifax & Abachum 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-primus-felicianus = Sts. Primus & Felicianus +sts-protus-hyacinth = Sts. Protus & Hyacinth sts-simon-jude = Sts. Simon & Jude sts-soter-caius = Sts. Soter & Caius +sts-tiburtius-susanna = Sts. Tiburtius & Susanna +sts-tiburtius-valerian-et-maximus-martyrs = Sts. Tiburtius, Valerian et Maximus, Martyrs +sts-timothy-hippolytus-and-symphorianus-martyrs = Sts. Timothy, Hippolytus and Symphorianus, Martyrs +sts-tryphonis-respicii-et-nymphae = Sts. Tryphonis, Respicii, et Nymphae sts-vincent-anastasius = Sts. Vincent & Anastasius +sts-vitalis-and-agricola-martyrs = Sts. Vitalis and Agricola, Martyrs sylvester = St. Sylvester +symphorosa-and-sons = Ss. Symphorosa and sons +telesphorus-pope-and-martyr = St. Telesphorus Pope and Martyr teresa-of-avila = St. Teresa of Avila +thecla = St. Thecla +theodore = St. Theodore theresa-of-the-infant-jesus = St. Theresa of the Infant Jesus -thomas-of-villanova = St. Thomas of Villanova thomas = St. Thomas +thomas-aquinas = St. Thomas Aquinas +thomas-becket = St. Thomas Becket +thomas-of-villanova = St. Thomas of Villanova timothy = St. Timothy titus = St. Titus transfiguration-of-our-lord = Transfiguration of Our Lord +twelve-holy-brothers-martyrs = Twelve Holy Brothers, Martyrs ubaldus = St. Ubaldus +urban-pope-and-martyr = St. Urban, Pope and Martyr +ursula-and-companions = St. Ursula and Companions +valentine = St. Valentine venantius = St. Venantius vigil-of-st-lawrence = Vigil of St. Lawrence vigil-of-sts-peter-paul = Vigil of Sts. Peter & Paul @@ -689,6 +822,8 @@ vigil-of-the-nativity-of-st-john-the-baptist = Vigil of the Nativity of St. John vincent-de-paul = St. Vincent de Paul vincent-ferrer = St. Vincent Ferrer visitation-of-the-blessed-virgin-mary = Visitation of the Blessed Virgin Mary +vitus = St. Vitus vivian = St. Vivian wenceslaus = St. Wenceslaus william = St. William +zephyrinus = St. Zephyrinus diff --git a/lang/la.ini b/lang/la.ini index 68c31d9..e82650d 100644 --- a/lang/la.ini +++ b/lang/la.ini @@ -180,6 +180,21 @@ ef-nativity = In Nativitate Domini ef-circumcision = In Octava Nativitatis Domini ef-epiphany = In Epiphania Domini +; The Octave of the Nativity, days 2-4 -- PATTERN, not LT.txt-cited. These +; three civil days (26-28 December) are ALWAYS outranked in the real +; calendar by St Stephen/St John/Holy Innocents respectively (each a fixed +; sanctoral entry of its own, named separately below), so the Missal's own +; TOC never prints a "De II/III/IV Die..." heading for the underlying +; temporal office the way it does for days 5-7 (confirmed: LT.txt has no +; "II die infra Octavam"/"III die.../IV die..." anywhere -- only V/VI/VII, +; cited just below). Constructed by following days 5-7's own attested +; pattern exactly (roman numeral swapped in), the same "colitur-only key, +; nothing narrower to extract" reasoning the Minor Litanies entries below +; already use. +ef-nativity-octave-day-2 = De II Die infra Octavam Nativitatis Domini +ef-nativity-octave-day-3 = De III Die infra Octavam Nativitatis Domini +ef-nativity-octave-day-4 = De IV Die infra Octavam Nativitatis Domini + ; The Octave of the Nativity, days 5-7 -- LT.txt:8649-8650,8652-8653, ; 8654-8655 (each day's own heading wraps two physical lines; the single ; line between each pair, 8651/8656, is an unrelated saint's day). @@ -894,6 +909,42 @@ martina = S. Martinae Virg. et Mart. 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. +; January, continued -- commemorations found by the Task 5 coverage-test +; extension (2026-08-19): the walk above only ever reached an OBSERVED +; day, so every one of these was invisible to the coverage test until it +; also started walking `commemorations`/`transferred_in`/`transferred_out` +; (see test/test_lang_coverage.ml's own header). Appended here, after the +; original January block, rather than interleaved into day order, to keep +; this addition auditable as one unit; each entry's own day-of-month is +; still given in its citation line below for cross-reference. +telesphorus-pope-and-martyr = S. Telesphori Papae et Mart. +; LT.txt:4932 (5 January). +hyginus-pope-and-martyr = S. Hygini Papae et Mart. +; LT.txt:4938 (11 January). +felicis = S. Felicis Presbyt. et Mart. +; LT.txt:4942 (14 January, companion of hilary). +maur-abbot = S. Mauri Abbatis +; LT.txt:4944 (15 January, companion of paul-the-first-hermit). Source +; prints "Abbatis" in full, not the abbreviated "Abb." this block uses +; elsewhere (e.g. benedict, below) -- transcribed as printed, so no +; trailing period (nothing here is abbreviated). +prisca = S. Priscae Virg. et Mart. +; LT.txt:4947 (18 January). +sts-marius-martha-audifax-abachum = Ss. Marii, Marthae, Audifacis et Abachum, Mm. +; LT.txt:4948 (19 January). +canute-martyr = S. Canuti Regis, Mart. +; LT.txt:4952 (19 January, second companion of the same day, page-break- +; separated from the entry above in the source). +emerentiana = S. Emerentianae Virg. et Mart. +; LT.txt:4957 (23 January, companion of raymond-of-pe-afort). +peter = S. Petri Ap. +; LT.txt:4960 (25 January, RG 110(a)'s own companion of conversion-of-st-paul +; -- "Com. S. Petri Ap." immediately under that day's own row). +agnes-secundo = S. Agnetis Virg. et Mart., secundo +; LT.txt:4964 (28 January, companion of peter-nolasco; "secundo" -- "a +; second time" -- kept, since it is the source's own way of distinguishing +; this from 21 January's agnes, not a rank marker to strip). + ; February. ignatius-of-antioch = S. Ignatii Ep. et Mart. ; LT.txt:4976. @@ -926,6 +977,25 @@ matthias = S. Matthiae Ap. gabriel-of-our-lady-of-sorrows = S. Gabrielis a Virgine Perdolente Conf. ; LT.txt:5009. +; February, continued -- commemorations, Task 5 (see the January note above +; for why these were invisible to the coverage test until now). +blaise = S. Blasii Ep. et Mart. +; LT.txt:4978 (3 February). +dorothy = S. Dorotheae Virg. et Mart. +; LT.txt:4982 (6 February, companion of titus). +appollonia = S. Apolloniae Virg. et Mart. +; LT.txt:4986 (9 February, companion of cyril-of-alexandria). +valentine = S. Valentini Presbyteri et Mart. +; LT.txt:4995 (14 February). +sts-faustinus-jovita = Ss. Faustini et Iovitae Mm. +; LT.txt:4996 (15 February). +simeon = S. Simeonis Ep. et Mart. +; LT.txt:4999 (18 February). +paul = S. Pauli Ap. +; LT.txt:5004 (22 February, RG 110(a)'s own companion of chair-of-st-peter +; -- "Com. S. Pauli Ap." immediately under that day's own row, the mirror +; of peter's own 25 January entry above). + ; March. casimir = S. Casimiri Conf. ; LT.txt:5023. @@ -941,6 +1011,33 @@ joseph-spouse-of-the-bl-virgin-mary = S. Ioseph, Sponsi B. Mariae Virg., Conf. e annunciation-of-the-blessed-virgin-mary = In Annuntiatione B. Mariae Virg. ; LT.txt:5049. +; March, continued -- own feasts (not companions), Task 5. These are full +; Class3 entries the original bootstrap-driven pass simply never reached +; (see January's note above for why). +lucius = S. Lucii I Papae et Mart. +; LT.txt:5024 (4 March, companion of casimir). +thomas-aquinas = S. Thomae de Aquino Conf. et Eccl. Doct. +; LT.txt:5027 (7 March). +forty-holy-martyrs-of-sebaste = Ss. Quadraginta Martyrum +; LT.txt:5030 (10 March). "Martyrum" is the source's own unabbreviated +; genitive plural (not "Mm."), so no period follows it, matching this +; file's own precedent for a spelled-out final word (e.g. mark's "S. Marci +; Evangelistae" above). +gregory-the-great = S. Gregorii I Papae, Conf. et Eccl. Doct. +; LT.txt:5032 (12 March). +patrick = S. Patricii Ep. et Conf. +; LT.txt:5040 (17 March). +cyril-of-jerusalem = S. Cyrilli Ep. Hierosolymitani, Conf. et Eccl. Doct. +; LT.txt:5041 (18 March). +benedict = S. Benedicti Abb. +; LT.txt:5045 (21 March). +gabriel-the-archangel = S. Gabrielis Archangeli +; LT.txt:5048 (24 March). +john-damascene = S. Ioannis Damasceni Conf. et Eccl. Doct. +; LT.txt:5051 (27 March). +john-of-capistrano = S. Ioannis de Capistrano Conf. +; LT.txt:5052 (28 March). + ; April. isidore-of-seville = S. Isidori Ep., Conf. et Eccl. Doct. ; LT.txt:5065. @@ -971,6 +1068,29 @@ peter-of-verona = S. Petri Mart. catherine-of-siena = S. Catharinae Senensis Virg. ; LT.txt:5096. +; April, continued -- commemorations, Task 5. +francis-of-paola = S. Francisci de Paula Conf. +; LT.txt:5063 (2 April). +sts-tiburtius-valerian-et-maximus-martyrs = Ss. Tiburtii, Valeriani et Maximi Mm. +; LT.txt:5080 (14 April, companion of justin). +anicetus = S. Aniceti Papae et Mart. +; LT.txt:5083 (17 April). +george = S. Georgii Mart. +; LT.txt:5089 (23 April). + +; major-litanies -- data/ef/adjustments.sexp's own `Add`, 25 April +; (RG 80/81/109(f); see that file's own header note). NOT a calendarium +; entry with its own row: the calendarium marks the day only with the +; marginal annotation "Litania Maior. -- " ahead of mark's own title (the +; same line already cited for mark above), corroborating RG 81's own "nihil +; fit in Officio" (no separate Office heading exists for this entity to +; transcribe verbatim). Name is that marginal annotation's own two words, +; not RG 80's plural "Litaniae maiores" -- transcribed, not paraphrased. +major-litanies = Litania Maior +; LT.txt:5091. "litania" occurs exactly once in the whole LT.txt corpus +; (the mark entry above shares this same line for its own, different, +; distinctive word "marci"). + ; May. joseph-the-workman = S. Ioseph Opificis Sponsi B. Mariae Virg., Conf. ; LT.txt:5102. @@ -1017,6 +1137,28 @@ mary-magdalene-de-pazzi = S. Mariae Magdalenae de Pazzis Virg. queenship-of-the-blessed-virgin-mary = B. Mariae Virg. Reginae ; LT.txt:5140. +; May, continued -- commemorations, Task 5. +sts-alexander-companions = Ss. Alexandri I Papae, Eventii et Theoduli Mm., ac S. Iuvenalis Ep. et Conf. +; LT.txt:5104 (3 May). +gordiano-and-epimacho = Ss. Gordiani et Epimachi, Mm. +; LT.txt:5112 (10 May, companion of antoninus). +boniface-martyr = S. Bonifatii Mart. +; LT.txt:5116 (14 May). Distinct from the +; unrelated boniface entry below (5 June, "S. Bonifatii Ep. et Mart." -- +; a different saint's own feast day, not a companion). +pudentiana-virginis = S. Pudentianae Virg. +; LT.txt:5125 (19 May, companion of peter-celestine). +urban-pope-and-martyr = S. Urbani I Papae et Mart. +; LT.txt:5132 (25 May, companion of gregory-vii). +eleutherius = S. Eleutherii Papae et Mart. +; LT.txt:5134 (26 May, companion of philip-neri). +john-i = S. Ioannis I Papae et Mart. +; LT.txt:5136 (27 May, companion of bede-the-venerable). +felix-i = S. Felicis I Papae et Mart. +; LT.txt:5139 (30 May). +petronilla = S. Petronillae Virg. +; LT.txt:5141 (31 May, companion of queenship-of-the-blessed-virgin-mary). + ; June. angela-merici = S. Angelae Mericiae Virg. ; LT.txt:5147. @@ -1067,6 +1209,54 @@ sts-peter-paul = Ss. Petri et Pauli App. in-commemoratione-sancti-pauli-apostoli = In Commemoratione S. Pauli Ap. ; LT.txt:5182. +; June, continued -- commemorations, Task 5. +sts-marcellinus-peter-erasmus = Ss. Marcellini, Petri atque Erasmi Ep., Mm. +; LT.txt:5148 (2 June). +sts-primus-felicianus = Ss. Primi et Feliciani Mm. +; LT.txt:5155 (9 June). +basilidus = Ss. Basilidis, Cyrini, Naboris et Nazarii, Mm. +; LT.txt:5163 (12 June, companion of john-of-san-fecundo). The calendarium +; names four martyrs on this one row; colitur's own bootstrap keeps only +; the first ("St. Basilidus", data/ef/sanctoral.sexp) under this slug -- +; the fuller Latin is transcribed here regardless (it is what the Missal +; actually prints at this line), matching that same entry's own Polish +; field, which already carries all four names in full. +vitus = Ss. Viti, Modesti atque Crescentiae Mm. +; LT.txt:5166 (15 June). Same shape as basilidus above: the calendarium +; names three martyrs, colitur's own English field keeps only "St. Vitus" +; (its Polish field again carries all three) -- transcribed in full here. +marcus-and-marcellianus = Ss. Marci et Marcelliani Mm. +; LT.txt:5170 (18 June, companion of ephrem-of-syria). +; +; sts-gervasius-and-protasius is a genuine gap IN LT.TXT ITSELF, not in the +; Missal: this 2006 web capture's calendarium table silently drops several +; commemorations that both photographic scans (missale-romanum-1962.pdf, +; Missale Romanum 1962_text.pdf) carry -- confirmed independently by this +; project's own register (docs/research/rules-register.md's "romanus" +; audit, 2026-08-12: "where the transcription and a scan disagree, the +; scan wins, always... only a scan's own absence counts as evidence [a +; commemoration] does not exist"). Six of the seven dropped commemorations +; that audit found are exactly six of this task's own missing slugs (19 +; June, 12 July, 7/9/14 August, 30 August); each is cited to +; docs/research/scan1.txt below instead of LT.txt, since LT.txt's own text +; is silent at the relevant line and the automated checker has nothing to +; verify there. `scan1.txt` is the same primary-source photographic-scan +; OCR this project already cites elsewhere for General Rubrics text +; outside LT.txt's own coverage (e.g. rogation-wednesday, below). +sts-gervasius-and-protasius = Ss. Gervasii et Protasii Mm. +; scan1.txt:2849 ("Commemoratio Ss. Gervasii et Protasii Mm.", 19 June, +; companion of julia-of-falconieri -- LT.txt's own day-19 row, line 5171, +; is julia-of-falconieri's "S. Iulianae de Falconeriis Virg."; this +; companion commemoration is simply absent from that row, the same LT.txt +; gap the note immediately above describes). Not an LT.txt: citation. +silverius = S. Silverii Papae et Mart. +; LT.txt:5172 (20 June). +commemoration-of-st-peter = S. Petri Ap. +; LT.txt:5183 (30 June). RG 110(a)'s own companion of +; in-commemoratione-sancti-pauli-apostoli immediately above -- "Com. S. +; Petri Ap." directly under that day's own row, the identical shape as +; peter (25 January) and paul (22 February) above. + ; July. precious-blood-of-our-lord-jesus-christ = Pretiosissimi Sanguinis D. N. I. C. ; LT.txt:5191. @@ -1111,6 +1301,49 @@ martha = S. Marthae Virg. ignatius-loyola = S. Ignatii Conf. ; LT.txt:5232. +; July, continued -- commemorations, Task 5. +processus-and-martinian = Ss. Processi et Martiniani Mm. +; LT.txt:5193 (2 July, companion of visitation-of-the-blessed-virgin-mary). +pius-i = S. Pii I Papae et Mart. +; LT.txt:5205 (11 July). +naboris-et-felicis = Ss. Naboris et Felicis Mm. +; scan1.txt:2888 ("Commemoratio Ss. Naboris et Felicis Mm.", 12 July, +; companion of john-gualbert). Not an LT.txt: citation -- LT.txt's own row +; for 12 July is silent here (see the note under sts-gervasius-and- +; protasius, June, above); the index confirms the date independently +; (scan1.txt:54594, "Naboris et Felicis Mm., 12 iulii"). +our-lady-of-mt-carmel = B. Mariae Virg. de Monte Carmelo +; LT.txt:5210 (16 July). +alexis = S. Alexii Conf. +; LT.txt:5211 (17 July). +symphorosa-and-sons = Ss. Symphorosae et septem eius Filiorum Mm. +; LT.txt:5213 (18 July, companion of camillus-de-lellis). +margaret = S. Margaritae Virg. et Mart. +; LT.txt:5216 (20 July, companion of jerome-emiliani). +praxedis-virginis = S. Praxedis Virg. +; scan1.txt:2901 ("Commemoratio S. Praxedis Virg.", 21 July, companion of +; laurence-of-brindisi). Not an "LT.txt:" citation, deliberately: line +; 5218 of that transcription prints this same commemoration but spells it +; "Præxedis" -- confirmed against BOTH photographic scans +; (scan1.txt:2901/33589/54645, scan2.txt:37551/61253) that the true +; spelling carries no diphthong here at all, "Praxedis" -- an LT.txt-only +; OCR artifact, not a genuine ligature this file's usual æ->ae rule would +; produce the right answer for; per the register's own rule (see the note +; under sts-gervasius-and-protasius, June, above), the scan wins and that +; line is not cited in "LT.txt:" form. +liborii = S. Liborii Ep. et Conf. +; LT.txt:5221 (23 July, companion of apollinaris). +christina = S. Christinae Virg. et Mart. +; LT.txt:5222 (24 July). +christopher = S. Christophori Mart. +; LT.txt:5224 (25 July, companion of james-the-greater). +pantaleon = S. Pantaleonis Mart. +; LT.txt:5226 (27 July). +felicis-simplicii-faustini-et-beatricis = Ss. Felicis, Simplicii, Faustini et Beatricis Mm. +; LT.txt:5230 (29 July, companion of martha). +sts-abdon-sennen = Ss. Abdon et Sennen Mm. +; LT.txt:5231 (30 July). + ; August. alphonsus-liguori = S. Alfonsi Mariae de Ligorio Ep., Conf. et Eccl. Doct. ; LT.txt:5239. @@ -1167,6 +1400,58 @@ rose-of-lima = S. Rosae Limanae Virg. raymond-nonnatus = S. Raymundi Nonnati Conf. ; LT.txt:5277. +; August, continued -- commemorations, Task 5. +holy-machabees = Ss. Machabaeorum Mm. +; LT.txt:5238 (1 August). No companion: this is the ONLY entry the +; calendarium prints for 1 August -- unlike every other entry in this +; block, a bare commemoration with no separate named feast row above it. +stephen-i-pope-and-martyr = S. Stephani I Papae et Mart. +; LT.txt:5240 (2 August, companion of alphonsus-liguori). +pope-sixtus-ii-felicissimus-and-agapitus-martyrs = Ss. Xysti II Papae, Felicissimi et Agapiti Mm. +; LT.txt:5248 (6 August, companion of transfiguration-of-our-lord). +donatus = S. Donati Ep. et Mart. +; scan1.txt:2936 ("Commemoratio S. Donati Ep. et Mart.", 7 August, +; companion of cajetan). Not an LT.txt: citation -- LT.txt's own row for 7 +; August is silent here (see the note under sts-gervasius-and-protasius, +; June, above). +cyriacus-largus-and-smaragdus-martyrs = Ss. Cyriaci, Largi et Smaragdi Mm. +; LT.txt:5251 (8 August, companion of john-mary-vianney). +romanus = S. Romani Mart. +; scan1.txt:2939 ("Vigilia, III classis, Commemoratio S. Romani Mart.", +; 9 August, companion of vigil-of-st-lawrence). Not an LT.txt: citation -- +; LT.txt's own row for 9 August reads only "Vigilia, III classis." (see +; the note under sts-gervasius-and-protasius, June, above; this exact +; date is also the register's own worked example for that rule, +; rules-register.md's "romanus" item -- CONFIRMED GENUINE against both +; photographic scans, not a spurious entry). +sts-tiburtius-susanna = Ss. Tiburtii et Susannae Virg., Mm. +; LT.txt:5254 (11 August). +sts-hippolytus-cassian = Ss. Hippolyti et Cassiani Mm. +; LT.txt:5256 (13 August). +eusebius-confessor = S. Eusebii Conf. +; scan1.txt:2944 ("Vigilia, II classis, Commemoratio S. Eusebii Conf.", +; 14 August, companion of assumption-of-the-blessed-virgin-mary's own +; vigil). Not an LT.txt: citation -- LT.txt's own row for 14 August reads +; only "Vigilia, II classis." (see the note under sts-gervasius-and- +; protasius, June, above). Distinct from the unrelated eusebius entry +; below (16 December, "S. Eusebii Ep. et Mart." -- a different saint's own +; feast day). +agapitus = S. Agapiti Mart. +; LT.txt:5261 (18 August). +sts-timothy-hippolytus-and-symphorianus-martyrs = Ss. Timothei, Hippolyti et Symphoriani Mm. +; LT.txt:5266 (22 August, companion of immaculate-heart-of-mary). +zephyrinus = S. Zephyrini Papae et Mart. +; LT.txt:5270 (26 August). +hermes = S. Hermetis Mart. +; LT.txt:5273 (28 August, companion of augustine). +sabina = S. Sabinae Mart. +; LT.txt:5275 (29 August, companion of beheading-of-st-john-the-baptist). +sts-felix-and-adauctus = Ss. Felicis et Adaucti Mm. +; scan1.txt:2967 ("Commemoratio Ss. Felicis et Adaucti Mm.", 30 August, +; companion of rose-of-lima). Not an LT.txt: citation -- LT.txt's own row +; for 30 August is silent here (see the note under sts-gervasius-and- +; protasius, June, above). + ; September. stephen-of-hungary = S. Stephani Regis Conf. ; LT.txt:5289. @@ -1205,6 +1490,36 @@ dedication-of-st-michael-the-archangel = In Dedicatione S. Michaelis Archangeli jerome = S. Hieronymi Presbyteri, Conf. et Eccl. Doct. ; LT.txt:5322. +; September, continued -- commemorations, Task 5. +giles = S. Aegidii Abb. +; LT.txt:5287 (1 September). Bare, like twelve-holy-brothers-martyrs +; immediately below -- both share the day, neither has a separate named +; host feast. +twelve-holy-brothers-martyrs = Ss. Duodecim Fratrum Mm. +; LT.txt:5288 (1 September, second entry of the same day). +hadriani = S. Hadriani Mart. +; LT.txt:5296 (8 September, companion of nativity-of-the-blessed-virgin-mary). +gorgonius = S. Gorgonii Mart. +; LT.txt:5297 (9 September). +sts-protus-hyacinth = Ss. Proti et Hyacinthi Mm. +; LT.txt:5299 (11 September). +nicomedes = S. Nicomedis Mart. +; LT.txt:5304 (15 September, companion of seven-sorrows-of-the-blessed-virgin-mary). +sts-euphemia-lucy-and-geminianus = Ss. Euphemiae Virg., Luciae et Geminiani Mm. +; LT.txt:5306 (16 September, companion of sts-cornelius-cyprian). +stigmata-of-st-francis = Impressionis sacrorum Stigmatum S. Francisci Conf. +; LT.txt:5307 (17 September). +sts-eustace-companions = Ss. Eustachii et Sociorum Mm. +; LT.txt:5310 (20 September). +maurice-and-companions-martyrs = Ss. Mauritii et Sociorum Mm. +; LT.txt:5313 (22 September, companion of thomas-of-villanova). +thecla = S. Theclae Virg. et Mart. +; LT.txt:5315 (23 September, companion of linus). +our-lady-of-ransom = B. Mariae Virg. a Mercede +; LT.txt:5316 (24 September). +sts-cyprian-justina = Ss. Cypriani et Iustinae Virg., Mm. +; LT.txt:5318 (26 September). + ; October. holy-guardian-angels = Ss. Angelorum Custodum ; LT.txt:5334. @@ -1247,6 +1562,31 @@ raphael-the-archangel = S. Raphaelis Archangeli sts-simon-jude = Ss. Simeonis et Iudae App. ; LT.txt:5364. +; October, continued -- commemorations, Task 5. +remigius = S. Remigii Ep. et Conf. +; LT.txt:5333 (1 October). +placid-companions = Ss. Placidi et Sociorum Mm. +; LT.txt:5337 (5 October). +mark-i = S. Marci Papae et Conf. +; LT.txt:5340 (7 October, companion of our-lady-of-the-rosary). Distinct +; from the unrelated mark entry above (25 April, "S. Marci Evangelistae" -- +; a different saint's own feast day, not a companion). +sergio-baccho-marcello-and-apulejo-martyrs = Ss. Sergii, Bacchi, Marcelli et Apuleii Mm. +; LT.txt:5342 (8 October, companion of bridget-of-sweden). +dionysius-and-companions = Ss. Dionysii Ep., Rustici et Eleutherii Mm. +; LT.txt:5344 (9 October, companion of john-leonardi). +hilarion = S. Hilarionis Abb. +; LT.txt:5356 (21 October). Bare, like ursula-and-companions immediately +; below -- both share the day, neither has a separate named host feast. +ursula-and-companions = Ss. Ursulae et Sociarum Vv. et Mm. +; LT.txt:5357 (21 October, second entry of the same day). Source prints a +; stray mid-phrase capital "Et" here ("Vv. Et Mm."); lowercased per this +; file's own header note on that exact typographic inconsistency. +sts-chrysanthus-daria = Ss. Chrysanthi et Dariae Mm. +; LT.txt:5361 (25 October). +evaristus = S. Evaristi Papae et Mart. +; LT.txt:5362 (26 October). + ; November. all-saints = Omnium Sanctorum ; LT.txt:5378. @@ -1293,6 +1633,30 @@ sylvester = S. Silvestri Abb. andrew = S. Andreae Apostoli ; LT.txt:5418. +; November, continued -- commemorations, Task 5. +sts-vitalis-and-agricola-martyrs = Ss. Vitalis et Agricolae Mm. +; LT.txt:5382 (4 November, companion of charles-borromeo). +four-holy-crowned-martyrs = Ss. Quatuor Coronatorum Mm. +; LT.txt:5386 (8 November). +theodore = S. Theodori Mart. +; LT.txt:5388 (9 November, companion of dedication-of-the-archbasilica-of-our-holy-savior). +sts-tryphonis-respicii-et-nymphae = Ss. Tryphonis, Respicii et Nymphae Virg., Mm. +; LT.txt:5390 (10 November, companion of andrew-avellino). +menna = S. Mennae Mart. +; LT.txt:5392 (11 November, companion of martin-of-tours). +pontian = S. Pontiani Papae et Mart. +; LT.txt:5401 (19 November, companion of elizabeth-of-hungary). +felicity = S. Felicitatis Mart. +; LT.txt:5406 (23 November, companion of clement-i). +chrysogonus = S. Chrysogoni Mart. +; LT.txt:5408 (24 November, companion of john-of-the-cross). +peter-of-alexandria = S. Petri Alexandrini Ep. et Mart. +; LT.txt:5414 (26 November, companion of sylvester -- the Abbot's own +; entry above, "S. Silvestri Abb.", not the Pope of the same name below, +; 31 December). +saturninus = S. Saturnini Mart. +; LT.txt:5417 (29 November). + ; December. vivian = S. Bibianae Virg. et Mart. ; LT.txt:5425. @@ -1322,3 +1686,58 @@ john-the-evangelist = S. Ioannis Ap. et Ev. ; LT.txt:5456. holy-innocents = Ss. Innocentium Mm. ; LT.txt:5458. + +; December, continued -- commemorations, Task 5. +barbara = S. Barbarae Virg. et Mart. +; LT.txt:5428 (4 December, companion of peter-chrysologus). A genuine DATA +; GAP the same shape as the "ef-rebootstrap" entries above (agnes-secundo, +; boniface-martyr, eusebius-confessor, evaristus, theodore): both scans +; and this calendarium carry her, but she was absent from +; data/ef/sanctoral.sexp's own bootstrap and from lectio's upstream data +; -- hand-authored in data/ef/adjustments.sexp's own `Add barbara` +; directive (see that file's header note), not a sanctoral.sexp entry. +sabbas = S. Sabae Abb. +; LT.txt:5429 (5 December). +melchiades = S. Melchiadis Papae et Mart. +; LT.txt:5434 (10 December). +thomas-becket = S. Thomae Ep. et Mart. +; LT.txt:5461 (29 December, companion of the fifth day of the Christmas +; octave -- ef-nativity-octave-day-5 above, not a sanctoral host feast). +silvester = S. Silvestri I Papae et Conf. +; LT.txt:5464 (31 December, companion of the seventh day of the Christmas +; octave -- ef-nativity-octave-day-7 above). Distinct from the unrelated +; sylvester entry above (26 November, "S. Silvestri Abb." -- a different +; saint's own feast day, spelled with a "y" in this file's own key to keep +; the two apart, lectio's own naming choice). + +; --------------------------------------------------------------------- +; MOVABLE, hand-authored additions -- data/ef/adjustments.sexp's own `Add` +; directives with an Easter_offset date, not a Fixed one, so neither has a +; (month, day) calendarium row of its own to cite by line number. Both +; already carry their own `la` name in adjustments.sexp; reused verbatim +; here, the same "engine and this table cannot disagree" discipline the +; Triduum and BVM-Saturday temporal entries already follow (see the +; header note above [celebration]'s temporal half). +; --------------------------------------------------------------------- +commemoration-of-the-seven-sorrows = Commemoratio septem Dolorum B. Mariae Virginis +; Cited here as line 5056, not an "LT.txt:" claim: that line prints +; "Feria VI post dominicam I Passionis: Commemoratio septem Dolorum B. +; Mariæ Virg." -- the calendarium's own foot-of-March note for this +; movable commemoration, Easter-9 -- but abbreviates "Virg." where this +; entry (reused verbatim from data/ef/adjustments.sexp's own `Add +; commemoration-of-the-seven-sorrows`, spelled out as "Virginis") does +; not; the automated checker cannot confirm an abbreviated occurrence +; against a spelled-out claim (the same Corpus Christi trade-off disclosed +; above), even though the line is real and was verified by hand. +rogation-wednesday = Feria IV Rogationum +; Not an LT.txt: citation. data/ef/adjustments.sexp's own header cites +; scan1.txt:20495-20497, RG 87/89 (Caput X): "Et in minoribus ante +; Ascensionem: feria II Rogationum, statio ad S. Mariam maiorem; feria +; III, statio ad S. Ioannem in Laterano; feria IV, statio ad S. Petrum" -- +; this day's own name, "feria IV [Rogationum]", drawn directly from that +; three-day list. Compare ef-rogation-monday/-tuesday above (PATTERN, +; "Feria II/III in Litaniis Minoribus") -- a DIFFERENT, colitur-constructed +; phrasing for the two days LT.txt itself is silent on; this one is not +; PATTERN, because the Missal's own text for this specific day was found +; (Wednesday's own station, "ad S. Petrum") and is transcribed, not built +; by pattern. diff --git a/test/test_lang_coverage.ml b/test/test_lang_coverage.ml index 96a3383..34758b2 100644 --- a/test/test_lang_coverage.ml +++ b/test/test_lang_coverage.ml @@ -20,7 +20,27 @@ let la () = 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. *) + exceptions. + + Task 5 CLOSED A SECOND BLIND SPOT: this test used to walk only the + OBSERVED day (one Celebration.t per date). A Liturgical_day.t also + carries a whole second stream of slugs -- commemorations (kept when the + observed day does not fully displace a losing candidate, RG 108-111) and + transfers (an impeded I/II-class feast moved to a later date, RG 96-98). + The ordo booklet printed raw slugs ("Commemoratio canute-martyr", + "Commemoratio maur-abbot", "Commemoratio peter") precisely because + nothing here ever looked at [commemorations], [transferred_in] or + [transferred_out] -- the test asserted coverage of what it happened to + WALK, not of what the engine can EMIT. Now walks all four fields, so any + slug reachable through any of them is in scope. *) +let slugs_of_day (d : (Rite_ef.Vocab_ef.season, Rite_ef.Vocab_ef.rank) Colitur_kernel.Liturgical_day.t) = + let open Colitur_kernel in + let slug (c : _ Celebration.t) = Slug.to_string c.Celebration.slug in + (slug d.Liturgical_day.observed) + :: List.map (fun (c, _priv) -> slug c) d.Liturgical_day.commemorations + @ (match d.Liturgical_day.transferred_in with None -> [] | Some c -> [ slug c ]) + @ List.map (fun (c, _date) -> slug c) d.Liturgical_day.transferred_out + 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 @@ -28,19 +48,18 @@ let test_every_slug_has_a_latin_name () = let missing = ref [] in for y = 2020 to 2045 do Array.iter - (fun (d : (Rite_ef.Vocab_ef.season, Rite_ef.Vocab_ef.rank) Colitur_kernel.Liturgical_day.t) -> - let slug = - Colitur_kernel.Slug.to_string - d.Colitur_kernel.Liturgical_day.observed.Colitur_kernel.Celebration.slug - in - (* A miss returns the key itself, so name = slug means "no entry". *) - if L.celebration t slug = slug && not (List.mem slug !missing) then - missing := slug :: !missing) + (fun d -> + List.iter + (fun slug -> + (* A miss returns the key itself, so name = slug means "no entry". *) + if L.celebration t slug = slug && not (List.mem slug !missing) then + missing := slug :: !missing) + (slugs_of_day d)) (Colitur_kernel.Calendar.year ctx layer y) done; if !missing <> [] then - Alcotest.failf "%d slugs have no Latin name, e.g. %s" (List.length !missing) - (String.concat ", " (List.filteri (fun i _ -> i < 5) !missing)) + Alcotest.failf "%d slugs have no Latin name: %s" (List.length !missing) + (String.concat ", " (List.sort compare !missing)) let test_vocabularies_are_complete () = let t = la () in -- cgit v1.3