| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
gen/liturgy_ef.h is generated by lectio's clectio-gen, so it inherited the EF
calendar errors colitur found and lectio has now fixed: ubaldus and didacus
ranked as commemorations rather than III-class feasts, and both August vigils
coloured from missalemeum rather than from RG 128.
Regenerated with `go run ./cmd/clectio-gen old 2025 2054`, against lectio at
46653b2. Distinct days 661 -> 656.
Verified: "St. Ubaldus" and "St. Didacus" are now in the name table and were
absent before, so the two rank corrections are present and both saints now
displace the ferias that previously held those days.
NOT independently verified here: the vigil COLOURS. The days[] table is a
deduplicated 656-entry set indexed from elsewhere, and decoding that encoding
to read a colour back would be guesswork rather than a check. Those values
come from lectio, where they are pinned by TestTridentineMissalOverrides and
were mutation-tested. Saying so rather than implying a check that was not run.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Three changes since v1.0, all data or docs -- no engine change:
a0b61ff EF table regenerated from lectio 0.46.1: the Lenten Ember days were
serving Lent I Sunday's Mass. 84 days of the compiled 2025-2054
range corrected.
c21f545 EF table regenerated from lectio 0.46.0: seven precedence and
temporal defects, 209 days.
1ac11af docs: exact corpus paths, and the form follows config.h.
The shipped binary is an Ordinary Form build (config.h), and the OF table is
byte-identical across both regenerations -- so this release changes nothing for
a default build. It matters only to someone building with FORM_EF.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Picks up the Lenten Ember fix: three lectionary sections were keyed
ef-lent-1-{wednesday,friday,saturday} while lectio's calendar computes
ef-lent-ember-{wed,fri,sat}, so the lookup missed them and every Lenten Ember
day served Lent I Sunday's Mass.
84 of the 10 957 days in the compiled 2025-2054 range change, all of them Lent
Ember days, all now carrying their proper Masses:
Ember Wed 1 Kgs 19:3-8 / Matt 12:38-50 (was 2 Cor 6:1-10 / Matt 4:1-11)
Ember Fri Ezech 18:20-28 / John 5:1-15 (same)
Ember Sat 1 Thess 5:14-23 / Matt 17:1-9 (same)
84 rather than 90 because six Ember days across the range are displaced by a
feast that outranks the feria and so were never affected: St Matthias
(2029, 2040, 2051), the Chair of St Peter (2040, 2051) and St Joseph (2038).
Verified by building an EF binary from the tables before and after and diffing
all 10 957 days; no unclassified difference remains.
The OF table regenerates byte-identical and is untouched.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Picks up the seven EF calendar defects fixed in lectio this week. The OF
table regenerates byte-identical and is untouched.
209 of the 10,957 days in the compiled 2025-2054 range change, every one
of them traceable to a cited fix:
88 colour only
30 Holy Thursday violet -> white
30 3rd Sunday of Advent violet -> rose (Gaudete)
28 4th Sunday of Lent violet -> rose (Laetare; the other two
years change name too,
see below)
121 a different day observed
84 the Lent Ember days, previously emitted as plain ferias
20 St Matthew (21 Sep) and St Thomas (21 Dec) now winning over a
coinciding Ember day -- a II-class privileged feria yields to a
feast
4 13 January, the Commemoration of the Baptism of the Lord, taking
an occurring Sunday's place as a feast of the Lord
3 St Joseph (19 Mar) now correctly transferred off a Sunday of
Lent instead of displacing it
10 the 6 March - 5 April cluster of III-class feasts that the
sanctoral generator had demoted to bare commemorations
(Felicitas & Perpetua, John of God, Frances of Rome, Isidore of
Seville, Vincent Ferrer)
Verified by building an EF binary from the tables before and after and
diffing all 10,957 days; no unclassified difference remains.
|
| |
|
|
|
|
|
| |
Bring-your-own-Bible: state that vul lives in internal/bible/corpora/ and
wuj/drb/grb under corpora_optional/, show both the drb and wuj build
commands, and note the build repacks text_of.lz (OF) or text_ef.lz
(FORM_EF in config.h) accordingly.
|
| |
|
|
|
|
|
|
| |
putwrapped now peels the leading chap:verse token into a fixed VNUM-wide
column (new config knob, default 8) and hang-indents continuation lines
under the text, so the reading has a straight left margin instead of
wrapping flush to column 0. Verses without a numeric prefix still wrap
flush-left; the WRAP<=0 (terminal-fit) path is unchanged.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
- `make dist` runs git archive to write clectio-$(VERSION).tar.gz: a snapshot of
the committed tree only -- no .git history, and no build artifacts (they are
untracked, so git archive can't include them). VERSION defaults to 1.0,
overridable (make dist VERSION=x). `clean` removes the tarball; it is
gitignored.
- .gitattributes marks .gitignore and .gitattributes export-ignore, so they stay
out of the shipped source tarball.
Claude-Session: https://claude.ai/code/session_01S1CD1u3tgSS4xNu6WHfp5a
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Replace the ISC licence with GPL-3.0-or-later (Łukasz Kasprzak is sole
copyright holder, so relicensing is unencumbered):
- LICENSE: verbatim GNU GPL v3 text.
- Add "Copyright (C) 2026 Łukasz Kasprzak. SPDX-License-Identifier:
GPL-3.0-or-later" headers to the project-authored sources (clectio.c with the
full grant, plus mktext.c and bin2h.c), replacing their old public-domain
notes.
- puff.c/.h keep Mark Adler's public-domain notice unchanged: third-party,
not ours to relicense, and public domain is GPL-compatible.
- README and man page LICENSE sections updated to GPL-3.0-or-later, noting
puff's PD status; the scripture-text carve-out (Vulgate public domain,
corpora under their own terms) is preserved.
Code/comment change only; builds clean under -Wall -Wextra.
Claude-Session: https://claude.ai/code/session_01S1CD1u3tgSS4xNu6WHfp5a
|
| |
|
|
|
|
|
|
|
|
| |
Add a manual page covering usage, the -a/-g and --month options, the compile-
time config.h settings (FORM/SIGLA/COLOR/GOSPEL_ONLY/WRAP), and both the
bring-your-own-Bible and bring-your-own-calendar workflows, matching the README.
Install it via make (MANPREFIX = $PREFIX/share/man); uninstall removes it too.
Renders clean under man --warnings.
Claude-Session: https://claude.ai/code/session_01S1CD1u3tgSS4xNu6WHfp5a
|
| |
|
|
|
|
|
|
|
| |
Rename the "Customize the calendar" section to "Bring your own calendar" and
move it directly after "Bring your own Bible", so the two data-customization
axes read as a matched pair (text and calendar). Fold the compiled-range note
into Coverage, now placed after the section. No content dropped.
Claude-Session: https://claude.ai/code/session_01S1CD1u3tgSS4xNu6WHfp5a
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add a compile-time override table for MINOR local calendar changes, standalone
(no lectio, no toolchain): edit calendar.h (copied from calendar.def.h), add a
{ month, day, colour, "name" } row, make. It replaces a fixed date's name and
colour, every year, in both single-day and --month output. Limits (no engine):
fixed dates only; name/colour only, not readings or rank/precedence; an override
wins unconditionally.
README gains a "Customize the calendar" section documenting both tiers with
their limits: the standalone override above, and -- for readings, ranks and
movable feasts -- regenerating gen/ from a lectio calendar layer via
clectio-gen (-caldir/-use), then rebuilding with CORPUS= to repack any newly
cited verses, with a git-checkout revert note.
Both forms build clean under -Wall -Wextra; binary unchanged at 666 KB; default
(empty override table) output is unchanged.
Claude-Session: https://claude.ai/code/session_01S1CD1u3tgSS4xNu6WHfp5a
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Expand "Bring your own Bible" with the details a user needs to actually do it:
- the six-column TSV format with three real, tab-marked example rows and a
column legend;
- which columns are load-bearing -- clectio matches on Book+Chapter+Verse
(cols 1,4,5) and prints col 6; Abbrev/BookNum (cols 2,3) are ignored but must
be present;
- the Vulgate-versification requirement made explicit (a differently numbered
Bible misaligns), with the "start from vul.tsv, swap the text column" tip;
- pointer to the four ready corpora shipped with lectio, with a runnable drb
example;
- a "switching back to the Vulgate" note (the git-tracked text_*.lz blob is
overwritten by a CORPUS= build).
Docs only; no code change.
Claude-Session: https://claude.ai/code/session_01S1CD1u3tgSS4xNu6WHfp5a
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
List a whole month, one line per day: weekday, day, liturgical colour and
celebration name. Form-aware; colours the name on a tty and prints the colour
word (aligned column) always, so a piped file stays readable. Defaults to the
current month; accepts YYYY-MM or a bare month number (current year).
Needs no scripture text, so it never loads or decompresses the text blob.
Days-in-month and weekday are computed with days_from_civil (leap-correct);
a month outside the compiled range is reported, not guessed. No table/data
change; OF and EF build clean under -Wall -Wextra; binary unchanged at 666 KB.
Claude-Session: https://claude.ai/code/session_01S1CD1u3tgSS4xNu6WHfp5a
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- -a/--all and -g/--gospel override the compiled GOSPEL_ONLY default per run;
the reading text for both is always embedded, so this is free. Flags may
appear in any position alongside the optional date.
- WRAP config.h option wraps reading text at N columns; 0 (default) fits the
terminal via TIOCGWINSZ and leaves piped output one line per verse. Greedy,
space-breaking, UTF-8 aware (continuation bytes do not count as columns).
- Rework arg parsing into a small flag loop; expand -h usage.
No table/data change; OF and EF both build clean under -Wall -Wextra. Binary
grows ~4 KB (666 KB OF). Stays compile-time-first, suckless-style: the only
run-time options are the reading-set toggle and -h.
Claude-Session: https://claude.ai/code/session_01S1CD1u3tgSS4xNu6WHfp5a
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Two size wins:
- Replace the home-grown LZSS (2.0x) with DEFLATE: mktext gzips the text and
strips the gzip container to a raw DEFLATE stream; clectio decompresses it
with puff, Mark Adler's public-domain reference inflate (~200 lines, verified
byte-identical to gunzip on the OF/EF text, repetitive, random and empty
inputs). Text blob 671 KB -> 492 KB (OF), 164 KB -> 132 KB (EF), 2.7x.
- Build with -no-pie: clectio is a local CLI reading static embedded data with
no attack surface, so it needs no PIE/ASLR. The linker then bakes the string-
table pointers in at link time instead of emitting ~57 KB of runtime
relocations.
Net: OF 879 -> 662 KB, EF 266 -> 214 KB. Verified byte-identical to lectio.
The default build still needs only a compiler + libc; a CORPUS= rebuild now
also needs gzip. lz.h removed.
Claude-Session: https://claude.ai/code/session_01S1CD1u3tgSS4xNu6WHfp5a
|
| |
|
|
|
|
|
|
|
|
|
| |
Add a compile-time toggle in config.h: GOSPEL_ONLY=0 (default) prints every
reading; GOSPEL_ONLY=1 prints only the Gospel. The Gospel is matched by its
part label, so it works for both forms. Help and the compiled-settings line
report the mode. Also tidy print_day's header underline to match the width of
the "<form> for <date>" line instead of the reading count. No data change;
strict -Wsign-conversion clean in both modes.
Claude-Session: https://claude.ai/code/session_01S1CD1u3tgSS4xNu6WHfp5a
|
| |
|
|
|
|
|
|
| |
Change the hard `CC = cc` to `CC ?= cc` so an exported CC (e.g. CC=gcc) is
respected. Keeps the suckless default of cc for clones while letting a system
whose `cc` is shadowed use plain `make` without passing CC= each time.
Claude-Session: https://claude.ai/code/session_01S1CD1u3tgSS4xNu6WHfp5a
|
| |
|
|
|
|
|
|
|
|
|
| |
Make the build clean under -Wconversion -Wsign-conversion and -Wunused-function
(beyond the Makefile's -Wall -Wextra), so it compiles warning-free on stricter
setups and other compilers: size_t for the verse-index counters in load_text,
a cast in the LZSS matcher, and lz_unpack marked inline (it is unused in the
packer-only mktext translation unit). No behaviour change; packed output is
byte-identical.
Claude-Session: https://claude.ai/code/session_01S1CD1u3tgSS4xNu6WHfp5a
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Two QA-found bugs fixed:
- mktext now collapses runs of whitespace in verse text to a single space
(and trims), matching lectio's Fields-based rendering. The Vulgate source
has occasional double spaces that were leaking into the output.
- Regenerated gen/ with the hermetic, alias-fixed clectio-gen: the generator
no longer picks up the user's stale books.ini (which had silently dropped
~30 EF Ember-day lessons, e.g. St Lawrence-common Sir 45, Osee/Hosea 14,
2 Esdras/Nehemiah 8). Full range 2025-2054 now has 0 dropped readings.
Verified vs lectio: OF and EF 2026 are byte-identical (day names + verse
text, 0 mismatches); range boundaries 2025-01-01 / 2054-12-31 match; ASAN +
UBSAN clean over leap days, boundaries and edge cases; bad input never
crashes. Shipped total 1.28 MiB.
Claude-Session: https://claude.ai/code/session_01S1CD1u3tgSS4xNu6WHfp5a
|
|
|
clectio prints the Catholic liturgical day and its Mass readings for a date
with a single table lookup -- no computation, config file, network, or deps
beyond libc. The calendar, reading citations and scripture text are all
compiled in; the whole shipped package fits on a 1.44 MB floppy (~1.29 MiB)
and the binary is ~0.9 MB (OF) / ~0.3 MB (EF).
- suckless config.h: FORM_OF/FORM_EF, SIGLA_ENGLISH/SIGLA_LATIN, COLOR.
- Bring your own Bible: `make CORPUS=mybible.tsv` recompiles with any
Vulgate-numbered 6-column TSV; only the ~12k cited verses are embedded.
- The hard liturgical logic stays in lectio (Go, oracle-validated); its
clectio-gen emits the corpus-independent tables in gen/. The scripture text
is LZSS-packed (lz.h) to fit; mktext/bin2h resolve+embed it at build time.
- Verified byte-identical to lectio's readings; day names match 157/157 over
a 3-year sample. Default text: public-domain Latin Vulgate. ISC-licensed.
Claude-Session: https://claude.ai/code/session_01S1CD1u3tgSS4xNu6WHfp5a
|