(* This module's name matches the library's own name ("rite_ef"), so dune treats it as the library's top-level module instead of generating one automatically -- every sibling module this library defines must be re-exported here explicitly, or external references to e.g. [Rite_ef.Temporal_ef] (bin/main.ml, every test/ file that opens this rite) stop resolving. *) module Vocab_ef = Vocab_ef module Temporal_ef = Temporal_ef module Precedence_ef = Precedence_ef module Lectionary_ef = Lectionary_ef module Rubrics_ef = Rubrics_ef open Colitur_kernel (* [~lectionary] and [~commons], not values closed over an internal load: fix round 1 (coordinator review) found the previous version -- [context] as a plain value, [Lectionary_ef] loading data/ef/lectionary.sexp as a side effect of being linked -- made `colitur easter ` (no lectionary data touched at all) die at startup the moment that file was absent from a bare `dune build`'s own default target. A function mirrors how the sanctoral [Layer.t] already travels: caller-supplied, not embedded (see this module's own .mli doc comment on [context] for the fuller rationale, shared with data/ef/sanctoral.sexp). [~commons] is REQUIRED, not optional-with-a-default: an omitted [?commons] would silently give a caller [Commons.empty], i.e. a rite whose class-3 saints quietly lose their Mass, and nothing in the suite compares citations across layers 3-5, so that loss would be invisible. A caller that genuinely has no Commons data passes [Lectionary_ef.Commons.empty] and says so. *) let context ~lectionary ~commons : (Vocab_ef.season, Vocab_ef.rank) Rite.t = { Rite.id = Temporal_ef.id; vocab = Vocab_ef.vocab; year_start = Temporal_ef.year_start; temporal = Temporal_ef.temporal; anchors = Temporal_ef.anchors; (* RG's own computus: the Roman rite reckons Easter on the Gregorian calendar. Supplied here rather than assumed by the kernel, so a Julian-reckoning rite can supply {!Computus.julian_easter} instead. Read by [Layer.index] for [Date_spec.Easter_offset]. *) easter = Colitur_kernel.Computus.gregorian_easter; (* The calendarium's own bissextile footnote (February, LT.txt:5011-5014): see {!Temporal_ef.bissextile_fixed_key} for the full citation and mechanism. Read by [Layer.on_date]'s fixed half only. *) fixed_key = Temporal_ef.bissextile_fixed_key; rules = { Precedence.band = Precedence_ef.band; disposition = Precedence_ef.disposition; admit = Precedence_ef.admit; vigil_feast = Precedence_ef.vigil_feast }; season_runs = Vocab_ef.seasons; transfer_target = Precedence_ef.transfer_target; readings = Lectionary_ef.readings ~lectionary ~commons; (* The one shape the EF Mass has ever had: an Epistle and a Gospel, nothing else (RG carries no Second-reading or responsorial-psalm structure -- that is an OF/OLM 1981 innovation, {!Rite.t .citation_shapes}'s own doc comment has the citation). Kept as the single-element list it always implicitly was before this field existed, so EF's resolved output is unaffected letter for letter. *) citation_shapes = [ [ Citation.First; Citation.Gospel ] ]; creed = Rubrics_ef.creed; gloria = Rubrics_ef.gloria; preface = Rubrics_ef.preface }