aboutsummaryrefslogtreecommitdiff
path: root/templates/ef
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-20 11:42:25 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-20 11:42:25 +0200
commit900d1d781e62a08a1bda1285c8e8611a7baa0f2f (patch)
tree621e920076409f74e164cfc15016ad9910bcf40a /templates/ef
parente2e56ac5af290b60ea01037e58e8bc00545c021c (diff)
downloadcolitur-900d1d781e62a08a1bda1285c8e8611a7baa0f2f.tar.gz
colitur-900d1d781e62a08a1bda1285c8e8611a7baa0f2f.zip
feat(templates): week headers stop repeating the month name
Every ordo booklet week header used to print the month name again even though the month heading right above it already established it -- pure noise, repeated once per week for the whole year. All seven ordo flavours now print the week's own Roman numeral plus the span of dates it covers instead, e.g. "Hebdomada I (Ian 1-2)", with no month name on the line; the LaTeX table of contents and the Typst outline (built automatically from its own headings, so editing the heading is the whole fix there) read the same way. A single-day week (e.g. a lone trailing Sunday) renders "Ian 31", not "Ian 31-31": each flavour's dash sits inside an inverted single_day section, so the engine -- which cannot itself compare first_dom to last_dom -- never has to decide anything, it only follows the data. The dash character matches each flavour's own existing convention: LaTeX/Typst's own "--" ligature, groff's \(en escape (alongside its existing \(bu), HTML's &ndash; entity (alongside its existing &middot;), and a literal en dash for the three flavours with no escaping (adoc/md/txt). Every in-template comment describing the new fields is written without ever typing two curly braces together, including in the two comments this touches that used to embed a live {{month_name}}/{{term.week}} tag pair inside a LaTeX % comment -- harmless only because that whole line already started with %, not because the engine has any comment awareness (it has none). Goldens regenerated through test_render_golden.ml's own render path (Test_view.view_of + Template.render_string), not the CLI -- the two differ in default language and would otherwise pin output the test suite never produces. Grid goldens are untouched, matching the grid templates, which have no week header. Verified against real pdflatex (two passes) and typst compile output, not merely the golden pins: both flavours print "Hebdomada I (Ian 1-2)", "Hebdomada II (Ian 3-9)", "Hebdomada III (Ian 10-16)" as their first three week headers and identical text in the table of contents/outline, and both show "Hebdomada VI (Ian 31)" for January's own trailing single-day week with no dash.
Diffstat (limited to 'templates/ef')
-rw-r--r--templates/ef/ordo.adoc5
-rw-r--r--templates/ef/ordo.html7
-rw-r--r--templates/ef/ordo.md7
-rw-r--r--templates/ef/ordo.ms7
-rw-r--r--templates/ef/ordo.tex28
-rw-r--r--templates/ef/ordo.txt2
-rw-r--r--templates/ef/ordo.typ27
7 files changed, 57 insertions, 26 deletions
diff --git a/templates/ef/ordo.adoc b/templates/ef/ordo.adoc
index 0b5785d..f250426 100644
--- a/templates/ef/ordo.adoc
+++ b/templates/ef/ordo.adoc
@@ -19,6 +19,9 @@
// hand-built TOC and ordo.typ's outline already do. Walks
// 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.
+// Each week heading is its own Roman numeral plus the span of in-month
+// dates it covers (e.g. Hebdomada I (Ian 1-2)), not the month name again
+// -- the month's own == heading above already establishes it once.
= {{term.ordo}} {{year}} · {{rite_name}}
:toc:
@@ -26,7 +29,7 @@
== {{name}}
{{#weeks}}
-=== {{term.week}} {{num}}
+=== {{term.week}} {{num_roman}} ({{month_abbr}} {{first_dom}}{{^single_day}}–{{last_dom}}{{/single_day}})
{{#days}}{{#in_month}}
*{{dom}}* {{name}} +
diff --git a/templates/ef/ordo.html b/templates/ef/ordo.html
index 4936974..6fdba6f 100644
--- a/templates/ef/ordo.html
+++ b/templates/ef/ordo.html
@@ -15,7 +15,10 @@
(unchanged) and a new h3 per week, using the week's own padded,
in-month-flagged day list rather than the month's flat, unpadded
one -- guarded accordingly below, the same guard every paginated
- flavour's grid already needs for that field. -->
+ flavour's grid already needs for that field. Each h3 is its own
+ Roman numeral plus the span of in-month dates it covers (e.g.
+ Hebdomada I (Ian 1-2)), not the month name again -- the h2 above
+ already establishes it once. -->
<!doctype html>
<html lang="la"><head><meta charset="utf-8">
<title>{{term.ordo}} {{year}}</title>
@@ -32,7 +35,7 @@
</style></head><body>
<h1>{{term.ordo}} {{year}} &middot; {{rite_name}}</h1>
{{#months}}<h2>{{name}}</h2>
-{{#weeks}}<h3>{{term.week}} {{num}}</h3>
+{{#weeks}}<h3>{{term.week}} {{num_roman}} ({{month_abbr}} {{first_dom}}{{^single_day}}&ndash;{{last_dom}}{{/single_day}})</h3>
{{#days}}{{#in_month}}<div class="day {{colour}}">
<span class="dom">{{dom}}</span>{{name}}
<div class="meta">{{rank}} &middot; {{colour}}{{#first}} &middot; {{term.epistle}} {{first}}{{/first}}{{#gospel}} &middot; {{term.gospel}} {{gospel}}{{/gospel}}</div>
diff --git a/templates/ef/ordo.md b/templates/ef/ordo.md
index fd8094f..59a92db 100644
--- a/templates/ef/ordo.md
+++ b/templates/ef/ordo.md
@@ -15,14 +15,17 @@
the same header treatment as the paginated flavours, for structural
consistency -- a ### per week under each month's ##, walking
months>weeks>days (the week's own padded, in-month-guarded day
- list, not the flat unpadded one the old months>days loop used). -->
+ list, not the flat unpadded one the old months>days loop used). Each
+ week heading is its own Roman numeral plus the span of in-month dates
+ it covers (e.g. Hebdomada I (Ian 1-2)), not the month name again --
+ the month's own ## heading above already establishes it once. -->
# {{term.ordo}} {{year}} · {{rite_name}}
{{#months}}
## {{name}}
{{#weeks}}
-### {{term.week}} {{num}}
+### {{term.week}} {{num_roman}} ({{month_abbr}} {{first_dom}}{{^single_day}}–{{last_dom}}{{/single_day}})
{{#days}}{{#in_month}}
**{{dom}}** {{name}}
diff --git a/templates/ef/ordo.ms b/templates/ef/ordo.ms
index a5d7100..1035a0d 100644
--- a/templates/ef/ordo.ms
+++ b/templates/ef/ordo.ms
@@ -15,7 +15,10 @@
.\" 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.
+.\" old months>days flat loop over the month's own flat one. The run-in
+.\" is its own Roman numeral plus the span of in-month dates it covers
+.\" (e.g. Hebdomada I (Ian 1-2)), not the month name again -- the month's
+.\" own .SH heading above already establishes it once.
.TL
{{term.ordo}} {{year}} \(bu {{rite_name}}
{{#months}}
@@ -23,7 +26,7 @@
{{name}}
{{#weeks}}
.LP
-\fB{{term.week}} {{num}}\fR
+\fB{{term.week}} {{num_roman}} ({{month_abbr}} {{first_dom}}{{^single_day}}\(en{{last_dom}}{{/single_day}})\fR
{{#days}}{{#in_month}}
.IP "{{dom}}" 4
{{name}}
diff --git a/templates/ef/ordo.tex b/templates/ef/ordo.tex
index a7fcbb3..4ffc9e9 100644
--- a/templates/ef/ordo.tex
+++ b/templates/ef/ordo.tex
@@ -7,11 +7,13 @@
% the top third of every page and cost 65 pages for a year that needed far
% fewer; that requirement is reversed here on purpose, not merely relaxed).
% Structure stays scannable through two header weights instead: every
-% week still opens with its existing small header line ({{month_name}} .
-% {{term.week}} N), and the month's own FIRST week additionally gets a
-% large, ruled banner above that line ({{#first}}...{{/first}}, a real
-% view field -- lib/render/view.ml -- not template-side arithmetic, since
-% this engine has no way to test "is this the first item" any other way).
+% week still opens with its own header line -- a Roman week number plus
+% the span of in-month dates it covers, e.g. Hebdomada I (Ian 1-2), with
+% no month name repeated, since the month heading above already
+% establishes it -- and the month's own FIRST week additionally gets a
+% large, ruled banner above that line (view field [first], lib/render/
+% view.ml -- not template-side arithmetic, since this engine has no way
+% to test "is this the first item" any other way).
% \needspace (a genuine, tiny dependency, not one of the deps this project
% freezes at the OCaml level -- LaTeX packages are a template author's own
% concern) keeps a header from being stranded alone at a page's bottom
@@ -68,9 +70,15 @@
% The engine has no parent-path syntax: nested inside a month's own week
% loop, a bare week-number reference finds the WEEK's own number, and there
% is no way to reach the enclosing month's from there. That is why each
-% week object carries its own month number and month name fields
-% (lib/render/view.ml, Task 5) -- used throughout below instead of a
-% parent-path reference, which this engine cannot express.
+% week object carries its own month number, month name and abbreviated
+% month name fields (lib/render/view.ml) -- used throughout below instead
+% of a parent-path reference, which this engine cannot express. The same
+% view resolves the week's own Roman numeral too (num_roman, arabic num
+% kept alongside it for a tradition that wants it), the day-of-month of
+% its first and last in-month day (first_dom/last_dom), and single_day
+% (true for a one-day week) -- a punctuation choice (Ian 1 vs Ian 1-2)
+% this logic-less engine cannot make for itself, so the template below
+% picks the dash only inside an inverted single_day section.
%
% This template's own %-comments are plain text to the engine: it has no
% awareness of LaTeX's comment syntax, and a stray double-brace pair inside
@@ -127,7 +135,7 @@
\begin{small}
{{#months}}
\textbf{ {{name}} }\par
-{{#weeks}}\hspace*{4mm}{{term.week}} {{num}}\dotfill\pageref{w{{month_num}}-{{num}}}\par
+{{#weeks}}\hspace*{4mm}{{term.week}} {{num_roman}} ({{month_abbr}} {{first_dom}}{{^single_day}}--{{last_dom}}{{/single_day}})\dotfill\pageref{w{{month_num}}-{{num}}}\par
{{/weeks}}
{{/months}}
\end{small}
@@ -142,7 +150,7 @@
{{/first}}
\needspace{16mm}
\label{w{{month_num}}-{{num}}}
-{\bfseries\large {{month_name}} }\hfill{\small {{term.week}} {{num}}}\par\vspace{0.5mm}
+{\bfseries\large {{term.week}} {{num_roman}} }{\small ({{month_abbr}} {{first_dom}}{{^single_day}}--{{last_dom}}{{/single_day}})}\par\vspace{0.5mm}
{{#days}}
{{#in_month}}
\begin{tcolorbox}[colback=white,colframe=black!35,boxrule=0.3pt,left=1.4mm,right=1.4mm,top=0.2mm,bottom=0.2mm,before skip=0.2mm,after skip=0mm]
diff --git a/templates/ef/ordo.txt b/templates/ef/ordo.txt
index 0ac0366..1edf0a9 100644
--- a/templates/ef/ordo.txt
+++ b/templates/ef/ordo.txt
@@ -1,7 +1,7 @@
{{#months}}
{{name}} {{year}}
{{#weeks}}
-== {{term.week}} {{num}} ==
+== {{term.week}} {{num_roman}} ({{month_abbr}} {{first_dom}}{{^single_day}}–{{last_dom}}{{/single_day}}) ==
{{#days}}{{#in_month}}
{{dom}} {{name}}
{{rank}} · {{colour}}
diff --git a/templates/ef/ordo.typ b/templates/ef/ordo.typ
index 85b609e..829bf1e 100644
--- a/templates/ef/ordo.typ
+++ b/templates/ef/ordo.typ
@@ -27,9 +27,16 @@
// The engine has no parent-path syntax: nested inside a month's own week
// loop, a bare week-number reference finds the WEEK's own number, and there
// is no way to reach the enclosing month's from there. That is why each
-// week object carries its own month number and month name fields
-// (lib/render/view.ml), used below via month_name/month_num instead of a
-// parent-path reference the engine cannot express.
+// week object carries its own month number, month name and abbreviated
+// month name fields (lib/render/view.ml), used below via month_name/
+// month_num/month_abbr instead of a parent-path reference the engine
+// cannot express. The same view resolves the week's own Roman numeral too
+// (num_roman, arabic num kept alongside it for a tradition that wants it),
+// the day-of-month of its first and last in-month day (first_dom/
+// last_dom), and single_day (true for a one-day week) -- the punctuation
+// choice between Ian 1 and Ian 1-2 this logic-less engine cannot make for
+// itself, so the heading below picks the dash only inside an inverted
+// single_day section.
//
// The engine also rejects an empty tag path outright (a bare-dot section or
// variable is a parse error, not an invented "current context" behaviour),
@@ -46,10 +53,14 @@
// per month with its weeks dotted-and-paginated underneath, because it
// walks the months-then-weeks nesting directly in its own hand-built TOC
// loop. Typst's outline instead builds its table of contents automatically
-// from real document headings, so this stays a flat list of "Month . Week
-// N" headings rather than being restructured into two heading levels --
-// changing outline depth/structure is a bigger, riskier change than this
-// defect calls for. Defect 2 DID add a "is this the month's first week"
+// from real document headings, so this stays a flat list of week headings
+// rather than being restructured into two heading levels -- changing
+// outline depth/structure is a bigger, riskier change than this defect
+// calls for. Each heading is the week's own Roman numeral plus the span
+// of in-month dates it covers (e.g. Hebdomada I (Ian 1-2)), with no month
+// name repeated -- the month heading below is a separate, non-heading
+// BANNER (not part of the outline) that already establishes it once per
+// month. Defect 2 DID add a "is this the month's first week"
// flag to the view model (lib/render/view.ml's own [first], the same
// "cheap flag beats invented template logic" call [last] already made
// elsewhere) -- used below for a separate, non-heading month BANNER
@@ -125,7 +136,7 @@
#text(size: 15pt, weight: "bold")[{{month_name}} {{year}}]
]
{{/first}}
-= {{month_name}} #sym.dot.c {{term.week}} {{num}}
+= {{term.week}} {{num_roman}} ({{month_abbr}} {{first_dom}}{{^single_day}}--{{last_dom}}{{/single_day}})
{{#days}}
{{#in_month}}