summaryrefslogtreecommitdiff
path: root/bin/main.ml
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-20 19:03:02 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-20 19:03:02 +0200
commit1da70dc7ac03fe33fb92b172a0e26932764170d6 (patch)
tree01e1ee37a2be97a0b06fad70de975d8007beb702 /bin/main.ml
parent46ffa91fd4fcc2249cd097b3b3a639d37a7d592e (diff)
downloadcolitur-1da70dc7ac03fe33fb92b172a0e26932764170d6.tar.gz
colitur-1da70dc7ac03fe33fb92b172a0e26932764170d6.zip
fix(citation): close the final review's blocking findings
The branch was RED and reported green. `dune test` exited 1: test/cli.t pinned the pre-fix output `kings_1 19:3-8`, which the previous commit had already fixed to `1 Reg 19:3-8`. The gate command piped dune through `tail`, so it reported tail's exit status, and cram prints its diff BEFORE the alcotest summary, so the two lines shown were the passing ones. Verify with `dune test; echo $?`, never through a pipe. A style file's own `book` key was unreachable. sigla_book resolved against a hardcoded "abbr" and the result was applied unconditionally, so the documented `[sigla] book = full` could never win. Render gains book_string, and the style's own value is now the default that a flag or config overrides. The unit test pinned style_of_fields correctly while the wiring defeated it. `lang --check` filtered the reference set to the celebration prefix, so a file with no [bible] section at all reported a clean bill of health -- contradicting both the reason the keys change was made and lang.ml's own comment. It now reports missing book names too. The token test missed a FOURTH citation-bearing file: adjustments.sexp writes citations as `Set_citation`, not `(reference ...)`. Its 16 citations all parse, so nothing was broken, but nothing was checking. The first attempt at this fix read the file and extracted NOTHING -- the marker stopped before the opening quote, so every payload was the part label -- which is recorded in the code rather than left as a trap. Also: colitur-config(5) claimed a trailing period the data does not carry, and two la.ini scan quotes silently corrected OCR damage ("Ionae 3, I - I O", "Epistolse") while presenting themselves as verbatim. Both are now marked as corrections.
Diffstat (limited to 'bin/main.ml')
-rw-r--r--bin/main.ml31
1 files changed, 30 insertions, 1 deletions
diff --git a/bin/main.ml b/bin/main.ml
index c76a082..1207b1d 100644
--- a/bin/main.ml
+++ b/bin/main.ml
@@ -780,7 +780,11 @@ let load_sigla ~raw ~lang_t ~sigla_style_flag ~sigla_book_flag ~sigla_tradition_
in
let sigla_book_value, _ =
Colitur_naming.Config.resolve ~flag:sigla_book_flag
- ~config:(Colitur_naming.Config.sigla_book config) ~default:"abbr"
+ ~config:(Colitur_naming.Config.sigla_book config)
+ (* The STYLE's own [book] key is the default, so a style file can
+ set it and a flag/config still overrides. A hardcoded "abbr"
+ here made the documented [sigla] book key unreachable. *)
+ ~default:(Colitur_citation.Render.book_string style)
in
let book_form =
match sigla_book_value with
@@ -1870,11 +1874,36 @@ let lang_check path =
in
let missing = List.filter (fun s -> not (List.mem s have)) known in
let unknown = List.filter (fun s -> not (List.mem s known)) have in
+ (* Book names are checked the same way, and separately. Without
+ this the reference set gained a [bible] half that nothing ever
+ consulted: a file with [bible] entirely absent reported a clean
+ bill of health while every citation silently fell back to the
+ data's own Latin spelling. A miss is the TOTAL-lookup contract's
+ own signature -- [Lang.bible] returns the KEY when there is no
+ entry -- so equality with the key IS the test. *)
+ let missing_books =
+ List.concat_map
+ (fun id ->
+ let n = Colitur_citation.Book.to_string id in
+ List.filter_map
+ (fun form ->
+ let key = n ^ "." ^ form in
+ if Colitur_naming.Lang.bible t key = key then Some key
+ else None)
+ [ "full"; "abbr" ])
+ Colitur_citation.Book.all
+ in
List.iter (fun s -> Printf.printf "missing: %s\n" s) (List.sort compare missing);
+ List.iter (fun s -> Printf.printf "missing book: %s\n" s)
+ (List.sort compare missing_books);
List.iter (fun s -> Printf.printf "unknown slug: %s\n" s) (List.sort compare unknown);
+ let books_total = 2 * List.length Colitur_citation.Book.all in
Printf.printf "%s: %d of %d celebrations named, %d missing, %d unknown\n" path
(List.length known - List.length missing)
(List.length known) (List.length missing) (List.length unknown);
+ Printf.printf "%s: %d of %d book names, %d missing\n" path
+ (books_total - List.length missing_books) books_total
+ (List.length missing_books);
if unknown <> [] then exit 1)
(* `colitur config --show` -- each effective setting, its resolved value,