aboutsummaryrefslogtreecommitdiff
path: root/tools/export_lectio_patch.py
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-19 13:43:28 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-19 13:43:28 +0200
commit6bdd5afc5e185b639f9cf5e7c3d662ddc3ecf0e1 (patch)
tree0fcef5aa47fa6b58c296ed9655c0c8e3be95ab53 /tools/export_lectio_patch.py
parentb26089630a61a54060c86ec26be6dc4fe5418b12 (diff)
downloadcolitur-6bdd5afc5e185b639f9cf5e7c3d662ddc3ecf0e1.tar.gz
colitur-6bdd5afc5e185b639f9cf5e7c3d662ddc3ecf0e1.zip
fix(naming): merge duplicate [section] blocks in the language table
F1 (review round 1): of_string's find took only the FIRST section of a given name (List.find_opt), so a second [celebration] block anywhere in the file was silently dropped in its entirety -- reproduced with two blocks (a in the first, b in the second): b resolved to the slug fallback "b", not its real value. This is a data-loss footgun aimed squarely at what happens next: Tasks 3/4 write a 595-entry, hand-edited la.ini, and appending a second [celebration] block is the natural way to paste in a new batch of names. Worse, the failure surfaces nowhere near its cause -- a coverage check reports the dropped slugs as missing a Latin name, with nothing pointing at the parser. find now folds over every section sharing the name, in file order, so all blocks merge. This also settles which value wins when the same key appears in two different blocks: later in the file wins, consistent with the existing within-one-block behaviour (unchanged, still last SM.add wins) and with what a reader expects when appending to an INI file. lang.mli now documents both duplicate policies explicitly, and notes they run OPPOSITE to Overlay_ini.get's first-match (List.assoc_opt) over the same section.fields shape -- undocumented before, and a latent trap since the two modules read the same section type but resolve a duplicate key in opposite directions. Three tests added: two [celebration] blocks both resolve (the F1 regression), a key repeated across two blocks resolves to the later block, and a key repeated within one block still resolves to the later line (confirms unchanged behaviour). Confirmed the regression test fails against the pre-fix code (b resolves to "b", the slug fallback) and passes after.
Diffstat (limited to 'tools/export_lectio_patch.py')
0 files changed, 0 insertions, 0 deletions