summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/ef/expected-divergences-fiuv.sexp26
-rw-r--r--test/dune2
-rw-r--r--test/fixtures/fiuv-ordo-2025-2026.sexp1558
-rw-r--r--test/test_colitur.ml2
-rw-r--r--test/test_fiuv_ordo.ml268
-rw-r--r--tools/dune14
-rw-r--r--tools/extract_fiuv_ordo.ml637
7 files changed, 2506 insertions, 1 deletions
diff --git a/data/ef/expected-divergences-fiuv.sexp b/data/ef/expected-divergences-fiuv.sexp
new file mode 100644
index 0000000..5506e46
--- /dev/null
+++ b/data/ef/expected-divergences-fiuv.sexp
@@ -0,0 +1,26 @@
+; data/ef/expected-divergences-fiuv.sexp -- Witnesses task
+; (2026-08-22-colitur-celebrant-rubrics-phase1)'s cited allow-list for the
+; FIUV Ordo comparison (test/test_fiuv_ordo.ml), fixture window
+; 2025-11-27..2026-12-31.
+;
+; A SEPARATE file from data/ef/expected-divergences-lms.sexp (the LMS
+; allow-list, also third-party but England & Wales diocesan and single-
+; compiler across its three editions), data/ef/expected-divergences.sexp
+; (the lectio allow-list) and data/ef/expected-divergences-missalemeum.sexp
+; (the missalemeum/Divinum-Officium-lineage allow-list): the FIUV Ordo is
+; a FOURTH, independent lineage -- universal, not diocesan, compiled by a
+; different person (Joseph Shaw) than the LMS editions (Peter Day-Milne).
+;
+; [verdict] names which side this task's own primary-source research
+; backs, the SAME convention every other allow-list file in this project
+; uses: not always "colitur".
+;
+; Empty as of this task: the Creed comparison found no unexplained
+; divergence anywhere in the 400-day window (399 comparable days, Holy
+; Saturday excluded per test_creed_coverage -- see that test's own
+; citation). Kept as a file, not deleted, on the same footing as
+; expected-divergences-lms.sexp's own empty-but-live state after L1's
+; closure: the machinery that would explain a FUTURE divergence needs
+; somewhere to live, and an empty allow-list with a live "every entry
+; must be used" check is a real invariant worth keeping, not a
+; formality.
diff --git a/test/dune b/test/dune
index 17865c4..374fa8f 100644
--- a/test/dune
+++ b/test/dune
@@ -10,6 +10,7 @@
../data/ef/expected-divergences.sexp
../data/ef/expected-divergences-missalemeum.sexp
../data/ef/expected-divergences-lms.sexp
+ ../data/ef/expected-divergences-fiuv.sexp
../data/ef/lectionary.sexp
../data/ef/commons.sexp
../data/ef/examples/diocesan-example.sexp
@@ -20,6 +21,7 @@
fixtures/lms-ordo-2023-2024.sexp
fixtures/lms-ordo-2024-2025.sexp
fixtures/lms-ordo-2025-2026.sexp
+ fixtures/fiuv-ordo-2025-2026.sexp
../templates/ef/ordo.tex
../templates/ef/ordo.ms
../templates/ef/ordo.html
diff --git a/test/fixtures/fiuv-ordo-2025-2026.sexp b/test/fixtures/fiuv-ordo-2025-2026.sexp
new file mode 100644
index 0000000..7b72ca3
--- /dev/null
+++ b/test/fixtures/fiuv-ordo-2025-2026.sexp
@@ -0,0 +1,1558 @@
+; test/fixtures/fiuv-ordo-2025-2026.sexp -- Witnesses task (2026-08-22-colitur-
+; celebrant-rubrics-phase1)'s SEVENTH validation layer, and the first
+; UNIVERSAL (non-diocesan), SECOND-COMPILER witness: the FIUV (Foederatio
+; Internationalis Una Voce) Ordo, compiled independently of the Latin Mass
+; Society's own three editions (test/test_lms_ordo.ml) -- see
+; docs/research/ordo/PROVENANCE-ordo-corpus.md for the full four-reasons
+; account of why this source is the more valuable of the two newly-
+; acquired ones.
+;
+; Generator: tools/extract_fiuv_ordo.ml -- do not hand-edit; re-run
+; against a fresh pdftotext dump and commit the diff instead.
+;
+; Source: "Ordo Divini Officii recitandi sacrique peragendi secundum
+; antiquam Ritus Romani formam pro anno Domini 2026", Foederatio
+; Internationalis Una Voce, compiled by Joseph Shaw (Praefatio signed
+; "Joseph Shaw, President", Feast of the Nativity of Our Lady [8 Sept]
+; 2025) -- title page and Praefatio, verified directly against the PDF's
+; own extracted text. 2025 is stated as the Federation's own 60th
+; anniversary year.
+; PDF metadata: Creator "TeX", Producer "pdfTeX-1.40.22", CreationDate
+; 2025-11-08, 128 pages.
+; URL: identified via web search as
+; https://lms.org.uk/sites/default/files/u5374/fiuv_ordo_2025-2026_1.1_a5_format.pdf
+; (hosted by the Latin Mass Society's own site alongside its own three
+; editions -- Joseph Shaw is both FIUV President and LMS Chairman, which
+; plausibly also explains why this PDF's own trailing malformed entry
+; (see COVERAGE below) is structurally identical to the LMS PDFs' own,
+; despite the two being compiled by different people); NOT independently
+; re-downloaded and byte-compared in this session -- recorded honestly
+; rather than presented as verified, the same discipline the LMS
+; fixtures' own headers use.
+; The local PDF (docs/research/ordo/fiuv-ordo-2025-2026.pdf) is gitignored (CLAUDE.md: "docs/
+; is gitignored"), so this header, not git, is this fixture's only record
+; of where it came from.
+; SHA-256 of docs/research/ordo/fiuv-ordo-2025-2026.pdf: 4335cc112b5fb6ec4d9511465ccc9381bed9b6056a56bc82dbaa5b2d85d0d855
+; Extracted (UTC): 2026-08-22
+; Exact commands:
+; pdftotext -layout docs/research/ordo/fiuv-ordo-2025-2026.pdf /tmp/fiuv.txt
+; dune exec tools/extract_fiuv_ordo.exe -- /tmp/fiuv.txt \
+; docs/research/ordo/fiuv-ordo-2025-2026.pdf test/fixtures/fiuv-ordo-2025-2026.sexp
+;
+; COVERAGE: 400 day-rows, 2025-11-27 through 2026-12-31. Starts at the book's own first
+; real content line ("November MMXXV", the FIRST month header found with
+; a parseable Roman-numeral year -- used as this parser's sole date
+; anchor, see the tool's own header on why no LATER header's year is ever
+; read, the second one being a publisher typo, "December MMXV" for 2025).
+; Stops before a malformed trailing entry, structurally the SAME artefact
+; found in all three LMS editions (a stray, mislabelled duplicate of the
+; fixture's own already-extracted 1 January row, headed "1st Jan / 2025."
+; -- see extract_lms_ordo.ml's own COVERAGE section for the fuller
+; account of this shared publisher-side quirk).
+;
+; CHARACTERISATION FINDINGS (non-negotiable per the task brief -- the
+; extraordinaryform.org Ordo silently omitted St Lawrence's vigil on
+; EVERY date it covered, which nearly produced a false corroboration
+; during the RG 33 work; this Ordo was probed with the same discipline
+; before a single divergence was adjudicated):
+;
+; 1. UNIVERSAL, not diocesan: unlike the three LMS editions (which had to
+; exclude diocesan variants from every comparison, quantified in each
+; of their own fixture headers), this Ordo carries ONE block per day,
+; always. There is no [has_diocesan_variant] field in this fixture's
+; own [row] at all -- there is nothing to exclude.
+;
+; 2. OPPOSITE-PREDICTION PROBES against Rite_ef.Rubrics_ef.creed (RG
+; 475-476), RE-CHECKED BY THIS TOOL RUN against its own extracted
+; [rows] before this header was even written -- a failed probe is a
+; hard [die], never a printed claim:
+; 2025-11-30 (Advent Sunday, I class, RG 475(a)) -> TRUE
+; 2025-12-01 (ordinary Advent feria, III class, RG 476(b)/(d)) -> FALSE
+; 2025-12-26 (St Stephen, II class, inside the Nativity octave, RG 475(d)) -> TRUE
+; 2026-08-10 (St Laurence, II class martyr, no Lord/BVM/apostle clause applies, RG 476(b)) -> FALSE
+; 2026-08-15 (the Assumption, I class, RG 475(b)) -> TRUE
+; All 5 predictions confirmed, both directions -- this source is
+; discriminating, not a constant, on the Creed.
+;
+; 3. THE SUBSTRING TRAP this parser defends against, found live in this
+; corpus: "Gloria" is also the first word of "Gloria Patri" (the psalm
+; doxology), which can appear INSIDE the very Mass clause being
+; scanned (Good Friday, 3 April 2026: "Missa pr., (omittuntur ps.
+; Iudica me et Gloria Patri), Gloria, sine Credo, praef. comm." -- the
+; real, standalone Gloria mention follows immediately after). See
+; [find_word]'s own citation.
+;
+; 4. RAW SUBSTRING COUNTS measured against this session's own pdftotext
+; dump, for comparison against the task brief's own figures (328
+; Gloria / 132 sine Gloria / 119 Credo / 260 sine Credo, 262 Te Deum):
+; "sine Gloria" 132 (EXACT match), "sine Credo" 260 (EXACT match), raw
+; "Te Deum" substring 262 (EXACT match, includes negated occurrences
+; as substring hits -- 42 of them are "non dicitur Te Deum"). Raw
+; "Gloria"/"Credo" substring totals (494/411) do NOT match the brief's
+; implied positive totals (328/119) even after subtracting the 25
+; "Gloria Patri" occurrences (469, still 9 over) -- not chased further
+; here; this extractor's own token-scoped, Missa-clause-bounded counts
+; below are what this fixture actually asserts, not a forced match to
+; the brief's approximate figures.
+;
+; MEASURED DISTRIBUTION (this extraction, not the brief's figures): Gloria
+; true=269 false=130 unresolved=1; Credo true=116 false=283 unresolved=1;
+; Te Deum true=231 false=42 unresolved=127.
+(((date 2025-11-27) (class_ ("IV cl."))
+ (title "Vir Feria V post Dom. XXIV & Ultima post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2025-11-28) (class_ ("IV cl."))
+ (title "Vir Feria VI post Dom. XXIV & Ultima post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2025-11-29) (class_ ("IV cl."))
+ (title "Alb Sabb. S. Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("BMV Et te in Veneratione \226\128\147")))
+ ((date 2025-11-30) (class_ ("I cl."))
+ (title "Viol DOM. I ADVENTUS, De ea,") (te_deum (true)) (gloria (false))
+ (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2025-12-01) (class_ ("III cl."))
+ (title "Viol Feria II post Dom. I Adventus, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2025-12-02) (class_ ("III cl."))
+ (title "Rub Feria III. S Bibianae Virg. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus. AD")))
+ ((date 2025-12-03) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria IV. S Francisci Xavierii Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. AD")))
+ ((date 2025-12-04) (class_ ("III cl."))
+ (title "Alb Feria V. S Petri Chrysologi Ep., Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef
+ ("comm. \226\128\147 Vel (sec. decretum \194\171Cum sanct.\194\187) Missa S Barbarae Virg. et Mart. (rub.) Loquebar de testimoniis tuis, Gloria, comm. 1\194\170 Feriae, comm. 2\194\170 S Petri Chrysologi Ep., Conf. et Eccl. Doct., praef. comm. vel de Martyribus. AD")))
+ ((date 2025-12-05) (class_ ("III cl."))
+ (title "Viol Feria VI post Dom. I Adventus, De ea,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef ("comm. Feria VI prima in mense.")))
+ ((date 2025-12-06) (class_ ("III cl. (Priv.)"))
+ (title "Alb Sabb. S Nicolai Ep. et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. Sabbatum primum in mense. I")))
+ ((date 2025-12-07) (class_ ("I cl."))
+ (title "Viol DOM. II ADVENTUS, De ea,") (te_deum (true)) (gloria (false))
+ (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2025-12-08) (class_ ("I cl."))
+ (title "Alb Feria II. IN CONCEPTIONE IMMACULATA B. MARIAE VIRGINIS,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("BMV Et te in Conceptione Immaculata. AD")))
+ ((date 2025-12-09) (class_ ("III cl."))
+ (title "Viol Feria III post Dom. II Adventus, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2025-12-10) (class_ ("III cl."))
+ (title "Viol Feria IV post Dom. II Adventus, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2025-12-11) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria V. S Damasi I Papae et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. AD")))
+ ((date 2025-12-12) (class_ ("III cl."))
+ (title "Viol Feria VI post Dom. II Adventus, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2025-12-13) (class_ ("III cl. (Priv.)"))
+ (title "Rub Sabb. S Luciae Virg. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus. I")))
+ ((date 2025-12-14) (class_ ("I cl."))
+ (title "Viol/ DOM. III ADVENTUS (GAUDETE), De ea,") (te_deum (true))
+ (gloria (false)) (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2025-12-15) (class_ ("III cl."))
+ (title "Viol Feria II post Dom. III Adventus (Gaudete), De ea,")
+ (te_deum ()) (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2025-12-16) (class_ ("III cl."))
+ (title "Alb Feria III. S Eusebii Ep. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. AD")))
+ ((date 2025-12-17) (class_ ("II cl."))
+ (title "Viol FERIA IV QUATTUOR TEMP., De ea,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef ("comm.\226\128\147 Quoad Flectamus genua vide RM 440.")))
+ ((date 2025-12-18) (class_ ("II cl."))
+ (title "Viol FERIA V POST DOM. III ADVENTUS (GAUDETE), De ea,")
+ (te_deum ()) (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2025-12-19) (class_ ("II cl."))
+ (title "Viol FERIA VI QUATTUOR TEMP., De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2025-12-20) (class_ ("II cl."))
+ (title "Viol SABB. QUATTUOR TEMP., De eo,") (te_deum ()) (gloria (false))
+ (credo (false))
+ (praef
+ ("comm. \226\128\147 Quoad Flectamus genua vide RM 440. Quoad lectiones vide RM 468. I")))
+ ((date 2025-12-21) (class_ ("I cl."))
+ (title "Viol DOM. IV ADVENTUS, De ea,") (te_deum (true)) (gloria (false))
+ (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2025-12-22) (class_ ("II cl."))
+ (title "Viol FERIA II POST DOM. IV ADVENTUS, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2025-12-23) (class_ ("II cl."))
+ (title "Viol FERIA III POST DOM. IV ADVENTUS, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2025-12-24) (class_ ("I cl."))
+ (title "Viol Feria IV. VIGILIA NATIVITATIS DOMINI,") (te_deum (true))
+ (gloria (false)) (credo (false)) (praef ("comm. I")))
+ ((date 2025-12-25) (class_ ("I cl."))
+ (title "Alb Feria V. IN NATIVITATE DOMINI,") (te_deum ()) (gloria (true))
+ (credo (true))
+ (praef
+ ("et Communic. pr. per totam oct. \226\128\147 In Communicantes: in 1\194\170 Missa dicitur Noctem sacratissimam celebrantes, qua, in 2\194\170 et 3\194\170 Missa et per octavam Diem sacratissimum celebrantes, quo. \226\128\147 In 2\194\170 Missa (etiam in cantu) fit comm. S. Anastasi\195\166 * M. \226\128\147 In Missis in cantu, ad verba symboli Et incarnatus est\226\128\166 et homo factus est, omnes genuflectunt versus altare, non tantum cum a celebrante recitantur, sed etiam cum a choro canuntur (RM 518 b). II")))
+ ((date 2025-12-26) (class_ ("II cl."))
+ (title "Rub Feria VI. S STEPHANI * PROTOMARTYRIS,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum. AD")))
+ ((date 2025-12-27) (class_ ("II cl."))
+ (title "Alb Sabb. S IOANNIS * AP. ET EV.,") (te_deum ()) (gloria (true))
+ (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum. AD")))
+ ((date 2025-12-28) (class_ ("II cl."))
+ (title "Alb DOM. INFRA OCTAVAM NATIVITATIS, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum. Ad II")))
+ ((date 2025-12-29) (class_ ("II cl."))
+ (title "Alb FERIA II DOM. INFRA OCTAVAM NATIVITATIS, De ea,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum.")))
+ ((date 2025-12-30) (class_ ("II cl."))
+ (title "Alb FERIA III DOM. INFRA OCTAVAM NATIVITATIS, De ea,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum.")))
+ ((date 2025-12-31) (class_ ())
+ (title
+ "Alb FERIA IV DOM. INFRA OCTAVAM NATIVITATIS, De ea. \226\128\147 Off. semifestivum. \226\128\147 Ad MAT. invit., hymnus, 9 antt. et 9 pss. cum ultimo V de festo Nativ., Ll. de Scr. occ. cum suis RR (ad 2um additur Gloria Patri)\226\128\147 Ad Laudes antt. de Nativ., pss. de dom., comm. S Silvestri I Papae et Conf. \226\128\147 Ad HORAS ant. et pss. de feria curr., rel ut in festo Nativ. \226\128\147 Ad Primam in R Br. V Qui natus es de Maria Virgine. Missa Puer natus de diebus infra octavam, Gloria, Credo, comm. S Silvestri I Papae et Conf., praef. de Nativ., Communic. de Nativ. diem sacratissimum. I VESPER\195\134 de seq. \226\128\147 Compl. de dom. Hodie ad solemnem recitationem hymni Te Deum, indulgentia plenaria lucrari potest. 16")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum. I")))
+ ((date 2026-01-01) (class_ ("I cl."))
+ (title "Al Feria V. OCTAVA NATIVITATIS,") (te_deum ()) (gloria (true))
+ (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum. II")))
+ ((date 2026-01-02) (class_ ("IV cl."))
+ (title "Alb Feria VI post Octavam Nativitatis, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("de Nativ., sine Communic. pr. Feria VI prima in mense.")))
+ ((date 2026-01-03) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("BMV Et te in Veneratione \226\128\147")))
+ ((date 2026-01-04) (class_ ("II cl."))
+ (title "Alb Dom. SS.MI NOMINIS IESU,") (te_deum ()) (gloria (true))
+ (credo (true)) (praef ("de Nativ., sine Communic. pr. II")))
+ ((date 2026-01-05) (class_ ("IV cl."))
+ (title "Alb Feria II post Octavam Nativitatis, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("de Nativ., sine Communic. pr. \226\128\147")))
+ ((date 2026-01-06) (class_ ("I cl."))
+ (title "Alb Feria III. IN EPIPHANIA DOMINI,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("et Communic pr. II")))
+ ((date 2026-01-07) (class_ ("IV cl."))
+ (title "Alb Feria IV post Epiphaniam, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("de Epiphania.")))
+ ((date 2026-01-08) (class_ ("IV cl."))
+ (title "Alb Feria V post Epiphaniam, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("de Epiphania.")))
+ ((date 2026-01-09) (class_ ("IV cl."))
+ (title "Alb Feria VI post Epiphaniam, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("de Epiphania.")))
+ ((date 2026-01-10) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("BMV Et te in Veneratione. I")))
+ ((date 2026-01-11) (class_ ("II cl."))
+ (title
+ "Alb Dom. I post Epiphaniam. SANCT\195\134 FAMILI\195\134 IESU, MARI\195\134, IOSEPH *,")
+ (te_deum ()) (gloria (true)) (credo (true)) (praef ("de Epiphania. II")))
+ ((date 2026-01-12) (class_ ("IV cl."))
+ (title "Alb Feria II post Dom. I post Epiphaniam, De ea,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("de Epiphania.")))
+ ((date 2026-01-13) (class_ ("II cl."))
+ (title "Alb Feria III. IN COMMEMORATIONE BAPTISMATIS D.N.I.C.,")
+ (te_deum ()) (gloria (true)) (credo (true)) (praef ("de Epiphania. Ad")))
+ ((date 2026-01-14) (class_ ("III cl."))
+ (title "Alb Feria IV. S Hilarii Ep., Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef
+ ("comm. \226\128\147 Vel (sec. decretum \194\171Cum sanct.\194\187) Missa S Felicis Presbyt. et Mart. (rub.) L\195\166tabitur iustus, Gloria, ors. pr., comm. S Hilarii Ep., Conf. et Eccl. Doct., praef. comm. vel de Martyribus. Ad")))
+ ((date 2026-01-15) (class_ ("III cl."))
+ (title "Alb Feria V. S Pauli Primi Eremitae Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef
+ ("comm. \226\128\147 Vel (sec. decretum \194\171Cum sanct.\194\187) Missa S Mauri Abbatis. (alb.) Os iusti de Comm. Abb., Gloria, comm. S Pauli Primi Eremitae Conf., praef. comm.")))
+ ((date 2026-01-16) (class_ ("III cl."))
+ (title "Rub Feria VI. S Marcelli I Papae et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus.")))
+ ((date 2026-01-17) (class_ ("III cl. (Priv.)"))
+ (title "Alb Sabb. S Antonii Abb.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("comm. I")))
+ ((date 2026-01-18) (class_ ("II cl."))
+ (title "Vir DOM. II POST EPIPHANIAM, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-01-19) (class_ ("IV cl."))
+ (title "Vir Feria II post Dom. II post Epiphaniam, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-01-20) (class_ ("III cl. (Priv.)"))
+ (title "Rub Feria III. SS Fabiani Papae et Sebastiani Mm.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. vel de Martyribus.")))
+ ((date 2026-01-21) (class_ ("III cl. (Priv.)"))
+ (title "Rub Feria IV. S Agnetis * Virg. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus. Ad")))
+ ((date 2026-01-22) (class_ ("III cl."))
+ (title "Rub Feria V. SS Vincentii et Anastasii Mm.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus.")))
+ ((date 2026-01-23) (class_ ("III cl."))
+ (title "Alb Feria VI. S Raymundi de Pe\195\177afort Conf.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef
+ ("comm. \226\128\147 Vel (sec. decretum \194\171Cum sanct.\194\187) Missa S Emerentianae Virg. et Mart. (rub.) Me exspectaverunt, Gloria, comm. S Raymundi de Pe\195\177afort Conf., praef. comm. vel de Martyribus. \226\128\147")))
+ ((date 2026-01-24) (class_ ("III cl. (Priv.)"))
+ (title "Rub Sabb. S Timothei Ep. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus. I")))
+ ((date 2026-01-25) (class_ ("II cl."))
+ (title "Vir DOM. III POST EPIPHANIAM, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-01-26) (class_ ("III cl. (Priv.)"))
+ (title "Rub Feria II. S Polycarpi Ep. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus.")))
+ ((date 2026-01-27) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria III. S Ioannis Chrysostomi Ep., Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef ("comm. Ad")))
+ ((date 2026-01-28) (class_ ("III cl."))
+ (title "Alb Feria IV. S Petri Nolasci Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef
+ ("comm. \226\128\147 Vel (sec. decretum \194\171Cum sanct.\194\187) Missa pr. S Agnetis * Virg. et Mart. secundo. (rub.), Gloria, comm. S Petri Nolasci Conf., praef. comm. vel de Martyribus.")))
+ ((date 2026-01-29) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria V. S Francisci Salesii Ep., Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-01-30) (class_ ("III cl."))
+ (title "Rub Feria VI. S Martinae Virg. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus.")))
+ ((date 2026-01-31) (class_ ("III cl. (Priv.)"))
+ (title "Alb Sabb. S Ioannis Bosco Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. I")))
+ ((date 2026-02-01) (class_ ("II cl."))
+ (title "Viol DOM. SEPTUAGESIMAE, De ea,") (te_deum (true))
+ (gloria (false)) (credo (true)) (praef ("Trinit. II")))
+ ((date 2026-02-02) (class_ ("II cl."))
+ (title "Alb Feria II. IN PURIFICATIONE B. MARIAE VIRG.,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef ("de Nativ. Ad benedictionem candelarum: ut in Missali. Ad")))
+ ((date 2026-02-03) (class_ ("IV cl."))
+ (title "Viol Feria III Dom. Septuagesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("comm. \226\128\147")))
+ ((date 2026-02-04) (class_ ("III cl."))
+ (title "Alb Feria IV. S Andreae Corsini Ep. et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)))
+ ((date 2026-02-05) (class_ ("III cl. (Priv.)"))
+ (title "Rub Feria V. S Agathae * Virg. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus. Ad")))
+ ((date 2026-02-06) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria VI. S Titi Ep. et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. Feria VI prima in mense.")))
+ ((date 2026-02-07) (class_ ("III cl."))
+ (title "Alb Sabb. S Romualdi Abb.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("comm. Sabbatum primum in mense. I")))
+ ((date 2026-02-08) (class_ ("II cl."))
+ (title "Viol DOM. SEXAGESIMAE, De ea,") (te_deum (true)) (gloria (false))
+ (credo (true)) (praef ("Trinit. II")))
+ ((date 2026-02-09) (class_ ("III cl."))
+ (title "Alb Feria II. S Cyrilli Ep. Alexandrini, Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef
+ ("comm. \226\128\147 Vel (sec. decretum \194\171Cum sanct.\194\187) Missa S Apolloniae Virg. et Mart. (rub.) Loquebar de testimoniis tuis, Gloria, comm. S Cyrilli Ep. Alexandrini, Conf. et Eccl. Doct., tractus, praef. comm. vel de Martyribus. Ad")))
+ ((date 2026-02-10) (class_ ("III cl."))
+ (title "Alb Feria III. S Scholasticae Virg.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)))
+ ((date 2026-02-11) (class_ ("III cl."))
+ (title "Alb Feria IV. In Apparitione B. Mariae Virg. Immaculatae,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("BMV Et te in Conceptione Immaculata.")))
+ ((date 2026-02-12) (class_ ("III cl."))
+ (title
+ "Alb Feria V. SS Septem Fundatorum Ordinis Servorum B. Mariae Virg., Cc.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef ("comm. Ad")))
+ ((date 2026-02-13) (class_ ("IV cl."))
+ (title "Viol Feria VI Dom. Sexagesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2026-02-14) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("BMV Et te in Veneratione \226\128\147")))
+ ((date 2026-02-15) (class_ ("II cl."))
+ (title "Viol DOM. QUINQUAGESIMAE, De ea,") (te_deum (true))
+ (gloria (false)) (credo (true)) (praef ("Trinit. II")))
+ ((date 2026-02-16) (class_ ("IV cl."))
+ (title "Viol Feria II Dom. Quinquagesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2026-02-17) (class_ ("IV cl."))
+ (title "Viol Feria III Dom. Quinquagesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2026-02-18) (class_ ("I cl."))
+ (title "Viol FERIA IV CINERUM, De ea,") (te_deum ()) (gloria (false))
+ (credo (false))
+ (praef
+ ("Quadr., or. super populum. In Missa qu\195\166 dicitur post benedictionem et impositionem cinerum omittuntur omnes preces ad gradus altaris dicend\195\166, necnon ors. Aufer a nobis et Oramus te, Domine, non autem osculum altaris (RM, 424 a).")))
+ ((date 2026-02-19) (class_ ("III cl."))
+ (title "Viol Feria V Dom. Quinquagesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum.")))
+ ((date 2026-02-20) (class_ ("III cl."))
+ (title "Viol Feria VI Dom. Quinquagesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum.")))
+ ((date 2026-02-21) (class_ ("III cl."))
+ (title "Viol Sabb. Dom. Quinquagesimae, De eo,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef ("Quadr., or. super populum. I")))
+ ((date 2026-02-22) (class_ ("I cl."))
+ (title "Viol DOM. I QUADRAGESIMAE, De ea,") (te_deum (true))
+ (gloria (false)) (credo (true)) (praef ("Quadr. II")))
+ ((date 2026-02-23) (class_ ("III cl."))
+ (title "Viol Feria II post Dom. I Quadragesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum.")))
+ ((date 2026-02-24) (class_ ("II cl."))
+ (title "Rub Feria III. S MATTHIAE AP.,") (te_deum ()) (gloria (true))
+ (credo (true)) (praef ("App. Ad")))
+ ((date 2026-02-25) (class_ ("II cl."))
+ (title "Viol FERIA IV QUATTUOR TEMP., De ea,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef
+ ("Quadr., or. super populum. \226\128\147 Quoad Flectamus genua vide RM 440.")))
+ ((date 2026-02-26) (class_ ("III cl."))
+ (title "Viol Feria V post Dom. I Quadragesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum.")))
+ ((date 2026-02-27) (class_ ("II cl."))
+ (title "Viol FERIA VI QUATTUOR TEMP., De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum.")))
+ ((date 2026-02-28) (class_ ("II cl."))
+ (title "Viol SABB. QUATTUOR TEMP., De eo,") (te_deum ()) (gloria (false))
+ (credo (false))
+ (praef
+ ("Quadr., or. super populum. \226\128\147 Quoad Flectamus genua vide RM 440. Quoad lectiones vide RM 468. I")))
+ ((date 2026-03-01) (class_ ("I cl."))
+ (title "Viol DOM. II QUADRAGESIMAE, De ea,") (te_deum (true))
+ (gloria (false)) (credo (true)) (praef ("Quadr. II")))
+ ((date 2026-03-02) (class_ ("III cl."))
+ (title "Viol Feria II post Dom. II Quadragesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum.")))
+ ((date 2026-03-03) (class_ ("III cl."))
+ (title "Viol Feria III post Dom. II Quadragesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum.")))
+ ((date 2026-03-04) (class_ ("III cl."))
+ (title "Viol Feria IV post Dom. II Quadragesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum.")))
+ ((date 2026-03-05) (class_ ("III cl."))
+ (title "Viol Feria V post Dom. II Quadragesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum.")))
+ ((date 2026-03-06) (class_ ("III cl."))
+ (title "Viol Feria VI post Dom. II Quadragesimae, De ea,")
+ (te_deum (true)) (gloria (false)) (credo (false))
+ (praef ("Quadr., or. super populum. Feria VI prima in mense.")))
+ ((date 2026-03-07) (class_ ("III cl."))
+ (title "Viol Sabb. post Dom. II Quadragesimae, De eo,") (te_deum (true))
+ (gloria (false)) (credo (false))
+ (praef ("Quadr., or. super populum. Sabbatum primum in mense. I")))
+ ((date 2026-03-08) (class_ ("I cl."))
+ (title "Viol DOM. III QUADRAGESIMAE, De ea,") (te_deum (true))
+ (gloria (false)) (credo (true)) (praef ("Quadr. II")))
+ ((date 2026-03-09) (class_ ("III cl."))
+ (title "Viol Feria II post Dom. III Quadragesimae, De ea,")
+ (te_deum (true)) (gloria (false)) (credo (false))
+ (praef ("Quadr., or. super populum.")))
+ ((date 2026-03-10) (class_ ("III cl."))
+ (title "Viol Feria III post Dom. III Quadragesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum.")))
+ ((date 2026-03-11) (class_ ("III cl."))
+ (title "Viol Feria IV post Dom. III Quadragesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum.")))
+ ((date 2026-03-12) (class_ ("III cl."))
+ (title "Viol Feria V post Dom. III Quadragesimae, De ea,")
+ (te_deum (true)) (gloria (false)) (credo (false))
+ (praef ("Quadr., or. super populum.")))
+ ((date 2026-03-13) (class_ ("III cl."))
+ (title "Viol Feria VI post Dom. III Quadragesimae, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("Quadr., or. super populum.")))
+ ((date 2026-03-14) (class_ ("III cl."))
+ (title "Viol Sabb. post Dom. III Quadragesimae, De eo,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef ("Quadr., or. super populum. I")))
+ ((date 2026-03-15) (class_ ("I cl."))
+ (title "Viol/ DOM. IV QUADRAGESIMAE (LAETARE), De ea,") (te_deum (true))
+ (gloria (false)) (credo (true)) (praef ("Quadr. II")))
+ ((date 2026-03-16) (class_ ("III cl."))
+ (title "Viol Feria II post Dom. IV Quadragesimae (Laetare), De ea,")
+ (te_deum ()) (gloria (false)) (credo (false))
+ (praef ("Quadr., or. super populum.")))
+ ((date 2026-03-17) (class_ ("III cl."))
+ (title "Viol Feria III post Dom. IV Quadragesimae (Laetare), De ea,")
+ (te_deum ()) (gloria (false)) (credo (false))
+ (praef ("Quadr., or. super populum.")))
+ ((date 2026-03-18) (class_ ("III cl."))
+ (title "Viol Feria IV post Dom. IV Quadragesimae (Laetare), De ea,")
+ (te_deum ()) (gloria (false)) (credo (false))
+ (praef ("Quadr., or. super populum. I")))
+ ((date 2026-03-19) (class_ ("I cl."))
+ (title
+ "Alb Feria V. S IOSEPH * SPONSI B. MARIAE VIRG., CONF. ET ECCLESIAE UNIVERSAE PATRONI,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("de S Iosepho Et te in festivitate. II")))
+ ((date 2026-03-20) (class_ ("III cl."))
+ (title "Viol Feria VI post Dom. IV Quadragesimae (Laetare), De ea,")
+ (te_deum ()) (gloria (false)) (credo (false))
+ (praef ("Quadr., or. super populum.")))
+ ((date 2026-03-21) (class_ ("III cl."))
+ (title "Viol Sabb. post Dom. IV Quadragesimae (Laetare), De eo,")
+ (te_deum (true)) (gloria (false)) (credo (false))
+ (praef ("Quadr., or. super populum. I")))
+ ((date 2026-03-22) (class_ ("I cl."))
+ (title "Viol DOM. I PASSIONIS, De ea,") (te_deum (true)) (gloria (false))
+ (credo (true)) (praef ("de Sancta Cruce. II")))
+ ((date 2026-03-23) (class_ ("III cl."))
+ (title "Viol Feria II post Dom. I Passionis, De ea,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef ("de Sancta Cruce or. super populum.")))
+ ((date 2026-03-24) (class_ ("III cl."))
+ (title "Viol Feria III post Dom. I Passionis, De ea,") (te_deum (true))
+ (gloria (false)) (credo (false))
+ (praef ("de Sancta Cruce or. super populum. I")))
+ ((date 2026-03-25) (class_ ("I cl."))
+ (title "Alb Feria IV. IN ANNUNTIATIONE B. MARIAE VIRG.,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef
+ ("BMV Et te in Annuntiatione \226\128\147 In Missis in cantu, ad verba symboli Et incarnatus est\226\128\166 et homo factus est, omnes genuflectunt versus altare, non tantum cum a celebrante recitantur, sed etiam cum a choro canuntur (RM 518 b). II")))
+ ((date 2026-03-26) (class_ ("III cl."))
+ (title "Viol Feria V post Dom. I Passionis, De ea,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef ("de Sancta Cruce or. super populum.")))
+ ((date 2026-03-27) (class_ ("III cl."))
+ (title "Viol Feria VI post Dom. I Passionis, De ea,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef ("de Sancta Cruce or. super populum.")))
+ ((date 2026-03-28) (class_ ("III cl."))
+ (title "Viol Sabb. post Dom. I Passionis, De eo,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef ("de Sancta Cruce or. super populum. I")))
+ ((date 2026-03-29) (class_ ("I cl."))
+ (title
+ "Rub in Officio, Rub. ad Bened. ramorum et in Processione, Viol. in Missa. DOM. IN PALMIS, De ea,")
+ (te_deum (true)) (gloria (false)) (credo (true))
+ (praef
+ ("de Sancta Cruce. \194\171Asperges\194\187 omittitur. \226\128\147 Benedictio palmorum et processio ante missam principalem celebrandae sunt. \226\128\147 Orationes praeparatoriae omittuntur. \226\128\147 Evangelium de passione secundum S Matthiam 26, 36-75; 27,1-60 legitur. Munda cor dicitur, celebrans autem (vel diaconus chronista) signum crucis nec super libro nec super se facit, necque librum osculatur, necque Laus tibi Domine dicit. \226\128\147 Evangelium finale omittitur. \226\128\147 In Missis sine processione, legitur in fine Evangelium Cum appropinquasset de benedictione ramorum. Sacerdotibus plures quam unam missam dicentibus licet Evangelium S Matthi\195\166 27, 45-52 legere potius quam Evangelium Passionis. II")))
+ ((date 2026-03-30) (class_ ("I cl."))
+ (title "Viol FERIA II HEBDOMADAE SANCTAE, De ea,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef ("de Sancta Cruce or. super populum.")))
+ ((date 2026-03-31) (class_ ("I cl."))
+ (title "Viol FERIA II HEBDOMADAE SANCTAE, De ea,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef
+ ("de Sancta Cruce or. super populum. Passio secundum S Marcum 14, 32-72; 15,1-46. Munda cor dicitur, celebrans autem (vel diaconus chronista) signum crucis nec super libro nec super se facit, necque librum osculatur, necque Laus tibi Domine dicit.")))
+ ((date 2026-04-01) (class_ ("I cl."))
+ (title "Viol FERIA IV HEBDOMADAE SANCTA, De ea,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef
+ ("de Sancta Cruce or. super populum. Passio secundum S Lucam 22, 39-71; 23, 1-53. Munda cor dicitur, celebrans autem (vel diaconus chronista) signum crucis nec super libro nec super se facit, necque librum osculatur, necque Laus tibi Domine dicit.")))
+ ((date 2026-04-02) (class_ ("I cl."))
+ (title "Viol. in Off., Alb. in Missa. FERIA V IN CENA DOMINI, De ea,")
+ (te_deum ()) (gloria (true)) (credo (false))
+ (praef
+ ("de Sancta Cruce, Communicantes, Hanc igitur et Qui pridie pr., ad triplex Agnus Dei ter respondetur miserere nobis. Osculum pacis non datur, et omittitur or. Domine Iesu Christe, qui dixisti.")))
+ ((date 2026-04-03) (class_ ("I cl."))
+ (title
+ "Nig in Actione liturgica usque ad 4am partem, Viol. in S. Communione. FERIA VI IN PASSIONE ET MORTE DOMINI, De ea,")
+ (te_deum ()) (gloria (true)) (credo (false))
+ (praef ("comm. Feria VI prima in mense.")))
+ ((date 2026-04-04) (class_ ("I cl."))
+ (title "Viol in Vig. pasch., Alb. in Missa. SABBATUM SANCTUM, De eo,")
+ (te_deum ()) (gloria ()) (credo ()) (praef ()))
+ ((date 2026-04-05) (class_ ("I cl."))
+ (title "Alb DOM. RESURRECTIONIS, De ea,") (te_deum ()) (gloria (true))
+ (credo (true))
+ (praef
+ ("Pasch. (in hac potissimum die), Communic. et Hanc igitur pr., ad Ite, missa est additur duplex Alleluia. Hodie prohibentur omnes Missae defunctorum, etiam exsequialis.")))
+ ((date 2026-04-06) (class_ ("I cl."))
+ (title "Alb FERIA II INFRA OCTAVAM PASCHATIS, De ea,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef ("etc. ut in festo., ad Ite, missa est additur duplex Alleluia.")))
+ ((date 2026-04-07) (class_ ("I cl."))
+ (title "Alb FERIA III INFRA OCTAVAM PASCHATIS, De ea,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef ("etc. ut in festo., ad Ite, missa est additur duplex Alleluia.")))
+ ((date 2026-04-08) (class_ ("I cl."))
+ (title "Alb FERIA IV INFRA OCTAVAM PASCHATIS, De ea,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef ("etc. ut in festo., ad Ite, missa est additur duplex Alleluia.")))
+ ((date 2026-04-09) (class_ ("I cl."))
+ (title "Alb FERIA V INFRA OCTAVAM PASCHATIS, De ea,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef ("etc. ut in festo., ad Ite, missa est additur duplex Alleluia.")))
+ ((date 2026-04-10) (class_ ("I cl."))
+ (title "Alb FERIA VI INFRA OCTAVAM PASCHATIS, De ea,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef ("etc. ut in festo., ad Ite, missa est additur duplex Alleluia.")))
+ ((date 2026-04-11) (class_ ("I cl."))
+ (title "Alb SABBATUM IN ALBIS, De eo,") (te_deum ()) (gloria (true))
+ (credo (true))
+ (praef
+ ("etc. ut in festo., ad Ite, missa est additur duplex Alleluia. I")))
+ ((date 2026-04-12) (class_ ("I cl.")) (title "Alb DOM. IN ALBIS,")
+ (te_deum (true)) (gloria (true)) (credo (true))
+ (praef ("Pasch. \226\128\147 Ite Missa est sine Alleluia. II")))
+ ((date 2026-04-13) (class_ ("III cl."))
+ (title "Rub Feria II. S Hermenegildi Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. vel de Martyribus. Ad")))
+ ((date 2026-04-14) (class_ ("III cl. (Priv.)"))
+ (title "Rub Feria III. S Iustini Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. vel de Martyribus.")))
+ ((date 2026-04-15) (class_ ("IV cl."))
+ (title "Alb Feria IV Dom. in Albis, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (Pasch.)))
+ ((date 2026-04-16) (class_ ("IV cl."))
+ (title "Alb Feria V Dom. in Albis, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. \226\128\147")))
+ ((date 2026-04-17) (class_ ("IV cl."))
+ (title "Alb Feria VI Dom. in Albis, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. \226\128\147")))
+ ((date 2026-04-18) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("BMV Et te in Veneratione. I")))
+ ((date 2026-04-19) (class_ ("II cl."))
+ (title "Alb DOM. III PASCHATIS, De ea,") (te_deum (true)) (gloria (true))
+ (credo (true)) (praef ("Pasch. II")))
+ ((date 2026-04-20) (class_ ("IV cl."))
+ (title "Alb Feria II post Dom. III Paschatis, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (Pasch.)))
+ ((date 2026-04-21) (class_ ("III cl."))
+ (title "Alb Feria III. S Anselmi Ep., Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef ("Pasch. Ad")))
+ ((date 2026-04-22) (class_ ("III cl."))
+ (title "Rub Feria IV. SS Soteris et Caii Pp. et Mm.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. vel de Martyribus.")))
+ ((date 2026-04-23) (class_ ("IV cl."))
+ (title "Alb Feria V post Dom. III Paschatis, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. \226\128\147")))
+ ((date 2026-04-24) (class_ ("III cl."))
+ (title "Rub Feria VI. S Fidelis de Sigmaringa Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. vel de Martyribus.")))
+ ((date 2026-04-25) (class_ ("II cl."))
+ (title "Rub Sabb. LITANIA MAIOR. S MARCI EVANGELISTAE,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("App. Ad")))
+ ((date 2026-04-26) (class_ ("II cl."))
+ (title "Alb DOM. IV PASCHATIS, De ea,") (te_deum (true)) (gloria (true))
+ (credo (true)) (praef ("Pasch. II")))
+ ((date 2026-04-27) (class_ ("III cl."))
+ (title "Alb Feria II. S Petri Canisii Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef ("Pasch. Ad")))
+ ((date 2026-04-28) (class_ ("III cl."))
+ (title "Alb Feria III. S Pauli a Cruce Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. \226\128\147")))
+ ((date 2026-04-29) (class_ ("III cl."))
+ (title "Rub Feria IV. S Petri Mart.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("Pasch. vel de Martyribus \226\128\147")))
+ ((date 2026-04-30) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria V. S Catharinae Senensis Virg.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. I")))
+ ((date 2026-05-01) (class_ ("I cl."))
+ (title
+ "Alb Feria VI. S IOSEPH * OPIFICIS SPONSI B. MARIAE VIRG., CONF.,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef
+ ("de S Iosepho Et te in solemnitate \226\128\147 Etiam dici potest Missa Adiutor (cfr. in Missis votivis), cum Alleluia pasch., praef. S Ioseph Et et in solemnitate. Feria VI prima in mense. II")))
+ ((date 2026-05-02) (class_ ("III cl. (Priv.)"))
+ (title "Alb Sabb. S Athanasii Ep., Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("Pasch. Sabbatum primum in mense. I")))
+ ((date 2026-05-03) (class_ ("II cl."))
+ (title "Alb DOM. V PASCHATIS, De ea,") (te_deum (true)) (gloria (true))
+ (credo (true)) (praef ("Pasch. II")))
+ ((date 2026-05-04) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria II. S Monicae Vid.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef (Pasch.)))
+ ((date 2026-05-05) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria III. S Pii V Papae et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. Ad")))
+ ((date 2026-05-06) (class_ ("IV cl."))
+ (title "Alb Feria IV post Dom. V Paschatis, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. \226\128\147")))
+ ((date 2026-05-07) (class_ ("III cl."))
+ (title "Rub Feria V. S Stanislai Ep. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. vel de Martyribus.")))
+ ((date 2026-05-08) (class_ ("IV cl."))
+ (title "Alb Feria VI post Dom. V Paschatis, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. \226\128\147")))
+ ((date 2026-05-09) (class_ ("III cl. (Priv.)"))
+ (title "Alb Sabb. S Gregorii Nazianzeni Ep., Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef ("Pasch. I")))
+ ((date 2026-05-10) (class_ ("II cl."))
+ (title "Alb DOM. VI PASCHATIS, De ea,") (te_deum (true)) (gloria (true))
+ (credo (true)) (praef ("Pasch. II")))
+ ((date 2026-05-11) (class_ ("II cl."))
+ (title "Rub Feria II. SS PHILIPPI * & IACOBI * APP,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("App. Ad")))
+ ((date 2026-05-12) (class_ ("III cl."))
+ (title
+ "Rub Feria III. SS Nerei, Achillei, Domitillae Virg., & Pancratii Mm.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("Pasch. vel de Martyribus.")))
+ ((date 2026-05-13) (class_ ("II cl."))
+ (title "Alb Feria IV. VIGILIA ASCENSIONIS,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Pasch. I")))
+ ((date 2026-05-14) (class_ ("I cl."))
+ (title "Alb Feria V. IN ASCENSIONE DOMINI NOSTRI IESU CHRISTI,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef
+ ("Ascensionis, Communic pr. In Missa principali post Evangelium exstinguitur cereus paschalis. II")))
+ ((date 2026-05-15) (class_ ("III cl."))
+ (title "Alb Feria VI. S Ioannis Baptistae de la Salle Conf.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("Ascensionis \226\128\147")))
+ ((date 2026-05-16) (class_ ("III cl."))
+ (title "Alb Sabb. S Ubaldi Ep. et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Ascensionis \226\128\147")))
+ ((date 2026-05-17) (class_ ("II cl."))
+ (title "Alb DOM. POST ASCENSIONEM, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true))
+ (praef
+ ("Ascensionis. Hodie prohibentur omnes Missae defunctorum, excepta exsequiali.")))
+ ((date 2026-05-18) (class_ ("III cl."))
+ (title "Rub Feria II. S Venantii Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("Ascensionis vel de Martyribus.")))
+ ((date 2026-05-19) (class_ ("III cl."))
+ (title "Alb Feria III. S Petri Caelestini Papae et Conf.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef
+ ("Ascensionis \226\128\147 Vel (sec. decretum \194\171Cum sanct.\194\187) Missa S Pudentianae Virg. (alb.) Dilexisti iustitiam, Gloria, comm. S Petri Caelestini Papae et Conf., praef. Ascensionis. Ad")))
+ ((date 2026-05-20) (class_ ("III cl."))
+ (title "Alb Feria IV. S Bernardini Senensis Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (Ascensionis.)))
+ ((date 2026-05-21) (class_ ("IV cl."))
+ (title "Alb Feria V Dom. post Ascensionem, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (Ascensionis.)))
+ ((date 2026-05-22) (class_ ("IV cl."))
+ (title "Alb Feria VI Dom. post Ascensionem, De ea,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("Ascensionis \226\128\147")))
+ ((date 2026-05-23) (class_ ("I cl."))
+ (title "Rub Sabb. VIGILIA PENTECOSTES,") (te_deum (true)) (gloria (true))
+ (credo (false))
+ (praef
+ ("de Spirito Sancto hodierna die, Communic pr., Hanc igitur pr. I")))
+ ((date 2026-05-24) (class_ ("I cl.")) (title "Rub Dom. PENTECOSTES,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef
+ ("de Spirito Sancto hodierna die, Communic pr., Hanc igitur pr. \226\128\147 Genu flectendum est cum Veni Sancte Spiritus in versu Alleluia dicitur. II")))
+ ((date 2026-05-25) (class_ ("I cl."))
+ (title "Rub FERIA II INFRA OCTAVAM PENTECOSTES, De ea,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef
+ ("de Spirito Sancto hodierna die, Communic pr., Hanc igitur pr. \226\128\147 Genu flectendum est cum Veni Sancte Spiritus in versu Alleluia dicitur.")))
+ ((date 2026-05-26) (class_ ("I cl."))
+ (title "Rub FERIA III INFRA OCTAVAM PENTECOSTES, De ea,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef
+ ("de Spirito Sancto hodierna die, Communic pr., Hanc igitur pr. \226\128\147 Genu flectendum est cum Veni Sancte Spiritus in versu Alleluia dicitur.")))
+ ((date 2026-05-27) (class_ ("I cl."))
+ (title
+ "Rub FERIA IV QUATTUOR TEMPORUM INFRA OCTAVAM PENTECOSTES, De ea,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef
+ ("de Spirito Sancto hodierna die, Communic pr., Hanc igitur pr. \226\128\147 Genu flectendum est cum Veni Sancte Spiritus in versu Alleluia dicitur.")))
+ ((date 2026-05-28) (class_ ("I cl."))
+ (title "Rub FERIA V INFRA OCTAVAM PENTECOSTES, De ea,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef
+ ("de Spirito Sancto hodierna die, Communic pr., Hanc igitur pr. \226\128\147 Genu flectendum est cum Veni Sancte Spiritus in versu Alleluia dicitur.")))
+ ((date 2026-05-29) (class_ ("I cl."))
+ (title
+ "Rub FERIA VI QUATTUOR TEMPORUM INFRA OCTAVAM PENTECOSTES, De ea,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef
+ ("de Spirito Sancto hodierna die, Communic pr., Hanc igitur pr. \226\128\147 Genu flectendum est cum Veni Sancte Spiritus in versu Alleluia dicitur.")))
+ ((date 2026-05-30) (class_ ("I cl."))
+ (title
+ "Rub SABBATUM QUATTUOR TEMPORUM II INFRA OCTAVAM PENTECOSTES, De eo,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef
+ ("de Spirito Sancto hodierna die, Communic pr., Hanc igitur pr. \226\128\147 Genu flectendum est cum Veni Sancte Spiritus in versu Alleluia dicitur (quae in forma Miss\195\166 longiori post sixtam lectionem dicitur). Post Nonam exspirat tempus paschale. Compl de dom., cum antiphona finali de B. V. M. Salve Regina, quae dicitur ad Feriam VI ante Dom. I Adventus inclusive. Hodie prohibentur omnes Missae defunctorum, excepta exsequiali.")))
+ ((date 2026-05-31) (class_ ("I cl."))
+ (title "Alb Dom. I post Pentecosten. IN FESTO SANCTISSIMAE TRINITATIS,")
+ (te_deum ()) (gloria (true)) (credo (true)) (praef ("Trinit. II")))
+ ((date 2026-06-01) (class_ ("III cl."))
+ (title "Alb Feria II. S Angelae Mericiae Virg.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)))
+ ((date 2026-06-02) (class_ ("IV cl."))
+ (title "Vir Feria III post Dom. I post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-06-03) (class_ ("IV cl."))
+ (title "Vir Feria IV post Dom. I post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false)) (praef ("comm. I")))
+ ((date 2026-06-04) (class_ ("I cl."))
+ (title "Alb Feria V. CORPORIS CHRISTI,") (te_deum ()) (gloria (true))
+ (credo (true))
+ (praef
+ ("comm. vel de Cor Sacratissimo. \226\128\147 Si processio cum benedicto sacramento post missam principalem fit, in Missa Benedicamus Domino dicitur, sed benedictio et evangelium finale omittuntur. II")))
+ ((date 2026-06-05) (class_ ("III cl. (Priv.)"))
+ (title "Rub Feria VI. S Bonifatii Ep. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. vel de Martyribus. Feria VI prima in mense.")))
+ ((date 2026-06-06) (class_ ("III cl."))
+ (title "Alb Sabb. S Norberti Ep. et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. Sabbatum primum in mense. I")))
+ ((date 2026-06-07) (class_ ("II cl."))
+ (title "Vir DOM. II POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-06-08) (class_ ("IV cl."))
+ (title "Vir Feria II post Dom. II post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2026-06-09) (class_ ("IV cl."))
+ (title "Vir Feria III post Dom. II post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-06-10) (class_ ("III cl."))
+ (title "Alb Feria IV. S Margaritae Reginae, Vid.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)))
+ ((date 2026-06-11) (class_ ("III cl. (Priv.)"))
+ (title "Rub Feria V. S Barnabae Apostoli,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("App. I")))
+ ((date 2026-06-12) (class_ ("I cl."))
+ (title "Alb Feria VI. SACRATISSIMI CORDIS IESU,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef
+ ("de Ss.mi Corde Iesu. Hodie, in qualibet ecclesia, coram Ss. Sacramento exposito, legatur formula reparationis et cantentur vel recitentur Litani\195\166 Sacratissimi Cordis Iesu (cfr. Enchiridion Indulgentiarum. Preces et pia opera, 1952, n.256, p.163). II")))
+ ((date 2026-06-13) (class_ ("III cl. (Priv.)"))
+ (title "Alb Sabb. S Antonii de Padua Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-06-14) (class_ ("II cl."))
+ (title "Vir DOM. III POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-06-15) (class_ ("IV cl."))
+ (title "Vir Feria II post Dom. III post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-06-16) (class_ ("IV cl."))
+ (title "Vir Feria III post Dom. III post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-06-17) (class_ ("III cl."))
+ (title "Alb Feria IV. S Gregorii Barbadici Ep. et Conf.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef (comm.)))
+ ((date 2026-06-18) (class_ ("III cl."))
+ (title "Alb Feria V. S Ephraem Syri Diaconi, Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef
+ ("comm. \226\128\147 Vel (sec. decretum \194\171Cum sanct.\194\187) Missa pr. SS Marci et Marcelliani Mm. (rub.), Gloria, comm. S Ephraem Syri Diaconi, Conf. et Eccl. Doct., praef. comm. vel de Martyribus. Ad")))
+ ((date 2026-06-19) (class_ ("III cl."))
+ (title "Alb Feria VI. S Iulianae De Falconeriis Virg.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef
+ ("comm. \226\128\147 Vel (sec. decretum \194\171Cum sanct.\194\187) Missa pr. SS Gervasii et Protasii Mm. (rub.), Gloria, comm. S Iulianae De Falconeriis Virg., praef. comm. vel de Martyribus.")))
+ ((date 2026-06-20) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("BMV Et te in Veneratione \226\128\147")))
+ ((date 2026-06-21) (class_ ("II cl."))
+ (title "Vir DOM. IV POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-06-22) (class_ ("III cl."))
+ (title "Alb Feria II. S Paulini Ep. et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)))
+ ((date 2026-06-23) (class_ ("II cl."))
+ (title "Viol Feria III. VIGILIA NATIVITATIS S IOANNIS * BAPTISTAE,")
+ (te_deum (true)) (gloria (false)) (credo (false)) (praef ("comm. I")))
+ ((date 2026-06-24) (class_ ("I cl."))
+ (title "Alb Feria IV. IN NATIVITATE S IOANNIS * BAPTISTAE,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef ("comm. vel de S Ioanni Baptista. II")))
+ ((date 2026-06-25) (class_ ("III cl."))
+ (title "Alb Feria V. S Gulielmi Abb.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef (comm.)))
+ ((date 2026-06-26) (class_ ("III cl."))
+ (title "Rub Feria VI. SS Ioannis * et Pauli * Mm.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus.")))
+ ((date 2026-06-27) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("BMV Et te in Veneratione \226\128\147")))
+ ((date 2026-06-28) (class_ ("II cl."))
+ (title "Vir DOM. V POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. I")))
+ ((date 2026-06-29) (class_ ("I cl."))
+ (title "Rub Feria II. SS PETRI * ET PAULI * APP.,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("App. II")))
+ ((date 2026-06-30) (class_ ("III cl. (Priv.)"))
+ (title "Rub Feria III. In Commemoratione S Pauli * Ap.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef ("App. I")))
+ ((date 2026-07-01) (class_ ("I cl."))
+ (title "Rub Feria IV. PRETIOSISSIMI SANGUINIS D. N. I. C.,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("de Sancta Cruce. II")))
+ ((date 2026-07-02) (class_ ("II cl."))
+ (title "Alb Feria V. IN VISITATIONE B. MARIAE VIRG.,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("BMV Et te in Visitatione. Ad")))
+ ((date 2026-07-03) (class_ ("III cl."))
+ (title "Rub Feria VI. S Iren\195\166i Ep. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. vel de Martyribus. Feria VI prima in mense.")))
+ ((date 2026-07-04) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("BMV Et te in Veneratione \226\128\147")))
+ ((date 2026-07-05) (class_ ("II cl."))
+ (title "Vir DOM. VI POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-07-06) (class_ ("IV cl."))
+ (title "Vir Feria II post Dom. VI post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-07-07) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria III. SS Cyrilli et Methodii Epp. et Cc.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef ("comm. Ad")))
+ ((date 2026-07-08) (class_ ("III cl."))
+ (title "Alb Feria IV. S Elisabeth Reginae, Vid.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. Ad")))
+ ((date 2026-07-09) (class_ ("IV cl."))
+ (title "Vir Feria V post Dom. VI post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-07-10) (class_ ("III cl."))
+ (title
+ "Rub Feria VI. SS Septem Fratrum Mm., Ac SS Rufinae et Secundae Vv. et Mm.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. vel de Martyribus.")))
+ ((date 2026-07-11) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("BMV Et te in Veneratione \226\128\147")))
+ ((date 2026-07-12) (class_ ("II cl."))
+ (title "Vir DOM. VII POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-07-13) (class_ ("IV cl."))
+ (title "Vir Feria II post Dom. VII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2026-07-14) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria III. S Bonaventurae Ep., Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef ("comm. Ad")))
+ ((date 2026-07-15) (class_ ("III cl."))
+ (title "Alb Feria IV. S Henrici Imperatoris Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)))
+ ((date 2026-07-16) (class_ ("IV cl."))
+ (title "Vir Feria V post Dom. VII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-07-17) (class_ ("IV cl."))
+ (title "Vir Feria VI post Dom. VII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-07-18) (class_ ("III cl."))
+ (title "Alb Sabb. S Camilli de Lellis Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef
+ ("comm. \226\128\147 Vel (sec. decretum \194\171Cum sanct.\194\187) Missa SS Symphorosae et septem filiorum eius Mm. (rub.) Clamaverunt (ut in festo Ss. duodecim Fratrum Mm., die 1 sept.), Gloria, ors. pr., comm. S Camilli de Lellis Conf., praef. comm. vel de Martyribus. I")))
+ ((date 2026-07-19) (class_ ("II cl."))
+ (title "Vir DOM. VIII POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-07-20) (class_ ("III cl."))
+ (title "Alb Feria II. S Hieronymi \211\148miliani Conf.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef
+ ("comm. \226\128\147 Vel (sec. decretum \194\171Cum sanct.\194\187) Missa S Margaritae Virg. et Mart. (rub.) Me exspectaverunt, Gloria, comm. S Hieronymi \211\148miliani Conf., praef. comm. vel de Martyribus.")))
+ ((date 2026-07-21) (class_ ("III cl."))
+ (title "Alb Feria III. S Laurentii de Brundusio Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef
+ ("comm. \226\128\147 Vel (sec. decretum \194\171Cum sanct.\194\187) Missa pr. S Praexedis Virg. (alb.), Gloria, comm. S Laurentii de Brundusio Conf. et Eccl. Doct., praef. comm. \226\128\147")))
+ ((date 2026-07-22) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria IV. S Mariae Magdalenae P\197\147nitentis,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef ("comm. Ad")))
+ ((date 2026-07-23) (class_ ("III cl."))
+ (title "Rub Feria V. S Apollinaris Ep. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef
+ ("comm. vel de Martyribus \226\128\147 Vel (sec. decretum \194\171Cum sanct.\194\187) Missa S Liborii Ep. et Conf. (alb.) Statuit de Comm. Confessoris Pontificis, Gloria, comm. S Apollinaris Ep. et Mart., praef. comm.")))
+ ((date 2026-07-24) (class_ ("IV cl."))
+ (title "Vir Feria VI post Dom. VIII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-07-25) (class_ ("II cl."))
+ (title "Rub Sabb. S IACOBI * APOSTOLI,") (te_deum ()) (gloria (true))
+ (credo (true)) (praef ("App. Ad")))
+ ((date 2026-07-26) (class_ ("II cl."))
+ (title "Vir DOM. IX POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-07-27) (class_ ("IV cl."))
+ (title "Vir Feria II post Dom. IX post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-07-28) (class_ ("III cl."))
+ (title
+ "Rub Feria III. SS Nazarii et Celsi, Mm., Victoris I Papae et Mart. ac Inocentii I Papae et Conf.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. vel de Martyribus.")))
+ ((date 2026-07-29) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria IV. S Marthae Virg.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef (comm.)))
+ ((date 2026-07-30) (class_ ("IV cl."))
+ (title "Vir Feria V post Dom. IX post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-07-31) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria VI. S Ignatii Conf.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef (comm.)))
+ ((date 2026-08-01) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("BMV Et te in Veneratione \226\128\147")))
+ ((date 2026-08-02) (class_ ("II cl."))
+ (title "Vir DOM. X POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-08-03) (class_ ("IV cl."))
+ (title "Vir Feria II post Dom. X post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-08-04) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria III. S Dominici Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)))
+ ((date 2026-08-05) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria IV. In Dedicatione S Mariae ad Nives,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("BMV Et te in Festivitate.")))
+ ((date 2026-08-06) (class_ ("II cl."))
+ (title "Alb Feria V. IN TRANSFIGURATIONE D. N. I. C.,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("comm. II")))
+ ((date 2026-08-07) (class_ ("III cl."))
+ (title "Alb Feria VI. S Caietani Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef
+ ("comm. \226\128\147 Vel (sec. decretum \194\171Cum sanct.\194\187) Missa pr. S Donati, Ep. et Mart. (rub.), Gloria, comm. S Caietani Conf., praef. comm. vel de Martyribus. Feria VI prima in mense.")))
+ ((date 2026-08-08) (class_ ("III cl. (Priv.)"))
+ (title "Alb Sabb. S Ioannis Mariae Vianney Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. \226\128\147")))
+ ((date 2026-08-09) (class_ ("II cl."))
+ (title "Vir DOM. XI POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-08-10) (class_ ("II cl."))
+ (title "Rub Feria II. S LAURENTII * MART.,") (te_deum ()) (gloria (true))
+ (credo (false)) (praef ("comm. vel de Martyribus. II")))
+ ((date 2026-08-11) (class_ ("IV cl."))
+ (title "Vir Feria III post Dom. XI post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-08-12) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria IV. S Clarae Virg.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef (comm.)))
+ ((date 2026-08-13) (class_ ("IV cl."))
+ (title "Vir Feria V post Dom. XI post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-08-14) (class_ ("II cl."))
+ (title "Viol Feria VI. VIGILIA ASSUMPTIONIS B. MARIAE VIRG.,")
+ (te_deum (true)) (gloria (false)) (credo (false)) (praef ("comm. I")))
+ ((date 2026-08-15) (class_ ("I cl."))
+ (title "Alb Sabb. IN ASSUMPTIONE B. MARIAE VIRG.,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("BMV Et te in Assumptione. Ad")))
+ ((date 2026-08-16) (class_ ("II cl."))
+ (title "Vir DOM. XII POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-08-17) (class_ ("III cl."))
+ (title "Alb Feria II. S Hyacinthi Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)))
+ ((date 2026-08-18) (class_ ("IV cl."))
+ (title "Vir Feria III post Dom. XII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-08-19) (class_ ("III cl."))
+ (title "Alb Feria IV. S Ioannis Eudes Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)))
+ ((date 2026-08-20) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria V. S Bernardi Abb. et Eccl. Doct.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. \226\128\147")))
+ ((date 2026-08-21) (class_ ("III cl."))
+ (title
+ "Alb Feria VI. S Ioannae Franciscae Fr\195\169miot de Chantal Vid.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef (comm.)))
+ ((date 2026-08-22) (class_ ("II cl."))
+ (title "Alb Sabb. IMMACULATI CORDIS B. MARIAE VIRG.,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("BMV Et te in Festivitate. Ad")))
+ ((date 2026-08-23) (class_ ("II cl."))
+ (title "Vir DOM. XIII POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-08-24) (class_ ("II cl."))
+ (title "Rub Feria II. S BARTHOLOMAEI * AP.,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef (App.)))
+ ((date 2026-08-25) (class_ ("III cl."))
+ (title "Alb Feria III. S Ludovici Regis Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)))
+ ((date 2026-08-26) (class_ ("IV cl."))
+ (title "Vir Feria IV post Dom. XIII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-08-27) (class_ ("III cl."))
+ (title "Alb Feria V. S Iosephi Calasanctii Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)))
+ ((date 2026-08-28) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria VI. S Augustini Ep., Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-08-29) (class_ ("III cl. (Priv.)"))
+ (title "Rub Sabb. In Decollatione S Ioannis * Baptistae,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. vel de S Ioanni Baptista \226\128\147")))
+ ((date 2026-08-30) (class_ ("II cl."))
+ (title "Vir DOM. XIV POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-08-31) (class_ ("III cl."))
+ (title "Alb Feria II. S Raymundi Nonnati Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)))
+ ((date 2026-09-01) (class_ ("IV cl."))
+ (title "Vir Feria III post Dom. XIV post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-09-02) (class_ ("III cl."))
+ (title "Alb Feria IV. S Stephani Regis Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)))
+ ((date 2026-09-03) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria V. S Pii X Papae et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. Ad")))
+ ((date 2026-09-04) (class_ ("IV cl."))
+ (title "Vir Feria VI post Dom. XIV post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-09-05) (class_ ("III cl."))
+ (title "Alb Sabb. S Laurentii Iustiniani Ep. et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. Sabbatum primum in mense. I")))
+ ((date 2026-09-06) (class_ ("II cl."))
+ (title "Vir DOM. XV POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-09-07) (class_ ("IV cl."))
+ (title "Vir Feria II post Dom. XV post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2026-09-08) (class_ ("II cl."))
+ (title "Alb Feria III. IN NATIVITATE B. MARIAE VIRG.,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("BMV Et te in Nativitate. Ad")))
+ ((date 2026-09-09) (class_ ("IV cl."))
+ (title "Vir Feria IV post Dom. XV post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-09-10) (class_ ("III cl."))
+ (title "Alb Feria V. S Nicolai de Tolentino Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)))
+ ((date 2026-09-11) (class_ ("IV cl."))
+ (title "Vir Feria VI post Dom. XV post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-09-12) (class_ ("III cl. (Priv.)"))
+ (title "Alb Sabb. Sanctissimi Nominis Mariae,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("BMV Et te in Festivitate. I")))
+ ((date 2026-09-13) (class_ ("II cl."))
+ (title "Vir DOM. XVI POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-09-14) (class_ ("II cl."))
+ (title "Rub Feria II. IN EXALTATIONE S CRUCIS,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef
+ ("de Sancta Cruce. In Epistola ad verba Ut in nomine Iesu usque ad infernorum inclusive genuflectitur, item in Choro ab omnibus in Missa in cantu. II")))
+ ((date 2026-09-15) (class_ ("II cl."))
+ (title "Alb Feria III. SEPTEM DOLORUM B. MARIAE VIRGINIS,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("BMV Et te in Transfixione. Ad")))
+ ((date 2026-09-16) (class_ ("III cl. (Priv.)"))
+ (title "Rub Feria IV. SS Cornelis * Papae et Cypriani * Ep., Mm.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. vel de Martyribus.")))
+ ((date 2026-09-17) (class_ ("IV cl."))
+ (title "Vir Feria V post Dom. XVI post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-09-18) (class_ ("III cl."))
+ (title "Alb Feria VI. S Iosephi de Cupertino Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)))
+ ((date 2026-09-19) (class_ ("III cl."))
+ (title "Rub Sabb. SS Ianuarii Ep. et Sociorum Mm.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus. I")))
+ ((date 2026-09-20) (class_ ("II cl."))
+ (title "Vir DOM. XVII POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-09-21) (class_ ("II cl."))
+ (title "Rub Feria II. S MATTHAEI * AP. ET EV.,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef (App.)))
+ ((date 2026-09-22) (class_ ("III cl."))
+ (title "Alb Feria III. S Thomae de Villanova Ep. et Conf.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef
+ ("comm. \226\128\147 Vel (sec. decretum \194\171Cum sanct.\194\187) Missa SS Mauritii et Sociorum Mm. (rub.) Intret in conspectu tuo, Gloria, ors. et Evangelium pr., comm. S Thomae de Villanova Ep. et Conf., praef. comm. vel de Martyribus.")))
+ ((date 2026-09-23) (class_ ("II cl."))
+ (title "Viol FERIA IV QUATTUOR TEMP., De ea,") (te_deum (true))
+ (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147 Quoad Flectamus genua vide RM 440.")))
+ ((date 2026-09-24) (class_ ("IV cl."))
+ (title "Vir Feria V post Dom. XVII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-09-25) (class_ ("II cl."))
+ (title "Viol FERIA VI QUATTUOR TEMP., De ea,") (te_deum (true))
+ (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2026-09-26) (class_ ("II cl."))
+ (title "Viol SABB. QUATTUOR TEMP., De eo,") (te_deum (true))
+ (gloria (false)) (credo (false))
+ (praef
+ ("comm. \226\128\147 Quoad Flectamus genua vide RM 440. Quoad lectiones vide RM 468. I")))
+ ((date 2026-09-27) (class_ ("II cl."))
+ (title "Vir DOM. XVIII POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-09-28) (class_ ("III cl."))
+ (title "Rub Feria II. S Wenceslai Ducis Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus. I")))
+ ((date 2026-09-29) (class_ ("I cl."))
+ (title "Alb Feria III. IN DEDICATIONE S MICHA\195\139LIS ARCHANGELI,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("comm. vel de Angelis. II")))
+ ((date 2026-09-30) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria IV. S Hieronymi Presbyteri, Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef ("comm. Ad")))
+ ((date 2026-10-01) (class_ ("IV cl."))
+ (title "Vir Feria V post Dom. XVIII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-10-02) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria VI. SS Angelorum Custodum,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef
+ ("comm. vel de Angelis. Feria VI prima in mense. Vesper\195\166 pr.")))
+ ((date 2026-10-03) (class_ ("III cl. (Priv.)"))
+ (title "Alb Sabb. S Teresiae a Iesu Infante Virg.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef
+ ("comm. Sabbatum primum in mense. I Vesper\195\166 de seq. dom., ut in Psalt. de sabb, ad Magn. ant. Adaperiat (dom. I octobris), or. pr., sine comm. \226\128\147 Compl. de sabb.")))
+ ((date 2026-10-04) (class_ ("II cl."))
+ (title "Vir DOM. XIX POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-10-05) (class_ ("IV cl."))
+ (title "Vir Feria II post Dom. XIX post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-10-06) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria III. S Brunonis Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. Vesper\195\166 de festo. 100")))
+ ((date 2026-10-07) (class_ ("II cl."))
+ (title "Alb Feria IV. B. MARIAE VIRG. A ROSARIO,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("BMV Et te in Festivitate. Ad")))
+ ((date 2026-10-08) (class_ ("III cl."))
+ (title "Alb Feria V. S Birgittae Vid.,") (te_deum (true)) (gloria (true))
+ (credo (false))
+ (praef
+ ("comm. \226\128\147 Vel (sec. decretum \194\171Cum sanct.\194\187) Missa SS Sergii, Bacchi, Marcelli et Apuleii Mm. (rub.) Sapientiam Sanctorum, Gloria, ors. pr., comm. S Birgittae Vid., praef. comm. vel de Martyribus. Vesper\195\166 de festo, sine comm.")))
+ ((date 2026-10-09) (class_ ("III cl."))
+ (title "Alb Feria VI. S Ioannis Leonardi Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef
+ ("comm. \226\128\147 Vel (sec. decretum \194\171Cum sanct.\194\187) Missa pr. SS Dionysii Ep., Rustici et Eleutherii Mm. (rub.), Gloria, comm. S Ioannis Leonardi Conf., praef. comm. vel de Martyribus. Vesper\195\166 de festo, sine comm.")))
+ ((date 2026-10-10) (class_ ("III cl."))
+ (title "Alb Sabb. S Francisci Borgiae Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef
+ ("comm. I Vesper\195\166 de seq. dom., ut in Psalt. de sabb, ad Magn. ant. Refulsit sol (dom. II octobris), or. pr., sine comm. \226\128\147 Compl. de sabb.")))
+ ((date 2026-10-11) (class_ ("II cl."))
+ (title "Vir DOM. XX POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-10-12) (class_ ("IV cl."))
+ (title "Vir Feria II post Dom. XX post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. Vesper\195\166 de feria or. dom. pr\195\166c.")))
+ ((date 2026-10-13) (class_ ("III cl."))
+ (title "Alb Feria III. S Eduardis Regis Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. Vesper\195\166 de festo.")))
+ ((date 2026-10-14) (class_ ("III cl. (Priv.)"))
+ (title "Rub Feria IV. S Callisti I Papae et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. vel de Martyribus. Vesper\195\166 de festo.")))
+ ((date 2026-10-15) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria V. S Teresiae Virg.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("comm. \226\128\147")))
+ ((date 2026-10-16) (class_ ("III cl."))
+ (title "Alb Feria VI. S Hedwigis Vid.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("comm. Vesper\195\166 de festo.")))
+ ((date 2026-10-17) (class_ ("III cl."))
+ (title "Alb Sabb. S Margaritae Mariae Alacoque Virg.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef
+ ("comm. I Vesper\195\166 de seq. dom., ut in Psalt. de sabb, ad Magn. ant. Exaudiat Dominus (dom. IV octobris), or. pr., sine comm. \226\128\147 Compl. de sabb.")))
+ ((date 2026-10-18) (class_ ("II cl."))
+ (title "Vir DOM. XXI POST PENTECOSTEN, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-10-19) (class_ ("III cl."))
+ (title "Alb Feria II. S Petri de Alcantara Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. Vesper\195\166 de festo.")))
+ ((date 2026-10-20) (class_ ("III cl."))
+ (title "Alb Feria III. S Ioannis Cantii Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. Vesper\195\166 de festo.")))
+ ((date 2026-10-21) (class_ ("IV cl."))
+ (title "Vir Feria IV post Dom. XXI post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-10-22) (class_ ("IV cl."))
+ (title "Vir Feria V post Dom. XXI post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. Vesper\195\166 de feria or. dom. pr\195\166c.")))
+ ((date 2026-10-23) (class_ ("III cl."))
+ (title "Alb Feria VI. S Antonii Mariae Claret Ep. et Conf.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-10-24) (class_ ("III cl."))
+ (title "Alb Sabb. S Rapha\195\171lis Archangeli,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef
+ ("comm. vel de Angelis. I Vesper\195\166 de seq., sine comm. \226\128\147 Compl. de dom. 104")))
+ ((date 2026-10-25) (class_ ("I cl."))
+ (title "Alb Dom. DOMINI NOSTRI JESU CHRISTI REGIS,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef
+ ("de Domino Nostro Jesu Rege. Hodie, in omnibus ecclesiis, coram Ss.mo Sacramento exposito, recitetur formula consecrationis generis humani Christo Regi, cum Litaniis de eodem Sacro Corde. II Vesper\195\166 pr. Hodie prohibentur omnes Missae defunctorum, etiam exsequialis.")))
+ ((date 2026-10-26) (class_ ("IV cl."))
+ (title "Vir Feria II post Dom. XXII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-10-27) (class_ ("IV cl."))
+ (title "Vir Feria III post Dom. XXII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. Vesper\195\166 de feria, or. dom. XXII post Pent.")))
+ ((date 2026-10-28) (class_ ("II cl."))
+ (title "Rub Feria IV. SS SIMONIS * ET IUD\195\134 * APP.,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef
+ ("App. In Canone Miss\195\166, nomen S. Apostoli Iud\195\166 inscribitur cum nomine Thadd\195\166i: ergo inclinatur caput quando dicitur Thadd\195\166i. Vesper\195\166 de Comm. \226\128\147 Compl. de dom. Hodie permittuntur tantum Missae votivae et defunctorum I et II classis.")))
+ ((date 2026-10-29) (class_ ("IV cl."))
+ (title "Vir Feria V post Dom. XXII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. Vesper\195\166 de feria or. dom. XXII post Pent.")))
+ ((date 2026-10-30) (class_ ("IV cl."))
+ (title "Vir Feria VI post Dom. XXII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. Vesper\195\166 de feria or. dom. XXII post Pent.")))
+ ((date 2026-10-31) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false))
+ (praef
+ ("BMV Et te in Veneratione. I Vesper\195\166 de seq. \226\128\147 Compl. de dom. 106")))
+ ((date 2026-11-01) (class_ ("I cl.")) (title "Alb Dom. OMNIUM SANCTORUM,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("Trinit. vel de Omnibus Sanctis et Patronis. II")))
+ ((date 2026-11-02) (class_ ("I cl."))
+ (title "Nig Feria II. IN COMMEMORATIONE OMNIUM FIDELIUM DEFUNCTORUM,")
+ (te_deum ()) (gloria (false)) (credo (false))
+ (praef
+ ("defunctorum, unica or. \226\128\147 Benedictio non dicitur. \226\128\147 Si tres Miss\195\166 celebrantur sine intermissione, sequentia dici debet tantum in Missa principali; si minus, dici debet in Missa prima. In aliis Missis, nisi sint in cantu, sequentia omitti potest.")))
+ ((date 2026-11-03) (class_ ("IV cl."))
+ (title "Vir Feria III post Dom. XXIII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2026-11-04) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria IV. S Caroli Ep. et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. \226\128\147")))
+ ((date 2026-11-05) (class_ ("IV cl."))
+ (title "Vir Feria V post Dom. XXIII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-11-06) (class_ ("IV cl."))
+ (title "Vir Feria VI post Dom. XXIII post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. Feria VI prima in mense.")))
+ ((date 2026-11-07) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false))
+ (praef ("BMV Et te in Veneratione. Sabbatum primum in mense. I")))
+ ((date 2026-11-08) (class_ ("II cl."))
+ (title "Vir DOM. V QUI SUPERFUIT POST EPIPHANIAM, De ea,")
+ (te_deum (true)) (gloria (true)) (credo (true))
+ (praef
+ ("Trinit. Dicitur Missa qu\195\166 inscribitur \194\171Dominica. V qui superfuit post Epiphaniam\194\187. Antiphonae ad Introitum, ad Offertorium et ad Communionem, necnon graduale et Alleluia cum suo versu, sumuntur e Dom. XXIII post Pent.; orationes, Epistola et Evangelium, e Dom. V qui superfuit post Epiphaniam. Ad II")))
+ ((date 2026-11-09) (class_ ("II cl."))
+ (title
+ "Alb Feria II. IN DEDICATIONE ARCHIBASILICAE SANCTISSIMI SALVATORIS,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("comm. vel de Dedicatione ecclesi\195\166.")))
+ ((date 2026-11-10) (class_ ("III cl."))
+ (title "Alb Feria III. S Andreae Avellini Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef
+ ("comm. \226\128\147 Vel (sec. decretum \194\171Cum sanct.\194\187) Missa pr. SS Tryphonis, Respicii et Nymphae Virg., Mm. (rub.), Gloria, comm. S Andreae Avellini Conf., praef. comm. vel de Martyribus.")))
+ ((date 2026-11-11) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria IV. S Martini Ep. et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)))
+ ((date 2026-11-12) (class_ ("III cl."))
+ (title "Rub Feria V. S Martini I Papae et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus.")))
+ ((date 2026-11-13) (class_ ("III cl."))
+ (title "Alb Feria VI. S Didaci Conf.,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("comm. \226\128\147")))
+ ((date 2026-11-14) (class_ ("III cl. (Priv.)"))
+ (title "Rub Sabb. S Iosaphat Ep. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("comm. vel de Martyribus \226\128\147")))
+ ((date 2026-11-15) (class_ ("II cl."))
+ (title "Vir DOM. VI QUI SUPERFUIT POST EPIPHANIAM, De ea,")
+ (te_deum (true)) (gloria (true)) (credo (true))
+ (praef
+ ("Trinit. Dicitur Missa qu\195\166 inscribitur \194\171Dominica. VI qui superfuit post Epiphaniam\194\187. Antiphonae ad Introitum, ad Offertorium et ad Communionem, necnon graduale et Alleluia cum suo versu, sumuntur e Dom. XXIII post Pent.; orationes, Epistola et Evangelium, e Dom. VI qui superfuit post Epiphaniam. Ad II")))
+ ((date 2026-11-16) (class_ ("III cl."))
+ (title "Alb Feria II. S Gertrudis Virg.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)))
+ ((date 2026-11-17) (class_ ("III cl."))
+ (title "Alb Feria III. S Gregorii Thaumaturgi Ep. et Conf.,")
+ (te_deum (true)) (gloria (true)) (credo (false)) (praef (comm.)))
+ ((date 2026-11-18) (class_ ("III cl. (Priv.)"))
+ (title
+ "Alb Feria IV. In Dedicatione Basilicarum SS Petri et Pauli App.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. vel de Dedicatione ecclesi\195\166.")))
+ ((date 2026-11-19) (class_ ("III cl."))
+ (title "Alb Feria V. S Elisabeth Vid.,") (te_deum (true)) (gloria (true))
+ (credo (false))
+ (praef
+ ("comm. \226\128\147 Vel (sec. decretum \194\171Cum sanct.\194\187) Missa S Pontiani Papae et Mart. (rub.) Si diligis, Gloria, comm. S Elisabeth Vid., praef. comm. vel de Martyribus.")))
+ ((date 2026-11-20) (class_ ("III cl."))
+ (title "Alb Feria VI. S Felicis de Valois Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef (comm.)))
+ ((date 2026-11-21) (class_ ("III cl."))
+ (title "Alb Sabb. In Praesentatione B. Mariae Virg.,") (te_deum (true))
+ (gloria (true)) (credo (false))
+ (praef ("BMV Et te in Pr\195\166sentatione. I")))
+ ((date 2026-11-22) (class_ ("II cl."))
+ (title "Vir DOM. XXIV & ULTIMA POST PENTECOSTEN, De ea,")
+ (te_deum (true)) (gloria (true)) (credo (true))
+ (praef ("Trinit. Ad II")))
+ ((date 2026-11-23) (class_ ("III cl. (Priv.)"))
+ (title "Rub Feria II. S Clementis I * Papae et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus. Ad")))
+ ((date 2026-11-24) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria III. S Ioannis a Cruce Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-11-25) (class_ ("III cl."))
+ (title "Rub Feria IV. S Catharinae Virg. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus.")))
+ ((date 2026-11-26) (class_ ("III cl."))
+ (title "Alb Feria V. S Silvestri Abb.,") (te_deum (true)) (gloria (true))
+ (credo (false))
+ (praef
+ ("comm. \226\128\147 Vel (sec. decretum \194\171Cum sanct.\194\187) Missa S Petri Alexandrini Ep. et Mart. (rub.) Statuit ei, Gloria, comm. S Silvestri Abb., praef. comm. vel de Martyribus. \226\128\147")))
+ ((date 2026-11-27) (class_ ("IV cl."))
+ (title "Vir Feria VI post Dom. XXIV & Ultima post Pentecosten, De ea,")
+ (te_deum (false)) (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-11-28) (class_ ("IV cl."))
+ (title "Alb Sancta Maria in Sabbato,") (te_deum (true)) (gloria (true))
+ (credo (false)) (praef ("BMV Et te in Veneratione. I")))
+ ((date 2026-11-29) (class_ ("I cl."))
+ (title "Viol DOM. I ADVENTUS, De ea,") (te_deum (true)) (gloria (false))
+ (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-11-30) (class_ ("II cl."))
+ (title "Rub Feria II. S ANDREAE * APOSTOLI,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("App. Ad")))
+ ((date 2026-12-01) (class_ ("III cl."))
+ (title "Viol Feria III post Dom. I Adventus, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2026-12-02) (class_ ("III cl."))
+ (title "Rub Feria IV. S Bibianae Virg. et Mart.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. vel de Martyribus. Ad")))
+ ((date 2026-12-03) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria V. S Francisci Xavierii Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. Ad")))
+ ((date 2026-12-04) (class_ ("III cl."))
+ (title "Alb Feria VI. S Petri Chrysologi Ep., Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef
+ ("comm. \226\128\147 Vel (sec. decretum \194\171Cum sanct.\194\187) Missa S Barbarae Virg. et Mart. (rub.) Loquebar de testimoniis tuis, Gloria, comm. 1\194\170 Feriae, comm. 2\194\170 S Petri Chrysologi Ep., Conf. et Eccl. Doct., praef. comm. vel de Martyribus. Feria VI prima in mense. Ad")))
+ ((date 2026-12-05) (class_ ("III cl."))
+ (title "Viol Sabb. post Dom. I Adventus, De eo,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef ("comm. Sabbatum primum in mense. I")))
+ ((date 2026-12-06) (class_ ("I cl."))
+ (title "Viol DOM. II ADVENTUS, De ea,") (te_deum (true)) (gloria (false))
+ (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-12-07) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria II. S Ambrosii Ep., Conf. et Eccl. Doct.,")
+ (te_deum (true)) (gloria (true)) (credo (false))
+ (praef ("comm. \226\128\147")))
+ ((date 2026-12-08) (class_ ("I cl."))
+ (title "Alb Feria III. IN CONCEPTIONE IMMACULATA B. MARIAE VIRGINIS,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("BMV Et te in Conceptione Immaculata. Ad")))
+ ((date 2026-12-09) (class_ ("III cl."))
+ (title "Viol Feria IV post Dom. II Adventus, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2026-12-10) (class_ ("III cl."))
+ (title "Viol Feria V post Dom. II Adventus, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2026-12-11) (class_ ("III cl. (Priv.)"))
+ (title "Alb Feria VI. S Damasi I Papae et Conf.,") (te_deum (true))
+ (gloria (true)) (credo (false)) (praef ("comm. Ad")))
+ ((date 2026-12-12) (class_ ("III cl."))
+ (title "Viol Sabb. post Dom. II Adventus, De eo,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef ("comm. I")))
+ ((date 2026-12-13) (class_ ("I cl."))
+ (title "DOM. III ADVENTUS (GAUDETE), De ea,") (te_deum (true))
+ (gloria (false)) (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-12-14) (class_ ("III cl."))
+ (title "Viol Feria II post Dom. III Adventus (Gaudete), De ea,")
+ (te_deum ()) (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2026-12-15) (class_ ("III cl."))
+ (title "Viol Feria III post Dom. III Adventus (Gaudete), De ea,")
+ (te_deum ()) (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2026-12-16) (class_ ("II cl."))
+ (title "Viol FERIA IV QUATTUOR TEMP., De ea,") (te_deum ())
+ (gloria (false)) (credo (false))
+ (praef ("comm. \226\128\147 Quoad Flectamus genua vide RM 440.")))
+ ((date 2026-12-17) (class_ ("II cl."))
+ (title "Viol FERIA V POST DOM. III ADVENTUS (GAUDETE), De ea,")
+ (te_deum ()) (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2026-12-18) (class_ ("II cl."))
+ (title "Viol FERIA VI QUATTUOR TEMP., De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2026-12-19) (class_ ("II cl."))
+ (title "Viol SABB. QUATTUOR TEMP., De eo,") (te_deum ()) (gloria (false))
+ (credo (false))
+ (praef
+ ("comm. \226\128\147 Quoad Flectamus genua vide RM 440. Quoad lectiones vide RM 468. I")))
+ ((date 2026-12-20) (class_ ("I cl."))
+ (title "Viol DOM. IV ADVENTUS, De ea,") (te_deum (true)) (gloria (false))
+ (credo (true)) (praef ("Trinit. Ad II")))
+ ((date 2026-12-21) (class_ ("II cl."))
+ (title "Rub Feria II. S THOM\195\134 * APOSTOLI,") (te_deum ())
+ (gloria (true)) (credo (true)) (praef ("App. Ad")))
+ ((date 2026-12-22) (class_ ("II cl."))
+ (title "Viol FERIA III POST DOM. IV ADVENTUS, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2026-12-23) (class_ ("II cl."))
+ (title "Viol FERIA IV POST DOM. IV ADVENTUS, De ea,") (te_deum ())
+ (gloria (false)) (credo (false)) (praef (comm.)))
+ ((date 2026-12-24) (class_ ("I cl."))
+ (title "Viol Feria V. VIGILIA NATIVITATIS DOMINI,") (te_deum (true))
+ (gloria (false)) (credo (false)) (praef ("comm. I")))
+ ((date 2026-12-25) (class_ ("I cl."))
+ (title "Alb Feria VI. IN NATIVITATE DOMINI,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef
+ ("et Communic. pr. per totam oct. \226\128\147 In Communicantes: in 1\194\170 Missa dicitur Noctem sacratissimam celebrantes, qua, in 2\194\170 et 3\194\170 Missa et per octavam Diem sacratissimum celebrantes, quo. \226\128\147 In 2\194\170 Missa (etiam in cantu) fit comm. S. Anastasi\195\166 * M. \226\128\147 In Missis in cantu, ad verba symboli Et incarnatus est\226\128\166 et homo factus est, omnes genuflectunt versus altare, non tantum cum a celebrante recitantur, sed etiam cum a choro canuntur (RM 518 b). II")))
+ ((date 2026-12-26) (class_ ("II cl."))
+ (title "Rub Sabb. S STEPHANI * PROTOMARTYRIS,") (te_deum ())
+ (gloria (true)) (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum. Ad")))
+ ((date 2026-12-27) (class_ ("II cl."))
+ (title "Alb DOM. INFRA OCTAVAM NATIVITATIS, De ea,") (te_deum (true))
+ (gloria (true)) (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum. Ad II")))
+ ((date 2026-12-28) (class_ ("II cl."))
+ (title "Rub Feria II. SS INNOCENTIUM MM.,") (te_deum ()) (gloria (true))
+ (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum. Ad")))
+ ((date 2026-12-29) (class_ ("II cl."))
+ (title "Alb FERIA III DOM. INFRA OCTAVAM NATIVITATIS, De ea,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum.")))
+ ((date 2026-12-30) (class_ ("II cl."))
+ (title "Alb FERIA IV DOM. INFRA OCTAVAM NATIVITATIS, De ea,")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum.")))
+ ((date 2026-12-31) (class_ ())
+ (title
+ "Alb FERIA V DOM. INFRA OCTAVAM NATIVITATIS, De ea. \226\128\147 Off. semifestivum. \226\128\147 Ad MAT. invit., hymnus, 9 antt. et 9 pss. cum ultimo V de festo Nativ., Ll. de Scr. occ. cum suis RR (ad 2um additur Gloria Patri)\226\128\147 Ad Laudes antt. de Nativ., pss. de dom., comm. S Silvestri I Papae et Conf. \226\128\147 Ad HORAS ant. et pss. de feria curr., rel ut in festo Nativ. \226\128\147 Ad Primam in R Br. V Qui natus es de Maria Virgine. Missa Puer natus de diebus infra octavam, Gloria, Credo, comm. S Silvestri I Papae et Conf., praef. de Nativ., Communic. de Nativ. diem sacratissimum. I VESPER\195\134 de seq. \226\128\147 Compl. de dom. Hodie ad solemnem recitationem hymni Te Deum, indulgentia plenaria lucrari potest. 126")
+ (te_deum ()) (gloria (true)) (credo (true))
+ (praef ("de Nativ., Communic. de Nativ. diem sacratissimum. I"))))
diff --git a/test/test_colitur.ml b/test/test_colitur.ml
index 6db744f..7708fef 100644
--- a/test/test_colitur.ml
+++ b/test/test_colitur.ml
@@ -16,7 +16,7 @@ let () =
Test_rubrics_ef.suite;
Test_differential.suite; Test_oracle.suite; Test_oracle.suite_2038; Test_oracle.suite_2035;
Test_lms_ordo.suite_2023_2024; Test_lms_ordo.suite_2024_2025; Test_lms_ordo.suite_2025_2026;
- Test_lms_ordo.suite_allow_list;
+ Test_lms_ordo.suite_allow_list; Test_fiuv_ordo.suite;
Test_golden.suite;
("lectionary", Test_lectionary.suite);
("lectionary-ef", Test_lectionary_ef.suite);
diff --git a/test/test_fiuv_ordo.ml b/test/test_fiuv_ordo.ml
new file mode 100644
index 0000000..8b3e942
--- /dev/null
+++ b/test/test_fiuv_ordo.ml
@@ -0,0 +1,268 @@
+(* Witnesses task (2026-08-22-colitur-celebrant-rubrics-phase1): the
+ SEVENTH validation layer, and the first UNIVERSAL, SECOND-COMPILER
+ witness -- the FIUV (Foederatio Internationalis Una Voce) Ordo for
+ 2025-2026, compiled by Joseph Shaw, independent of the Latin Mass
+ Society's own three editions (test_lms_ordo.ml) except for sharing a
+ publisher/host (see test/fixtures/fiuv-ordo-2025-2026.sexp's own
+ provenance header, and docs/research/ordo/PROVENANCE-ordo-corpus.md,
+ for the full account of what independence this source does and does
+ not buy).
+
+ WHY THIS LAYER IS MORE VALUABLE THAN THE LMS ONE, per the task brief's
+ own four reasons: (1) UNIVERSAL -- no diocesan variants to exclude at
+ all, so this fixture's own [row] carries no [has_diocesan_variant]
+ field, unlike the LMS one; (2) IN LATIN, the rubrics' own vocabulary;
+ (3) BOTH DIRECTIONS EXPLICIT ("Gloria"/"sine Gloria", "Credo"/"sine
+ Credo") -- used here exactly as with the LMS source; (4) RECORDS THE
+ TE DEUM, the hinge of RG 431(a)'s own Mass-Gloria rule (deferred to
+ Phase 2, Breviary nn. 237-238) -- captured into the fixture, NOT
+ compared here (no colitur-side Te Deum predicate exists yet).
+
+ SCOPE: the CREED (RG 475-476, {!Rite_ef.Rubrics_ef.creed}) is the ONE
+ axis compared against colitur, per the task brief. [praef] and
+ [te_deum] are captured into the fixture (a genuinely useful data set
+ for Phase 2/3's still-unbuilt Gloria and preface rules) but
+ deliberately NOT validated here -- there is nothing on colitur's own
+ side yet to compare either against. [class_] (raw, including the FIUV
+ ordo's own explicit "III cl." vs "III cl. (Priv.)" Cum Sanctissima
+ convention, stated on its own title page) is likewise captured but not
+ compared: colitur's core is strictly the 1962 Missal with Cum
+ Sanctissima/Quo Magis modelled only as an OVERLAY, never core
+ (CLAUDE.md's own binding decision #2), so colitur's UNOVERLAID output
+ has no Cum-Sanctissima-aware notion of "III cl." vs "(Priv.)" to
+ compare this field against in the first place -- comparing it would be
+ comparing the Ordo against a question colitur's default configuration
+ was never asked. *)
+
+module Cal = Colitur_kernel.Calendar
+module Layer = Colitur_kernel.Layer
+module Overlay = Colitur_kernel.Overlay
+module LD = Colitur_kernel.Liturgical_day
+module Date = Colitur_kernel.Date
+module V = Rite_ef.Vocab_ef
+
+let sanctoral_path = "../data/ef/sanctoral.sexp"
+let adjustments_path = "../data/ef/adjustments.sexp"
+let fixture_path = "fixtures/fiuv-ordo-2025-2026.sexp"
+let allow_list_path = "../data/ef/expected-divergences-fiuv.sexp"
+
+(* Duplicated, not shared -- test_lms_ordo.ml's own identical function
+ carries the same "no shared .mli" reasoning. *)
+let sha256_of_file path =
+ let tmp = Filename.temp_file "colitur_fiuv_ordo_sha256" ".txt" in
+ Fun.protect
+ ~finally:(fun () -> try Sys.remove tmp with Sys_error _ -> ())
+ (fun () ->
+ let cmd = Printf.sprintf "sha256sum %s > %s" (Filename.quote path) (Filename.quote tmp) in
+ let rc = Sys.command cmd in
+ if rc <> 0 then Alcotest.failf "sha256sum exited %d for %s (is it on PATH?)" rc path;
+ let ic = open_in tmp in
+ let line =
+ try input_line ic
+ with End_of_file ->
+ close_in ic;
+ Alcotest.failf "sha256sum produced no output for %s" path
+ in
+ close_in ic;
+ match String.index_opt line ' ' with
+ | Some i -> String.sub line 0 i
+ | None -> Alcotest.failf "unexpected sha256sum output for %s: %S" path line)
+
+let fixture_sha256 = "becadaad43b3a42c4eb820cb4e93d68f9b1c07a2c8e5273167cd599758af5c67"
+
+let real_layer () =
+ let layer =
+ match Layer.load V.rank_of_sexp sanctoral_path with
+ | Ok l -> l
+ | Error e -> Alcotest.failf "%s: failed to load: %s" sanctoral_path e
+ in
+ let overlay =
+ match Overlay.load V.rank_of_sexp adjustments_path with
+ | Ok o -> o
+ | Error e -> Alcotest.failf "%s: failed to load: %s" adjustments_path e
+ in
+ let layer, diagnostics = Overlay.apply layer overlay in
+ Alcotest.(check (list string)) "the committed overlay applies cleanly, no diagnostics" []
+ (List.map Overlay.diagnostic_to_string diagnostics);
+ layer
+
+let real_lectionary () =
+ match Colitur_kernel.Lectionary.load "../data/ef/lectionary.sexp" with
+ | Ok l -> l
+ | Error e -> Alcotest.failf "../data/ef/lectionary.sexp: failed to load: %s" e
+
+let real_commons () =
+ match Rite_ef.Lectionary_ef.Commons.load "../data/ef/commons.sexp" with
+ | Ok c -> c
+ | Error e -> Alcotest.failf "../data/ef/commons.sexp: failed to load: %s" e
+
+(* ---------------------------------------------------------------------- *)
+(* The Ordo side: the sexp row, mirrored from tools/extract_fiuv_ordo.ml's *)
+(* own [row] -- see this file's own header on why there is no *)
+(* [has_diocesan_variant] field here, unlike the LMS mirror. *)
+(* ---------------------------------------------------------------------- *)
+
+open Sexplib0.Sexp_conv
+
+type ordo_row = {
+ date : string;
+ class_ : string option;
+ title : string;
+ te_deum : bool option;
+ gloria : bool option;
+ credo : bool option;
+ praef : string option;
+}
+[@@deriving sexp]
+
+let ordo_rows () =
+ let sexp =
+ try Sexplib.Sexp.load_sexp fixture_path
+ with e -> Alcotest.failf "%s: failed to load: %s" fixture_path (Printexc.to_string e)
+ in
+ list_of_sexp ordo_row_of_sexp sexp
+
+let window_first = "2025-11-27"
+let window_last = "2026-12-31"
+
+(* ---------------------------------------------------------------------- *)
+(* The colitur side, over the same window -- mirrors test_lms_ordo.ml's *)
+(* own [colitur_rows] exactly (a liturgical year straddles two civil *)
+(* years, so the resolution walk starts a civil year early and ends one *)
+(* late). *)
+(* ---------------------------------------------------------------------- *)
+
+type colitur_row = { c_date : string; c_creed : bool }
+
+let colitur_rows () =
+ let layer = real_layer () in
+ let rite = Rite_ef.context ~lectionary:(real_lectionary ()) ~commons:(real_commons ()) in
+ let by_rata : (int, (V.season, V.rank) LD.t) Hashtbl.t = Hashtbl.create 800 in
+ for y = 2024 to 2027 do
+ let days = Cal.year rite layer y in
+ Array.iter (fun (d : (V.season, V.rank) LD.t) -> Hashtbl.replace by_rata (Date.to_rata d.LD.date) d) days
+ done;
+ let mk s = match Date.of_iso8601 s with Ok d -> d | Error e -> Alcotest.failf "%s: %s" s e in
+ let rows = ref [] in
+ let d = ref (mk window_first) in
+ let stop = mk window_last in
+ while Date.compare !d stop <= 0 do
+ (match Hashtbl.find_opt by_rata (Date.to_rata !d) with
+ | Some day -> rows := { c_date = Date.to_iso8601 day.LD.date; c_creed = day.LD.creed } :: !rows
+ | None -> Alcotest.failf "no colitur day resolved for %s" (Date.to_iso8601 !d));
+ d := Date.add_days !d 1
+ done;
+ List.rev !rows
+
+(* ---------------------------------------------------------------------- *)
+(* data/ef/expected-divergences-fiuv.sexp -- same shape as the LMS/ *)
+(* missalemeum allow-lists' own [allow_entry]. A SEPARATE file: this Ordo *)
+(* is a fourth, independent lineage from all three others already in this *)
+(* project. *)
+(* ---------------------------------------------------------------------- *)
+
+type allow_entry = { id : string; citation : string; verdict : string; note : string; expected_rows : int }
+[@@deriving sexp]
+
+let load_allow_list () =
+ let sexps =
+ try Sexplib.Sexp.load_sexps allow_list_path
+ with e -> Alcotest.failf "%s: failed to load: %s" allow_list_path (Printexc.to_string e)
+ in
+ List.map allow_entry_of_sexp sexps
+
+(* ---------------------------------------------------------------------- *)
+(* Tests *)
+(* ---------------------------------------------------------------------- *)
+
+let test_fixture_checksum () =
+ Alcotest.(check string) "fixture SHA-256 matches its provenance note" fixture_sha256 (sha256_of_file fixture_path)
+
+let test_dates_align () =
+ let ordo = ordo_rows () in
+ let colitur = colitur_rows () in
+ Alcotest.(check int) "the Ordo fixture has 400 rows (2025-11-27..2026-12-31)" 400 (List.length ordo);
+ Alcotest.(check int) "colitur resolved the same number of days" (List.length ordo) (List.length colitur);
+ (match ordo with o :: _ -> Alcotest.(check string) "first date" window_first o.date | [] -> Alcotest.fail "empty");
+ (match List.rev ordo with
+ | o :: _ -> Alcotest.(check string) "last date" window_last o.date
+ | [] -> Alcotest.fail "empty");
+ let mismatched =
+ List.filter_map
+ (fun (o, c) -> if String.equal o.date c.c_date then None else Some (o.date, c.c_date))
+ (List.combine ordo colitur)
+ in
+ Alcotest.(check (list (pair string string))) "no misaligned dates" [] mismatched
+
+(* Holy Saturday (2026-04-04) is the ONLY day this fixture shows no Credo
+ marker for -- confirmed directly against the raw source: unlike the
+ LMS Ordo (whose "no Mass" day is Good Friday, the 1955-restored Holy
+ Week having no Mass that day at all), THIS Ordo's Good Friday DOES
+ carry a Mass rubric ("Missa pr., ... Gloria, sine Credo, praef.
+ comm."), leaving Holy Saturday as the sole day with no Mass mentioned
+ at all (its own Vigil Mass is conventionally counted under Easter
+ Sunday's own date in this source, matching a real, if narrower,
+ instance of the same "a vigil Mass is dated to the day it anticipates"
+ convention the LMS characterisation already established). Asserted as
+ the ONLY such day, not merely observed once: a parsing regression that
+ swallowed a real row would otherwise silently join this bucket instead
+ of failing loudly as an unexplained mismatch. *)
+let test_creed_coverage () =
+ let ordo = ordo_rows () in
+ let no_creed = List.filter (fun o -> o.credo = None) ordo in
+ Alcotest.(check (list string)) "only Holy Saturday has no Ordo Creed marker" [ "2026-04-04" ]
+ (List.map (fun o -> o.date) no_creed)
+
+let describe_creed_mismatch (o : ordo_row) (c : colitur_row) =
+ Printf.sprintf "%s %S: colitur creed=%b, Ordo creed=%b" o.date o.title c.c_creed (Option.get o.credo)
+
+(* Which allow-list id, if any, explains a Creed mismatch on this date --
+ date-keyed, not "any declared entry excuses any mismatch", the same
+ discipline test_lms_ordo.ml's own [allow_list_id_for_date] uses and
+ for the identical reason: an entry that starts firing on an
+ UNEXPECTED new date must be visible as a real change, not silently
+ absorbed. Empty until characterisation found a real divergence to
+ name. *)
+let fiuv_allow_list_id_for_date = ([] : (string * string) list)
+
+let test_creed_matches_or_is_explained () =
+ let ordo = ordo_rows () in
+ let colitur = colitur_rows () in
+ let allow_list = load_allow_list () in
+ let by_id = List.map (fun e -> (e.id, e)) allow_list in
+ let unexplained = ref [] in
+ let explained_counts = Hashtbl.create 8 in
+ List.iter2
+ (fun (o : ordo_row) (c : colitur_row) ->
+ if not (String.equal o.date c.c_date) then Alcotest.failf "misaligned: ordo %s vs colitur %s" o.date c.c_date;
+ match o.credo with
+ | None -> ()
+ | Some ocreed ->
+ if Bool.equal ocreed c.c_creed then ()
+ else
+ match List.assoc_opt o.date fiuv_allow_list_id_for_date with
+ | Some id -> Hashtbl.replace explained_counts id (1 + try Hashtbl.find explained_counts id with Not_found -> 0)
+ | None -> unexplained := describe_creed_mismatch o c :: !unexplained)
+ ordo colitur;
+ Alcotest.(check (list string)) "every Creed mismatch is named in the allow-list -- none unexplained" []
+ (List.rev !unexplained);
+ Hashtbl.iter
+ (fun id n ->
+ match List.assoc_opt id by_id with
+ | None -> Alcotest.failf "allow-list entry %s used by the comparator but not declared in %s" id allow_list_path
+ | Some e -> Alcotest.(check int) (Printf.sprintf "%s: expected_rows matches the actual count" id) e.expected_rows n)
+ explained_counts;
+ List.iter
+ (fun e ->
+ if not (Hashtbl.mem explained_counts e.id) then
+ Alcotest.failf "allow-list entry %s is declared but never matched a real divergence" e.id)
+ allow_list
+
+let suite =
+ ( "fiuv-ordo",
+ [ Alcotest.test_case "fixture SHA-256 matches its provenance note" `Quick test_fixture_checksum;
+ Alcotest.test_case "streams are 400 rows each, dates aligned 1:1" `Quick test_dates_align;
+ Alcotest.test_case "only Holy Saturday has no Ordo Creed marker" `Quick test_creed_coverage;
+ Alcotest.test_case "every Creed difference is named in the cited allow-list -- none unexplained" `Quick
+ test_creed_matches_or_is_explained
+ ] )
diff --git a/tools/dune b/tools/dune
index 487751e..9a4dea5 100644
--- a/tools/dune
+++ b/tools/dune
@@ -32,6 +32,7 @@
; reads no EF-specific vocabulary.
(executable
(name extract_lms_ordo)
+ (modules extract_lms_ordo)
(libraries colitur_kernel unix sexplib)
(preprocess
(pps ppx_sexp_conv)))
@@ -54,3 +55,16 @@
(deps check_citations.py test_check_citations.py)
(action
(run python3 test_check_citations.py)))
+
+; Witnesses task (2026-08-22-colitur-celebrant-rubrics-phase1): turns
+; pdftotext's -layout dump of the FIUV universal Ordo into
+; test/fixtures/fiuv-ordo-2025-2026.sexp. Run via `dune exec
+; tools/extract_fiuv_ordo.exe -- <pdftotext-layout.txt> <source.pdf>
+; <dest.sexp>`. Same `unix`-for-`sha256sum` usage as extract_lms_ordo.ml;
+; `colitur_kernel` only, no `rite_ef` -- same reasoning, dates only.
+(executable
+ (name extract_fiuv_ordo)
+ (modules extract_fiuv_ordo)
+ (libraries colitur_kernel unix sexplib)
+ (preprocess
+ (pps ppx_sexp_conv)))
diff --git a/tools/extract_fiuv_ordo.ml b/tools/extract_fiuv_ordo.ml
new file mode 100644
index 0000000..42d3b96
--- /dev/null
+++ b/tools/extract_fiuv_ordo.ml
@@ -0,0 +1,637 @@
+(* Witnesses task (2026-08-22-colitur-celebrant-rubrics-phase1): turns
+ pdftotext's -layout dump of the FIUV (Foederatio Internationalis Una
+ Voce) universal Ordo into test/fixtures/fiuv-ordo-2025-2026.sexp, one
+ row per day, 2025-11-27..2026-12-31.
+
+ A DIFFERENT format from tools/extract_lms_ordo.ml's own LMS PDFs in
+ every way that matters (see docs/research/ordo/PROVENANCE-ordo-corpus.md):
+ UNIVERSAL (no diocesan variants to exclude at all -- one block per day,
+ not "the first of several"), IN LATIN, using the rubrics' own
+ vocabulary ("Missa pr., Gloria, sine Credo, praef. comm."), and BOTH
+ directions of Gloria/Credo are stated explicitly in the source's own
+ words ("Gloria"/"sine Gloria", "Credo"/"sine Credo") rather than by a
+ printed flag letter. Hand-rolled, no Str/regex (frozen deps) -- the
+ same String.sub/index/split_on_char discipline extract_lms_ordo.ml
+ already uses for a different publisher's layout.
+
+ THE KEY STRUCTURAL FACTS this parser leans on, established during
+ characterisation (see the fixture's own provenance header for the
+ full record):
+
+ 1. A day-start line's own FIRST token is always "<1-2 digit day>."
+ (e.g. "27.", "3."), immediately followed by a colour code (not
+ anchored on below -- colour is captured as raw prose, never parsed
+ into a closed set, because a few real days use a COMPOUND colour
+ ("Viol. in Off., Alb. in Missa." on Holy Thursday) or drop the
+ token to a blank cell entirely (13 December 2026, a rendering
+ quirk) -- neither is needed for anything this task compares).
+
+ 2. Month headers/running-footers name a month EITHER in English with a
+ trailing ROMAN-NUMERAL year ("November MMXXV", the book's own first
+ two months only) OR bare in Latin with no year at all
+ ("Januarius", "Februarius", ... every month after). The English
+ Nov/Dec spellings happen to be IDENTICAL to their Latin
+ equivalents, so one 12-entry table covers both vocabularies.
+ CHARACTERISATION FINDING: the SECOND header ("December MMXV") is a
+ publisher-side TYPO -- MMXV is 2015, ten years off, contradicted by
+ every neighbouring date and by month-order inference alone. This
+ parser therefore reads a Roman-numeral year ONLY off the very
+ FIRST header encountered (the anchor) and tracks every subsequent
+ month purely by wraparound inference (increment the year exactly
+ once, at the Dec->Jan transition) -- the typo is never read at all,
+ not merely tolerated.
+
+ 3. Every real Mass rubric line starts with the literal token "Missa"
+ (401 of ~400 real day-blocks, confirmed structurally). A SECOND,
+ alternate Mass option, when the day offers one, is introduced by
+ the CAPITALISED two-token sequence "Vel Missa" -- never bare lower-
+ case "vel" alone, which is the ordinary Latin conjunction "or" and
+ appears constantly inside ordinary prose (e.g. "praef. comm. vel de
+ Martyribus", part of ONE preface's own text, not a second Mass
+ option) -- so only "Vel Missa", both tokens, anchors a real
+ alternate-option boundary. This parser reads Gloria/Credo/praef.
+ from the FIRST Mass option only, bounded above by whichever comes
+ first: "Vel Missa" or "VESPERAE"/"VESPERA" -- the identical
+ "day's own PRIMARY office, not a menu entry" discipline
+ extract_lms_ordo.ml already uses for the LMS diocesan-variant
+ colon boundary.
+
+ 4. SUBSTRING TRAP, found and defended against: "Gloria" is also the
+ first word of "Gloria Patri" (the psalm doxology, "Glory be to the
+ Father"), a DIFFERENT liturgical unit that has nothing to do with
+ whether the Mass's own Gloria in excelsis is said -- and it can
+ appear INSIDE the very Mass clause being scanned (Good Friday:
+ "Missa pr., (omittuntur ps. Iudica me et Gloria Patri), Gloria,
+ sine Credo, praef. comm." -- the real, standalone "Gloria," follows
+ immediately after). [find_word] below rejects any "Gloria" hit
+ whose very next token is "Patri", the same whole-token discipline
+ extract_lms_ordo.ml's own header describes for "V Mass of BVM"
+ being a substring of "IV Mass of BVM".
+
+ Usage:
+ pdftotext -layout docs/research/ordo/fiuv-ordo-2025-2026.pdf /tmp/fiuv.txt
+ dune exec tools/extract_fiuv_ordo.exe -- /tmp/fiuv.txt \
+ docs/research/ordo/fiuv-ordo-2025-2026.pdf \
+ test/fixtures/fiuv-ordo-2025-2026.sexp *)
+
+open Sexplib0.Sexp_conv
+module Date = Colitur_kernel.Date
+
+let die fmt = Printf.ksprintf (fun s -> prerr_endline ("extract_fiuv_ordo: " ^ s); exit 1) fmt
+
+(* Mirrored, not shared, by test/test_fiuv_ordo.ml -- tools/ and test/
+ have no common .mli either could hang a shared type from, the same
+ reasoning extract_lms_ordo.ml's own header already gives. *)
+type row = {
+ date : string; (** ISO-8601 *)
+ class_ : string option; (** raw, e.g. "III cl.", "III cl. (Priv.)", "I cl." -- [None] only if genuinely unparseable *)
+ title : string; (** the day-start line's own text before the class marker *)
+ te_deum : bool option; (** [None] only if neither "Te Deum" nor "non dicitur Te Deum" is found *)
+ gloria : bool option;
+ credo : bool option;
+ praef : string option; (** raw trailing text after "praef." within the primary Mass clause -- CAPTURED, NOT VALIDATED *)
+}
+[@@deriving sexp]
+
+(* --- tiny hand-rolled helpers, no Str/regex ------------------------------ *)
+
+let split_ws s =
+ String.split_on_char ' ' (String.map (fun c -> if c = '\t' then ' ' else c) s)
+ |> List.filter (fun t -> t <> "")
+
+let is_all_digits s = s <> "" && String.for_all (fun c -> c >= '0' && c <= '9') s
+
+let has_prefix ~prefix s =
+ String.length s >= String.length prefix && String.sub s 0 (String.length prefix) = prefix
+
+(* Strips ASCII trailing punctuation only (.,();) -- tokens in this source
+ never carry other trailing marks that matter to comparisons below. *)
+let rec strip_trailing_punct s =
+ let n = String.length s in
+ if n = 0 then s
+ else
+ match s.[n - 1] with
+ | '.' | ',' | ')' | ';' | ':' -> strip_trailing_punct (String.sub s 0 (n - 1))
+ | _ -> s
+
+let contains s ~sub =
+ let ls = String.length s and lu = String.length sub in
+ if lu = 0 then true
+ else
+ let rec go i = if i + lu > ls then false else if String.sub s i lu = sub then true else go (i + 1) in
+ go 0
+
+let index_of s ~sub =
+ let ls = String.length s and lu = String.length sub in
+ if lu = 0 then Some 0
+ else
+ let rec go i = if i + lu > ls then None else if String.sub s i lu = sub then Some i else go (i + 1) in
+ go 0
+
+let months =
+ [| "Januarius"; "Februarius"; "Martius"; "Aprilis"; "Maius"; "Junius"; "Julius"; "Augustus"; "September";
+ "October"; "November"; "December" |]
+
+let month_index name =
+ let rec go i = if i >= Array.length months then None else if months.(i) = name then Some (i + 1) else go (i + 1) in
+ go 0
+
+(* Roman numerals, subtractive form -- only ever called once, on the
+ FIRST month header's own year token (the anchor); see the module
+ header on why every LATER header's own year, when present at all, is
+ deliberately never read. *)
+let roman_value = function
+ | 'I' -> Some 1 | 'V' -> Some 5 | 'X' -> Some 10 | 'L' -> Some 50 | 'C' -> Some 100 | 'D' -> Some 500
+ | 'M' -> Some 1000 | _ -> None
+
+let parse_roman s =
+ let n = String.length s in
+ let rec go i acc =
+ if i >= n then Some acc
+ else
+ match roman_value s.[i] with
+ | None -> None
+ | Some v -> (
+ let next = if i + 1 < n then roman_value s.[i + 1] else None in
+ match next with
+ | Some nv when nv > v -> go (i + 2) (acc + nv - v)
+ | _ -> go (i + 1) (acc + v))
+ in
+ if n = 0 then None else go 0 0
+
+(* --- day-block scanning --------------------------------------------------- *)
+
+type block = { b_day : int; b_month : int; b_year : int; b_lines : string list }
+
+let is_day_start_line toks =
+ match toks with
+ | t :: _ :: _ when String.length t >= 2 && t.[String.length t - 1] = '.' ->
+ let core = String.sub t 0 (String.length t - 1) in
+ if is_all_digits core then
+ let d = int_of_string core in
+ if d >= 1 && d <= 31 then Some d else None
+ else None
+ | _ -> None
+
+(* A month running-header/footer line: first token is a recognised month
+ name (English Nov/Dec spelled identically to Latin), optionally
+ followed by a Roman-numeral year and/or a page number -- ALWAYS pure
+ noise for the day-block scanner (never a continuation line's own
+ content), but the FIRST time a given month index is seen it also
+ drives the [cur_month]/[cur_year] state transition. *)
+let is_month_marker_line toks = match toks with m :: _ -> month_index m <> None | [] -> false
+
+(* Left-margin indulgence-notation codes ("Ind." = an indulgence is
+ available, "Plen." = a plenary one, "DFP" unexplained but structurally
+ identical -- all three print in the SAME left-margin column pdftotext
+ -layout preserves, glued onto the following content line as literal
+ leading tokens, the identical trap extract_lms_ordo.ml's own
+ [strip_left_column] already documents for the LMS PDFs' "Pl"/"Ind"
+ column. Found by tracing a real parse failure (8 December 2025's own
+ class marker split across two physical lines by "DFP" sitting between
+ "I" and "cl."), not assumed in advance: catalogued via a frequency
+ scan of every short capitalised token opening a continuation line, and
+ deliberately does NOT include "RM" (11 occurrences, ALSO short and
+ capitalised) -- checked directly, "RM" is a real citation abbreviation
+ ("Rubricae Missalis", e.g. "vide RM 440"), not a margin code, so
+ stripping it would corrupt real text for no parsing benefit. *)
+let strip_left_column tokens =
+ let is_marker t = t = "Ind." || t = "Plen." || t = "DFP" in
+ let rec go = function t :: rest when is_marker t -> go rest | ts -> ts in
+ go tokens
+
+(* The malformed trailing entry's own distinctive two-token prefix,
+ "1st Jan" -- NOT a generic "first token is a bare 4-digit number"
+ check (extract_lms_ordo.ml's own approach): that generic shape false-
+ positived here, on real body content deep in October ("...20 augusti
+ / 1885, 26 augusti 1886..." -- an indulgence-decree date citation
+ whose line-wrap happens to put a 4-digit year token first on its own
+ physical line). This source's OWN tail artefact is reliably
+ distinguished only by its literal, unique "1st Jan" opening -- found
+ by tracing the false stop, not assumed in advance. *)
+let is_stop_tail_line toks = match toks with "1st" :: "Jan" :: _ -> true | _ -> false
+
+let read_lines path =
+ let ic = open_in path in
+ let rec loop acc = match input_line ic with l -> loop (l :: acc) | exception End_of_file -> List.rev acc in
+ let ls = loop [] in
+ close_in ic;
+ ls
+
+(* --- per-block field extraction ------------------------------------------- *)
+
+(* First WHOLE-TOKEN hit of [word] in [tokens] starting at-or-after
+ [from], REJECTING a hit whose immediately-following token (stripped)
+ is [reject_next] -- the "Gloria Patri" trap, see the module header.
+ Returns the hit's own index and whether the token immediately BEFORE
+ it (stripped) is "sine" (a negation). *)
+let find_word tokens ~from ~word ~reject_next =
+ let n = Array.length tokens in
+ let rec go i =
+ if i >= n then None
+ else if strip_trailing_punct tokens.(i) = word then
+ let next_is_rejected = i + 1 < n && strip_trailing_punct tokens.(i + 1) = reject_next in
+ if next_is_rejected then go (i + 1)
+ else
+ let negated = i > 0 && strip_trailing_punct tokens.(i - 1) = "sine" in
+ Some (i, negated)
+ else go (i + 1)
+ in
+ go from
+
+(* [class_]: the roman-numeral token immediately followed by a token
+ starting "cl" (covers "cl.", "cl.,"), whole-token matched -- never a
+ substring search (the same discipline the LMS extractor's own BVM
+ numeral anchor uses, for the identical reason: "I" is a substring of
+ "II"/"III"/"IV"). Also detects the trailing "(Priv.)" two tokens later. *)
+let extract_class tokens =
+ let n = Array.length tokens in
+ let is_class_numeral t = t = "I" || t = "II" || t = "III" || t = "IV" in
+ let rec go i =
+ if i + 1 >= n then None
+ else if is_class_numeral tokens.(i) && has_prefix ~prefix:"cl" tokens.(i + 1) then
+ let base = tokens.(i) ^ " cl." in
+ if i + 2 < n && strip_trailing_punct tokens.(i + 2) = "(Priv" then Some (base ^ " (Priv.)") else Some base
+ else go (i + 1)
+ in
+ go 0
+
+let extract_title tokens =
+ let n = Array.length tokens in
+ let is_class_numeral t = t = "I" || t = "II" || t = "III" || t = "IV" in
+ let rec find i = if i + 1 >= n then n else if is_class_numeral tokens.(i) && has_prefix ~prefix:"cl" tokens.(i + 1) then i else find (i + 1) in
+ let stop = find 0 in
+ String.concat " " (Array.to_list (Array.sub tokens 0 stop))
+
+(* Te Deum: bounded to the "Ad Mat." .. "Ad Laudes" span specifically
+ (both casings occur: "Ad MAT."/"Ad Mat."/"ad Mat.", "Ad LAUDES"/
+ "Ad Laudes") -- NOT the whole block, because a day can separately
+ mention "Te Deum" in an unrelated INDULGENCE note (31 December: "Hodie
+ ad solemnem recitationem hymni Te Deum, indulgentia plenaria lucrari
+ potest" -- about gaining an indulgence for the New Year's Eve Te Deum
+ of thanksgiving, not about whether it is sung at that day's own
+ Matins) that a whole-block search would wrongly read as a positive hit. *)
+let extract_te_deum full_text =
+ let find_ci needles start =
+ List.fold_left
+ (fun acc needle ->
+ match acc with
+ | Some _ -> acc
+ | None -> (
+ match index_of (String.sub full_text start (String.length full_text - start)) ~sub:needle with
+ | Some i -> Some (start + i)
+ | None -> None))
+ None needles
+ in
+ match find_ci [ "Ad Mat."; "Ad MAT."; "ad Mat." ] 0 with
+ | None -> None
+ | Some mat_start -> (
+ let laudes_start =
+ match find_ci [ "Ad Laudes"; "Ad LAUDES"; "ad Laudes" ] mat_start with
+ | Some i -> i
+ | None -> String.length full_text
+ in
+ let span = String.sub full_text mat_start (laudes_start - mat_start) in
+ if contains span ~sub:"non dicitur Te Deum" then Some false
+ else if contains span ~sub:"Te Deum" then Some true
+ else None)
+
+(* Gloria/Credo/praef.: bounded to the FIRST Mass option only -- from the
+ token "Missa" to whichever comes first: "Vel" immediately followed by
+ "Missa" (a real second option), or a token starting "VESPER" (Vespers
+ info -- a PREFIX match, not one or two hardcoded exact spellings,
+ found necessary by tracing a real over-capture: this source uses at
+ least four surface forms depending on grammatical case and whether
+ pdftotext renders the Æ ligature as one glyph or splits it --
+ "VESPERÆ", "VESPERAS", "VESPERA" (Ad VESPERA, rare) and "VESPERÆ"
+ with the ligature reproduced as a single non-ASCII codepoint an exact-
+ string match against the two ASCII spellings alone could never catch,
+ which let a whole day's own trailing Vespers/Compline prose leak into
+ [praef] uncaught until checked against the task brief's own worked
+ example day, 19 September), or the end of the block. *)
+let extract_missa_fields tokens =
+ let n = Array.length tokens in
+ (* [Missa] (singular, 549 of the corpus's own occurrences of any "Miss-"
+ word) anchors 398 of the 400 real days; the two genuine exceptions
+ are Good Friday and Holy Saturday, which have no Mass at all in the
+ 1955-restored Holy Week (matching extract_lms_ordo.ml's own
+ identically-shaped finding for the LMS corpus). CHRISTMAS DAY is a
+ THIRD, found by tracing a real false-None result: its own rubric
+ reads "Hodie celebrantur tres Missae pr., Gloria, Credo..." ("today
+ three Masses are celebrated..."), using the PLURAL "Missae"/"Missæ"
+ (both spellings occur across the fixture's two Christmas Days) --
+ [tokens.(i) = "Missa"] alone never matches it, silently returning
+ [None] for Gloria/Credo/praef on the single most doctrinally
+ unambiguous day in the whole calendar. Widened to accept "Missae"/
+ "Missæ" too, guarded against the ONE real collision risk: "Hodie
+ prohibentur omnes Missae defunctorum..." (a Requiem-Mass-prohibition
+ notice, common at the end of many day-blocks, unrelated to the
+ day's own Mass) also contains "Missae" -- rejected here by checking
+ the immediately FOLLOWING token is not "defunctorum". *)
+ let missa_idx =
+ let rec go i =
+ if i >= n then None
+ else if (tokens.(i) = "Missa" || tokens.(i) = "Missae" || tokens.(i) = "Missæ")
+ && not (i + 1 < n && strip_trailing_punct tokens.(i + 1) = "defunctorum")
+ then Some i
+ else go (i + 1)
+ in
+ go 0
+ in
+ match missa_idx with
+ | None -> (None, None, None)
+ | Some m ->
+ let end_idx =
+ let rec go i =
+ if i >= n then n
+ else if tokens.(i) = "Vel" && i + 1 < n && tokens.(i + 1) = "Missa" then i
+ else if has_prefix ~prefix:"VESPER" tokens.(i) then i
+ else go (i + 1)
+ in
+ go (m + 1)
+ in
+ let span = Array.sub tokens m (end_idx - m) in
+ let gloria =
+ match find_word span ~from:0 ~word:"Gloria" ~reject_next:"Patri" with
+ | Some (_, negated) -> Some (not negated)
+ | None -> None
+ in
+ let credo =
+ match find_word span ~from:0 ~word:"Credo" ~reject_next:"__never__" with
+ | Some (_, negated) -> Some (not negated)
+ | None -> None
+ in
+ let praef =
+ let sn = Array.length span in
+ let rec go i = if i >= sn then None else if strip_trailing_punct span.(i) = "praef" then Some i else go (i + 1) in
+ match go 0 with
+ | None -> None
+ | Some i ->
+ let rest = Array.to_list (Array.sub span (i + 1) (sn - i - 1)) in
+ if rest = [] then None else Some (String.concat " " rest)
+ in
+ (gloria, credo, praef)
+
+(* --- top level -------------------------------------------------------------- *)
+
+let () =
+ if Array.length Sys.argv <> 4 then
+ die "usage: extract_fiuv_ordo <pdftotext-layout.txt> <source.pdf> <dest.sexp>";
+ let txt_path = Sys.argv.(1) in
+ let pdf_path = Sys.argv.(2) in
+ let dest = Sys.argv.(3) in
+ let all_lines = read_lines txt_path in
+ let arr = Array.of_list all_lines in
+ let n = Array.length arr in
+ let trimmed i = String.trim arr.(i) in
+ (* Anchor: the FIRST month-marker line carrying a parseable Roman year
+ -- established during characterisation to be line 47, "November
+ MMXXV". Search generically rather than hardcoding the line number,
+ so a re-extraction against a re-flowed pdftotext dump still finds it. *)
+ let anchor_idx, anchor_month, anchor_year =
+ let rec go i =
+ if i >= n then die "no month header with a parseable Roman-numeral year found (expected the book's own first header, e.g. \"November MMXXV\")"
+ else
+ let toks = split_ws (trimmed i) in
+ match toks with
+ | m :: y :: _ -> (
+ match (month_index m, parse_roman y) with
+ | Some mi, Some yr when yr > 1000 -> (i, mi, yr)
+ | _ -> go (i + 1))
+ | _ -> go (i + 1)
+ in
+ go 0
+ in
+ let stop_idx =
+ let rec go i = if i >= n then n else if is_stop_tail_line (split_ws (trimmed i)) then i else go (i + 1) in
+ go (anchor_idx + 1)
+ in
+ Printf.printf "extract_fiuv_ordo: Ordo body lines %d..%d (of %d total), anchor %d/%d\n" anchor_idx stop_idx n
+ anchor_month anchor_year;
+ let cur_month = ref anchor_month and cur_year = ref anchor_year in
+ let blocks = ref [] in
+ let cur = ref None in
+ let flush () = match !cur with Some b -> blocks := b :: !blocks; cur := None | None -> () in
+ for i = anchor_idx + 1 to stop_idx - 1 do
+ let raw = trimmed i in
+ if raw = "" then ()
+ else
+ let toks = split_ws raw in
+ if is_month_marker_line toks then (
+ match toks with
+ | m :: _ -> (
+ match month_index m with
+ | Some mi ->
+ if mi <> !cur_month then begin
+ if mi < !cur_month then incr cur_year;
+ cur_month := mi
+ end
+ | None -> ())
+ | [] -> ())
+ else
+ match is_day_start_line toks with
+ | Some day ->
+ flush ();
+ cur := Some { b_day = day; b_month = !cur_month; b_year = !cur_year; b_lines = toks }
+ | None -> (
+ match !cur with
+ | None -> ()
+ | Some b -> cur := Some { b with b_lines = b.b_lines @ strip_left_column toks })
+ done;
+ flush ();
+ let blocks = List.rev !blocks in
+ Printf.printf "extract_fiuv_ordo: %d day-blocks parsed\n" (List.length blocks);
+ let rows =
+ List.map
+ (fun b ->
+ let date =
+ match Date.make ~year:b.b_year ~month:b.b_month ~day:b.b_day with
+ | Ok d -> d
+ | Error e -> die "%d/%d/%d: %s" b.b_year b.b_month b.b_day e
+ in
+ let tokens = Array.of_list b.b_lines in
+ (* [b_lines] tokens 0 is the day's own leading "<n>." marker --
+ dropped before field extraction, kept for nothing (the day
+ number is already known from [b_day]). *)
+ let content = if Array.length tokens > 0 then Array.sub tokens 1 (Array.length tokens - 1) else tokens in
+ let class_ = extract_class content in
+ let title = extract_title content in
+ let full_text = String.concat " " (Array.to_list content) in
+ let te_deum = extract_te_deum full_text in
+ let gloria, credo, praef = extract_missa_fields content in
+ { date = Date.to_iso8601 date; class_; title; te_deum; gloria; credo; praef })
+ blocks
+ in
+ let missing_class = List.filter (fun r -> r.class_ = None) rows in
+ let missing_gloria = List.filter (fun r -> r.gloria = None) rows in
+ let missing_credo = List.filter (fun r -> r.credo = None) rows in
+ let missing_te_deum = List.filter (fun r -> r.te_deum = None) rows in
+ if missing_class <> [] then
+ Printf.printf "extract_fiuv_ordo: WARNING %d rows with no class found: %s\n" (List.length missing_class)
+ (String.concat ", " (List.map (fun r -> r.date) missing_class));
+ Printf.printf
+ "extract_fiuv_ordo: %d rows; %d with no Gloria found; %d with no Credo found; %d with no Te Deum found\n"
+ (List.length rows) (List.length missing_gloria) (List.length missing_credo) (List.length missing_te_deum);
+ (* CHARACTERISATION, Step C of the task brief, non-negotiable: probed
+ BEFORE trusting a single row of this fixture, and RE-VERIFIED here
+ against this run's own [rows] -- a failed probe is a hard [die], the
+ same self-verifying discipline extract_lms_ordo.ml already uses,
+ never a printed claim resting on a one-off manual check that could
+ silently rot on a re-extraction. Every date/expectation pair below
+ was confirmed directly against the raw pdftotext dump before being
+ encoded here. *)
+ let creed_of_date d = List.find_map (fun r -> if String.equal r.date d then r.credo else None) rows in
+ let probes =
+ [ ("2025-11-30", true, "Advent Sunday, I class, RG 475(a)");
+ ("2025-12-01", false, "ordinary Advent feria, III class, RG 476(b)/(d)");
+ ("2025-12-26", true, "St Stephen, II class, inside the Nativity octave, RG 475(d)");
+ ("2026-08-10", false, "St Laurence, II class martyr, no Lord/BVM/apostle clause applies, RG 476(b)");
+ ("2026-08-15", true, "the Assumption, I class, RG 475(b)") ]
+ in
+ List.iter
+ (fun (d, expected, desc) ->
+ match creed_of_date d with
+ | Some got when Bool.equal got expected -> ()
+ | Some got -> die "characterisation probe FAILED: %s (%s) -- expected creed=%b, extracted creed=%b" d desc expected got
+ | None -> die "characterisation probe FAILED: %s (%s) -- no row extracted for this date at all" d desc)
+ probes;
+ Printf.printf "extract_fiuv_ordo: all %d characterisation probes confirmed\n" (List.length probes);
+ let probe_lines =
+ String.concat "\n"
+ (List.map
+ (fun (d, expected, desc) -> Printf.sprintf "; %s (%s) -> %s" d desc (if expected then "TRUE" else "FALSE"))
+ probes)
+ in
+ let sha256_of_file path =
+ let cmd = Printf.sprintf "sha256sum %s" (Filename.quote path) in
+ let ic = Unix.open_process_in cmd in
+ let line = try input_line ic with End_of_file -> die "sha256sum produced no output for %s" path in
+ (match Unix.close_process_in ic with Unix.WEXITED 0 -> () | _ -> die "sha256sum failed for %s" path);
+ match String.index_opt line ' ' with Some i -> String.sub line 0 i | None -> die "unexpected sha256sum output: %S" line
+ in
+ let today () =
+ let tm = Unix.gmtime (Unix.time ()) in
+ Printf.sprintf "%04d-%02d-%02d" (tm.Unix.tm_year + 1900) (tm.Unix.tm_mon + 1) tm.Unix.tm_mday
+ in
+ let pdf_sha = sha256_of_file pdf_path in
+ let pdf_base = Filename.basename pdf_path in
+ let gloria_true = List.length (List.filter (fun r -> r.gloria = Some true) rows) in
+ let gloria_false = List.length (List.filter (fun r -> r.gloria = Some false) rows) in
+ let credo_true = List.length (List.filter (fun r -> r.credo = Some true) rows) in
+ let credo_false = List.length (List.filter (fun r -> r.credo = Some false) rows) in
+ let te_deum_true = List.length (List.filter (fun r -> r.te_deum = Some true) rows) in
+ let te_deum_false = List.length (List.filter (fun r -> r.te_deum = Some false) rows) in
+ let header =
+ Printf.sprintf
+ {|; %s -- Witnesses task (2026-08-22-colitur-
+; celebrant-rubrics-phase1)'s SEVENTH validation layer, and the first
+; UNIVERSAL (non-diocesan), SECOND-COMPILER witness: the FIUV (Foederatio
+; Internationalis Una Voce) Ordo, compiled independently of the Latin Mass
+; Society's own three editions (test/test_lms_ordo.ml) -- see
+; docs/research/ordo/PROVENANCE-ordo-corpus.md for the full four-reasons
+; account of why this source is the more valuable of the two newly-
+; acquired ones.
+;
+; Generator: tools/extract_fiuv_ordo.ml -- do not hand-edit; re-run
+; against a fresh pdftotext dump and commit the diff instead.
+;
+; Source: "Ordo Divini Officii recitandi sacrique peragendi secundum
+; antiquam Ritus Romani formam pro anno Domini 2026", Foederatio
+; Internationalis Una Voce, compiled by Joseph Shaw (Praefatio signed
+; "Joseph Shaw, President", Feast of the Nativity of Our Lady [8 Sept]
+; 2025) -- title page and Praefatio, verified directly against the PDF's
+; own extracted text. 2025 is stated as the Federation's own 60th
+; anniversary year.
+; PDF metadata: Creator "TeX", Producer "pdfTeX-1.40.22", CreationDate
+; 2025-11-08, 128 pages.
+; URL: identified via web search as
+; https://lms.org.uk/sites/default/files/u5374/fiuv_ordo_2025-2026_1.1_a5_format.pdf
+; (hosted by the Latin Mass Society's own site alongside its own three
+; editions -- Joseph Shaw is both FIUV President and LMS Chairman, which
+; plausibly also explains why this PDF's own trailing malformed entry
+; (see COVERAGE below) is structurally identical to the LMS PDFs' own,
+; despite the two being compiled by different people); NOT independently
+; re-downloaded and byte-compared in this session -- recorded honestly
+; rather than presented as verified, the same discipline the LMS
+; fixtures' own headers use.
+; The local PDF (docs/research/ordo/%s) is gitignored (CLAUDE.md: "docs/
+; is gitignored"), so this header, not git, is this fixture's only record
+; of where it came from.
+; SHA-256 of docs/research/ordo/%s: %s
+; Extracted (UTC): %s
+; Exact commands:
+; pdftotext -layout docs/research/ordo/%s /tmp/fiuv.txt
+; dune exec tools/extract_fiuv_ordo.exe -- /tmp/fiuv.txt \
+; docs/research/ordo/%s %s
+;
+; COVERAGE: %d day-rows, %s through %s. Starts at the book's own first
+; real content line ("November MMXXV", the FIRST month header found with
+; a parseable Roman-numeral year -- used as this parser's sole date
+; anchor, see the tool's own header on why no LATER header's year is ever
+; read, the second one being a publisher typo, "December MMXV" for 2025).
+; Stops before a malformed trailing entry, structurally the SAME artefact
+; found in all three LMS editions (a stray, mislabelled duplicate of the
+; fixture's own already-extracted 1 January row, headed "1st Jan / 2025."
+; -- see extract_lms_ordo.ml's own COVERAGE section for the fuller
+; account of this shared publisher-side quirk).
+;
+; CHARACTERISATION FINDINGS (non-negotiable per the task brief -- the
+; extraordinaryform.org Ordo silently omitted St Lawrence's vigil on
+; EVERY date it covered, which nearly produced a false corroboration
+; during the RG 33 work; this Ordo was probed with the same discipline
+; before a single divergence was adjudicated):
+;
+; 1. UNIVERSAL, not diocesan: unlike the three LMS editions (which had to
+; exclude diocesan variants from every comparison, quantified in each
+; of their own fixture headers), this Ordo carries ONE block per day,
+; always. There is no [has_diocesan_variant] field in this fixture's
+; own [row] at all -- there is nothing to exclude.
+;
+; 2. OPPOSITE-PREDICTION PROBES against Rite_ef.Rubrics_ef.creed (RG
+; 475-476), RE-CHECKED BY THIS TOOL RUN against its own extracted
+; [rows] before this header was even written -- a failed probe is a
+; hard [die], never a printed claim:
+%s
+; All %d predictions confirmed, both directions -- this source is
+; discriminating, not a constant, on the Creed.
+;
+; 3. THE SUBSTRING TRAP this parser defends against, found live in this
+; corpus: "Gloria" is also the first word of "Gloria Patri" (the psalm
+; doxology), which can appear INSIDE the very Mass clause being
+; scanned (Good Friday, 3 April 2026: "Missa pr., (omittuntur ps.
+; Iudica me et Gloria Patri), Gloria, sine Credo, praef. comm." -- the
+; real, standalone Gloria mention follows immediately after). See
+; [find_word]'s own citation.
+;
+; 4. RAW SUBSTRING COUNTS measured against this session's own pdftotext
+; dump, for comparison against the task brief's own figures (328
+; Gloria / 132 sine Gloria / 119 Credo / 260 sine Credo, 262 Te Deum):
+; "sine Gloria" 132 (EXACT match), "sine Credo" 260 (EXACT match), raw
+; "Te Deum" substring 262 (EXACT match, includes negated occurrences
+; as substring hits -- 42 of them are "non dicitur Te Deum"). Raw
+; "Gloria"/"Credo" substring totals (494/411) do NOT match the brief's
+; implied positive totals (328/119) even after subtracting the 25
+; "Gloria Patri" occurrences (469, still 9 over) -- not chased further
+; here; this extractor's own token-scoped, Missa-clause-bounded counts
+; below are what this fixture actually asserts, not a forced match to
+; the brief's approximate figures.
+;
+; MEASURED DISTRIBUTION (this extraction, not the brief's figures): Gloria
+; true=%d false=%d unresolved=%d; Credo true=%d false=%d unresolved=%d;
+; Te Deum true=%d false=%d unresolved=%d.
+|}
+ dest pdf_base pdf_base pdf_sha (today ()) pdf_base pdf_base dest (List.length rows)
+ (match rows with r :: _ -> r.date | [] -> "?")
+ (match List.rev rows with r :: _ -> r.date | [] -> "?")
+ probe_lines (List.length probes) gloria_true gloria_false (List.length missing_gloria) credo_true credo_false
+ (List.length missing_credo) te_deum_true te_deum_false (List.length missing_te_deum)
+ in
+ let body = Sexplib.Sexp.to_string_hum ~indent:2 (sexp_of_list sexp_of_row rows) in
+ let oc = open_out dest in
+ Fun.protect
+ ~finally:(fun () -> close_out_noerr oc)
+ (fun () ->
+ output_string oc header;
+ output_string oc body;
+ output_string oc "\n");
+ Printf.printf "extract_fiuv_ordo: wrote %d rows to %s\n" (List.length rows) dest