diff options
Diffstat (limited to 'lib/rites/rite_ef')
| -rw-r--r-- | lib/rites/rite_ef/dune | 5 | ||||
| -rw-r--r-- | lib/rites/rite_ef/vocab_ef.ml | 63 | ||||
| -rw-r--r-- | lib/rites/rite_ef/vocab_ef.mli | 28 |
3 files changed, 96 insertions, 0 deletions
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 |
