From fffae3b3cb50b1cf7d5b65eb592bfa1de2ed0e1c Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Tue, 11 Aug 2026 13:09:22 +0200 Subject: rite(ef): season and rank vocabulary per RG 71-77 and RG 8 Eight seasons in canonical liturgical-year order, each carrying its RG citation, and the four classes. season_slug_word is deliberately distinct from season_to_string: slugs are lectionary keys adopted verbatim from lectio, which calls Paschaltide 'easter' and Christmastide 'christmas'. --- lib/rites/rite_ef/dune | 5 ++++ lib/rites/rite_ef/vocab_ef.ml | 63 ++++++++++++++++++++++++++++++++++++++++++ lib/rites/rite_ef/vocab_ef.mli | 28 +++++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 lib/rites/rite_ef/dune create mode 100644 lib/rites/rite_ef/vocab_ef.ml create mode 100644 lib/rites/rite_ef/vocab_ef.mli (limited to 'lib/rites/rite_ef') diff --git a/lib/rites/rite_ef/dune b/lib/rites/rite_ef/dune new file mode 100644 index 0000000..26aacf3 --- /dev/null +++ b/lib/rites/rite_ef/dune @@ -0,0 +1,5 @@ +(library + (name rite_ef) + (libraries colitur_kernel sexplib) + (preprocess + (pps ppx_sexp_conv))) diff --git a/lib/rites/rite_ef/vocab_ef.ml b/lib/rites/rite_ef/vocab_ef.ml new file mode 100644 index 0000000..13e7309 --- /dev/null +++ b/lib/rites/rite_ef/vocab_ef.ml @@ -0,0 +1,63 @@ +(* 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 } diff --git a/lib/rites/rite_ef/vocab_ef.mli b/lib/rites/rite_ef/vocab_ef.mli new file mode 100644 index 0000000..7607cc1 --- /dev/null +++ b/lib/rites/rite_ef/vocab_ef.mli @@ -0,0 +1,28 @@ +(** EF (1962) season and rank vocabulary. *) + +type season = + | Advent + | Christmastide + | Time_after_epiphany + | Septuagesima + | Lent + | Passiontide + | Paschaltide + | Time_after_pentecost +[@@deriving sexp] + +type rank = Class1 | Class2 | Class3 | Class4 [@@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. Deliberately differs from + {!season_to_string} for [Christmastide] ("christmas") and [Paschaltide] + ("easter"), because slugs are lectionary keys adopted verbatim from lectio. *) +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 -- cgit v1.3