aboutsummaryrefslogtreecommitdiff
path: root/lib/rites/rite_of/precedence_of.mli
blob: dfee504168b703952385f7fcad0ead42b36b198e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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