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/render | |
| 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/render')
| -rw-r--r-- | internal/render/render.go | 33 | ||||
| -rw-r--r-- | internal/render/render_test.go | 23 |
2 files changed, 21 insertions, 35 deletions
diff --git a/internal/render/render.go b/internal/render/render.go index 6cdb939..3d685d2 100644 --- a/internal/render/render.go +++ b/internal/render/render.go @@ -146,7 +146,12 @@ func GatherVersion(version string, sec liturgy.Section, lectionary, lang string) // it never affects which reference is resolved. func resolveRef(version string, sec liturgy.Section, lectionary, lang string) (string, error) { ui := i18n.Get(lang) - citation := sec.Citation + // Ref is the English-canonical lookup reference; fall back to the display + // citation (or the one embedded in the heading) for sections that carry none. + citation := sec.Ref + if citation == "" { + citation = sec.Citation + } if citation == "" { if c, err := liturgy.ExtractCitation(sec.Heading); err == nil { citation = c @@ -157,13 +162,11 @@ func resolveRef(version string, sec liturgy.Section, lectionary, lang string) (s } if lectionary != "new" { - return citation, nil + return citation, nil // Extraordinary Form: already Vulgate-numbered } - ref, err := bible.ToEnglishRef(citation, system(version)) - if err != nil { - return "", fmt.Errorf(ui.NoReferenceErr, err) - } - return ref, nil + // Ordinary Form: the citation is lectio's English-canonical, modern-numbered + // form; renumber only the Psalms for the target corpus's Psalter. + return bible.OFRef(citation, system(version)), nil } // GatherVerses returns one version's verses for a section as raw bible.Verse @@ -242,16 +245,14 @@ func OfflineVersions(versions []string) []string { } // EffectiveVersions is the version set actually loadable for a request: "bt" -// (the niedziela.pl modern scrape) is dropped -- substituting "wuj" if it was -// the only Polish column, via OfflineVersions -- whenever the scrape is -// unavailable: offline (never fetch) OR the traditional lectionary -// (missalemeum, which has no niedziela.pl scrape). Shared by cli, tui and web -// so all three binaries treat traditional/offline versions identically. +// (the former niedziela.pl modern scrape) has no embedded corpus, so it is +// always dropped -- substituting "wuj" if it was the only Polish column, via +// OfflineVersions. Every reading is now rendered offline from an embedded +// corpus, so the swap is unconditional; the lectionary and offline arguments +// are retained for caller compatibility but no longer change the result. +// Shared by cli, tui and web so all three binaries agree on the version set. func EffectiveVersions(versions []string, lectionary string, offline bool) []string { - if offline || lectionary == "traditional" { - return OfflineVersions(versions) - } - return versions + return OfflineVersions(versions) } // Compare lays the versions of one reading section out as parallel columns, diff --git a/internal/render/render_test.go b/internal/render/render_test.go index e2a26fc..00c8a85 100644 --- a/internal/render/render_test.go +++ b/internal/render/render_test.go @@ -25,7 +25,9 @@ func TestGatherBTDedup(t *testing.T) { } func TestGatherBible(t *testing.T) { - sec := liturgy.Section{Heading: "Ewangelia (J 20, 1. 11-18)"} + // Offline sections carry the English-canonical lookup reference in Ref; the + // display citation stays in the reader's sigla dialect. + sec := liturgy.Section{Heading: "Ewangelia", Citation: "J 20, 1. 11-18", Ref: "John 20:1,11-18"} label, blocks := GatherVersion("wuj", sec, "new", "pl") if !strings.Contains(label, "Wujek") { t.Errorf("label = %q", label) @@ -109,23 +111,6 @@ func TestGatherVersionNoReferenceLang(t *testing.T) { } } -// TestGatherVersionNoReferenceErrLang checks the "(no reference: ...)" block -// (a citation that bible.ToEnglishRef fails to convert, e.g. an unrecognised -// book) follows lang. -func TestGatherVersionNoReferenceErrLang(t *testing.T) { - sec := liturgy.Section{Citation: "Xyz 1, 1-2"} - - _, blocks := GatherVersion("wuj", sec, "new", "pl") - if len(blocks) == 0 || !strings.HasPrefix(blocks[0], "(brak odwołania: ") { - t.Errorf(`GatherVersion(..., "pl") blocks = %v, want prefix "(brak odwołania: "`, blocks) - } - - _, blocks = GatherVersion("wuj", sec, "new", "en") - if len(blocks) == 0 || !strings.HasPrefix(blocks[0], "(no reference: ") { - t.Errorf(`GatherVersion(..., "en") blocks = %v, want prefix "(no reference: "`, blocks) - } -} - func TestOfflineVersions(t *testing.T) { got := OfflineVersions([]string{"bt", "wuj", "vul"}) for _, v := range got { @@ -136,7 +121,7 @@ func TestOfflineVersions(t *testing.T) { } func TestGatherVersesBible(t *testing.T) { - sec := liturgy.Section{Heading: "Ewangelia (J 20, 1. 11-18)"} + sec := liturgy.Section{Heading: "Ewangelia", Citation: "J 20, 1. 11-18", Ref: "John 20:1,11-18"} label, verses, versified := GatherVerses("wuj", sec, "new", "pl") if !strings.Contains(label, "Wujek") { t.Errorf("label = %q", label) |
