calendar: First/Second Vespers anticipation for Compline
Compline (and eventually Vespers) now resolves off whichever day's identity actually governs tonight's office, not always today's — real practice anticipates a higher-ranking tomorrow (Alma Redemptoris Mater starting the Saturday evening before Advent I, Ave Regina Caelorum starting the eve of Candlemas, Regina Caeli starting at the Easter Vigil), which the previous date-only resolution missed entirely. calendar/vespers.ts's resolveEveningDay compares today's and tomorrow's precedence (reusing commemorations.ts's FeastClass machinery) to decide. One deliberate absolute exception, caught by a failing test: a short, explicit list of supreme fixed/movable feasts (Easter, Christmas, Epiphany, Candlemas, Ascension, Corpus Christi, Sacred Heart) always wins tomorrow's Vespers before checking whether today would otherwise keep its own — without it, Holy Saturday's privileged-feria status incorrectly blocked Easter's anticipation, the textbook case this whole thing exists to get right. hours/compline.ts now resolves its whole ordo through resolveEveningDay instead of resolveDay.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import type { HourDefinition, HourPart, ResolvedOrdo, ResolvedPart } from './types';
|
||||
import type { LiturgicalDay } from '../calendar/types';
|
||||
import { resolveDay } from '../calendar';
|
||||
import { resolveEveningDay } from '../calendar/vespers';
|
||||
import { getPsalmVerses } from '../psalter';
|
||||
import { getCommonProper } from '../propers';
|
||||
import { getHymnDoxologyId } from './hymn-doxology';
|
||||
@@ -89,7 +89,13 @@ function resolvePart(part: HourPart, day: LiturgicalDay): ResolvedPart[] {
|
||||
}
|
||||
|
||||
export function resolveOrdo(date: string): ResolvedOrdo {
|
||||
const day = resolveDay(date);
|
||||
// Every season/occurring-dependent part below (hymn, doxology, Preces
|
||||
// omitOnDouble, opening versicle, Nunc Dimittis rank, Marian antiphon) is
|
||||
// an evening-hour concern, so the whole ordo resolves off whichever day's
|
||||
// identity actually governs tonight — see calendar/vespers.ts. Nothing
|
||||
// here is date-literal the way Prime's Martyrology is, so there's no
|
||||
// need to keep a separate "real" day around.
|
||||
const day = resolveEveningDay(date);
|
||||
const parts = complineDefinition.parts.flatMap((part) => resolvePart(part, day));
|
||||
return { hourId: 'compline', date, parts };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user