summaryrefslogtreecommitdiff
path: root/lib/kernel/mass_formulary.mli
blob: b990e69e6e143f436ea150834b6d46b564fbf980 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
(** Which Mass a day actually says, and how that was decided.

    A day does not always say its own Mass. A weekday with no proper of its own
    resumes the preceding Sunday's; a saint with no proper says a Common. The
    resolution already happens inside a rite's {!Rite.readings} -- this type is
    what makes the answer visible instead of discarding it once the citations
    have been extracted. An ordo prints it as "Mass of the 9th Sunday after
    Pentecost".

    Rite-agnostic by construction: it names a slug and a provenance, and
    carries no rank, season or rubric vocabulary of any rite. *)

type source =
  | Proper  (** the observed celebration's own citations *)
  | Own_slug  (** the lectionary's entry for the day's own slug *)
  | Preceding_sunday  (** a weekday with no proper resumes the preceding Sunday *)
  | Common  (** a saint's assigned Common *)
  | Votive
      (** a Mass said IN PLACE of the day's own office's Mass, the office
          itself being kept unchanged -- RG 309(a): "in Ecclesia universa,
          Missae quae pro sancta Maria in sabbato, iuxta temporum
          diversitatem, in Missali assignantur", corroborated by RG 431(e)'s
          own classification of that Mass as "Missa votiva IV classis ...
          de B. Maria Virg." The office/Mass split this constructor exists
          to name is general (any rite may say a votive Mass on a day whose
          OFFICE is not itself votive), even though EF's only witness today
          is the RG 78/309(a) Saturday Mass of Our Lady. *)
[@@deriving sexp]

type t = { said : Slug.t option; via : source } [@@deriving sexp]

(** The slug whose CITATIONS were actually used to build the day's
    readings, when the shipped data can name one.

    [Some] for four of the five sources: {!Proper} and {!Own_slug} each
    carry the day's own slug; {!Preceding_sunday} carries that Sunday's
    TEMPORAL slug; {!Common} carries the Common's own id.

    [None] for {!Votive}, and ONLY for {!Votive} (whole-branch review fix
    round, celebrant-rubrics-phase1): RG 309(a)'s five seasonal "Missae de
    sancta Maria in sabbato" carry no slug of their own anywhere in the
    shipped data -- their citations come from a season-keyed function
    ({!Rite_ef.Lectionary_ef.bvm_saturday_citations}), never from a
    [Lectionary.find] against any slug, so there is genuinely no slug this
    field could honestly report. An earlier version of this type set
    [said] to the day's own OFFICE slug for {!Votive} too (RG 78's Office
    of Our Lady, kept unchanged under the votive Mass) -- readable at the
    call site as "this is the slug whose Mass is said", which is false for
    exactly this one case: that slug's own [Lectionary] entry, if it has
    one at all, is NOT what the day's citations came from. [None] says so
    directly instead of silently mis-naming a Mass. The day's own OFFICE
    is not lost by this change -- it is still on the very same
    {!Liturgical_day.t} this formulary lives on, via [observed.slug],
    which every caller already has in scope regardless of [via]; this
    field does not need to duplicate it. *)

val source_to_string : source -> string