summaryrefslogtreecommitdiff
path: root/internal/bible/books.go
blob: 037a5c3a0f869f279e1bc3ffdf7991c76b0a3c1f (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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
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
}

// canonOrder lists every aliasSeed book in scriptural (Catholic canon) order:
// 46 Old Testament books then 27 New Testament. It is the ONLY hand-maintained
// ordering; the display names are still derived from aliasSeed so there is one
// source of truth for spellings. A test asserts canonOrder and aliasSeed hold
// exactly the same set.
var canonOrder = []string{
	// Old Testament
	"Genesis", "Exodus", "Leviticus", "Numbers", "Deuteronomy",
	"Joshua", "Judges", "Ruth", "1 Samuel", "2 Samuel",
	"1 Kings", "2 Kings", "1 Chronicles", "2 Chronicles", "Ezra",
	"Nehemiah", "Tobit", "Judith", "Esther", "1 Maccabees",
	"2 Maccabees", "Job", "Psalms", "Proverbs", "Ecclesiastes",
	"Song of Solomon", "Wisdom", "Sirach", "Isaiah", "Jeremiah",
	"Lamentations", "Baruch", "Ezekiel", "Daniel", "Hosea",
	"Joel", "Amos", "Obadiah", "Jonah", "Micah",
	"Nahum", "Habakkuk", "Zephaniah", "Haggai", "Zechariah",
	"Malachi",
	// New Testament
	"Matthew", "Mark", "Luke", "John", "The Acts",
	"Romans", "1 Corinthians", "2 Corinthians", "Galatians", "Ephesians",
	"Philippians", "Colossians", "1 Thessalonians", "2 Thessalonians", "1 Timothy",
	"2 Timothy", "Titus", "Philemon", "Hebrews", "James",
	"1 Peter", "2 Peter", "1 John", "2 John", "3 John",
	"Jude", "Revelation",
}