aboutsummaryrefslogtreecommitdiff
path: root/lib/citation/book.mli
blob: dd04e0d2047726f937ed784b3912f46f4d0c28f2 (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
41
42
43
44
45
46
47
48
49
(* SPDX-License-Identifier: AGPL-3.0-or-later *)

(** Bible books: one canonical id per book, and the tradition that decides
    which book an id denotes.

    Ids follow the VULGATE structure ([kings_3], [esdras_2],
    [ecclesiasticus]), because the Vulgate is the default tradition and the
    shipped 1962 data is Vulgate throughout. An id is internal -- it is never
    shown to a reader, exactly as a slug is never shown. *)

type id

val to_string : id -> string

(** Resolve one spelling as it appears in the data. Returns [None] for
    anything not in {!tokens}.

    SEVEN books arrive in two spellings ([Isa]/[Isa.], [3 Kgs.]/[3 Kings],
    and five more). That inconsistency is INHERITED from lectio's own ini,
    which is itself generated from missalemeum/Divinum Officium -- it is not
    a colitur transcription error, and the data is deliberately left
    untouched. Both spellings resolve here instead. *)
val of_token : string -> id option

(** Every id this build knows, for coverage checks. *)
val all : id list

(** Every accepted spelling paired with its id. *)
val tokens : (string * id) list

(** A numbering tradition: which book an id denotes. Separate from NAMING
    (what a book is called), which lives in a language file's [\[bible\]]
    section, because naming varies by language and this does not -- "modern
    numbering" is the same decision in Latin, Polish and English. *)
type tradition

(** The identity tradition: the Vulgate, as the 1962 Missal prints it. The
    default; colitur never silently renumbers. *)
val vulgate : tradition

(** Build a tradition from an ini section's fields. An entry naming an
    unknown id on either side is IGNORED, not fatal: a traditions file
    written for a newer colitur must still work on an older one. Use
    {!unknown_fields} to report them. *)
val tradition_of_fields : (string * string) list -> tradition

val unknown_fields : (string * string) list -> string list

val map : tradition -> id -> id