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
}
|