From c00bf135defe69eb303f4bcf32ae862f65c01178 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Thu, 20 Aug 2026 11:09:18 +0200 Subject: feat(templates): the ordo booklet flows continuously, not one week per page One week per page filled roughly the top third of every A5 page and cost 65 pages for a year that needed far fewer -- the original requirement, reversed here: a full 7-day week already occupies most of an A5 page even at reduced type, so the real saving was always in the year's many SHORT boundary weeks (a month's first/last week is rarely a full seven days), not in packing two full weeks together. lib/render/view.ml gains a [first] field on every week object (true on a month's own first week, the same 'cheap flag beats invented template logic' call [last] already made for grid rows) -- there is still no {{../}} parent-path syntax for a template to test this any other way. ordo.tex: the per-week \clearpage is gone. Every week keeps its existing small header line; the month's own first week additionally prints a large, ruled banner. \needspace (a template-local LaTeX dependency, not one of the frozen OCaml deps) keeps a header from being stranded alone at a page's bottom -- and a real, separate bug surfaced building it: \label placed BEFORE \needspace captured the OLD page number when \needspace went on to force a break, producing a step-stale \pageref in the TOC (fixed by moving \label after both needspace checks). The day box itself is tightened (rank/colour folded onto the same line as the citations -- an A5 box is far wider than tall, so this fits even Holy Week's longest citations with room to spare) so a second week routinely shares a page with the first. Measured result: 65 -> 53 pages, two pdflatex passes still settle the TOC, zero orphaned headers, zero overfull boxes. ordo.typ: the per-week #pagebreak is gone; #show heading's own block gains sticky:true, Typst's built-in answer to what ordo.tex needs \needspace for. The month banner needed its OWN sticky:true, found live: without it a banner could sit alone at a page's bottom with the entire month pushed to the next page -- not caught by a check for an orphaned HEADING, since the banner is plain markup, not one. Measured result: 65 -> 27 pages (Typst's own page-fill packs tighter than ordo.tex's needspace-driven approach), one compile pass, zero orphans. The five non-paginated flavours (ms/html/md/adoc/txt) never had a forced page break to remove -- they mainly needed the same header treatment for structural consistency: a week-level header nested under each month's existing one, walking months>weeks>days (the week's own padded, in-month-guarded day list) in place of the old months>days flat loop. Verified against groff, asciidoctor and an HTML parser -- zero warnings. Goldens regenerated through the Test_view.view_of path test_render_golden.ml itself uses, not the CLI (whose --lang default would have pinned output the tests never produce). --- templates/ef/ordo.ms | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'templates/ef/ordo.ms') diff --git a/templates/ef/ordo.ms b/templates/ef/ordo.ms index d578455..a5d7100 100644 --- a/templates/ef/ordo.ms +++ b/templates/ef/ordo.ms @@ -9,13 +9,22 @@ .\" (Ordo, Epistle, Gospel, Commemoration) comes from the view's term .\" vocabulary rather than being written into this file, so a translated .\" booklet needs no template edit. +.\" +.\" Defect 2: groff -ms paginates its own way (no per-week \" clearpage \" +.\" this template ever forced), so it mainly needed the same header +.\" treatment as the paginated flavours, for structural consistency -- a +.\" bold week run-in under each month's own .SH, walking months>weeks>days +.\" (the week's own padded, in-month-guarded day list) in place of the +.\" old months>days flat loop over the month's own flat one. .TL {{term.ordo}} {{year}} \(bu {{rite_name}} {{#months}} .SH {{name}} +{{#weeks}} .LP -{{#days}} +\fB{{term.week}} {{num}}\fR +{{#days}}{{#in_month}} .IP "{{dom}}" 4 {{name}} .br @@ -26,5 +35,6 @@ \s-2{{term.gospel}} {{gospel}}\s+2 {{/gospel}}{{#comms}}.br \s-2{{term.commemoration}} {{name}}\s+2 -{{/comms}}{{/days}} +{{/comms}}{{/in_month}}{{/days}} +{{/weeks}} {{/months}} -- cgit v1.3