blob: f9ce9ab41e4772a635b6f402ffcf57f54e377198 (
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
|
open Colitur_kernel
(* [data/ef/lectionary.sexp] is located relative to the BUILD TREE, not the
process's own cwd -- the same reasoning bin/main.ml's own [data_dir]
documents at length: cwd varies with how the binary that eventually links
this library is invoked (a user's shell for `dune exec colitur --`, a
dune cram test's own sandboxed temp directory, `_build/default/test/` for
`dune test`), and nothing in this project's build pins it to the
repository root. [Sys.executable_name] resolves through /proc/self/exe on
Linux, so it reports the executable's own canonical absolute path even
when launched through a symlink (dune's cram sandbox places exactly one;
confirmed working there already by bin/main.ml). Every executable that
links this library -- bin/main.exe, test/test_colitur.exe,
tools/*.exe -- sits exactly one directory below _build/default/, so
climbing up twice and back down into data/ef always finds the file,
regardless of the caller's own cwd. *)
let data_path () =
Filename.dirname (Filename.dirname Sys.executable_name) ^ "/data/ef/lectionary.sexp"
(* Loaded once, at module initialisation: the data is year-independent and
build_day is called 3 074 246 times over the full domain. *)
let lectionary =
match Lectionary.load (data_path ()) with
| Ok l -> l
| Error e -> failwith ("lectionary_ef: " ^ e)
(* Step 1: the observed celebration's own proper.
Step 2: the day's own temporal slug.
Nothing here encodes "Lent has daily propers": the presence of an entry is
the discriminator. Verified against lectio -- Lent 1 Monday returns its own
Ezech 34:11-16, while Advent, Christmas and post-Pentecost Mondays return
their Sunday's Mass. *)
let readings ~observed ~temporal ~date:_ ~temporal_at:_ =
match observed.Celebration.citations with
| _ :: _ as cs -> cs
| [] -> (
match Lectionary.find lectionary temporal.Temporal.office.Celebration.slug with
| Some cs -> cs
| None -> [])
|