From c9f3bf46f0de09edb796e35f3dcff349febf75c9 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Fri, 24 Jul 2026 10:32:28 +0200 Subject: dayinfo: show feast/day name + colour (modern niedziela + traditional missalemeum) in cli/tui/web; v0.5.0 --- internal/cli/cli.go | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) (limited to 'internal/cli/cli.go') diff --git a/internal/cli/cli.go b/internal/cli/cli.go index f4aec28..5954e23 100644 --- a/internal/cli/cli.go +++ b/internal/cli/cli.go @@ -329,7 +329,7 @@ func cacheTraditionalRange(from, to, lang string) int { cached := 0 for d := start; !d.After(end); d = d.AddDate(0, 0, 1) { - if _, err := tradlit.Load(d.Format("2006-01-02"), lang, false); err == nil { + if _, _, err := tradlit.Load(d.Format("2006-01-02"), lang, false); err == nil { cached++ } } @@ -383,7 +383,7 @@ func formatFreed(bytes int64) string { // -b/--bible): fetch via the readings router, apply the offline version // swap, then render each section's heading and render.GatherVersion blocks. func fetchAndPrint(cfg config.Config, version, date string, all, raw bool, width int, refresh bool, stdout, stderr io.Writer) int { - secs, err := readings.Load(cfg, readings.Options{ + secs, dayInfo, err := readings.Load(cfg, readings.Options{ Date: date, Refresh: refresh, Offline: cfg.Offline, @@ -405,6 +405,7 @@ func fetchAndPrint(cfg config.Config, version, date string, all, raw bool, width w := resolveWidth(width, false, stdout) if !raw { + printDayInfo(stdout, dayInfo) banner := bannerFor(cfg.UILanguage, all, date) fmt.Fprintln(stdout, banner) fmt.Fprintln(stdout, strings.Repeat("=", minInt(len(banner), w))) @@ -419,6 +420,31 @@ func fetchAndPrint(cfg config.Config, version, date string, all, raw bool, width return 0 } +// printDayInfo prints the day's celebration name -- and, if the source +// carries one, its temporal Season on its own line -- above the banner. +// Name/Season are never translated (source-language, like the readings/ +// citations themselves; see liturgy.DayInfo). A source that yielded no +// DayInfo (info.Name == "") prints nothing: the header is a nice-to-have, +// never an error condition. Callers only reach this when !raw; --raw skips +// it entirely, keeping piped output text-only. +// +// The CLI has no ANSI styling of its own (unlike the TUI's Faint/dim +// styles), so "dim" here is expressed structurally: the Season, if any, +// gets its own line under Name rather than sharing emphasis with it. +func printDayInfo(stdout io.Writer, info liturgy.DayInfo) { + if info.Name == "" { + return + } + name := info.Name + if info.Colour != "" { + name += " ยท " + info.Colour + } + fmt.Fprintln(stdout, name) + if info.Season != "" { + fmt.Fprintln(stdout, info.Season) + } +} + // bannerFor builds the " DATE" banner: the // "readings" word when every part is shown, "gospel" for the gospel-only // default, and the connective between word and date, all localised via @@ -475,7 +501,7 @@ func renderCompare(cfg config.Config, list, date string, all, raw bool, width in } versions = render.EffectiveVersions(versions, cfg.Lectionary, cfg.Offline) - secs, err := readings.Load(cfg, readings.Options{ + secs, dayInfo, err := readings.Load(cfg, readings.Options{ Date: date, Refresh: refresh, Offline: cfg.Offline, @@ -493,6 +519,7 @@ func renderCompare(cfg config.Config, list, date string, all, raw bool, width in w := resolveWidth(width, true, stdout) if !raw { + printDayInfo(stdout, dayInfo) banner := bannerFor(cfg.UILanguage, all, date) fmt.Fprintln(stdout, banner) fmt.Fprintln(stdout, strings.Repeat("=", minInt(len(banner), w))) -- cgit v1.3