aboutsummaryrefslogtreecommitdiff
path: root/lib/rites/rite_of/precedence_of.mli
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-25 19:01:39 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-25 19:01:39 +0200
commita2be1f88ff9d2e4dd99689213692f2a03bbf999d (patch)
treeb369c70cd551ce8176fce591fdd6ebb61f9a065b /lib/rites/rite_of/precedence_of.mli
parentb9cb5060d2ba5aa7f7a9d6d97e3bced112e30fed (diff)
downloadcolitur-a2be1f88ff9d2e4dd99689213692f2a03bbf999d.tar.gz
colitur-a2be1f88ff9d2e4dd99689213692f2a03bbf999d.zip
feat(of): transcribe Tabula part I into precedence_of
The Tabula dierum liturgicorum's entries 1-4, one band branch each, scaled x10 as Precedence_ef's own table is. The Triduum is identified structurally by Easter offset because Temporal_of emits Good Friday and Holy Saturday as ordinary Lent week-6 ferias, leaving no slug to key on. Holy Thursday sits at entry 2, not entry 1: the Tabula's own entry 2 runs 'a feria II ad feriam V inclusive' and the Triduum opens with an evening Mass inside that civil day. Same granularity decision the litcal layer's L1 records on the season axis.
Diffstat (limited to 'lib/rites/rite_of/precedence_of.mli')
-rw-r--r--lib/rites/rite_of/precedence_of.mli40
1 files changed, 40 insertions, 0 deletions
diff --git a/lib/rites/rite_of/precedence_of.mli b/lib/rites/rite_of/precedence_of.mli
new file mode 100644
index 0000000..dfee504
--- /dev/null
+++ b/lib/rites/rite_of/precedence_of.mli
@@ -0,0 +1,40 @@
+(** The Tabula dierum liturgicorum of the 2002 Missale Romanum -- 13 numbered
+ entries in three parts -- plus Normae n. 60's occurrence and transfer
+ rules. The OF counterpart of {!Rite_ef.Precedence_ef}, and deliberately
+ the same shape.
+
+ Every citation names its document ("Normae n. N" or "IGMR n. N"): the
+ 2002 Missal carries both, independently numbered from 1. *)
+
+open Colitur_kernel
+
+(** Returned for a candidate shape the Tabula has no row for. [max_int], so an
+ unclassified candidate always loses. Task 4's property asserts this is
+ never reached by anything {!Rite_of.Temporal_of} constructs. *)
+val unclassified : int
+
+(** The universal (General Roman Calendar) layer id. Not a Normae citation:
+ the Tabula distinguishes universal entries (3, 7, 10) from proper ones
+ (4, 8, 11), and [Celebration.t.layer] is the only field carrying that
+ distinction. *)
+val universal_layer : string
+
+(** Prefix marking a candidate as belonging to a PROPER (diocesan, national or
+ religious) calendar -- Tabula entries 4, 8 and 11.
+
+ NO SHIPPED DATA PRODUCES THIS. Phase 3 transcribes the General Roman
+ Calendar only (the spec's own universal-calendar-only discipline), so
+ entries 4, 8 and 11 are unreachable on shipped data and are exercised in
+ tests by synthetic candidates alone. They are transcribed anyway for two
+ reasons: the transcription of a 13-entry table should be complete rather
+ than silently 10 entries long, and a user [--overlay] carrying a local
+ patron becomes correct without a later edit here. *)
+val proper_prefix : string
+
+(** [band ctx c]: the Tabula's own entry number for [c], TIMES TEN (entry 1 ->
+ 10, entry 13 -> 130); lower wins. {!unclassified} for a shape with no row.
+
+ The ×10 scaling matches {!Rite_ef.Precedence_ef.band} and exists for the
+ same reason: a future sub-rank fits between neighbours without rescaling
+ the table. *)
+val band : Vocab_of.season Precedence.context -> Vocab_of.rank Precedence.candidate -> int