aboutsummaryrefslogtreecommitdiff
path: root/internal/caldata
diff options
context:
space:
mode:
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
+}