summaryrefslogtreecommitdiff
path: root/lib/rites/rite_ef
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rites/rite_ef')
-rw-r--r--lib/rites/rite_ef/dune5
-rw-r--r--lib/rites/rite_ef/vocab_ef.ml63
-rw-r--r--lib/rites/rite_ef/vocab_ef.mli28
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