(** OF (post-1970) season and rank vocabulary. *) type season = | Advent | Christmas | Lent | Easter | Ordinary_time [@@deriving sexp] (** Normae universales de anno liturgico et de calendario (Missale Romanum editio typica tertia, 2002), Titulus I ("De diebus liturgicis"), and the Institutio Generalis Missalis Romani (IGMR) n. 346's own colour-rule prose, both cite the four graded celebrations by these exact names: a Sunday-or-weekday MYSTERY of the Lord that ranks above everything else ([Sollemnitas]), a lesser but still universally-binding celebration ([Festum]), a saint's day the calendar obliges everyone to keep ([Memoria_obligatoria]), and one a community may keep or not ([Memoria_ad_libitum]). A FIFTH constructor, [Feria], is added beyond those four -- not a fifth grade on the same scale, but a different kind of thing: an ordinary weekday carries none of the four (Normae Titulus I.IV n. 16 calls these days "feriae", never a "celebratio" of any grade), yet {!Colitur_kernel.Celebration.t} requires a [rank] on every day the way {!Colitur_kernel.Vocab_ef}'s own catch-all [Class4] does for EF. Ferias are graded for PRECEDENCE (privileged Lenten/Advent ferias outrank an ordinary one, per the Tabula dierum liturgicorum's own entries 2, 9 and 13) but that grading is a {!Colitur_kernel.Precedence.rules.band} table lookup (Phase 2), not a distinct [rank] value -- unlike EF, where [Class2]/[Class3]/[Class4] carry a privileged feria's own grade directly. See vocab_of.ml's own top-of-file comment for the primary-source citations and the design decision this rests on. *) type rank = | Sollemnitas | Festum | Memoria_obligatoria | Memoria_ad_libitum | Feria [@@deriving sexp] val seasons : season list val ranks : rank list val season_to_string : season -> string val season_of_string : string -> season option (** The word used when building a slug: lowercase, hyphenated, e.g. ["ordinary-time"] for [Ordinary_time]. Unlike {!Colitur_kernel.Vocab_ef .season_slug_word}, this is not adopted from any external lectionary -- OF has no bootstrapped-from-lectio slug legacy to preserve -- so it is simply {!season_to_string}'s own hyphenated image; kept as a separate function anyway so a future divergence (a real lectionary source using different words) does not require renaming every call site. *) val season_slug_word : season -> string val rank_to_string : rank -> string val rank_of_string : string -> rank option val vocab : (season, rank) Colitur_kernel.Vocab.t