aboutsummaryrefslogtreecommitdiff
path: root/internal/bible/corpusmeta.go
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-07-27 20:08:22 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-07-27 20:08:22 +0200
commit91b54ab94a0e227eeaf093d34ec2bf2a07978b55 (patch)
treef234f55332a7c841e13c00585a6fa1860bf2eea3 /internal/bible/corpusmeta.go
parent9e1e892de95ac1573a99bda316b306a56e17fc8a (diff)
downloadlectio-91b54ab94a0e227eeaf093d34ec2bf2a07978b55.tar.gz
lectio-91b54ab94a0e227eeaf093d34ec2bf2a07978b55.zip
feat(bible): corpus metadata sidecars + parser
Diffstat (limited to 'internal/bible/corpusmeta.go')
-rw-r--r--internal/bible/corpusmeta.go45
1 files changed, 45 insertions, 0 deletions
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 (<code>.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
+}