diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-07-28 11:57:45 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-07-28 11:57:45 +0200 |
| commit | feede51697be870ae183a95b513ef64f031dbd0f (patch) | |
| tree | 6700a80f996d2bba204c0452db2d2bbc16bff619 /internal/bible/ofref_test.go | |
| parent | 626f2275438a37e5cd2efb5964281b9bef5ce8cc (diff) | |
| download | lectio-feede51697be870ae183a95b513ef64f031dbd0f.tar.gz lectio-feede51697be870ae183a95b513ef64f031dbd0f.zip | |
feat(readings): compute the daily view offline (OF + EF)
Route readings.Load through the embedded calendar engine and lectionary
data instead of the niedziela/missalemeum scrapers. The daily view now
computes each day (calendar.Compute + caldata.Readings) and renders text
from the public-domain corpora, with citations resolved per corpus.
- bible.OFRef: normalise an English-canonical OF citation (drop sub-verse
letters, ";" -> ",") and renumber Psalms for the target Psalter
(Hebrew->Vulgate chapter for vul/grb/wuj; DRB title-fold verses for drb).
- liturgy.Section gains Ref (English-canonical lookup ref) alongside
Citation (sigla-dialect display); the loader fills both, resolveRef uses
Ref, headings/citation command show Citation.
- EffectiveVersions always drops "bt" (no offline corpus); the single
daily version defaults to vernacularVersion (reading corpus else Latin).
Scraper packages remain in the tree, unreferenced, pending removal.
Diffstat (limited to 'internal/bible/ofref_test.go')
| -rw-r--r-- | internal/bible/ofref_test.go | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/internal/bible/ofref_test.go b/internal/bible/ofref_test.go new file mode 100644 index 0000000..fae593a --- /dev/null +++ b/internal/bible/ofref_test.go @@ -0,0 +1,50 @@ +package bible + +import "testing" + +func TestOFRef(t *testing.T) { + cases := []struct { + name string + citation string + system string + want string + }{ + // Non-psalms pass through unchanged in every system. + {"gospel-vulgate", "Matthew 4:12-23", "vulgate", "Matthew 4:12-23"}, + {"gospel-drb", "Matthew 4:12-23", "drb", "Matthew 4:12-23"}, + {"epistle-hebrew", "1 Corinthians 1:10-13,17", "hebrew", "1 Corinthians 1:10-13,17"}, + + // Psalm chapter shift for the Vulgate family (Hebrew -> Vulgate). + {"ps27-vulgate", "Psalms 27:1,4,13-14", "vulgate", "Psalms 26:1,4,13-14"}, + {"ps27-drb", "Psalms 27:1,4,13-14", "drb", "Psalms 27:1,4,13-14"}, // Ps 27 has no DRB title fold + {"ps27-hebrew", "Psalms 27:1,4,13-14", "hebrew", "Psalms 27:1,4,13-14"}, + + // Boundary cases of HebrewToVulgateChapter. + {"ps8-vulgate", "Psalms 8:2", "vulgate", "Psalms 8:2"}, // <=8 unchanged + {"ps9-vulgate", "Psalms 9:2", "vulgate", "Psalms 9:2"}, // 9,10 -> 9 + {"ps10-vulgate", "Psalms 10:1", "vulgate", "Psalms 9:1"}, // 10 -> 9 + {"ps11-vulgate", "Psalms 11:1", "vulgate", "Psalms 10:1"}, // 11..113 -> h-1 + {"ps116-vulgate", "Psalms 116:12", "vulgate", "Psalms 114:12"}, + {"ps147-vulgate", "Psalms 147:12", "vulgate", "Psalms 146:12"}, + {"ps148-vulgate", "Psalms 148:1", "vulgate", "Psalms 148:1"}, // >=148 unchanged + + // DRB title-fold verse shift: Ps 51 folds 2 title verses into verse 1. + {"ps51-drb", "Psalms 51:3-4,12-13", "drb", "Psalms 51:1-2,10-11"}, + {"ps51-vulgate", "Psalms 51:3-4", "vulgate", "Psalms 50:3-4"}, + // Ps 63 folds 1 title verse. + {"ps63-drb", "Psalms 63:2,3-4", "drb", "Psalms 63:1,2-3"}, + + // Tail normalization: sub-verse letters dropped, ";" -> ",". + {"verseletter-2sam", "2 Samuel 6:12b-15,17-19", "vulgate", "2 Samuel 6:12-15,17-19"}, + {"semicolon-acts", "The Acts 11:21b-26;13:1-3", "drb", "The Acts 11:21-26,13:1-3"}, + {"multiletter-psalm-drb", "Psalms 98:1,2-3ab,3cd-4,5-6", "drb", "Psalms 98:1,2-3,3-4,5-6"}, + {"multiletter-psalm-vulgate", "Psalms 98:1,2-3ab,3cd-4,5-6", "vulgate", "Psalms 97:1,2-3,3-4,5-6"}, + } + for _, c := range cases { + t.Run(c.name, func(t *testing.T) { + if got := OFRef(c.citation, c.system); got != c.want { + t.Errorf("OFRef(%q, %q) = %q, want %q", c.citation, c.system, got, c.want) + } + }) + } +} |
