aboutsummaryrefslogtreecommitdiff
path: root/internal/cli/liturgy.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/cli/liturgy.go')
-rw-r--r--internal/cli/liturgy.go41
1 files changed, 38 insertions, 3 deletions
diff --git a/internal/cli/liturgy.go b/internal/cli/liturgy.go
index b1a8874..fc3efae 100644
--- a/internal/cli/liturgy.go
+++ b/internal/cli/liturgy.go
@@ -6,9 +6,11 @@ import (
"strings"
"time"
+ "github.com/lukaszkasprzak/lectio/internal/bible"
"github.com/lukaszkasprzak/lectio/internal/caldata"
"github.com/lukaszkasprzak/lectio/internal/calendar"
"github.com/lukaszkasprzak/lectio/internal/config"
+ "github.com/lukaszkasprzak/lectio/internal/render"
)
// runLiturgy prints the computed liturgical day for date (default today) using
@@ -29,11 +31,36 @@ func runLiturgy(cfg config.Config, date string, stdout, stderr io.Writer) int {
fmt.Fprintln(stderr, "lectio: warning:", e)
}
day := calendar.Compute(d.UTC(), cfg.Selection(), layers)
- printLiturgicalDay(stdout, cfg, day)
+ tbl, _ := bible.LoadBookTable(userBooksTOML())
+ printLiturgicalDay(stdout, cfg, tbl, day)
return 0
}
-func printLiturgicalDay(out io.Writer, cfg config.Config, day calendar.LiturgicalDay) {
+// vernacularVersion is the offline corpus used to render reading text: Wujek
+// for Polish, Douay-Rheims otherwise (bt is scraped, so it is not used here).
+func vernacularVersion(cfg config.Config) string {
+ if cfg.TraditionalLang == "pl" || cfg.UILanguage == "pl" {
+ return "wuj"
+ }
+ return "drb"
+}
+
+// readingText resolves an English citation and returns its text from version,
+// or "" if it does not resolve.
+func readingText(tbl *bible.BookTable, version, citation string) string {
+ engRef, ok := tbl.ParseRef("en", citation)
+ if !ok {
+ return ""
+ }
+ vs, _ := bible.Lookup(version, engRef)
+ parts := make([]string, 0, len(vs))
+ for _, v := range vs {
+ parts = append(parts, strings.TrimSpace(v.Text))
+ }
+ return strings.Join(parts, " ")
+}
+
+func printLiturgicalDay(out io.Writer, cfg config.Config, tbl *bible.BookTable, day calendar.LiturgicalDay) {
fmt.Fprintf(out, "%s %s\n", day.Date.Format("2006-01-02"), day.Weekday.String())
if day.SundayCycle != "" { // OF carries the reading cycles; EF does not
fmt.Fprintf(out, "season: %s (week %d · Sunday cycle %s · weekday cycle %s)\n",
@@ -47,13 +74,21 @@ func printLiturgicalDay(out io.Writer, cfg config.Config, day calendar.Liturgica
fmt.Fprintf(out, " also: %s [%s]\n", n, rankLabel(o.Rank))
}
}
+ vern := vernacularVersion(cfg)
for _, m := range day.Observed.Masses {
for _, r := range m.Readings {
label := r.Part
if m.Variant != "" {
label = m.Variant + " " + label
}
- fmt.Fprintf(out, " %-16s %s\n", label+":", r.Citation)
+ fmt.Fprintf(out, "\n %s (%s):\n", label, r.Citation)
+ if txt := readingText(tbl, vern, r.Citation); txt != "" {
+ for _, line := range strings.Split(render.Wrap(txt, 72), "\n") {
+ fmt.Fprintf(out, " %s\n", line)
+ }
+ } else {
+ fmt.Fprintf(out, " (text not in %s)\n", vern)
+ }
}
}
}