From 45bcbde502e07ad73b96039fcbb62471a3c94781 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Wed, 19 Aug 2026 13:34:53 +0200 Subject: feat(naming): the language table Maps strings to strings and nothing else -- no calendars, no dates, no filesystem. That is what lets every command use it without the kernel learning about presentation. Every lookup is total, and a miss returns THE KEY rather than the empty string. A partial translation is therefore usable from its first line, and the fully-degraded case is exactly today's output (bare slugs) rather than a blank page. --raw is a real identity table, not a special case threaded through every call site: one value the whole program passes around. Reuses Overlay_ini's INI reader rather than growing a second one that would drift in its comment, quoting and trimming rules; parse_sections is exposed in the .mli for that, with no behaviour change. Fixes one defect found while running the brief's own tests rather than transcribing them blind: weekday's internal lookup key is an English day-name word (month's is already the numeral string), so on a miss it echoed that word instead of the documented numeral, breaking both the 0=Sunday convention and Lang.raw's own identity contract for weekday. weekday/month now fall back to string_of_int n directly on a miss instead of through get's generic echo-the-search-key path; month is byte-identical since its key already equals string_of_int n. --- test/dune | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/dune') diff --git a/test/dune b/test/dune index 8d0c551..b9cc2a7 100644 --- a/test/dune +++ b/test/dune @@ -1,6 +1,6 @@ (test (name test_colitur) - (libraries colitur_kernel colitur_render rite_ef alcotest qcheck qcheck-alcotest sexplib) + (libraries colitur_kernel colitur_naming colitur_render rite_ef alcotest qcheck qcheck-alcotest sexplib) (deps ../data/ef/sanctoral.sexp ../data/ef/adjustments.sexp -- cgit v1.3 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 +++++++++++++++++++++++++++++++++++++++++++++ test/dune | 1 + test/test_colitur.ml | 1 + test/test_lang_coverage.ml | 73 +++++ 4 files changed, 792 insertions(+) create mode 100644 lang/la.ini create mode 100644 test/test_lang_coverage.ml (limited to 'test/dune') 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 diff --git a/test/dune b/test/dune index b9cc2a7..6e2ac87 100644 --- a/test/dune +++ b/test/dune @@ -4,6 +4,7 @@ (deps ../data/ef/sanctoral.sexp ../data/ef/adjustments.sexp + ../lang/la.ini ../data/ef/expected-divergences.sexp ../data/ef/expected-divergences-missalemeum.sexp ../data/ef/lectionary.sexp diff --git a/test/test_colitur.ml b/test/test_colitur.ml index 1c445a6..1bdd220 100644 --- a/test/test_colitur.ml +++ b/test/test_colitur.ml @@ -3,6 +3,7 @@ let () = Alcotest.run "colitur" [ Test_date.suite; Test_computus.suite; Test_colour.suite; Test_slug.suite; Test_names.suite; Test_lang.suite; + Test_lang_coverage.suite; Test_config.suite; Test_overlay.suite; Test_overlay_ini.suite; Test_temporal_ef.suite; Test_validate.suite; Test_precedence.suite; Test_calendar.suite; Test_precedence_ef.suite; Test_sanctoral_ef.suite; Test_rite_ef.suite; diff --git a/test/test_lang_coverage.ml b/test/test_lang_coverage.ml new file mode 100644 index 0000000..d72484f --- /dev/null +++ b/test/test_lang_coverage.ml @@ -0,0 +1,73 @@ +module L = Colitur_naming.Lang + +let read path = + let ic = open_in_bin path in + let s = really_input_string ic (in_channel_length ic) in + close_in ic; + s + +let la () = + match L.of_string (read "../lang/la.ini") with + | 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. + + 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 () = + 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 + 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 + is_temporal_slug slug + && 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 + Alcotest.failf "%d slugs have no Latin name, e.g. %s" (List.length !missing) + (String.concat ", " (List.filteri (fun i _ -> i < 5) !missing)) + +let test_vocabularies_are_complete () = + let t = la () in + List.iter + (fun s -> if L.season t s = s then Alcotest.failf "no Latin season name for %S" s) + [ "advent"; "christmastide"; "time-after-epiphany"; "septuagesima"; "lent"; + "passiontide"; "paschaltide"; "time-after-pentecost" ]; + List.iter + (fun r -> if L.rank t r = r then Alcotest.failf "no Latin rank name for %S" r) + [ "class-1"; "class-2"; "class-3"; "class-4" ]; + List.iter + (fun c -> if L.colour t c = c then Alcotest.failf "no Latin colour name for %S" c) + [ "white"; "red"; "green"; "violet"; "rose"; "black" ]; + for n = 0 to 6 do + if L.weekday t n = string_of_int n then Alcotest.failf "no Latin weekday for %d" n + done; + for n = 1 to 12 do + if L.month t n = string_of_int n then Alcotest.failf "no Latin month for %d" n + done + +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 ] ) -- 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 'test/dune') 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