aboutsummaryrefslogtreecommitdiff
path: root/lib/render/view.ml
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-20 22:40:13 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-20 22:40:13 +0200
commitf73bd5d0e33146c24af1e98bf9ea26bd8cbf004b (patch)
tree790100dcc0077532d9446478e51d4cd40209c1c6 /lib/render/view.ml
parent2d8942e08edcbe5430f97270bdb1233e287600ee (diff)
parent671c4264707ec8c81845059746632b00f2481d88 (diff)
downloadcolitur-f73bd5d0e33146c24af1e98bf9ea26bd8cbf004b.tar.gz
colitur-f73bd5d0e33146c24af1e98bf9ea26bd8cbf004b.zip
Merge branch 'robustness-and-hackability'
An audit of the shipped program, plus the fixes it found. The citation parser accepted OCaml integer-literal syntax, so a typo like 'Luke 1_1:5' silently became a different chapter. Four pairs of different books shared a full title -- 1 and 2 Corinthians both rendered 'Epistola ad Corinthios' -- leaving 108 citations in 2027 alone that a reader could not resolve to a book. Spec section 8.5 is now delivered rather than recorded: shipped styles re-parse their own output. Overlay errors no longer name OCaml source files at the reader. Also: the new-overlay scaffold shows citations at the right nesting level, config --show validates before printing, error messages no longer echo whole file lines, and a month answers to both spellings of its own name.
Diffstat (limited to 'lib/render/view.ml')
-rw-r--r--lib/render/view.ml14
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/render/view.ml b/lib/render/view.ml
index 0691ffb..67dfa70 100644
--- a/lib/render/view.ml
+++ b/lib/render/view.ml
@@ -267,8 +267,20 @@ let of_days ~lang ~sigla ~vocab ~rite ~year days =
let month_name = Lang.month lang m in
let month_abbr = Lang.month_abbr lang m in
T.Obj
- [ ("num", str month_num);
+ [ (* A month carries its own name under BOTH spellings. The week
+ objects nested below expose [month_name]/[month_num]/
+ [month_abbr], and a template author who learned those names
+ there naturally reaches for them one level up -- where, before
+ this, they resolved to nothing and rendered as the empty
+ string, because an unknown key is silently empty by design.
+ A month is the only scope where the short forms are
+ unambiguous, so they stay as the primary names and the
+ qualified forms are aliases. *)
+ ("num", str month_num);
("name", str month_name);
+ ("month_num", str month_num);
+ ("month_name", str month_name);
+ ("month_abbr", str month_abbr);
("days", T.List day_values);
("weeks", T.List (weeks_of_month ~first_dow ~month_num ~month_name ~month_abbr day_values)) ])
in