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 | |
| parent | 9e1e892de95ac1573a99bda316b306a56e17fc8a (diff) | |
| download | lectio-91b54ab94a0e227eeaf093d34ec2bf2a07978b55.tar.gz lectio-91b54ab94a0e227eeaf093d34ec2bf2a07978b55.zip | |
feat(bible): corpus metadata sidecars + parser
Diffstat (limited to 'internal/bible')
| -rw-r--r-- | internal/bible/bible.go | 2 | ||||
| -rw-r--r-- | internal/bible/corpora/drb.ini | 4 | ||||
| -rw-r--r-- | internal/bible/corpora/grb.ini | 4 | ||||
| -rw-r--r-- | internal/bible/corpora/vul.ini | 4 | ||||
| -rw-r--r-- | internal/bible/corpora/wuj.ini | 4 | ||||
| -rw-r--r-- | internal/bible/corpusmeta.go | 45 | ||||
| -rw-r--r-- | internal/bible/corpusmeta_test.go | 13 |
7 files changed, 75 insertions, 1 deletions
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 (<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 +} 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) + } +} |
