Compare commits
5 Commits
be4759d413
...
359c7bfc49
| Author | SHA1 | Date | |
|---|---|---|---|
| 359c7bfc49 | |||
| 46b34493e2 | |||
| 0736c36494 | |||
| aeda043577 | |||
| 44feb8c6b1 |
@@ -22,17 +22,6 @@ across every hour and content type in this app.
|
|||||||
- Paschaltide should substitute the ordinary suffrages/ferial-Preces set with a single
|
- Paschaltide should substitute the ordinary suffrages/ferial-Preces set with a single
|
||||||
alleluia-form "Suffragium Paschale" — not modeled; the ordinary set is shown unchanged
|
alleluia-form "Suffragium Paschale" — not modeled; the ordinary set is shown unchanged
|
||||||
throughout Paschaltide instead.
|
throughout Paschaltide instead.
|
||||||
- Seasonal hymn-doxology swap (`hours/hymn-doxology.ts`'s `getHymnDoxologyId`/
|
|
||||||
`appendDoxology`) is only wired into **Prime and Compline** (checked 2026-09-03:
|
|
||||||
`grep -c getHymnDoxologyId` is 0 for `lauds.ts`/`vespers.ts`/`matins.ts`). Terce/Sext/None
|
|
||||||
are confirmed fine as-is — their hymn is genuinely self-contained with no seasonal swap in
|
|
||||||
the source (see `terce.yml`'s own header). Lauds, Vespers, and Matins are the real,
|
|
||||||
unexamined gap: every hymn there is stored as one fixed text captured on its proof date,
|
|
||||||
with no check yet done on whether the source actually varies its closing doxology by
|
|
||||||
season the way Prime/Compline's does — this was previously logged as a narrow "5 of 30
|
|
||||||
Vespers hymns" simplification, but that undersold it; nothing rules out Lauds/Matins
|
|
||||||
having the same issue. Needs a per-hour audit against the reference engine before either
|
|
||||||
wiring in the existing mechanism or confirming (like Terce) that no swap is needed.
|
|
||||||
|
|
||||||
2. **Minimal-proof-done, bulk content pending** — mechanism is built and trusted (a proof
|
2. **Minimal-proof-done, bulk content pending** — mechanism is built and trusted (a proof
|
||||||
date/entry already resolves correctly end-to-end); what's left is authoring/importing more
|
date/entry already resolves correctly end-to-end); what's left is authoring/importing more
|
||||||
@@ -5033,3 +5022,89 @@ the pre-existing `isa-33`/`sir-36` pointing-split half-verses (same convention,
|
|||||||
cause).
|
cause).
|
||||||
|
|
||||||
`npm test` (2018 passed), `tsc --noEmit`, and `npm run build` all pass.
|
`npm test` (2018 passed), `tsc --noEmit`, and `npm run build` all pass.
|
||||||
|
|
||||||
|
### Seasonal hymn-doxology swap — audited Lauds/Vespers/Matins, wired the two real gaps (2026-09-03, same day)
|
||||||
|
|
||||||
|
Closes the "unexamined gap" logged for Lauds/Vespers/Matins: the mechanism
|
||||||
|
(`hours/hymn-doxology.ts`) was previously wired only into Prime and Compline, with every
|
||||||
|
Lauds/Vespers/Matins hymn stored as one fixed text and no check done on whether the source
|
||||||
|
actually varies its closing doxology by season there.
|
||||||
|
|
||||||
|
Audited by exhaustively grepping every `[Hymnus ...]`/`[HymnusM ...]` section in Divinum
|
||||||
|
Officium's own `Psalterium/Special/{Major,Matutinum} Special.txt` for a real "*"
|
||||||
|
substitution marker (distinct from the unrelated antiphon-incipit "*" convention used
|
||||||
|
throughout responsory/antiphon text). The Monastic 1617 track (vu's own structural source)
|
||||||
|
turned out to carry the marker in exactly two places: Sunday's plain-default Vespers hymn
|
||||||
|
("Lucis Creator", inherited unchanged from the base secular text via a `@:`-reference with
|
||||||
|
unrelated wording substitutions) and the plain ferial Matins hymn (Day1-6, all six weekday
|
||||||
|
forms share it). Every other hymn checked — Sunday Lauds, the Mon-Sat Lauds/Vespers weekday
|
||||||
|
defaults, the Advent Lauds/Vespers/Matins hymns, and (initially assumed to need this) the
|
||||||
|
Monastic Paschaltide Lauds/Vespers/Matins hymns specifically — has its own fixed,
|
||||||
|
non-swapping doxology already baked into the text in the source itself. This generalizes
|
||||||
|
Terce/Sext/None's already-confirmed "self-contained, no swap" finding without making it
|
||||||
|
universal — Lauds needed no wiring at all as a result.
|
||||||
|
|
||||||
|
Wired the two real cases via `getHymnDoxologyId(day, perAnnumId)` (signature changed from
|
||||||
|
`(season, winner, perAnnumId)` to take the whole `LiturgicalDay`, needed for the date-window
|
||||||
|
check below) into `vespers.ts`'s new `resolveVespersHymn` helper and `matins.ts`'s
|
||||||
|
`resolveMatinsHymn` fallback tier. New `vespers-hymn-doxology-per-annum.yml`/
|
||||||
|
`matins-hymn-doxology-per-annum.yml` hold each hymn's own natural per-annum ending, split out
|
||||||
|
of `vespers-hymn-sunday.yml`/`matins-hymn-ferial.yml`.
|
||||||
|
|
||||||
|
Also closed two related real gaps found during the same source audit, both live-checked
|
||||||
|
against `hymni.pl`'s `doxology()` sub (the mechanism this project's own hymn-doxology.ts is
|
||||||
|
modeled on):
|
||||||
|
|
||||||
|
- The Common of the BVM's own `Doxology=Nat` rule (`Commune/C10.txt` through `C12Q.txt`) means
|
||||||
|
Marian Saturdays get the Nativity doxology regardless of season, not just during
|
||||||
|
Christmastide/Epiphanytide — `hymn-doxology-by-feast.yml`'s `byFeastId` now has a
|
||||||
|
`marian-saturday` entry, and `resolveOfficeWinner`'s feast-override check in
|
||||||
|
`getHymnDoxologyId` now looks up a `kind: 'temporal'` winner's id too, not just
|
||||||
|
`'sanctoral'` (a temporal id and a sanctoral id never collide, so this is safe to check
|
||||||
|
unconditionally).
|
||||||
|
- The Assumption's octave (Aug 16-22) is hardcoded in the source to the Nativity doxology
|
||||||
|
regardless of season or the day's own winner — confirmed *not* excluded for the 1570/1617
|
||||||
|
track (unlike its Dec 9-15 companion rule for the Immaculate Conception's run-up, which the
|
||||||
|
source explicitly excludes 1617 from, so that one was deliberately left unported). Checked
|
||||||
|
directly by date (`isAssumptionOctaveWindow`), same pattern as `marian-antiphon.ts`'s
|
||||||
|
`isCandlemasToHolyWednesday` — this window doesn't line up with any `Season` value.
|
||||||
|
|
||||||
|
`npm test` (2021 passed) and `tsc --noEmit` both pass.
|
||||||
|
|
||||||
|
### Seasonal hymn-doxology swap, take two — broadened beyond the source's own marker (2026-09-03, same day)
|
||||||
|
|
||||||
|
Follow-up to the entry above, at the user's explicit direction: "the doxology is a neat way to
|
||||||
|
stay tuned in to the season... we're doing a remix, not a copy." The first pass wired the
|
||||||
|
mechanism only where the Monastic source itself carries a real "*" substitution marker (two
|
||||||
|
spots total). This pass wires it into *every* plain-default Lauds/Vespers hymn (Sunday,
|
||||||
|
Mon-Sat, Advent, Lent, Passiontide, Paschaltide — 21 files total, all but the two already done)
|
||||||
|
regardless of whether the source swaps that specific hymn, matching this project's own
|
||||||
|
"Not a reconstruction" stance (repo `CLAUDE.md`) rather than the reference engine's literal
|
||||||
|
behavior.
|
||||||
|
|
||||||
|
Each hymn file's own natural per-annum ending was split out into a matching
|
||||||
|
`{hour}-hymn-{key}-doxology-per-annum.yml` (same convention as the first pass), so a
|
||||||
|
season/feast with no override (Advent, Lent — the source never swaps those, and nothing here
|
||||||
|
changes that) reproduces the exact original text; `lauds.ts`'s new `resolveLaudsHymn` and
|
||||||
|
`vespers.ts`'s widened `resolveVespersHymn` route every plain-default hymn through
|
||||||
|
`appendDoxology`/`getHymnDoxologyId` uniformly. The real, visible effect: hymns shown during
|
||||||
|
Christmastide/Epiphanytide/Corpus Christi/Sacred Heart (none of which `seasonalOfficeSuffix`
|
||||||
|
covers, so these were always the plain weekday-default hymns) now pick up the Nat/Epi/Corp/Heart
|
||||||
|
doxology instead of staying on their generic ending; Ascensiontide and the Pentecost octave now
|
||||||
|
correctly diverge from the rest of Paschaltide's "Pasch" doxology to their own "Asc"/"Pent" one
|
||||||
|
mid-season. Matins was left as before (only the ferial fallback wired, from the first pass) —
|
||||||
|
it has no per-weekday or per-season hymn files to broaden into; every other season there still
|
||||||
|
falls through to that same one ferial hymn already.
|
||||||
|
|
||||||
|
A first automated extraction pass had a real bug (a body/stanza-boundary parser that failed to
|
||||||
|
stop at `status:` when a hymn's English translation had one fewer stanza than its Latin — no
|
||||||
|
English doxology stanza was ever transcribed for several weekday hymns — silently swallowing
|
||||||
|
the YAML `status:` block into the hymn text) and was caught before being trusted: none of its
|
||||||
|
output was committed, all 20 affected originals were reverted via `git checkout` back to this
|
||||||
|
same day's untouched-by-that-bug state, and redone with a corrected parser plus manual
|
||||||
|
spot-checks of the regenerated files.
|
||||||
|
|
||||||
|
`npm test` (2021 passed) and `tsc --noEmit` both pass. Live-checked via a scratch test (not
|
||||||
|
committed) confirming Epiphanytide/Eastertide/Ascensiontide/Pentecost/Sacred-Heart plain days
|
||||||
|
now show the right doxology and Advent/Lent plain days are byte-identical to their pre-change
|
||||||
|
text.
|
||||||
|
|||||||
@@ -1,5 +1,11 @@
|
|||||||
# Per-feast override of the hymn's doxology stanza — real Divinum Officium
|
# Per-feast override of the hymn's doxology stanza — real Divinum Officium
|
||||||
# has a `winner{Doxology}` mechanism for this (some feasts specify their own).
|
# has a `winner{Doxology}` mechanism for this (some feasts specify their own),
|
||||||
# Empty until milestone 4's sanctoral propers store exists, same as
|
# plus a `Rule Doxology=` mechanism a whole Common can set (e.g. the Common
|
||||||
# prime-chapter-responsory-by-feast.yml.
|
# of the BVM's own `Doxology=Nat` — Commune/C10-C12Q.txt, live-checked
|
||||||
byFeastId: {}
|
# 2026-09-03), which is why marian-saturday is keyed here by its temporal id
|
||||||
|
# even though it's not a "feast" in the sanctoral-propers-store sense; see
|
||||||
|
# hours/hymn-doxology.ts's getHymnDoxologyId for the kind-agnostic lookup.
|
||||||
|
# Otherwise empty until milestone 4's sanctoral propers store exists, same
|
||||||
|
# as prime-chapter-responsory-by-feast.yml.
|
||||||
|
byFeastId:
|
||||||
|
marian-saturday: hymn-doxology-nat
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
id: lauds-hymn-advent-doxology-per-annum
|
||||||
|
text:
|
||||||
|
la: "Laus, honor, virtus, glória,\nDeo Patri, et Fílio,\nSancto simul Paráclito,\nIn sæculórum sǽcula.\nAmen."
|
||||||
|
en: "Honour, glory, virtue, merit,\nTo the Father and the Son,\nWith the co-eternal Spirit,\nWhile eternal ages run.\nAmen."
|
||||||
|
status:
|
||||||
|
la: draft
|
||||||
|
en: draft
|
||||||
@@ -29,12 +29,6 @@ text:
|
|||||||
Mundúmque horror cínxerit,
|
Mundúmque horror cínxerit,
|
||||||
Non pro reátu púniat,
|
Non pro reátu púniat,
|
||||||
Sed nos pius tunc prótegat.
|
Sed nos pius tunc prótegat.
|
||||||
|
|
||||||
Laus, honor, virtus, glória,
|
|
||||||
Deo Patri, et Fílio,
|
|
||||||
Sancto simul Paráclito,
|
|
||||||
In sæculórum sǽcula.
|
|
||||||
Amen.
|
|
||||||
en: |
|
en: |
|
||||||
Hark, a herald voice is calling;
|
Hark, a herald voice is calling;
|
||||||
"Christ is nigh," it seems to say;
|
"Christ is nigh," it seems to say;
|
||||||
@@ -55,12 +49,6 @@ text:
|
|||||||
Wrapping all the earth in fear,
|
Wrapping all the earth in fear,
|
||||||
May he then as our defender
|
May he then as our defender
|
||||||
On the clouds of heaven appear.
|
On the clouds of heaven appear.
|
||||||
|
|
||||||
Honour, glory, virtue, merit,
|
|
||||||
To the Father and the Son,
|
|
||||||
With the co-eternal Spirit,
|
|
||||||
While eternal ages run.
|
|
||||||
Amen.
|
|
||||||
status:
|
status:
|
||||||
la: draft
|
la: draft
|
||||||
en: draft
|
en: draft
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
id: lauds-hymn-friday-doxology-per-annum
|
||||||
|
text:
|
||||||
|
la: "Deo Patri sit glória,\nEjúsque soli Fílio,\nCum Spíritu Paráclito,\nEt nunc, et in perpétuum.\nAmen."
|
||||||
|
en: "All laud to God the Father be,\nAll praise, Eternal Son, to thee:\nAll glory, as is ever meet,\nTo God the holy Paraclete,\nAmen."
|
||||||
|
status:
|
||||||
|
la: verified
|
||||||
|
en: verified
|
||||||
@@ -26,12 +26,6 @@ text:
|
|||||||
Radícet altis sénsibus:
|
Radícet altis sénsibus:
|
||||||
Secúnda spes congáudeat,
|
Secúnda spes congáudeat,
|
||||||
Qua major exstat cáritas.
|
Qua major exstat cáritas.
|
||||||
|
|
||||||
Deo Patri sit glória,
|
|
||||||
Ejúsque soli Fílio,
|
|
||||||
Cum Spíritu Paráclito,
|
|
||||||
Et nunc, et in perpétuum.
|
|
||||||
Amen.
|
|
||||||
en: |
|
en: |
|
||||||
O Christ, whose glory fills the heaven,
|
O Christ, whose glory fills the heaven,
|
||||||
Our only hope, in mercy given;
|
Our only hope, in mercy given;
|
||||||
@@ -57,12 +51,6 @@ text:
|
|||||||
With joyous hope, in thee to live;
|
With joyous hope, in thee to live;
|
||||||
That life’s rough way may ever be
|
That life’s rough way may ever be
|
||||||
Made strong and pure by charity.
|
Made strong and pure by charity.
|
||||||
|
|
||||||
All laud to God the Father be,
|
|
||||||
All praise, Eternal Son, to thee:
|
|
||||||
All glory, as is ever meet,
|
|
||||||
To God the holy Paraclete,
|
|
||||||
Amen.
|
|
||||||
status:
|
status:
|
||||||
la: verified
|
la: verified
|
||||||
en: verified
|
en: verified
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
id: lauds-hymn-lent-doxology-per-annum
|
||||||
|
text:
|
||||||
|
la: "Te rerum univérsitas,\nClemens, adóret, Trínitas,\nEt nos novi per véniam,\nNovum canámus cánticum.\nAmen."
|
||||||
|
en: "May heaven and earth aloud proclaim\nThe Trinity's almighty fame;\nAnd we, restored to grace, rejoice\nIn newness both of heart and voice.\nAmen."
|
||||||
|
status:
|
||||||
|
la: draft
|
||||||
|
en: draft
|
||||||
@@ -25,12 +25,6 @@ text:
|
|||||||
In qua reflórent ómnia:
|
In qua reflórent ómnia:
|
||||||
Lætémur in hac ad tuam
|
Lætémur in hac ad tuam
|
||||||
Per hanc redúcti grátiam.
|
Per hanc redúcti grátiam.
|
||||||
|
|
||||||
Te rerum univérsitas,
|
|
||||||
Clemens, adóret, Trínitas,
|
|
||||||
Et nos novi per véniam,
|
|
||||||
Novum canámus cánticum.
|
|
||||||
Amen.
|
|
||||||
en: |
|
en: |
|
||||||
Jesu, salvation's Sun Divine,
|
Jesu, salvation's Sun Divine,
|
||||||
Within our inmost bosoms shine,
|
Within our inmost bosoms shine,
|
||||||
@@ -51,12 +45,6 @@ text:
|
|||||||
The days of joy for them that mourn;
|
The days of joy for them that mourn;
|
||||||
May we of their indulgence share,
|
May we of their indulgence share,
|
||||||
And bless the God that grants our prayer.
|
And bless the God that grants our prayer.
|
||||||
|
|
||||||
May heaven and earth aloud proclaim
|
|
||||||
The Trinity's almighty fame;
|
|
||||||
And we, restored to grace, rejoice
|
|
||||||
In newness both of heart and voice.
|
|
||||||
Amen.
|
|
||||||
status:
|
status:
|
||||||
la: draft
|
la: draft
|
||||||
en: draft
|
en: draft
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
id: lauds-hymn-monday-doxology-per-annum
|
||||||
|
text:
|
||||||
|
la: "Deo Patri sit glória,\nEjúsque soli Fílio,\nCum Spíritu Paráclito,\nEt nunc et in perpétuum.\nAmen."
|
||||||
|
en: "All laud to God the Father be;\nAll praise, Eternal Son, to thee;\nAll glory, as is ever meet,\nTo God the Holy Paraclete.\nAmen."
|
||||||
|
status:
|
||||||
|
la: verified
|
||||||
|
en: verified
|
||||||
@@ -41,12 +41,6 @@ text:
|
|||||||
Auróra totus pródeat,
|
Auróra totus pródeat,
|
||||||
In Patre totus Fílius,
|
In Patre totus Fílius,
|
||||||
Et totus in Verbo Pater.
|
Et totus in Verbo Pater.
|
||||||
|
|
||||||
Deo Patri sit glória,
|
|
||||||
Ejúsque soli Fílio,
|
|
||||||
Cum Spíritu Paráclito,
|
|
||||||
Et nunc et in perpétuum.
|
|
||||||
Amen.
|
|
||||||
en: |
|
en: |
|
||||||
O splendour of God’s glory bright,
|
O splendour of God’s glory bright,
|
||||||
O thou that bringest light from light,
|
O thou that bringest light from light,
|
||||||
@@ -87,12 +81,6 @@ text:
|
|||||||
Let him come forth our perfect morn,
|
Let him come forth our perfect morn,
|
||||||
The Word in God the Father One,
|
The Word in God the Father One,
|
||||||
The Father perfect in the Son.
|
The Father perfect in the Son.
|
||||||
|
|
||||||
All laud to God the Father be;
|
|
||||||
All praise, Eternal Son, to thee;
|
|
||||||
All glory, as is ever meet,
|
|
||||||
To God the Holy Paraclete.
|
|
||||||
Amen.
|
|
||||||
status:
|
status:
|
||||||
la: verified
|
la: verified
|
||||||
en: verified
|
en: verified
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
id: lauds-hymn-paschaltide-doxology-per-annum
|
||||||
|
text:
|
||||||
|
la: "Glória tibi Dómine,\nQui surrexísti a mórtuis,\nCum Patre et Sancto Spíritu,\nIn sempitérna sǽcula.\nAmen."
|
||||||
|
en: "To God the Father let us sing,\nTo God the Son, our risen King,\nAnd equally let us adore\nThe Spirit, God forevermore.\nAmen."
|
||||||
|
status:
|
||||||
|
la: draft
|
||||||
|
en: draft
|
||||||
@@ -30,12 +30,6 @@ text:
|
|||||||
In hoc pascháli gáudio,
|
In hoc pascháli gáudio,
|
||||||
Ab omni mortis ímpetu
|
Ab omni mortis ímpetu
|
||||||
Tuum defénde pópulum.
|
Tuum defénde pópulum.
|
||||||
|
|
||||||
Glória tibi Dómine,
|
|
||||||
Qui surrexísti a mórtuis,
|
|
||||||
Cum Patre et Sancto Spíritu,
|
|
||||||
In sempitérna sǽcula.
|
|
||||||
Amen.
|
|
||||||
en: |
|
en: |
|
||||||
The morn had spread her crimson rays,
|
The morn had spread her crimson rays,
|
||||||
When rang the skies with shouts of praise;
|
When rang the skies with shouts of praise;
|
||||||
@@ -61,12 +55,6 @@ text:
|
|||||||
When at the font his name we chose;
|
When at the font his name we chose;
|
||||||
Oh, let not sin our robes defile,
|
Oh, let not sin our robes defile,
|
||||||
And turn to grief the paschal smile.
|
And turn to grief the paschal smile.
|
||||||
|
|
||||||
To God the Father let us sing,
|
|
||||||
To God the Son, our risen King,
|
|
||||||
And equally let us adore
|
|
||||||
The Spirit, God forevermore.
|
|
||||||
Amen.
|
|
||||||
status:
|
status:
|
||||||
la: draft
|
la: draft
|
||||||
en: draft
|
en: draft
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
id: lauds-hymn-passiontide-doxology-per-annum
|
||||||
|
text:
|
||||||
|
la: "Glória et honor Deo\nUsquequáque altíssimo:\nUna Patri, Filióque,\nInclyto Paráclito:\nCui laus est et potéstas\nPer ætérna sǽcula.\nAmen."
|
||||||
|
en: "To the Trinity be glory\nEverlasting, as is meet;\nEqual to the Father, equal\nTo the Son, and Paraclete:\nTrinal Unity, whose praises\nAll created things repeat.\nAmen."
|
||||||
|
status:
|
||||||
|
la: draft
|
||||||
|
en: draft
|
||||||
@@ -40,14 +40,6 @@ text:
|
|||||||
Nauta mundo náufrago,
|
Nauta mundo náufrago,
|
||||||
Quem sacer cruor perúnxit,
|
Quem sacer cruor perúnxit,
|
||||||
Fusus Agni córpore.
|
Fusus Agni córpore.
|
||||||
|
|
||||||
Glória et honor Deo
|
|
||||||
Usquequáque altíssimo:
|
|
||||||
Una Patri, Filióque,
|
|
||||||
Inclyto Paráclito:
|
|
||||||
Cui laus est et potéstas
|
|
||||||
Per ætérna sǽcula.
|
|
||||||
Amen.
|
|
||||||
en: |
|
en: |
|
||||||
Thirty years among us dwelling,
|
Thirty years among us dwelling,
|
||||||
His appointed time fulfilled,
|
His appointed time fulfilled,
|
||||||
@@ -83,14 +75,6 @@ text:
|
|||||||
Harbour, like the ark of old;
|
Harbour, like the ark of old;
|
||||||
With the sacred blood anointed
|
With the sacred blood anointed
|
||||||
From the smitten Lamb that rolled.
|
From the smitten Lamb that rolled.
|
||||||
|
|
||||||
To the Trinity be glory
|
|
||||||
Everlasting, as is meet;
|
|
||||||
Equal to the Father, equal
|
|
||||||
To the Son, and Paraclete:
|
|
||||||
Trinal Unity, whose praises
|
|
||||||
All created things repeat.
|
|
||||||
Amen.
|
|
||||||
status:
|
status:
|
||||||
la: draft
|
la: draft
|
||||||
en: draft
|
en: draft
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
id: lauds-hymn-saturday-doxology-per-annum
|
||||||
|
text:
|
||||||
|
la: "Glória tibi Dómine,\nQui natus es de Vírgine,\nCum Patre et Sancto Spíritu,\nIn sempitérna sǽcula.\nAmen."
|
||||||
|
en: "All honour, laud, and glory be,\nO Jesu, Virgin-born, to thee;\nAll glory, as is ever meet,\nTo Father and to Paraclete.\nAmen."
|
||||||
|
status:
|
||||||
|
la: verified
|
||||||
|
en: verified
|
||||||
@@ -20,12 +20,6 @@ text:
|
|||||||
Et porta lucis fúlgida:
|
Et porta lucis fúlgida:
|
||||||
Vitam datam per Vírginem,
|
Vitam datam per Vírginem,
|
||||||
Gentes redémptæ, pláudite.
|
Gentes redémptæ, pláudite.
|
||||||
|
|
||||||
Glória tibi Dómine,
|
|
||||||
Qui natus es de Vírgine,
|
|
||||||
Cum Patre et Sancto Spíritu,
|
|
||||||
In sempitérna sǽcula.
|
|
||||||
Amen.
|
|
||||||
en: |
|
en: |
|
||||||
O glorious lady! throned on high
|
O glorious lady! throned on high
|
||||||
Above the star-illumined sky;
|
Above the star-illumined sky;
|
||||||
@@ -41,12 +35,6 @@ text:
|
|||||||
Light's gateway fair and glistering;
|
Light's gateway fair and glistering;
|
||||||
Life through a Virgin is restored;
|
Life through a Virgin is restored;
|
||||||
Ye ransomed nations, praise the Lord!
|
Ye ransomed nations, praise the Lord!
|
||||||
|
|
||||||
All honour, laud, and glory be,
|
|
||||||
O Jesu, Virgin-born, to thee;
|
|
||||||
All glory, as is ever meet,
|
|
||||||
To Father and to Paraclete.
|
|
||||||
Amen.
|
|
||||||
status:
|
status:
|
||||||
la: verified
|
la: verified
|
||||||
en: verified
|
en: verified
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
id: lauds-hymn-sunday-doxology-per-annum
|
||||||
|
text:
|
||||||
|
la: "Præstet hoc nobis Déitas beáta\nPatris, ac Nati, paritérque Sancti\nSpíritus, cujus réboat in omni\nGlória mundo.\nAmen."
|
||||||
|
en: "This be our portion, God forever blessed,\nFather eternal, Son, and Holy Spirit,\nWhose is the glory, which through all creation\nEver resoundeth.\nAmen."
|
||||||
|
status:
|
||||||
|
la: verified
|
||||||
|
en: verified
|
||||||
@@ -11,12 +11,6 @@ text:
|
|||||||
Pellat languórem, tríbuat salútem,
|
Pellat languórem, tríbuat salútem,
|
||||||
Donet et nobis pietáte Patris
|
Donet et nobis pietáte Patris
|
||||||
Regna polorum.
|
Regna polorum.
|
||||||
|
|
||||||
Præstet hoc nobis Déitas beáta
|
|
||||||
Patris, ac Nati, paritérque Sancti
|
|
||||||
Spíritus, cujus réboat in omni
|
|
||||||
Glória mundo.
|
|
||||||
Amen.
|
|
||||||
en: |
|
en: |
|
||||||
Lo, the dim shadows of the night are waning;
|
Lo, the dim shadows of the night are waning;
|
||||||
Lightsome and blushing, dawn of day returneth;
|
Lightsome and blushing, dawn of day returneth;
|
||||||
@@ -27,12 +21,6 @@ text:
|
|||||||
Banish all troubles, kindly health bestowing;
|
Banish all troubles, kindly health bestowing;
|
||||||
And may he grant us, of his countless blessings,
|
And may he grant us, of his countless blessings,
|
||||||
Peace that is endless.
|
Peace that is endless.
|
||||||
|
|
||||||
This be our portion, God forever blessed,
|
|
||||||
Father eternal, Son, and Holy Spirit,
|
|
||||||
Whose is the glory, which through all creation
|
|
||||||
Ever resoundeth.
|
|
||||||
Amen.
|
|
||||||
status:
|
status:
|
||||||
la: verified
|
la: verified
|
||||||
en: verified
|
en: verified
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
id: lauds-hymn-thursday-doxology-per-annum
|
||||||
|
text:
|
||||||
|
la: "Deo Patri sit glória,\nEjúsque soli Fílio,\nCum Spíritu Paráclito,\nEt nunc, et in perpétuum.\nAmen."
|
||||||
|
en: "Unto God the Father, Son,\nHoly Spirit, Three in One,\nOne in Three, be glory done,\nNow and evermore.\nAmen."
|
||||||
|
status:
|
||||||
|
la: verified
|
||||||
|
en: verified
|
||||||
@@ -21,12 +21,6 @@ text:
|
|||||||
Qui nos diébus ómnibus,
|
Qui nos diébus ómnibus,
|
||||||
Actúsque nostros próspicit
|
Actúsque nostros próspicit
|
||||||
A luce prima in vésperum.
|
A luce prima in vésperum.
|
||||||
|
|
||||||
Deo Patri sit glória,
|
|
||||||
Ejúsque soli Fílio,
|
|
||||||
Cum Spíritu Paráclito,
|
|
||||||
Et nunc, et in perpétuum.
|
|
||||||
Amen.
|
|
||||||
en: |
|
en: |
|
||||||
See the golden sun arise!
|
See the golden sun arise!
|
||||||
Let no more our darkened eyes
|
Let no more our darkened eyes
|
||||||
@@ -47,12 +41,6 @@ text:
|
|||||||
All we do, and think, and say,
|
All we do, and think, and say,
|
||||||
Watching us from break of day
|
Watching us from break of day
|
||||||
Till the twilight fall.
|
Till the twilight fall.
|
||||||
|
|
||||||
Unto God the Father, Son,
|
|
||||||
Holy Spirit, Three in One,
|
|
||||||
One in Three, be glory done,
|
|
||||||
Now and evermore.
|
|
||||||
Amen.
|
|
||||||
status:
|
status:
|
||||||
la: verified
|
la: verified
|
||||||
en: verified
|
en: verified
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
id: lauds-hymn-tuesday-doxology-per-annum
|
||||||
|
text:
|
||||||
|
la: "Deo Patri sit glória,\nEjúsque soli Fílio,\nCum Spíritu Paráclito,\nEt nunc, et in perpétuum.\nAmen."
|
||||||
|
en: "Unto God the Father, Son,\nHoly Spirit, Three in One,\nOne in Three, be glory done,\nNow and evermore.\nAmen."
|
||||||
|
status:
|
||||||
|
la: verified
|
||||||
|
en: verified
|
||||||
@@ -21,12 +21,6 @@ text:
|
|||||||
Tu rumpe noctis víncula:
|
Tu rumpe noctis víncula:
|
||||||
Tu solve peccátum vetus,
|
Tu solve peccátum vetus,
|
||||||
Novúmque lumen íngere.
|
Novúmque lumen íngere.
|
||||||
|
|
||||||
Deo Patri sit glória,
|
|
||||||
Ejúsque soli Fílio,
|
|
||||||
Cum Spíritu Paráclito,
|
|
||||||
Et nunc, et in perpétuum.
|
|
||||||
Amen.
|
|
||||||
en: |
|
en: |
|
||||||
As the bird, whose clarion gay
|
As the bird, whose clarion gay
|
||||||
Sounds before the dawn is grey,
|
Sounds before the dawn is grey,
|
||||||
@@ -47,12 +41,6 @@ text:
|
|||||||
Forged by Adam’s ancient crime;
|
Forged by Adam’s ancient crime;
|
||||||
And the light of Eden’s prime
|
And the light of Eden’s prime
|
||||||
To the world restore!
|
To the world restore!
|
||||||
|
|
||||||
Unto God the Father, Son,
|
|
||||||
Holy Spirit, Three in One,
|
|
||||||
One in Three, be glory done,
|
|
||||||
Now and evermore.
|
|
||||||
Amen.
|
|
||||||
status:
|
status:
|
||||||
la: verified
|
la: verified
|
||||||
en: verified
|
en: verified
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
id: lauds-hymn-wednesday-doxology-per-annum
|
||||||
|
text:
|
||||||
|
la: "Deo Patri sit glória,\nEjúsque soli Fílio,\nCum Spíritu Paráclito,\nEt nunc, et in perpétuum.\nAmen."
|
||||||
|
en: "Unto God the Father, Son,\nHoly Spirit, Three in One,\nOne in Three, be glory done,\nNow and evermore.\nAmen."
|
||||||
|
status:
|
||||||
|
la: verified
|
||||||
|
en: verified
|
||||||
@@ -21,12 +21,6 @@ text:
|
|||||||
Quæ luce purgéntur tua:
|
Quæ luce purgéntur tua:
|
||||||
Tu, lux Eói síderis,
|
Tu, lux Eói síderis,
|
||||||
Vultu seréno illúmina.
|
Vultu seréno illúmina.
|
||||||
|
|
||||||
Deo Patri sit glória,
|
|
||||||
Ejúsque soli Fílio,
|
|
||||||
Cum Spíritu Paráclito,
|
|
||||||
Et nunc, et in perpétuum.
|
|
||||||
Amen.
|
|
||||||
en: |
|
en: |
|
||||||
Day is breaking, dawn is bright:
|
Day is breaking, dawn is bright:
|
||||||
Hence, vain shadows of the night!
|
Hence, vain shadows of the night!
|
||||||
@@ -47,12 +41,6 @@ text:
|
|||||||
All that leads our thoughts astray!
|
All that leads our thoughts astray!
|
||||||
Through our spirits, King of day,
|
Through our spirits, King of day,
|
||||||
Pour thy light divine!
|
Pour thy light divine!
|
||||||
|
|
||||||
Unto God the Father, Son,
|
|
||||||
Holy Spirit, Three in One,
|
|
||||||
One in Three, be glory done,
|
|
||||||
Now and evermore.
|
|
||||||
Amen.
|
|
||||||
status:
|
status:
|
||||||
la: verified
|
la: verified
|
||||||
en: verified
|
en: verified
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
# The ferial Matins hymn's own natural doxology ending, split out of
|
||||||
|
# matins-hymn-ferial.yml so hours/matins.ts can swap it seasonally via
|
||||||
|
# hymn-doxology.ts — the reference source's weekday (Day1-6) Matins hymns
|
||||||
|
# each carry a real "*" substitution marker here, live-checked in
|
||||||
|
# Psalterium/Special/Matutinum Special.txt, all sharing this same Latin
|
||||||
|
# ending; the Sunday (Day0) form has no such marker (its own doxology,
|
||||||
|
# "Præstet hoc nobis Déitas beáta...", is fixed) — not modeled here since
|
||||||
|
# vu's Matins doesn't distinguish Sunday from ferial (see matins.ts).
|
||||||
|
# Text/status carried over unchanged from the original file.
|
||||||
|
id: matins-hymn-doxology-per-annum
|
||||||
|
text:
|
||||||
|
la: "Præsta, Pater piíssime,\nPatríque compar Únice,\nCum Spíritu Paráclito\nRegnans per omne sǽculum. Amen."
|
||||||
|
en: "Grant this, O Father ever One\nWith Christ, thy sole-begotten Son,\nAnd Holy Ghost, whom all adore,\nReigning and blest forevermore. Amen."
|
||||||
|
status:
|
||||||
|
la: verified
|
||||||
|
en: verified
|
||||||
@@ -4,6 +4,11 @@
|
|||||||
# year-round text; only this one (evidently the ordinary-time/per-annum
|
# year-round text; only this one (evidently the ordinary-time/per-annum
|
||||||
# form) is authored so far. Seasonal variants deferred (see TODO.md),
|
# form) is authored so far. Seasonal variants deferred (see TODO.md),
|
||||||
# same incremental-content pattern as everywhere else in this project.
|
# same incremental-content pattern as everywhere else in this project.
|
||||||
|
#
|
||||||
|
# The closing doxology stanza is split out into
|
||||||
|
# matins-hymn-doxology-per-annum.yml (see hours/matins.ts) — the source
|
||||||
|
# carries a real "*" seasonal-substitution marker there (live-checked
|
||||||
|
# 2026-09-03, Psalterium/Special/Matutinum Special.txt).
|
||||||
id: matins-hymn-ferial
|
id: matins-hymn-ferial
|
||||||
text:
|
text:
|
||||||
la: >-
|
la: >-
|
||||||
@@ -41,15 +46,6 @@ text:
|
|||||||
Et ore te canéntium
|
Et ore te canéntium
|
||||||
|
|
||||||
Laudéris in perpétuum.
|
Laudéris in perpétuum.
|
||||||
|
|
||||||
|
|
||||||
Præsta, Pater piíssime,
|
|
||||||
|
|
||||||
Patríque compar Únice,
|
|
||||||
|
|
||||||
Cum Spíritu Paráclito
|
|
||||||
|
|
||||||
Regnans per omne sǽculum. Amen.
|
|
||||||
en: >-
|
en: >-
|
||||||
Our limbs refreshed with slumber now,
|
Our limbs refreshed with slumber now,
|
||||||
|
|
||||||
@@ -85,15 +81,6 @@ text:
|
|||||||
That by their lips who thee adore
|
That by their lips who thee adore
|
||||||
|
|
||||||
Thou mayst be praised forevermore.
|
Thou mayst be praised forevermore.
|
||||||
|
|
||||||
|
|
||||||
Grant this, O Father ever One
|
|
||||||
|
|
||||||
With Christ, thy sole-begotten Son,
|
|
||||||
|
|
||||||
And Holy Ghost, whom all adore,
|
|
||||||
|
|
||||||
Reigning and blest forevermore. Amen.
|
|
||||||
status:
|
status:
|
||||||
la: verified
|
la: verified
|
||||||
en: verified
|
en: verified
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
id: vespers-hymn-advent-doxology-per-annum
|
||||||
|
text:
|
||||||
|
la: "Laus, honor, virtus, glória,\nDeo Patri, et Fílio,\nSancto simul Paráclito,\nIn sæculórum sǽcula.\nAmen."
|
||||||
|
en: "Be glory given and honour done\nTo God the Father and the Son\nAnd to the Holy Ghost on high,\nFrom age to age eternally.\nAmen."
|
||||||
|
status:
|
||||||
|
la: draft
|
||||||
|
en: draft
|
||||||
@@ -36,12 +36,6 @@ text:
|
|||||||
Ventúre judex sǽculi,
|
Ventúre judex sǽculi,
|
||||||
Consérva nos in témpore
|
Consérva nos in témpore
|
||||||
Hostis a telo pérfidi.
|
Hostis a telo pérfidi.
|
||||||
|
|
||||||
Laus, honor, virtus, glória,
|
|
||||||
Deo Patri, et Fílio,
|
|
||||||
Sancto simul Paráclito,
|
|
||||||
In sæculórum sǽcula.
|
|
||||||
Amen.
|
|
||||||
en: |
|
en: |
|
||||||
Bright builder of the heavenly poles,
|
Bright builder of the heavenly poles,
|
||||||
Eternal light of faithful souls,
|
Eternal light of faithful souls,
|
||||||
@@ -67,12 +61,6 @@ text:
|
|||||||
Shalt be our Judge, we humbly pray
|
Shalt be our Judge, we humbly pray
|
||||||
Such arms of heavenly grace to send
|
Such arms of heavenly grace to send
|
||||||
As may thy Church from foes defend.
|
As may thy Church from foes defend.
|
||||||
|
|
||||||
Be glory given and honour done
|
|
||||||
To God the Father and the Son
|
|
||||||
And to the Holy Ghost on high,
|
|
||||||
From age to age eternally.
|
|
||||||
Amen.
|
|
||||||
status:
|
status:
|
||||||
la: draft
|
la: draft
|
||||||
en: draft
|
en: draft
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
id: vespers-hymn-friday-doxology-per-annum
|
||||||
|
text:
|
||||||
|
la: "Præsta, Pater piíssime,\nPatríque compar Únice,\nCum Spíritu Paráclito\nRegnans per omne sǽculum.\nAmen."
|
||||||
|
en: "Grant this, O Father, ever One\nWith Christ, thy sole-begotten Son,\nWhom, with the Spirit we adore,\nOne God, both now and evermore.\nAmen."
|
||||||
|
status:
|
||||||
|
la: draft
|
||||||
|
en: draft
|
||||||
@@ -26,12 +26,6 @@ text:
|
|||||||
Da gratiárum múnera:
|
Da gratiárum múnera:
|
||||||
Dissólve litis víncula:
|
Dissólve litis víncula:
|
||||||
Astrínge pacis fœ́dera.
|
Astrínge pacis fœ́dera.
|
||||||
|
|
||||||
Præsta, Pater piíssime,
|
|
||||||
Patríque compar Únice,
|
|
||||||
Cum Spíritu Paráclito
|
|
||||||
Regnans per omne sǽculum.
|
|
||||||
Amen.
|
|
||||||
en: |
|
en: |
|
||||||
Maker of man, who from thy throne
|
Maker of man, who from thy throne
|
||||||
Dost order all things, God alone;
|
Dost order all things, God alone;
|
||||||
@@ -52,12 +46,6 @@ text:
|
|||||||
And grant thy gifts of grace below;
|
And grant thy gifts of grace below;
|
||||||
From chains of strife our souls release,
|
From chains of strife our souls release,
|
||||||
Bind fast the gentle bands of peace.
|
Bind fast the gentle bands of peace.
|
||||||
|
|
||||||
Grant this, O Father, ever One
|
|
||||||
With Christ, thy sole-begotten Son,
|
|
||||||
Whom, with the Spirit we adore,
|
|
||||||
One God, both now and evermore.
|
|
||||||
Amen.
|
|
||||||
status:
|
status:
|
||||||
la: draft
|
la: draft
|
||||||
en: draft
|
en: draft
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
id: vespers-hymn-lent-doxology-per-annum
|
||||||
|
text:
|
||||||
|
la: "Præsta, beáta Trínitas,\nConcéde, simplex Únitas;\nUt fructuósa sint tuis\nJejuniórum múnera.\nAmen."
|
||||||
|
en: "We pray thee, Holy Trinity,\nOne God, unchanging Unity,\nThat we from this our abstinence\nMay reap the fruits of penitence.\nAmen."
|
||||||
|
status:
|
||||||
|
la: draft
|
||||||
|
en: draft
|
||||||
@@ -26,12 +26,6 @@ text:
|
|||||||
Dona per abstinéntiam,
|
Dona per abstinéntiam,
|
||||||
Jejúnet ut mens sóbria
|
Jejúnet ut mens sóbria
|
||||||
A labe prorsus críminum.
|
A labe prorsus críminum.
|
||||||
|
|
||||||
Præsta, beáta Trínitas,
|
|
||||||
Concéde, simplex Únitas;
|
|
||||||
Ut fructuósa sint tuis
|
|
||||||
Jejuniórum múnera.
|
|
||||||
Amen.
|
|
||||||
en: |
|
en: |
|
||||||
O kind Creator, bow thine ear
|
O kind Creator, bow thine ear
|
||||||
To mark the cry, to know the tear
|
To mark the cry, to know the tear
|
||||||
@@ -52,12 +46,6 @@ text:
|
|||||||
From discipline of outward things,
|
From discipline of outward things,
|
||||||
That fasting inward secretly
|
That fasting inward secretly
|
||||||
The soul may purely dwell with thee.
|
The soul may purely dwell with thee.
|
||||||
|
|
||||||
We pray thee, Holy Trinity,
|
|
||||||
One God, unchanging Unity,
|
|
||||||
That we from this our abstinence
|
|
||||||
May reap the fruits of penitence.
|
|
||||||
Amen.
|
|
||||||
status:
|
status:
|
||||||
la: draft
|
la: draft
|
||||||
en: draft
|
en: draft
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
id: vespers-hymn-monday-doxology-per-annum
|
||||||
|
text:
|
||||||
|
la: "Præsta, Pater piíssime,\nPatríque compar Únice,\nCum Spíritu Paráclito\nRegnans per omne sǽculum.\nAmen."
|
||||||
|
en: "Grant this, O Father, ever One\nWith Christ, thy sole-begotten Son,\nAnd Holy Ghost, whom all adore,\nReigning and blest forevermore.\nAmen."
|
||||||
|
status:
|
||||||
|
la: draft
|
||||||
|
en: draft
|
||||||
@@ -25,12 +25,6 @@ text:
|
|||||||
Sic lúminis jubar ferat:
|
Sic lúminis jubar ferat:
|
||||||
Ut vana cuncta próterat:
|
Ut vana cuncta próterat:
|
||||||
Hanc falsa nulla cómprimant.
|
Hanc falsa nulla cómprimant.
|
||||||
|
|
||||||
Præsta, Pater piíssime,
|
|
||||||
Patríque compar Únice,
|
|
||||||
Cum Spíritu Paráclito
|
|
||||||
Regnans per omne sǽculum.
|
|
||||||
Amen.
|
|
||||||
en: |
|
en: |
|
||||||
O great Creator of the sky,
|
O great Creator of the sky,
|
||||||
Who wouldest not the floods on high
|
Who wouldest not the floods on high
|
||||||
@@ -51,12 +45,6 @@ text:
|
|||||||
So shall its rays direct us right:
|
So shall its rays direct us right:
|
||||||
And let this faith each error chase,
|
And let this faith each error chase,
|
||||||
And never give to falsehood place.
|
And never give to falsehood place.
|
||||||
|
|
||||||
Grant this, O Father, ever One
|
|
||||||
With Christ, thy sole-begotten Son,
|
|
||||||
And Holy Ghost, whom all adore,
|
|
||||||
Reigning and blest forevermore.
|
|
||||||
Amen.
|
|
||||||
status:
|
status:
|
||||||
la: draft
|
la: draft
|
||||||
en: draft
|
en: draft
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
id: vespers-hymn-paschaltide-doxology-per-annum
|
||||||
|
text:
|
||||||
|
la: "Glória tibi Dómine,\nQui surrexísti a mórtuis,\nCum Patre et Sancto Spíritu,\nIn sempitérna sǽcula.\nAmen."
|
||||||
|
en: "Hymns of glory, songs of praise,\nFather, unto thee we raise;\nRisen Lord, all praise to thee,\nEver with the Spirit be.\nAmen."
|
||||||
|
status:
|
||||||
|
la: draft
|
||||||
|
en: draft
|
||||||
@@ -44,12 +44,6 @@ text:
|
|||||||
In hoc pascháli gáudio,
|
In hoc pascháli gáudio,
|
||||||
Ab omni mortis ímpetu
|
Ab omni mortis ímpetu
|
||||||
Tuum defénde pópulum.
|
Tuum defénde pópulum.
|
||||||
|
|
||||||
Glória tibi Dómine,
|
|
||||||
Qui surrexísti a mórtuis,
|
|
||||||
Cum Patre et Sancto Spíritu,
|
|
||||||
In sempitérna sǽcula.
|
|
||||||
Amen.
|
|
||||||
en: |
|
en: |
|
||||||
At the Lamb's high feast we sing
|
At the Lamb's high feast we sing
|
||||||
Praise to our victorious King,
|
Praise to our victorious King,
|
||||||
@@ -85,12 +79,6 @@ text:
|
|||||||
Only sin can this destroy;
|
Only sin can this destroy;
|
||||||
From the death of sin set free,
|
From the death of sin set free,
|
||||||
Souls re-born, dear Lord, in Thee.
|
Souls re-born, dear Lord, in Thee.
|
||||||
|
|
||||||
Hymns of glory, songs of praise,
|
|
||||||
Father, unto thee we raise;
|
|
||||||
Risen Lord, all praise to thee,
|
|
||||||
Ever with the Spirit be.
|
|
||||||
Amen.
|
|
||||||
status:
|
status:
|
||||||
la: draft
|
la: draft
|
||||||
en: draft
|
en: draft
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
id: vespers-hymn-passiontide-doxology-per-annum
|
||||||
|
text:
|
||||||
|
la: "Te summa, Deus, Trínitas,\nColláudet omnis spíritus:\nQuos per Crucis mystérium\nSalvas, rege per sǽcula.\nAmen."
|
||||||
|
en: "Blest Trinity, salvation's spring,\nMay every soul thy praises sing;\nTo those thou grantest conquest by\nThe holy cross, rewards apply.\nAmen."
|
||||||
|
status:
|
||||||
|
la: draft
|
||||||
|
en: draft
|
||||||
@@ -45,12 +45,6 @@ text:
|
|||||||
Hoc Passiónis témpore
|
Hoc Passiónis témpore
|
||||||
Auge piis justítiam,
|
Auge piis justítiam,
|
||||||
Reísque dona véniam.
|
Reísque dona véniam.
|
||||||
|
|
||||||
Te summa, Deus, Trínitas,
|
|
||||||
Colláudet omnis spíritus:
|
|
||||||
Quos per Crucis mystérium
|
|
||||||
Salvas, rege per sǽcula.
|
|
||||||
Amen.
|
|
||||||
en: |
|
en: |
|
||||||
Abroad the regal banners fly,
|
Abroad the regal banners fly,
|
||||||
Now shines the cross's mystery;
|
Now shines the cross's mystery;
|
||||||
@@ -82,12 +76,6 @@ text:
|
|||||||
This holy Passiontide,
|
This holy Passiontide,
|
||||||
To give fresh merit to the saint,
|
To give fresh merit to the saint,
|
||||||
And pardon to the penitent.
|
And pardon to the penitent.
|
||||||
|
|
||||||
Blest Trinity, salvation's spring,
|
|
||||||
May every soul thy praises sing;
|
|
||||||
To those thou grantest conquest by
|
|
||||||
The holy cross, rewards apply.
|
|
||||||
Amen.
|
|
||||||
status:
|
status:
|
||||||
la: draft
|
la: draft
|
||||||
en: draft
|
en: draft
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
id: vespers-hymn-saturday-doxology-per-annum
|
||||||
|
text:
|
||||||
|
la: "Deo Patri sit glória,\nEjúsque soli Fílio,\nCum Spíritu Paráclito,\nEt nunc, et in perpétuum.\nAmen."
|
||||||
|
en: "All laud to God the Father be;\nall praise, Eternal Son, to Thee;\nall glory, as is ever meet,\nto God the Holy Paraclete.\nAmen."
|
||||||
|
status:
|
||||||
|
la: draft
|
||||||
|
en: draft
|
||||||
@@ -16,12 +16,6 @@ text:
|
|||||||
Te deprecémur véspere:
|
Te deprecémur véspere:
|
||||||
Te nostra supplex glória
|
Te nostra supplex glória
|
||||||
Per cuncta laudet sǽcula.
|
Per cuncta laudet sǽcula.
|
||||||
|
|
||||||
Deo Patri sit glória,
|
|
||||||
Ejúsque soli Fílio,
|
|
||||||
Cum Spíritu Paráclito,
|
|
||||||
Et nunc, et in perpétuum.
|
|
||||||
Amen.
|
|
||||||
en: |
|
en: |
|
||||||
O Trinity of blessed Light,
|
O Trinity of blessed Light,
|
||||||
O Unity of sovereign might,
|
O Unity of sovereign might,
|
||||||
@@ -32,12 +26,6 @@ text:
|
|||||||
to Thee our evening prayer we raise;
|
to Thee our evening prayer we raise;
|
||||||
Thee may our glory evermore
|
Thee may our glory evermore
|
||||||
in lowly reverence adore.
|
in lowly reverence adore.
|
||||||
|
|
||||||
All laud to God the Father be;
|
|
||||||
all praise, Eternal Son, to Thee;
|
|
||||||
all glory, as is ever meet,
|
|
||||||
to God the Holy Paraclete.
|
|
||||||
Amen.
|
|
||||||
status:
|
status:
|
||||||
la: draft
|
la: draft
|
||||||
en: draft
|
en: draft
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# Sunday Vespers' own natural doxology ending ("Lucis Creator", split out
|
||||||
|
# of vespers-hymn-sunday.yml so hours/vespers.ts can swap it seasonally via
|
||||||
|
# hymn-doxology.ts — the reference source carries a real "*" substitution
|
||||||
|
# marker here, live-checked in Psalterium/Special/Major Special.txt's
|
||||||
|
# "[Hymnus Day0 Vespera]", which the Monastic "[HymnusM Day0 Vespera]"
|
||||||
|
# inherits unchanged (its own two `s///` substitutions don't touch the
|
||||||
|
# doxology line) — unlike the weekday (Day1-6) and Paschaltide Vespers
|
||||||
|
# hymns, whose Monastic forms are each a separate, fixed, non-swapping
|
||||||
|
# text with no such marker. Text/status carried over unchanged from the
|
||||||
|
# original file.
|
||||||
|
id: vespers-hymn-sunday-doxology-per-annum
|
||||||
|
text:
|
||||||
|
la: "Præsta, Pater piíssime,\nPatríque compar Únice,\nCum Spíritu Paráclito\nRegnans per omne sǽculum.\nAmen."
|
||||||
|
en: "O Father, that we ask be done,\nThrough Jesus Christ, thine only Son;\nWho, with the Holy Ghost and thee,\nDoth live and reign eternally.\nAmen."
|
||||||
|
status:
|
||||||
|
la: draft
|
||||||
|
en: draft
|
||||||
@@ -6,6 +6,11 @@
|
|||||||
# here rather than left as a diff — not live-query-verified (see TODO.md).
|
# here rather than left as a diff — not live-query-verified (see TODO.md).
|
||||||
# English has no separate Monastic variant in the source (the wording
|
# English has no separate Monastic variant in the source (the wording
|
||||||
# differences don't affect translation), so it's the same text either way.
|
# differences don't affect translation), so it's the same text either way.
|
||||||
|
# The closing doxology stanza is split out into
|
||||||
|
# vespers-hymn-sunday-doxology-per-annum.yml (see hours/vespers.ts) — the source
|
||||||
|
# carries a real "*" seasonal-substitution marker there (live-checked
|
||||||
|
# 2026-09-03, Psalterium/Special/Major Special.txt), unlike every other
|
||||||
|
# Lauds/Vespers weekday hymn's fixed ending.
|
||||||
id: vespers-hymn-sunday
|
id: vespers-hymn-sunday
|
||||||
text:
|
text:
|
||||||
la: |
|
la: |
|
||||||
@@ -28,12 +33,6 @@ text:
|
|||||||
Vitále tollat prǽmium:
|
Vitále tollat prǽmium:
|
||||||
Vitémus omne nóxium:
|
Vitémus omne nóxium:
|
||||||
Purgémus omne péssimum.
|
Purgémus omne péssimum.
|
||||||
|
|
||||||
Præsta, Pater piíssime,
|
|
||||||
Patríque compar Únice,
|
|
||||||
Cum Spíritu Paráclito
|
|
||||||
Regnans per omne sǽculum.
|
|
||||||
Amen.
|
|
||||||
en: |
|
en: |
|
||||||
O blest Creator of the light,
|
O blest Creator of the light,
|
||||||
Who mak'st the day with radiance bright,
|
Who mak'st the day with radiance bright,
|
||||||
@@ -54,12 +53,6 @@ text:
|
|||||||
The heavenly gate and prize to gain:
|
The heavenly gate and prize to gain:
|
||||||
Each harmful lure aside to cast,
|
Each harmful lure aside to cast,
|
||||||
And purge away each error past.
|
And purge away each error past.
|
||||||
|
|
||||||
O Father, that we ask be done,
|
|
||||||
Through Jesus Christ, thine only Son;
|
|
||||||
Who, with the Holy Ghost and thee,
|
|
||||||
Doth live and reign eternally.
|
|
||||||
Amen.
|
|
||||||
status:
|
status:
|
||||||
la: draft
|
la: draft
|
||||||
en: draft
|
en: draft
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
id: vespers-hymn-thursday-doxology-per-annum
|
||||||
|
text:
|
||||||
|
la: "Præsta, Pater piíssime,\nPatríque compar Únice,\nCum Spíritu Paráclito\nRegnans per omne sǽculum.\nAmen."
|
||||||
|
en: "This boon, O Father, we entreat,\nThis blessing grant, Eternal Son,\nAnd Holy Ghost, the Paraclete,\nBoth now, and while the ages run.\nAmen."
|
||||||
|
status:
|
||||||
|
la: draft
|
||||||
|
en: draft
|
||||||
@@ -27,12 +27,6 @@ text:
|
|||||||
Nullum levet jactántia:
|
Nullum levet jactántia:
|
||||||
Elísa mens ne cóncidat:
|
Elísa mens ne cóncidat:
|
||||||
Eláta mens ne córruat.
|
Eláta mens ne córruat.
|
||||||
|
|
||||||
Præsta, Pater piíssime,
|
|
||||||
Patríque compar Únice,
|
|
||||||
Cum Spíritu Paráclito
|
|
||||||
Regnans per omne sǽculum.
|
|
||||||
Amen.
|
|
||||||
en: |
|
en: |
|
||||||
O sovereign Lord of nature's might,
|
O sovereign Lord of nature's might,
|
||||||
Who bad'st the water's birth divide;
|
Who bad'st the water's birth divide;
|
||||||
@@ -53,12 +47,6 @@ text:
|
|||||||
The humble cheer, the high control;
|
The humble cheer, the high control;
|
||||||
Check in each heart its proud excess,
|
Check in each heart its proud excess,
|
||||||
But raise the meek and contrite soul!
|
But raise the meek and contrite soul!
|
||||||
|
|
||||||
This boon, O Father, we entreat,
|
|
||||||
This blessing grant, Eternal Son,
|
|
||||||
And Holy Ghost, the Paraclete,
|
|
||||||
Both now, and while the ages run.
|
|
||||||
Amen.
|
|
||||||
status:
|
status:
|
||||||
la: draft
|
la: draft
|
||||||
en: draft
|
en: draft
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
id: vespers-hymn-tuesday-doxology-per-annum
|
||||||
|
text:
|
||||||
|
la: "Præsta, Pater piíssime,\nPatríque compar Únice,\nCum Spíritu Paráclito\nRegnans per omne sǽculum.\nAmen."
|
||||||
|
en: "Hear thou our prayer, Almighty King!\nHear thou our praises, while we sing,\nAdoring with the heavenly host,\nThe Father, Son, and Holy Ghost!\nAmen."
|
||||||
|
status:
|
||||||
|
la: draft
|
||||||
|
en: draft
|
||||||
@@ -27,12 +27,6 @@ text:
|
|||||||
Nullis malis appróximet:
|
Nullis malis appróximet:
|
||||||
Bonis repléri gáudeat,
|
Bonis repléri gáudeat,
|
||||||
Et mortis actum nésciat.
|
Et mortis actum nésciat.
|
||||||
|
|
||||||
Præsta, Pater piíssime,
|
|
||||||
Patríque compar Únice,
|
|
||||||
Cum Spíritu Paráclito
|
|
||||||
Regnans per omne sǽculum.
|
|
||||||
Amen.
|
|
||||||
en: |
|
en: |
|
||||||
Earth's mighty Maker, whose command
|
Earth's mighty Maker, whose command
|
||||||
Raised from the sea the solid land;
|
Raised from the sea the solid land;
|
||||||
@@ -53,12 +47,6 @@ text:
|
|||||||
And keep from every evil way;
|
And keep from every evil way;
|
||||||
Rejoice each promised good to win,
|
Rejoice each promised good to win,
|
||||||
And flee from every mortal sin.
|
And flee from every mortal sin.
|
||||||
|
|
||||||
Hear thou our prayer, Almighty King!
|
|
||||||
Hear thou our praises, while we sing,
|
|
||||||
Adoring with the heavenly host,
|
|
||||||
The Father, Son, and Holy Ghost!
|
|
||||||
Amen.
|
|
||||||
status:
|
status:
|
||||||
la: draft
|
la: draft
|
||||||
en: draft
|
en: draft
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
id: vespers-hymn-wednesday-doxology-per-annum
|
||||||
|
text:
|
||||||
|
la: "Præsta, Pater piíssime,\nPatríque compar Únice,\nCum Spíritu Paráclito\nRegnans per omne sǽculum.\nAmen."
|
||||||
|
en: "Grant this, O Father, ever One\nWith Christ thy sole-begotten Son,\nWhom, with the Spirit we adore,\nOne God, both now and evermore.\nAmen."
|
||||||
|
status:
|
||||||
|
la: draft
|
||||||
|
en: draft
|
||||||
@@ -27,12 +27,6 @@ text:
|
|||||||
Abstérge sordes méntium:
|
Abstérge sordes méntium:
|
||||||
Resólve culpæ vínculum:
|
Resólve culpæ vínculum:
|
||||||
Evérte moles críminum.
|
Evérte moles críminum.
|
||||||
|
|
||||||
Præsta, Pater piíssime,
|
|
||||||
Patríque compar Únice,
|
|
||||||
Cum Spíritu Paráclito
|
|
||||||
Regnans per omne sǽculum.
|
|
||||||
Amen.
|
|
||||||
en: |
|
en: |
|
||||||
O God, whose hand hath spread the sky,
|
O God, whose hand hath spread the sky,
|
||||||
And all its shining hosts on high,
|
And all its shining hosts on high,
|
||||||
@@ -53,12 +47,6 @@ text:
|
|||||||
Polluted souls make pure again:
|
Polluted souls make pure again:
|
||||||
Unloose the bands of guilt within:
|
Unloose the bands of guilt within:
|
||||||
Remove the burden of our sin.
|
Remove the burden of our sin.
|
||||||
|
|
||||||
Grant this, O Father, ever One
|
|
||||||
With Christ thy sole-begotten Son,
|
|
||||||
Whom, with the Spirit we adore,
|
|
||||||
One God, both now and evermore.
|
|
||||||
Amen.
|
|
||||||
status:
|
status:
|
||||||
la: draft
|
la: draft
|
||||||
en: draft
|
en: draft
|
||||||
|
|||||||
@@ -30,9 +30,7 @@ function resolvePart(part: HourPart, day: LiturgicalDay): ResolvedPart[] {
|
|||||||
return [{ kind: 'hymn', text: resolveCommon('compline-hymn-lenten') }];
|
return [{ kind: 'hymn', text: resolveCommon('compline-hymn-lenten') }];
|
||||||
}
|
}
|
||||||
const body = resolveCommon(part.textRef.id);
|
const body = resolveCommon(part.textRef.id);
|
||||||
const doxology = resolveCommon(
|
const doxology = resolveCommon(getHymnDoxologyId(day, 'compline-hymn-doxology-per-annum'));
|
||||||
getHymnDoxologyId(day.season, day.winner, 'compline-hymn-doxology-per-annum'),
|
|
||||||
);
|
|
||||||
return [{ kind: 'hymn', text: appendDoxology(body, doxology) }];
|
return [{ kind: 'hymn', text: appendDoxology(body, doxology) }];
|
||||||
}
|
}
|
||||||
case 'chapter':
|
case 'chapter':
|
||||||
|
|||||||
@@ -1,21 +1,55 @@
|
|||||||
import type { Season, DayWinner } from '../calendar/types';
|
import type { LiturgicalDay } from '../calendar/types';
|
||||||
import { resolveSeasonalPropersId } from './seasonal-propers';
|
import { resolveOfficeWinner } from './resolve-common';
|
||||||
import bySeasonData from '../data/hours/hymn-doxology-by-season.yml';
|
import bySeasonData from '../data/hours/hymn-doxology-by-season.yml';
|
||||||
import byFeastData from '../data/hours/hymn-doxology-by-feast.yml';
|
import byFeastData from '../data/hours/hymn-doxology-by-feast.yml';
|
||||||
|
|
||||||
const bySeason = bySeasonData as { bySeason: Record<string, string> };
|
const bySeason = bySeasonData as { bySeason: Record<string, string> };
|
||||||
const byFeast = byFeastData as { byFeastId: Record<string, string> };
|
const byFeast = byFeastData as { byFeastId: Record<string, string> };
|
||||||
|
|
||||||
|
const NAT_DOXOLOGY_ID = 'hymn-doxology-nat';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Divinum Officium's own doxology() sub (specials/hymni.pl) hardcodes the
|
||||||
|
* Assumption's octave (Aug 16-22) to the Nativity doxology, regardless of
|
||||||
|
* season or which feast is winning that day — live-checked in the source,
|
||||||
|
* and *not* excluded for the Monastic/Tridentine 1617 track (unlike its
|
||||||
|
* Dec 9-15 companion rule for the Immaculate Conception's run-up, which the
|
||||||
|
* source explicitly excludes 1570/1617/1963/altovadensis from, so that one
|
||||||
|
* is deliberately NOT ported here). Checked directly by date, same pattern
|
||||||
|
* as marian-antiphon.ts's isCandlemasToHolyWednesday — this window doesn't
|
||||||
|
* line up with any `Season` value.
|
||||||
|
*/
|
||||||
|
function isAssumptionOctaveWindow(isoDate: string): boolean {
|
||||||
|
const [, monthStr, dayStr] = isoDate.split('-');
|
||||||
|
const month = Number(monthStr);
|
||||||
|
const day = Number(dayStr);
|
||||||
|
return month === 8 && day > 15 && day < 23;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resolves the common-propers id for a hymn's seasonal final doxology
|
* Resolves the common-propers id for a hymn's seasonal final doxology
|
||||||
* stanza. The seasonal overrides are shared across every hymn (Divinum
|
* stanza. The seasonal overrides are shared across every hymn (Divinum
|
||||||
* Officium's own Doxologies.txt table is hymn-agnostic), but the per-annum
|
* Officium's own Doxologies.txt table is hymn-agnostic), but the per-annum
|
||||||
* default is each hymn's own natural ending, so callers supply it.
|
* default is each hymn's own natural ending, so callers supply it.
|
||||||
|
*
|
||||||
|
* Precedence, matching hymni.pl's doxology() sub: (1) an explicit per-feast
|
||||||
|
* override — real Divinum Officium's `winner{Doxology}`/`Rule Doxology=`
|
||||||
|
* mechanism, e.g. the Common of the BVM's own `Doxology=Nat` rule, which is
|
||||||
|
* why Marian Saturdays (a `kind: 'temporal'` winner, not `'sanctoral'` —
|
||||||
|
* checked regardless of kind, unlike chapter-responsory's/opening-
|
||||||
|
* versicle's own byFeastId tables, since a temporal id and a sanctoral id
|
||||||
|
* never collide) get the Nativity doxology even outside Christmastide; (2)
|
||||||
|
* the Assumption-octave date window above; (3) the season; (4) the hymn's
|
||||||
|
* own per-annum default.
|
||||||
*/
|
*/
|
||||||
export function getHymnDoxologyId(season: Season, winner: DayWinner, perAnnumId: string): string {
|
export function getHymnDoxologyId(day: LiturgicalDay, perAnnumId: string): string {
|
||||||
return resolveSeasonalPropersId(season, winner, {
|
const winner = resolveOfficeWinner(day);
|
||||||
perAnnum: perAnnumId,
|
const feastOverride = winner.kind === 'sanctoral' || winner.kind === 'temporal' ? byFeast.byFeastId[winner.id] : undefined;
|
||||||
bySeason: bySeason.bySeason,
|
if (feastOverride) {
|
||||||
byFeastId: byFeast.byFeastId,
|
return feastOverride;
|
||||||
});
|
}
|
||||||
|
if (isAssumptionOctaveWindow(day.date)) {
|
||||||
|
return NAT_DOXOLOGY_ID;
|
||||||
|
}
|
||||||
|
return bySeason.bySeason[day.season] ?? perAnnumId;
|
||||||
}
|
}
|
||||||
|
|||||||
+27
-1
@@ -6,10 +6,12 @@ import { getPsalmVerses } from '../psalter';
|
|||||||
import { getCanticle, type CanticleVerse } from './lauds-canticles';
|
import { getCanticle, type CanticleVerse } from './lauds-canticles';
|
||||||
import { getLaudsSaintOverride, getLaudsCommonOverride, type LaudsPsalmodyOverride } from './lauds-psalmody-overrides';
|
import { getLaudsSaintOverride, getLaudsCommonOverride, type LaudsPsalmodyOverride } from './lauds-psalmody-overrides';
|
||||||
import { getOpeningVersicleId } from './opening-versicle';
|
import { getOpeningVersicleId } from './opening-versicle';
|
||||||
|
import { getHymnDoxologyId } from './hymn-doxology';
|
||||||
import { getMarianAntiphonId, getMarianAntiphonLabel } from './marian-antiphon';
|
import { getMarianAntiphonId, getMarianAntiphonLabel } from './marian-antiphon';
|
||||||
import { applyFlexaMark } from './antiphon';
|
import { applyFlexaMark } from './antiphon';
|
||||||
import {
|
import {
|
||||||
resolveCommon,
|
resolveCommon,
|
||||||
|
appendDoxology,
|
||||||
getDayCollects,
|
getDayCollects,
|
||||||
getBenedictusAntiphon,
|
getBenedictusAntiphon,
|
||||||
splitNamedAntiphon,
|
splitNamedAntiphon,
|
||||||
@@ -261,6 +263,30 @@ function resolvePsalmody(day: LiturgicalDay): ResolvedPart[] {
|
|||||||
return parts;
|
return parts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Every plain-default Lauds hymn's own closing doxology stanza (split out
|
||||||
|
* into `lauds-hymn-${key}-doxology-per-annum.yml`) is re-attached here
|
||||||
|
* through the seasonal mechanism (hours/hymn-doxology.ts) rather than kept
|
||||||
|
* as fixed text — a deliberate broadening beyond the reference source
|
||||||
|
* (whose Monastic weekday/seasonal Lauds hymns mostly don't vary their own
|
||||||
|
* doxology by season at all, live-checked 2026-09-03): this project isn't
|
||||||
|
* a reconstruction (see the repo's CLAUDE.md), and a hymn's closing
|
||||||
|
* doxology is a natural, low-cost way to keep every hour visibly in step
|
||||||
|
* with the season — e.g. the plain weekday hymns used all through
|
||||||
|
* Christmastide/Epiphanytide/Corpus Christi/Sacred Heart (no
|
||||||
|
* `seasonalOfficeSuffix` covers those) previously stayed on their generic
|
||||||
|
* per-annum ending throughout; now they pick up Nat/Epi/Corp/Heart like
|
||||||
|
* Prime/Compline already did. Each `key`'s own natural ending is preserved
|
||||||
|
* as that key's per-annum default, so a season/feast with no override
|
||||||
|
* (e.g. Advent, Lent — the source itself never swaps those) reproduces the
|
||||||
|
* exact original text.
|
||||||
|
*/
|
||||||
|
function resolveLaudsHymn(day: LiturgicalDay, key: string): ResolvedText {
|
||||||
|
const body = resolveCommon(`lauds-hymn-${key}`);
|
||||||
|
const doxology = resolveCommon(getHymnDoxologyId(day, `lauds-hymn-${key}-doxology-per-annum`));
|
||||||
|
return appendDoxology(body, doxology);
|
||||||
|
}
|
||||||
|
|
||||||
/** Any sanctoral winner's (or named-temporal feast's) own capitulum/
|
/** Any sanctoral winner's (or named-temporal feast's) own capitulum/
|
||||||
* responsory/hymn/versicle (data/propers/common/lauds-{part}-${id}.yml),
|
* responsory/hymn/versicle (data/propers/common/lauds-{part}-${id}.yml),
|
||||||
* else their Common's (`${part}-${common}`), when authored — see
|
* else their Common's (`${part}-${common}`), when authored — see
|
||||||
@@ -287,7 +313,7 @@ function resolveOffice(day: LiturgicalDay): ResolvedPart[] {
|
|||||||
return [
|
return [
|
||||||
{ kind: 'chapter', text: resolveCommon(seasonSuffix ? `lauds-capitulum-${key}` : capitulumId(day.weekday)) },
|
{ kind: 'chapter', text: resolveCommon(seasonSuffix ? `lauds-capitulum-${key}` : capitulumId(day.weekday)) },
|
||||||
{ kind: 'responsory', text: resolveResponsory(resolveCommon(`lauds-responsory-${key}`), day) },
|
{ kind: 'responsory', text: resolveResponsory(resolveCommon(`lauds-responsory-${key}`), day) },
|
||||||
{ kind: 'hymn', text: resolveCommon(`lauds-hymn-${key}`) },
|
{ kind: 'hymn', text: resolveLaudsHymn(day, key) },
|
||||||
{ kind: 'versicle', text: resolveCommon(`lauds-versicle-${key}`) },
|
{ kind: 'versicle', text: resolveCommon(`lauds-versicle-${key}`) },
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-1
@@ -76,9 +76,11 @@ import { getPsalmVerses } from '../psalter';
|
|||||||
import { getPsalmsFor, type PsalmRef } from '../psalter/distribution';
|
import { getPsalmsFor, type PsalmRef } from '../psalter/distribution';
|
||||||
import { getScriptureVerses } from '../scripture';
|
import { getScriptureVerses } from '../scripture';
|
||||||
import { getOpeningVersicleId } from './opening-versicle';
|
import { getOpeningVersicleId } from './opening-versicle';
|
||||||
|
import { getHymnDoxologyId } from './hymn-doxology';
|
||||||
import { applyFlexaMark } from './antiphon';
|
import { applyFlexaMark } from './antiphon';
|
||||||
import {
|
import {
|
||||||
resolveCommon,
|
resolveCommon,
|
||||||
|
appendDoxology,
|
||||||
getDayCollect,
|
getDayCollect,
|
||||||
getOfficeOverrideId,
|
getOfficeOverrideId,
|
||||||
resolveOfficeWinner,
|
resolveOfficeWinner,
|
||||||
@@ -454,7 +456,14 @@ function resolveMatinsHymn(day: LiturgicalDay): ResolvedText {
|
|||||||
return seasonal;
|
return seasonal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return resolveCommon('matins-hymn-ferial');
|
// The plain ferial hymn's own Monastic source (Day1-6 Hymnus, Psalterium/
|
||||||
|
// Special/Matutinum Special.txt) carries a real seasonal-doxology
|
||||||
|
// substitution marker (live-checked 2026-09-03) — unlike the Advent/
|
||||||
|
// Paschaltide seasonal hymns above, whose Monastic forms are each fixed,
|
||||||
|
// non-swapping text, so only this final fallback needs the swap.
|
||||||
|
const body = resolveCommon('matins-hymn-ferial');
|
||||||
|
const doxology = resolveCommon(getHymnDoxologyId(day, 'matins-hymn-doxology-per-annum'));
|
||||||
|
return appendDoxology(body, doxology);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** The plain ferial weekday nocturn's real antiphoned psalmody — a
|
/** The plain ferial weekday nocturn's real antiphoned psalmody — a
|
||||||
|
|||||||
+1
-1
@@ -30,7 +30,7 @@ function resolvePart(part: HourPart, date: string, day: LiturgicalDay): Resolved
|
|||||||
switch (part.kind) {
|
switch (part.kind) {
|
||||||
case 'hymn': {
|
case 'hymn': {
|
||||||
const body = resolveCommon(part.textRef.id);
|
const body = resolveCommon(part.textRef.id);
|
||||||
const doxology = resolveCommon(getHymnDoxologyId(day.season, day.winner, 'hymn-doxology-per-annum'));
|
const doxology = resolveCommon(getHymnDoxologyId(day, 'hymn-doxology-per-annum'));
|
||||||
return [{ kind: 'hymn', text: appendDoxology(body, doxology) }];
|
return [{ kind: 'hymn', text: appendDoxology(body, doxology) }];
|
||||||
}
|
}
|
||||||
case 'chapter':
|
case 'chapter':
|
||||||
|
|||||||
+26
-1
@@ -5,10 +5,12 @@ import { weekdayOf } from '../calendar/weekday';
|
|||||||
import { getDayLabel } from '../calendar/day-label';
|
import { getDayLabel } from '../calendar/day-label';
|
||||||
import { getPsalmVerses } from '../psalter';
|
import { getPsalmVerses } from '../psalter';
|
||||||
import { getOpeningVersicleId } from './opening-versicle';
|
import { getOpeningVersicleId } from './opening-versicle';
|
||||||
|
import { getHymnDoxologyId } from './hymn-doxology';
|
||||||
import { getVespersSaintOverride, getVespersCommonOverride } from './vespers-psalmody-overrides';
|
import { getVespersSaintOverride, getVespersCommonOverride } from './vespers-psalmody-overrides';
|
||||||
import { applyFlexaMark } from './antiphon';
|
import { applyFlexaMark } from './antiphon';
|
||||||
import {
|
import {
|
||||||
resolveCommon,
|
resolveCommon,
|
||||||
|
appendDoxology,
|
||||||
getDayCollects,
|
getDayCollects,
|
||||||
getMagnificatAntiphon,
|
getMagnificatAntiphon,
|
||||||
splitNamedAntiphon,
|
splitNamedAntiphon,
|
||||||
@@ -170,6 +172,29 @@ function vespersCapitulumForOverride(id: string): ResolvedText {
|
|||||||
return resolveCommon(`lauds-capitulum-${id}`);
|
return resolveCommon(`lauds-capitulum-${id}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Every plain-default Vespers hymn's own closing doxology stanza (split
|
||||||
|
* out into `vespers-hymn-${key}-doxology-per-annum.yml`) is re-attached
|
||||||
|
* here through the seasonal mechanism (hours/hymn-doxology.ts) — Sunday's
|
||||||
|
* hymn ("Lucis Creator") is the one case in Lauds/Vespers/Matins' whole
|
||||||
|
* weekday-default set whose Monastic source text carries a real "*"
|
||||||
|
* seasonal-substitution marker (live-checked 2026-09-03), but every other
|
||||||
|
* key is wired the same way anyway as a deliberate broadening beyond the
|
||||||
|
* source: this project isn't a reconstruction (see the repo's CLAUDE.md),
|
||||||
|
* and the doxology is a natural, low-cost way to keep every hour visibly
|
||||||
|
* in step with the season — e.g. the plain weekday hymns used all through
|
||||||
|
* Christmastide/Epiphanytide/Corpus Christi/Sacred Heart (no
|
||||||
|
* `seasonalOfficeSuffix` covers those) previously stayed on their generic
|
||||||
|
* per-annum ending throughout. Each key's own natural ending is preserved
|
||||||
|
* as its per-annum default, so a season/feast with no override (e.g.
|
||||||
|
* Advent, Lent — the source itself never swaps those) reproduces the
|
||||||
|
* exact original text. See lauds.ts's identical resolveLaudsHymn. */
|
||||||
|
function resolveVespersHymn(day: LiturgicalDay, key: string): ResolvedText {
|
||||||
|
const body = resolveCommon(`vespers-hymn-${key}`);
|
||||||
|
const doxology = resolveCommon(getHymnDoxologyId(day, `vespers-hymn-${key}-doxology-per-annum`));
|
||||||
|
return appendDoxology(body, doxology);
|
||||||
|
}
|
||||||
|
|
||||||
/** The chapter/responsory/hymn/versicle bundle following the psalmody —
|
/** The chapter/responsory/hymn/versicle bundle following the psalmody —
|
||||||
* see hours/types.ts's 'vespers-office' doc comment. Any sanctoral
|
* see hours/types.ts's 'vespers-office' doc comment. Any sanctoral
|
||||||
* winner's (or named-temporal feast's) own proper bundle (chapter via
|
* winner's (or named-temporal feast's) own proper bundle (chapter via
|
||||||
@@ -207,7 +232,7 @@ function resolveOffice(day: LiturgicalDay): ResolvedPart[] {
|
|||||||
kind: 'responsory',
|
kind: 'responsory',
|
||||||
text: resolveResponsory(resolveCommon(seasonSuffix ? `vespers-responsory-${key}` : vespersResponsoryId(day.weekday)), day),
|
text: resolveResponsory(resolveCommon(seasonSuffix ? `vespers-responsory-${key}` : vespersResponsoryId(day.weekday)), day),
|
||||||
},
|
},
|
||||||
{ kind: 'hymn', text: resolveCommon(`vespers-hymn-${key}`) },
|
{ kind: 'hymn', text: resolveVespersHymn(day, key) },
|
||||||
{
|
{
|
||||||
kind: 'versicle',
|
kind: 'versicle',
|
||||||
text: resolveCommon(seasonSuffix ? `vespers-versicle-${key}` : vespersVersicleId(day.weekday)),
|
text: resolveCommon(seasonSuffix ? `vespers-versicle-${key}` : vespersVersicleId(day.weekday)),
|
||||||
|
|||||||
Reference in New Issue
Block a user