aboutsummaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-rw-r--r--internal/bible/bible.go2
-rw-r--r--internal/bible/corpora/drb.ini4
-rw-r--r--internal/bible/corpora/grb.ini4
-rw-r--r--internal/bible/corpora/vul.ini4
-rw-r--r--internal/bible/corpora/wuj.ini4
-rw-r--r--internal/bible/corpusmeta.go45
-rw-r--r--internal/bible/corpusmeta_test.go13
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)
+ }
+}