(** 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; via : source } [@@deriving sexp] (** The slug whose Mass is said. For {!Proper}, {!Own_slug} and {!Votive} this is the day's own; for {!Preceding_sunday} it is that Sunday's TEMPORAL slug; for {!Common} it is the Common's own id. *) val source_to_string : source -> string