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/bible.go | 2 +- internal/bible/corpora/drb.ini | 4 ++++ internal/bible/corpora/grb.ini | 4 ++++ internal/bible/corpora/vul.ini | 4 ++++ internal/bible/corpora/wuj.ini | 4 ++++ internal/bible/corpusmeta.go | 45 +++++++++++++++++++++++++++++++++++++++ internal/bible/corpusmeta_test.go | 13 +++++++++++ 7 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 internal/bible/corpora/drb.ini create mode 100644 internal/bible/corpora/grb.ini create mode 100644 internal/bible/corpora/vul.ini create mode 100644 internal/bible/corpora/wuj.ini create mode 100644 internal/bible/corpusmeta.go create mode 100644 internal/bible/corpusmeta_test.go diff --git a/internal/bible/bible.go b/internal/bible/bible.go index 1603188..1bc8983 100644 --- a/internal/bible/bible.go +++ b/internal/bible/bible.go @@ -8,7 +8,7 @@ import ( "sync" ) -//go:embed corpora/wuj.tsv corpora/vul.tsv corpora/grb.tsv corpora/drb.tsv +//go:embed corpora var corporaFS embed.FS // Verse is a single verse. diff --git a/internal/bible/corpora/drb.ini b/internal/bible/corpora/drb.ini new file mode 100644 index 0000000..fc5ac52 --- /dev/null +++ b/internal/bible/corpora/drb.ini @@ -0,0 +1,4 @@ +; lectio corpus metadata +lang = en +name = Douay-Rheims (English) +psalm_system = drb diff --git a/internal/bible/corpora/grb.ini b/internal/bible/corpora/grb.ini new file mode 100644 index 0000000..0d297ff --- /dev/null +++ b/internal/bible/corpora/grb.ini @@ -0,0 +1,4 @@ +; lectio corpus metadata +lang = el +name = Greek +psalm_system = vulgate diff --git a/internal/bible/corpora/vul.ini b/internal/bible/corpora/vul.ini new file mode 100644 index 0000000..4efb6e5 --- /dev/null +++ b/internal/bible/corpora/vul.ini @@ -0,0 +1,4 @@ +; lectio corpus metadata +lang = la +name = Vulgate (Latin) +psalm_system = vulgate diff --git a/internal/bible/corpora/wuj.ini b/internal/bible/corpora/wuj.ini new file mode 100644 index 0000000..8364923 --- /dev/null +++ b/internal/bible/corpora/wuj.ini @@ -0,0 +1,4 @@ +; lectio corpus metadata +lang = pl +name = Wujek (Polish) +psalm_system = vulgate 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 +} diff --git a/internal/bible/corpusmeta_test.go b/internal/bible/corpusmeta_test.go new file mode 100644 index 0000000..2a089bd --- /dev/null +++ b/internal/bible/corpusmeta_test.go @@ -0,0 +1,13 @@ +package bible + +import "testing" + +func TestEmbeddedCorpusMeta(t *testing.T) { + m, ok := embeddedCorpusMeta("drb") + if !ok { + t.Fatal("drb sidecar not found") + } + if m.Lang != "en" || m.PsalmSystem != "drb" || m.Name == "" { + t.Fatalf("bad drb meta: %+v", m) + } +} -- cgit v1.3