From 21b36dbc90ef6534e3c088c1829d523b2bc7facc Mon Sep 17 00:00:00 2001 From: Rudolf Byker Date: Sun, 11 Mar 2018 16:19:56 +0200 Subject: [PATCH] Add Afrikaans Bible --- scriptures/tests/test_afrikaans_booknames.py | 379 +++++++++++++++++++ scriptures/texts/afr.py | 89 +++++ 2 files changed, 468 insertions(+) create mode 100644 scriptures/tests/test_afrikaans_booknames.py create mode 100644 scriptures/texts/afr.py diff --git a/scriptures/tests/test_afrikaans_booknames.py b/scriptures/tests/test_afrikaans_booknames.py new file mode 100644 index 0000000..fcf1391 --- /dev/null +++ b/scriptures/tests/test_afrikaans_booknames.py @@ -0,0 +1,379 @@ +import unittest + +from ..texts.afr import Afrikaans + +a = Afrikaans() + + +def f(txt): + """ + accept a string containing a scripture reference, normalize it, and then + return the reformatted string + """ + re_match = a.scripture_re.match(txt) + if re_match is None: + raise ValueError("{} does not match the scripture regex.".format(txt)) + + re_match_groups = re_match.groups() + return a.reference_to_string(*a.normalize_reference(*re_match_groups)) + + +class TestDeuterocanonBookNames(unittest.TestCase): + def setUp(self): + pass + + # Old Testament + + def test_genesis(self): + self.assertEqual(f('génesis 1:1'), 'Genesis 1:1') + self.assertEqual(f('genesis 1:1'), 'Genesis 1:1') + self.assertEqual(f('gén 1:1'), 'Genesis 1:1') + self.assertEqual(f('gen 1:1'), 'Genesis 1:1') + + def test_exodus(self): + self.assertEqual(f('eksodus 1:1'), 'Eksodus 1:1') + self.assertEqual(f('eks 1:1'), 'Eksodus 1:1') + + def test_leviticus(self): + self.assertEqual(f('levitikus 1:1'), 'Levitikus 1:1') + self.assertEqual(f('lev 1:1'), 'Levitikus 1:1') + + def test_numbers(self): + self.assertEqual(f('numeri 1:1'), 'Numeri 1:1') + self.assertEqual(f('num 1:1'), 'Numeri 1:1') + + def test_deuteronomy(self): + self.assertEqual(f('deuteronomium 1:1'), 'Deuteronomium 1:1') + self.assertEqual(f('deut 1:1'), 'Deuteronomium 1:1') + + def test_joshua(self): + self.assertEqual(f('josua 1:1'), 'Josua 1:1') + self.assertEqual(f('jos 1:1'), 'Josua 1:1') + + def test_judges(self): + self.assertEqual(f('rigters 1:1'), 'Rigters 1:1') + self.assertEqual(f('rig 1:1'), 'Rigters 1:1') + + def test_ruth(self): + self.assertEqual(f('rut 1:1'), 'Rut 1:1') + + def test_i_samuel(self): + self.assertEqual(f('I samuel 1:1'), 'I Samuel 1:1') + self.assertEqual(f('1 samuel 1:1'), 'I Samuel 1:1') + self.assertEqual(f('I sam 1:1'), 'I Samuel 1:1') + self.assertEqual(f('1 sam 1:1'), 'I Samuel 1:1') + self.assertEqual(f('1sam 1:1'), 'I Samuel 1:1') + + def test_ii_samuel(self): + self.assertEqual(f('II samuel 1:1'), 'II Samuel 1:1') + self.assertEqual(f('2 samuel 1:1'), 'II Samuel 1:1') + self.assertEqual(f('II sam 1:1'), 'II Samuel 1:1') + self.assertEqual(f('2 sam 1:1'), 'II Samuel 1:1') + self.assertEqual(f('2sam 1:1'), 'II Samuel 1:1') + + def test_i_konings(self): + self.assertEqual(f('I konings 1:1'), 'I Konings 1:1') + self.assertEqual(f('1 konings 1:1'), 'I Konings 1:1') + self.assertEqual(f('I kon 1:1'), 'I Konings 1:1') + self.assertEqual(f('1 kon 1:1'), 'I Konings 1:1') + self.assertEqual(f('1kon 1:1'), 'I Konings 1:1') + + def test_ii_konings(self): + self.assertEqual(f('II konings 1:1'), 'II Konings 1:1') + self.assertEqual(f('2 konings 1:1'), 'II Konings 1:1') + self.assertEqual(f('II kon 1:1'), 'II Konings 1:1') + self.assertEqual(f('2 kon 1:1'), 'II Konings 1:1') + self.assertEqual(f('2kon 1:1'), 'II Konings 1:1') + + def test_i_kronieke(self): + self.assertEqual(f('I kronieke 1:1'), 'I Kronieke 1:1') + self.assertEqual(f('1 kronieke 1:1'), 'I Kronieke 1:1') + + self.assertEqual(f('I kron 1:1'), 'I Kronieke 1:1') + self.assertEqual(f('1 kron 1:1'), 'I Kronieke 1:1') + + def test_ii_kronieke(self): + self.assertEqual(f('II kronieke 1:1'), 'II Kronieke 1:1') + self.assertEqual(f('2 kronieke 1:1'), 'II Kronieke 1:1') + + self.assertEqual(f('II kron 1:1'), 'II Kronieke 1:1') + self.assertEqual(f('2 kron 1:1'), 'II Kronieke 1:1') + + def test_ezra(self): + self.assertEqual(f('esra 1:1'), 'Esra 1:1') + + def test_nehemiah(self): + self.assertEqual(f('nehemia 1:1'), 'Nehemia 1:1') + self.assertEqual(f('neh 1:1'), 'Nehemia 1:1') + + def test_esther(self): + self.assertEqual(f('ester 1:1'), 'Ester 1:1') + self.assertEqual(f('est 1:1'), 'Ester 1:1') + + def test_job(self): + self.assertEqual(f('job 1:1'), 'Job 1:1') + + def test_psalms(self): + self.assertEqual(f('psalms 1:1'), 'Psalms 1:1') + self.assertEqual(f('psalm 1:1'), 'Psalms 1:1') + self.assertEqual(f('ps 1:1'), 'Psalms 1:1') + + def test_proverbs(self): + self.assertEqual(f('spreuke 1:1'), 'Spreuke van Salomo 1:1') + self.assertEqual(f('spr 1:1'), 'Spreuke van Salomo 1:1') + + def test_ecclesiastes(self): + self.assertEqual(f('prediker 1:1'), 'Prediker 1:1') + self.assertEqual(f('pred 1:1'), 'Prediker 1:1') + + def test_song_of_solomon(self): + self.assertEqual(f('hooglied 1:1'), 'Hooglied van Salomo 1:1') + self.assertEqual(f('hoogl 1:1'), 'Hooglied van Salomo 1:1') + + def test_isaiah(self): + self.assertEqual(f('jesaja 1:1'), 'Jesaja 1:1') + self.assertEqual(f('jes 1:1'), 'Jesaja 1:1') + + def test_jeremiah(self): + self.assertEqual(f('jeremia 1:1'), 'Jeremia 1:1') + self.assertEqual(f('jer 1:1'), 'Jeremia 1:1') + + def test_lamentations(self): + self.assertEqual(f('klaagliedere 1:1'), 'Klaagliedere 1:1') + self.assertEqual(f('klaagl 1:1'), 'Klaagliedere 1:1') + + def test_ezekiel(self): + self.assertEqual(f('esegiël 1:1'), 'Esegiël 1:1') + self.assertEqual(f('eseg 1:1'), 'Esegiël 1:1') + + def test_daniel(self): + self.assertEqual(f('daniel 1:1'), 'Daniël 1:1') + self.assertEqual(f('dan 1:1'), 'Daniël 1:1') + + def test_hosea(self): + self.assertEqual(f('hosea 1:1'), 'Hosea 1:1') + self.assertEqual(f('hos 1:1'), 'Hosea 1:1') + + def test_joel(self): + self.assertEqual(f('joel 1:1'), 'Joël 1:1') + + def test_amos(self): + self.assertEqual(f('amos 1:1'), 'Amos 1:1') + + def test_obadiah(self): + self.assertEqual(f('obadja 1:1'), 'Obadja 1') + self.assertEqual(f('obad 1:1'), 'Obadja 1') + + def test_jonah(self): + self.assertEqual(f('jona 1:1'), 'Jona 1:1') + self.assertEqual(f('jon 1:1'), 'Jona 1:1') + + def test_micah(self): + self.assertEqual(f('miga 1:1'), 'Miga 1:1') + + def test_nahum(self): + self.assertEqual(f('nahum 1:1'), 'Nahum 1:1') + self.assertEqual(f('nah 1:1'), 'Nahum 1:1') + + def test_habakkuk(self): + self.assertEqual(f('habakuk 1:1'), 'Habakuk 1:1') + self.assertEqual(f('hab 1:1'), 'Habakuk 1:1') + + def test_zephaniah(self): + self.assertEqual(f('sefanja 1:1'), 'Sefanja 1:1') + self.assertEqual(f('sef 1:1'), 'Sefanja 1:1') + + def test_haggai(self): + self.assertEqual(f('haggai 1:1'), 'Haggai 1:1') + self.assertEqual(f('hag 1:1'), 'Haggai 1:1') + + def test_sagaria(self): + self.assertEqual(f('sagaria 1:1'), 'Sagaria 1:1') + self.assertEqual(f('sag 1:1'), 'Sagaria 1:1') + + def test_maleagi(self): + self.assertEqual(f('maleagi 1:1'), 'Maleagi 1:1') + self.assertEqual(f('mal 1:1'), 'Maleagi 1:1') + + # /Old Testament + + # New Testament + + def test_mattheus(self): + self.assertEqual(f('mattheus 1:1'), 'Mattheus 1:1') + self.assertEqual(f('matt 1:1'), 'Mattheus 1:1') + + def test_mark(self): + self.assertEqual(f('markus 1:1'), 'Markus 1:1') + self.assertEqual(f('mark 1:1'), 'Markus 1:1') + + def test_luke(self): + self.assertEqual(f('lukas 1:1'), 'Lukas 1:1') + self.assertEqual(f('luk 1:1'), 'Lukas 1:1') + + def test_johannes(self): + self.assertEqual(f('johannes 1:1'), 'Johannes 1:1') + self.assertEqual(f('joh 1:1'), 'Johannes 1:1') + + def test_acts(self): + self.assertEqual(f('handelinge 1:1'), 'Handelinge van die Apostels 1:1') + self.assertEqual(f('hand 1:1'), 'Handelinge van die Apostels 1:1') + + def test_romeine(self): + self.assertEqual(f('romeine 1:1'), 'Romeine 1:1') + self.assertEqual(f('rom 1:1'), 'Romeine 1:1') + + def test_i_korinthiers(self): + self.assertEqual(f('I korinthiërs 1:1'), 'I Korintiërs 1:1') + self.assertEqual(f('I korintiërs 1:1'), 'I Korintiërs 1:1') + self.assertEqual(f('1 korinthiërs 1:1'), 'I Korintiërs 1:1') + self.assertEqual(f('1 korintiërs 1:1'), 'I Korintiërs 1:1') + self.assertEqual(f('1 korinthiers 1:1'), 'I Korintiërs 1:1') + self.assertEqual(f('1 korintiers 1:1'), 'I Korintiërs 1:1') + + self.assertEqual(f('Ikor 1:1'), 'I Korintiërs 1:1') + self.assertEqual(f('1kor 1:1'), 'I Korintiërs 1:1') + + def test_ii_korinthiers(self): + self.assertEqual(f('II korinthiërs 1:1'), 'II Korintiërs 1:1') + self.assertEqual(f('II korintiërs 1:1'), 'II Korintiërs 1:1') + self.assertEqual(f('2 korinthiërs 1:1'), 'II Korintiërs 1:1') + self.assertEqual(f('2 korintiërs 1:1'), 'II Korintiërs 1:1') + self.assertEqual(f('2 korinthiers 1:1'), 'II Korintiërs 1:1') + self.assertEqual(f('2 korintiers 1:1'), 'II Korintiërs 1:1') + + self.assertEqual(f('IIkor 1:1'), 'II Korintiërs 1:1') + self.assertEqual(f('2kor 1:1'), 'II Korintiërs 1:1') + + def test_galasiers(self): + self.assertEqual(f('galasiërs 1:1'), 'Galasiërs 1:1') + self.assertEqual(f('gal 1:1'), 'Galasiërs 1:1') + + def test_efesiers(self): + self.assertEqual(f('efesiërs 1:1'), 'Efesiërs 1:1') + self.assertEqual(f('ef 1:1'), 'Efesiërs 1:1') + + def test_filippense(self): + self.assertEqual(f('filippense 1:1'), 'Filippense 1:1') + self.assertEqual(f('fil 1:1'), 'Filippense 1:1') + + def test_kolossense(self): + self.assertEqual(f('kolossense 1:1'), 'Kolossense 1:1') + self.assertEqual(f('kol 1:1'), 'Kolossense 1:1') + + def test_i_tessalonisense(self): + self.assertEqual(f('I tessalonisense 1:1'), 'I Tessalonisense 1:1') + self.assertEqual(f('I tess 1:1'), 'I Tessalonisense 1:1') + self.assertEqual(f('1 tessalonisense 1:1'), 'I Tessalonisense 1:1') + self.assertEqual(f('1 tess 1:1'), 'I Tessalonisense 1:1') + + self.assertEqual(f('Itessalonisense 1:1'), 'I Tessalonisense 1:1') + self.assertEqual(f('Itess 1:1'), 'I Tessalonisense 1:1') + self.assertEqual(f('1tessalonisense 1:1'), 'I Tessalonisense 1:1') + self.assertEqual(f('1tess 1:1'), 'I Tessalonisense 1:1') + + def test_ii_tessalonisense(self): + self.assertEqual(f('II tessalonisense 1:1'), 'II Tessalonisense 1:1') + self.assertEqual(f('II tess 1:1'), 'II Tessalonisense 1:1') + self.assertEqual(f('2 tessalonisense 1:1'), 'II Tessalonisense 1:1') + self.assertEqual(f('2 tess 1:1'), 'II Tessalonisense 1:1') + + self.assertEqual(f('IItessalonisense 1:1'), 'II Tessalonisense 1:1') + self.assertEqual(f('IItess 1:1'), 'II Tessalonisense 1:1') + self.assertEqual(f('2tessalonisense 1:1'), 'II Tessalonisense 1:1') + self.assertEqual(f('2tess 1:1'), 'II Tessalonisense 1:1') + + def test_i_timotheus(self): + self.assertEqual(f('I timotheüs 1:1'), 'I Timoteus 1:1') + self.assertEqual(f('I tim 1:1'), 'I Timoteus 1:1') + self.assertEqual(f('1 timotheüs 1:1'), 'I Timoteus 1:1') + self.assertEqual(f('1 tim 1:1'), 'I Timoteus 1:1') + + self.assertEqual(f('Itimotheüs 1:1'), 'I Timoteus 1:1') + self.assertEqual(f('Itim 1:1'), 'I Timoteus 1:1') + self.assertEqual(f('1timotheüs 1:1'), 'I Timoteus 1:1') + self.assertEqual(f('1tim 1:1'), 'I Timoteus 1:1') + + def test_ii_timotheus(self): + self.assertEqual(f('II timotheüs 1:1'), 'II Timoteus 1:1') + self.assertEqual(f('II tim 1:1'), 'II Timoteus 1:1') + self.assertEqual(f('2 timotheüs 1:1'), 'II Timoteus 1:1') + self.assertEqual(f('2 tim 1:1'), 'II Timoteus 1:1') + + self.assertEqual(f('IItimotheüs 1:1'), 'II Timoteus 1:1') + self.assertEqual(f('IItim 1:1'), 'II Timoteus 1:1') + self.assertEqual(f('2timotheüs 1:1'), 'II Timoteus 1:1') + self.assertEqual(f('2tim 1:1'), 'II Timoteus 1:1') + + def test_titus(self): + self.assertEqual(f('titus 1:1'), 'Titus 1:1') + self.assertEqual(f('tit 1:1'), 'Titus 1:1') + + def test_filemon(self): + self.assertEqual(f('filemon 1:1'), 'Filemon 1') + self.assertEqual(f('filem 1:1'), 'Filemon 1') + self.assertEqual(f('file 1:1'), 'Filemon 1') + + def test_hebreers(self): + self.assertEqual(f('hebreërs 1:1'), 'Hebreërs 1:1') + self.assertEqual(f('heb 1:1'), 'Hebreërs 1:1') + + def test_jakobus(self): + self.assertEqual(f('jakobus 1:1'), 'Jakobus 1:1') + self.assertEqual(f('jak 1:1'), 'Jakobus 1:1') + + def test_i_petrus(self): + self.assertEqual(f('I petrus 1:1'), 'I Petrus 1:1') + self.assertEqual(f('I pet 1:1'), 'I Petrus 1:1') + self.assertEqual(f('1 petrus 1:1'), 'I Petrus 1:1') + self.assertEqual(f('1 pet 1:1'), 'I Petrus 1:1') + + self.assertEqual(f('Ipetrus 1:1'), 'I Petrus 1:1') + self.assertEqual(f('Ipet 1:1'), 'I Petrus 1:1') + self.assertEqual(f('1petrus 1:1'), 'I Petrus 1:1') + self.assertEqual(f('1pet 1:1'), 'I Petrus 1:1') + + def test_ii_petrus(self): + self.assertEqual(f('II petrus 1:1'), 'II Petrus 1:1') + self.assertEqual(f('II pet 1:1'), 'II Petrus 1:1') + self.assertEqual(f('2 petrus 1:1'), 'II Petrus 1:1') + self.assertEqual(f('2 pet 1:1'), 'II Petrus 1:1') + + self.assertEqual(f('IIpetrus 1:1'), 'II Petrus 1:1') + self.assertEqual(f('IIpet 1:1'), 'II Petrus 1:1') + self.assertEqual(f('2petrus 1:1'), 'II Petrus 1:1') + self.assertEqual(f('2pet 1:1'), 'II Petrus 1:1') + + def test_i_johannes(self): + self.assertEqual(f('I johannes 1:1'), 'I Johannes 1:1') + self.assertEqual(f('1 johannes 1:1'), 'I Johannes 1:1') + + self.assertEqual(f('Ijoh 1:1'), 'I Johannes 1:1') + self.assertEqual(f('1joh 1:1'), 'I Johannes 1:1') + + def test_ii_Johannes(self): + self.assertEqual(f('II johannes 1:1'), 'II Johannes 1') + self.assertEqual(f('2 johannes 1:1'), 'II Johannes 1') + + self.assertEqual(f('IIjoh 1:1'), 'II Johannes 1') + self.assertEqual(f('2joh 1:1'), 'II Johannes 1') + + def test_iii_johannes(self): + self.assertEqual(f('III johannes 1:1'), 'III Johannes 1') + self.assertEqual(f('3 johannes 1:1'), 'III Johannes 1') + + self.assertEqual(f('IIIjoh 1:1'), 'III Johannes 1') + self.assertEqual(f('3joh 1:1'), 'III Johannes 1') + + def test_jude(self): + self.assertEqual(f('judas 1:1'), 'Judas 1') + self.assertEqual(f('jud 1:1'), 'Judas 1') + + def test_openbaring(self): + self.assertEqual(f('openbaring 1:1'), 'Openbaring van Johannes 1:1') + self.assertEqual(f('openbaring van johannes 1:1'), 'Openbaring van Johannes 1:1') + self.assertEqual(f('op 1:1'), 'Openbaring van Johannes 1:1') + self.assertEqual(f('open 1:1'), 'Openbaring van Johannes 1:1') + self.assertEqual(f('openb 1:1'), 'Openbaring van Johannes 1:1') + + # /New Testament diff --git a/scriptures/texts/afr.py b/scriptures/texts/afr.py new file mode 100644 index 0000000..49fa255 --- /dev/null +++ b/scriptures/texts/afr.py @@ -0,0 +1,89 @@ +from __future__ import unicode_literals +from .base import Text + + +class Afrikaans(Text): + """ + Afrikaans Bible translations (1933, 1953 and 1983) + + Info mostly taken from the "Afrikaanse Taal- en Stylgids" (Afrikaans language and style guide) of the + "Nederduitse Gereformeerde Kerk in Suid-Afrika" (Dutch-German Reformed Church in South Africa) available at + http://www.kaapkerkadmin.co.za/doks/17_Stylgids_14.pdf This style guide uses modern spellings with fewer diacritics, + but I did make the regular expressions broad enough to recognise old (1953) spellings like "Matthéüs" and spellings + that use only ASCII characters, like "Joel" instead of "Joël". + + TODO: check the number of verses in each chapter. + They are not always the same as in English, especially in the Psalms, where we usually have one more verse. + + TODO: Many Afrikaans books start with "Die" (the) or have even longer titles, like "Aan die Romeine" (To the Romans) + instead of "Romeine" (Romans). Which ones should we use? + + """ + books = { + 'gen': ('Genesis', 'Gen', 'G[eé]n(?:esis)?', [31, 25, 24, 26, 32, 22, 24, 22, 29, 32, 32, 20, 18, 24, 21, 16, 27, 33, 38, 18, 34, 24, 20, 67, 34, 35, 46, 22, 35, 43, 55, 32, 20, 31, 29, 43, 36, 30, 23, 23, 57, 38, 34, 34, 28, 34, 31, 22, 33, 26]), + 'eks': ('Eksodus', 'Eks', 'E(?:ks|x)(?:odus)?', [22, 25, 22, 31, 23, 30, 25, 32, 35, 29, 10, 51, 22, 31, 27, 36, 16, 27, 25, 26, 36, 31, 33, 18, 40, 37, 21, 43, 46, 38, 18, 35, 23, 35, 35, 38, 29, 31, 43, 38]), + 'lev': ('Levitikus', 'Lev', 'Lev(?:[ií]tikus)?', [17, 16, 17, 35, 19, 30, 38, 36, 24, 20, 47, 8, 59, 57, 33, 34, 16, 30, 37, 27, 24, 33, 44, 23, 55, 46, 34]), + 'num': ('Numeri', 'Num', 'N[uú]m(?:eri)?', [54, 34, 51, 49, 31, 27, 89, 26, 23, 36, 35, 16, 33, 45, 41, 50, 13, 32, 22, 29, 35, 41, 30, 25, 18, 65, 23, 31, 40, 16, 54, 42, 56, 29, 34, 13]), + 'deut': ('Deuteronomium', 'Deut', 'Deut(?:eron[oó]mium)?', [46, 37, 29, 49, 33, 25, 26, 20, 29, 22, 32, 32, 18, 29, 23, 22, 20, 22, 21, 20, 23, 30, 25, 22, 19, 19, 26, 68, 29, 20, 30, 52, 29, 12]), + 'jos': ('Josua', 'Jos', 'Jos(?:ua)?', [18, 24, 17, 24, 15, 27, 26, 35, 27, 43, 23, 24, 33, 15, 63, 10, 18, 28, 51, 9, 45, 34, 16, 33]), + 'rig': ('Rigters', 'Rig', 'Rig(?:t(?:ers)?)?', [36, 23, 31, 24, 31, 40, 25, 35, 57, 18, 40, 15, 25, 20, 20, 31, 13, 31, 30, 48, 25]), + 'rut': ('Rut', 'Rut', 'Rut', [22, 23, 18, 22]), + '1sam': ('I Samuel', '1Sam', '(?:1|I)(?:\s)?Sam(?:uel)?', [28, 36, 21, 22, 12, 21, 17, 22, 27, 27, 15, 25, 23, 52, 35, 23, 58, 30, 24, 42, 15, 23, 29, 22, 44, 25, 12, 25, 11, 31, 13]), + '2sam': ('II Samuel', '2Sam', '(?:2|II)(?:\s)?Sam(?:uel)?', [27, 32, 39, 12, 25, 23, 29, 18, 13, 19, 27, 31, 39, 33, 37, 23, 29, 33, 43, 26, 22, 51, 39, 25]), + '1kon': ('I Konings', '1Kon', '(?:1|I)(?:\s)?Kon(?:ings)?', [53, 46, 28, 34, 18, 38, 51, 66, 28, 29, 43, 33, 34, 31, 34, 34, 24, 46, 21, 43, 29, 53]), + '2kon': ('II Konings', '2Kon', '(?:2|II)(?:\s)?Kon(?:ings)?', [18, 25, 27, 44, 27, 33, 20, 29, 37, 36, 21, 21, 25, 29, 38, 20, 41, 37, 37, 21, 26, 20, 37, 20, 30]), + '1kron': ('I Kronieke', '1Kron', '(?:1|I)(?:\s)?Kron(?:ieke)?', [54, 55, 24, 43, 26, 81, 40, 40, 44, 14, 47, 40, 14, 17, 29, 43, 27, 17, 19, 8, 30, 19, 32, 31, 31, 32, 34, 21, 30]), + '2kron': ('II Kronieke', '2Kron', '(?:2|II)(?:\s)?Kron(?:ieke)?', [17, 18, 17, 22, 14, 42, 22, 18, 31, 19, 23, 16, 22, 15, 19, 14, 19, 34, 11, 37, 20, 12, 21, 27, 28, 23, 9, 27, 36, 27, 21, 33, 25, 33, 27, 23]), + 'esra': ('Esra', 'Esra', 'Esra', [11, 70, 13, 24, 17, 22, 28, 36, 15, 44]), + 'neh': ('Nehemia', 'Neh', 'Neh(?:em[ií]a)?', [11, 20, 32, 23, 19, 19, 73, 18, 38, 39, 36, 47, 31]), + 'est': ('Ester', 'Est', 'Est(?:er)?', [22, 23, 15, 17, 14, 14, 10, 17, 32, 3]), + 'job': ('Job', 'Job', 'Job', [22, 13, 26, 21, 27, 30, 21, 22, 35, 22, 20, 25, 28, 22, 35, 22, 16, 21, 29, 29, 34, 30, 17, 25, 6, 14, 23, 28, 25, 31, 40, 22, 33, 37, 16, 33, 24, 41, 30, 24, 34, 17]), + 'ps': ('Psalms', 'Ps', 'Ps(?:alm(?:s)?)?', [6, 12, 8, 8, 12, 10, 17, 9, 20, 18, 7, 8, 6, 7, 5, 11, 15, 50, 14, 9, 13, 31, 6, 10, 22, 12, 14, 9, 11, 12, 24, 11, 22, 22, 28, 12, 40, 22, 13, 17, 13, 11, 5, 26, 17, 11, 9, 14, 20, 23, 19, 9, 6, 7, 23, 13, 11, 11, 17, 12, 8, 12, 11, 10, 13, 20, 7, 35, 36, 5, 24, 20, 28, 23, 10, 12, 20, 72, 13, 19, 16, 8, 18, 12, 13, 17, 7, 18, 52, 17, 16, 15, 5, 23, 11, 13, 12, 9, 9, 5, 8, 28, 22, 35, 45, 48, 43, 13, 31, 7, 10, 10, 9, 8, 18, 19, 2, 29, 176, 7, 8, 9, 4, 8, 5, 6, 5, 6, 8, 8, 3, 18, 3, 3, 21, 26, 9, 8, 24, 13, 10, 7, 12, 15, 21, 10, 20, 14, 9, 6]), + 'spr': ('Spreuke van Salomo', 'Spr', 'Spr(?:euke(?: van Salomo)?)?', [33, 22, 35, 27, 23, 35, 27, 36, 18, 32, 31, 28, 25, 35, 33, 33, 28, 24, 29, 30, 31, 29, 35, 34, 28, 28, 27, 28, 27, 33, 31]), + 'pred': ('Prediker', 'Pred', 'Pred(?:iker)?', [18, 26, 22, 16, 20, 12, 29, 17, 18, 20, 10, 14]), + 'hoogl': ('Hooglied van Salomo', 'Hoogl', 'Hoogl(?:ied(?: van Salomo)?)?', [17, 17, 11, 16, 16, 13, 13, 14]), + 'jes': ('Jesaja', 'Jes', 'Jes(?:aja)?', [31, 22, 26, 6, 30, 13, 25, 22, 21, 34, 16, 6, 22, 32, 9, 14, 14, 7, 25, 6, 17, 25, 18, 23, 12, 21, 13, 29, 24, 33, 9, 20, 24, 17, 10, 22, 38, 22, 8, 31, 29, 25, 28, 28, 25, 13, 15, 22, 26, 11, 23, 15, 12, 17, 13, 12, 21, 14, 21, 22, 11, 12, 19, 12, 25, 24]), + 'jer': ('Jeremia', 'Jer', 'Jer(?:emia)?', [19, 37, 25, 31, 31, 30, 34, 22, 26, 25, 23, 17, 27, 22, 21, 21, 27, 23, 15, 18, 14, 30, 40, 10, 38, 24, 22, 17, 32, 24, 40, 44, 26, 22, 19, 32, 21, 28, 18, 16, 18, 22, 13, 30, 5, 28, 7, 47, 39, 46, 64, 34]), + 'klaagl': ('Klaagliedere', 'Klaagl', 'Klaagl(?:iedere(?: van Jeremia)?)?', [22, 22, 66, 22, 22]), + 'eseg': ('Esegiël', 'Eseg', 'Es[eé]g(?:i[ëe]l)?', [28, 10, 27, 17, 17, 14, 27, 18, 11, 22, 25, 28, 23, 23, 8, 63, 24, 32, 14, 49, 32, 31, 49, 27, 17, 21, 36, 26, 21, 26, 18, 32, 33, 31, 15, 38, 28, 23, 29, 49, 26, 20, 27, 31, 25, 24, 23, 35]), + 'dan': ('Daniël', 'Dan', 'Dan(?:i[eë]l)?', [21, 49, 30, 37, 31, 28, 28, 27, 27, 21, 45, 13]), + 'hos': ('Hosea', 'Hos', 'Hos(?:[eé]a)?', [11, 23, 5, 19, 15, 11, 16, 14, 17, 15, 12, 14, 16, 9]), + 'joël': ('Joël', 'Joël', 'Jo[ëe]l', [20, 32, 21]), # TODO: Is it OK to use non-ASCII characters in the dictionary key? + 'am': ('Amos', 'Amos', 'Amos', [15, 16, 15, 13, 27, 14, 17, 14, 15]), + 'ob': ('Obadja', 'Obad', 'Obad(?:ja)?', [21]), + 'jona': ('Jona', 'Jona', 'Jon(?:a)?', [17, 10, 10, 11]), + 'miga': ('Miga', 'Miga', 'Mig(?:a)?', [16, 13, 12, 13, 15, 16, 20]), + 'nah': ('Nahum', 'Nah', 'Nah(?:um)?', [15, 13, 19]), + 'hab': ('Habakuk', 'Hab', 'H[aá]b(?:akuk)?', [17, 20, 19]), + 'sef': ('Sefanja', 'Sef', 'Sef(?:[aá]nja)?', [18, 15, 20]), + 'hag': ('Haggai', 'Hag', 'Hag(?:g(?:ai)?)?', [15, 23]), + 'sag': ('Sagaria', 'Sag', 'Sag(?:ar[ií]a)?', [21, 13, 10, 14, 11, 15, 14, 23, 17, 12, 17, 14, 9, 21]), + 'mal': ('Maleagi', 'Mal', 'Mal(?:e[aá]gi)?', [14, 17, 18, 6]), + 'matt': ('Mattheus', 'Matt', 'Matth?(?:[eé][uü]s)?', [25, 23, 17, 25, 48, 34, 29, 34, 38, 42, 30, 50, 58, 36, 39, 28, 27, 35, 30, 34, 46, 46, 39, 51, 46, 75, 66, 20]), + 'mark': ('Markus', 'Mark', 'Mark(?:us)?', [45, 28, 35, 41, 43, 56, 37, 38, 50, 52, 33, 44, 37, 72, 47, 20]), + 'luk': ('Lukas', 'Luk', 'Luk(?:as)?', [80, 52, 38, 44, 39, 49, 50, 56, 62, 42, 54, 59, 35, 35, 32, 31, 37, 43, 48, 47, 38, 71, 56, 53]), + 'joh': ('Johannes', 'Joh', '(?