diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-07-27 20:08:22 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-07-27 20:08:22 +0200 |
| commit | 91b54ab94a0e227eeaf093d34ec2bf2a07978b55 (patch) | |
| tree | f234f55332a7c841e13c00585a6fa1860bf2eea3 /internal/bible/corpusmeta.go | |
| parent | 9e1e892de95ac1573a99bda316b306a56e17fc8a (diff) | |
| download | lectio-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.go | 45 |
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 +} |
