aboutsummaryrefslogtreecommitdiff
path: root/lib/citation/book.mli
diff options
context:
space:
mode:
Diffstat (limited to 'lib/citation/book.mli')
-rw-r--r--lib/citation/book.mli49
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/citation/book.mli b/lib/citation/book.mli
new file mode 100644
index 0000000..dd04e0d
--- /dev/null
+++ b/lib/citation/book.mli
@@ -0,0 +1,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