(* EF (1962) season and rank vocabulary. Both are closed variants private to this rite: OF code cannot name them, and this rite cannot name OF's. *) (* Seasons per RG 71-77, in canonical liturgical-year order. *) type season = | Advent (** RG 71 *) | Christmastide (** RG 72-73: to 13 January inclusive *) | Time_after_epiphany (** RG 77: from 14 January *) | Septuagesima (** RG 73 *) | Lent (** RG 74 *) | Passiontide (** RG 75 *) | Paschaltide (** RG 76 *) | Time_after_pentecost (** RG 77 *) [@@deriving sexp] (* RG 8: "Dies liturgici sunt primae, secundae, tertiae aut quartae classis." *) type rank = Class1 | Class2 | Class3 | Class4 [@@deriving sexp] let seasons = [ Advent; Christmastide; Time_after_epiphany; Septuagesima; Lent; Passiontide; Paschaltide; Time_after_pentecost ] let ranks = [ Class1; Class2; Class3; Class4 ] let season_to_string = function | Advent -> "advent" | Christmastide -> "christmastide" | Time_after_epiphany -> "time-after-epiphany" | Septuagesima -> "septuagesima" | Lent -> "lent" | Passiontide -> "passiontide" | Paschaltide -> "paschaltide" | Time_after_pentecost -> "time-after-pentecost" let season_of_string = function | "advent" -> Some Advent | "christmastide" -> Some Christmastide | "time-after-epiphany" -> Some Time_after_epiphany | "septuagesima" -> Some Septuagesima | "lent" -> Some Lent | "passiontide" -> Some Passiontide | "paschaltide" -> Some Paschaltide | "time-after-pentecost" -> Some Time_after_pentecost | _ -> None (* Deliberately NOT season_to_string: slugs are lectionary keys adopted verbatim from lectio, which names these two seasons differently. Changing these words would silently break the Plan 3 lectionary bootstrap. *) let season_slug_word = function | Christmastide -> "christmas" | Paschaltide -> "easter" | s -> season_to_string s let rank_to_string = function | Class1 -> "class-1" | Class2 -> "class-2" | Class3 -> "class-3" | Class4 -> "class-4" let rank_of_string = function | "class-1" -> Some Class1 | "class-2" -> Some Class2 | "class-3" -> Some Class3 | "class-4" -> Some Class4 | _ -> None let vocab : (season, rank) Colitur_kernel.Vocab.t = { seasons; season_to_string; season_of_string; ranks; rank_to_string; rank_of_string }