aboutsummaryrefslogtreecommitdiff
path: root/internal/bible/books.go
blob: 045509a641e8b611f904226d050edbf038092efe (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package bible

import "strings"

// canonical English book names, in corpus form.
// aliasSeed maps a canonical name to its accepted aliases (Polish abbrev, Polish
// full name, English abbrev). Ported verbatim from offline_readings book_aliases.py.
var aliasSeed = map[string][]string{
	"Genesis":         {"Rdz", "Rodzaju", "Gen"},
	"Exodus":          {"Wj", "Wyjścia", "Ex", "Exod"},
	"Leviticus":       {"Kpł", "Kapłańska", "Lev"},
	"Numbers":         {"Lb", "Liczb", "Num"},
	"Deuteronomy":     {"Pwt", "Powtórzonego Prawa", "Deut"},
	"Joshua":          {"Joz", "Jozuego", "Jozue"},
	"Judges":          {"Sdz", "Sędziów"},
	"Ruth":            {"Rt", "Rut"},
	"1 Samuel":        {"1 Sm", "1 Samuela"},
	"2 Samuel":        {"2 Sm", "2 Samuela"},
	"1 Kings":         {"1 Krl", "1 Królewska"},
	"2 Kings":         {"2 Krl", "2 Królewska"},
	"1 Chronicles":    {"1 Krn", "1 Kronik"},
	"2 Chronicles":    {"2 Krn", "2 Kronik"},
	"Ezra":            {"Ezd", "Ezdrasza"},
	"Nehemiah":        {"Ne", "Nehemiasza"},
	"Tobit":           {"Tb", "Tobiasza"},
	"Judith":          {"Jdt", "Judyty"},
	"Esther":          {"Est", "Estery"},
	"Job":             {"Hi", "Hioba"},
	"Psalms":          {"Ps", "Psalm", "Psalmy", "Psalmów"},
	"Proverbs":        {"Prz", "Przysłów", "Przypowieści"},
	"Ecclesiastes":    {"Koh", "Koheleta", "Eklezjastes"},
	"Song of Solomon": {"Pnp", "Pieśń nad Pieśniami", "Pnp"},
	"Wisdom":          {"Mdr", "Mądrości", "Księga Mądrości"},
	"Sirach":          {"Syr", "Syracha", "Eklezjastyk", "Mądrość Syracha"},
	"Isaiah":          {"Iz", "Izajasza"},
	"Jeremiah":        {"Jr", "Jeremiasza"},
	"Lamentations":    {"Lm", "Lamentacje", "Treny"},
	"Baruch":          {"Ba", "Barucha"},
	"Ezekiel":         {"Ez", "Ezechiela"},
	"Daniel":          {"Dn", "Daniela"},
	"Hosea":           {"Oz", "Ozeasza"},
	"Joel":            {"Jl", "Joela"},
	"Amos":            {"Am", "Amosa"},
	"Obadiah":         {"Ab", "Abdiasza"},
	"Jonah":           {"Jon", "Jonasza"},
	"Micah":           {"Mi", "Micheasza"},
	"Nahum":           {"Na", "Nahuma"},
	"Habakkuk":        {"Ha", "Habakuka"},
	"Zephaniah":       {"So", "Sofoniasza"},
	"Haggai":          {"Ag", "Aggeusza"},
	"Zechariah":       {"Za", "Zachariasza"},
	"Malachi":         {"Ml", "Malachiasza"},
	"1 Maccabees":     {"1 Mch", "1 Machabejska", "1 Mach"},
	"2 Maccabees":     {"2 Mch", "2 Machabejska", "2 Mach"},
	"Matthew":         {"Mt", "Mateusza", "Mateusz"},
	"Mark":            {"Mk", "Marka", "Marek"},
	"Luke":            {"Łk", "Łukasza", "Łukasz"},
	"John":            {"J", "Jan", "Jana"},
	"The Acts":        {"Dz", "Dzieje", "Dzieje Apostolskie", "Acts"},
	"Romans":          {"Rz", "Rzymian"},
	"1 Corinthians":   {"1 Kor", "1 Koryntian"},
	"2 Corinthians":   {"2 Kor", "2 Koryntian"},
	"Galatians":       {"Ga", "Galatów", "Galacjan"},
	"Ephesians":       {"Ef", "Efezjan"},
	"Philippians":     {"Flp", "Filipian"},
	"Colossians":      {"Kol", "Kolosan"},
	"1 Thessalonians": {"1 Tes", "1 Tesaloniczan"},
	"2 Thessalonians": {"2 Tes", "2 Tesaloniczan"},
	"1 Timothy":       {"1 Tm", "1 Tymoteusza"},
	"2 Timothy":       {"2 Tm", "2 Tymoteusza"},
	"Titus":           {"Tt", "Tytusa"},
	"Philemon":        {"Flm", "Filemona"},
	"Hebrews":         {"Hbr", "Hebrajczyków", "Żydów"},
	"James":           {"Jk", "Jakuba"},
	"1 Peter":         {"1 P", "1 Piotra"},
	"2 Peter":         {"2 P", "2 Piotra"},
	"1 John":          {"1 J", "1 Jana"},
	"2 John":          {"2 J", "2 Jana"},
	"3 John":          {"3 J", "3 Jana"},
	"Jude":            {"Jud", "Judy"},
	"Revelation":      {"Ap", "Apokalipsa", "Objawienie"},
}

var aliasMap map[string]string // lowercased alias -> canonical
var canonical []string         // canonical names for prefix matching

func init() {
	aliasMap = map[string]string{}
	seen := map[string]bool{}
	for name, aliases := range aliasSeed {
		canonical = append(canonical, name)
		for _, a := range append([]string{name}, aliases...) {
			k := strings.ToLower(a)
			if !seen[k] {
				seen[k] = true
				aliasMap[k] = name
			}
		}
	}
}

// ResolveBook maps an English name/prefix or a Polish alias to a canonical book.
func ResolveBook(query string) (string, bool) {
	q := strings.ToLower(strings.TrimSpace(query))
	if c, ok := aliasMap[q]; ok { // exact alias/name
		return c, true
	}
	for _, name := range canonical { // canonical prefix, len>=2
		if len(q) >= 2 && strings.HasPrefix(strings.ToLower(name), q) {
			return name, true
		}
	}
	return "", false
}