aboutsummaryrefslogtreecommitdiff
path: root/internal/caldata
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-07-27 21:30:56 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-07-27 21:30:56 +0200
commitbec7c034aca15537900d74a7063d85c0f4deacae (patch)
treebaf4cac4e3a38507b8a0f9de80ac251a5df82908 /internal/caldata
parent2901c73fde7ff19e8cdea00f933dc628d11c6ec6 (diff)
downloadlectio-bec7c034aca15537900d74a7063d85c0f4deacae.tar.gz
lectio-bec7c034aca15537900d74a7063d85c0f4deacae.zip
feat(calfeed): shared day builder + reusable reading resolver
Diffstat (limited to 'internal/caldata')
-rw-r--r--internal/caldata/readings.go31
1 files changed, 31 insertions, 0 deletions
diff --git a/internal/caldata/readings.go b/internal/caldata/readings.go
new file mode 100644
index 0000000..a11235d
--- /dev/null
+++ b/internal/caldata/readings.go
@@ -0,0 +1,31 @@
+package caldata
+
+import (
+ "time"
+
+ "github.com/lukaszkasprzak/lectio/internal/calendar"
+)
+
+// Readings resolves a day's Mass readings: the observed celebration's inline
+// propers, else the temporal lectionary for its slug, else -- for an EF
+// weekday with no proper Mass -- the preceding Sunday's Mass (the 1962 rule
+// that green-season ferias repeat the Sunday). Shared by the CLI (cli.dayReadings
+// delegates here) and calfeed.Build (injected as its readings func).
+func Readings(sel calendar.Selection, layers []calendar.Layer, date time.Time, day calendar.LiturgicalDay) []calendar.Reading {
+ var rs []calendar.Reading
+ for _, m := range day.Observed.Masses {
+ rs = append(rs, m.Readings...)
+ }
+ if len(rs) > 0 {
+ return rs
+ }
+ if r := TemporalReadings(sel.Form, day.Observed.Slug); len(r) > 0 {
+ return r
+ }
+ if sel.Form == "old" && day.Observed.Layer == "temporal" && date.Weekday() != time.Sunday {
+ sun := date.AddDate(0, 0, -int(date.Weekday())) // preceding Sunday (Sunday = 0)
+ sd := calendar.Compute(sun, sel, layers)
+ return TemporalReadings(sel.Form, sd.Observed.Slug)
+ }
+ return nil
+}