From 91b54ab94a0e227eeaf093d34ec2bf2a07978b55 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Mon, 27 Jul 2026 20:08:22 +0200 Subject: feat(bible): corpus metadata sidecars + parser --- internal/bible/corpusmeta.go | 45 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 internal/bible/corpusmeta.go (limited to 'internal/bible/corpusmeta.go') diff --git a/internal/bible/corpusmeta.go b/internal/bible/corpusmeta.go new file mode 100644 index 0000000..04b9dcb --- /dev/null +++ b/internal/bible/corpusmeta.go @@ -0,0 +1,45 @@ +package bible + +import "github.com/lukaszkasprzak/lectio/internal/ini" + +// CorpusMeta is the sidecar metadata for a bible corpus (.ini). +type CorpusMeta struct { + Code, Lang, Name, PsalmSystem, Sigla string +} + +// parseCorpusMeta reads a section-less sidecar. ini.Parse returns +// []ini.Section{Name, Pairs}; keys before any [section] land in the section +// whose Name == "" (verified against internal/ini). +func parseCorpusMeta(code string, data []byte) CorpusMeta { + m := CorpusMeta{Code: code} + secs, err := ini.Parse(data) + if err != nil { + return m + } + for _, s := range secs { + if s.Name != "" { + continue + } + for _, p := range s.Pairs { + switch p.Key { + case "lang": + m.Lang = p.Val + case "name": + m.Name = p.Val + case "psalm_system": + m.PsalmSystem = p.Val + case "sigla": + m.Sigla = p.Val + } + } + } + return m +} + +func embeddedCorpusMeta(code string) (CorpusMeta, bool) { + data, err := corporaFS.ReadFile("corpora/" + code + ".ini") + if err != nil { + return CorpusMeta{}, false + } + return parseCorpusMeta(code, data), true +} -- cgit v1.3