├── .travis.yml ├── .gitignore ├── inch.json ├── .editorconfig ├── scripts └── parse.js ├── decodeVerseId.js ├── test ├── integer-test.js └── index.js ├── .eslintrc ├── package.json ├── LICENSE ├── README.md ├── .vscode └── launch.json ├── bibleBooks.js ├── dist └── holy-bible.js ├── index.js └── indexes └── book-index-map.json /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "0.12" -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | npm-debug.log 3 | 4 | # lock file (generated locally, not tracked) 5 | package-lock.json 6 | -------------------------------------------------------------------------------- /inch.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": { 3 | "included": [ 4 | "index.js" 5 | ], 6 | "excluded": [ 7 | "lib/*.js", 8 | "scripts/*.js" 9 | ] 10 | } 11 | } -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = tab 5 | end_of_line = lf 6 | charset = utf-8 7 | trim_trailing_whitespace = true 8 | insert_final_newline = true 9 | 10 | [{package.json,*.yml}] 11 | indent_style = space 12 | indent_size = 2 13 | 14 | [*.md] 15 | trim_trailing_whitespace = false -------------------------------------------------------------------------------- /scripts/parse.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | var fs = require('fs'); 3 | var abbr = require('../bibles/convertcsv'); 4 | var arr = []; 5 | 6 | for (let i = 0; i < abbr.length; i++) { 7 | // arr[abbr[i]['FIELD1']] = abbr[i]['FIELD5']; 8 | arr.push(abbr[i]['FIELD5']); 9 | } 10 | 11 | fs.writeFile('kjv.json', JSON.stringify(arr), function (err) { 12 | if (err) throw err; 13 | console.log('done!'); 14 | }); -------------------------------------------------------------------------------- /decodeVerseId.js: -------------------------------------------------------------------------------- 1 | // decodeVerseId.js 2 | 3 | 'use strict'; 4 | 5 | /** 6 | * Decode a 7-digit verseId into { book, chapter, verse } 7 | * Example: 43003016 → { book: 43, chapter: 3, verse: 16 } 8 | * @param {number} verseId 9 | * @returns {{book: number, chapter: number, verse: number}} 10 | */ 11 | function decodeVerseId(verseId) { 12 | const book = Math.floor(verseId / 1000000); 13 | const chapter = Math.floor((verseId % 1000000) / 1000); 14 | const verse = verseId % 1000; 15 | return { book, chapter, verse }; 16 | } 17 | 18 | module.exports = { decodeVerseId }; 19 | -------------------------------------------------------------------------------- /test/integer-test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const bible = require('../index'); 4 | 5 | async function runTests() { 6 | try { 7 | console.log('---- Old Way (String Reference) ----'); 8 | const john316str = await bible.get('John 3:16', 'kjv'); 9 | console.log(john316str); 10 | 11 | console.log('---- New Way (Integer Verse ID) ----'); 12 | const john316int = await bible.get(43003016, 'kjv'); 13 | console.log(john316int); 14 | 15 | console.log('---- Genesis 1:1 (Integer) ----'); 16 | const gen11 = await bible.get(1001001, 'asv'); 17 | console.log(gen11); 18 | 19 | console.log('---- Invalid ID (should fail) ----'); 20 | await bible.get(99999999, 'kjv'); 21 | } catch (error) { 22 | console.error('Error:', error.message); 23 | } 24 | } 25 | 26 | runTests(); 27 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | --- 2 | env: 3 | browser: true, 4 | node: true 5 | 6 | rules: 7 | space-before-blocks: 2 8 | indent: [2, 2, indentSwitchCase: true] 9 | eqeqeq: [2, "smart"] 10 | curly: [2, "multi-line"] 11 | brace-style: [2, "1tbs", { "allowSingleLine": true }] 12 | quotes: [2, 'single'] 13 | space-after-keywords: 2 14 | no-unused-vars: [2, args: none] 15 | no-comma-dangle: 2 16 | no-unused-expressions: 0 17 | no-multi-spaces: 2 18 | no-new-object: 2 19 | no-multi-str: 2 20 | no-mixed-spaces-and-tabs: 2 21 | no-trailing-spaces: 2 22 | no-caller: 2 23 | eol-last: 2 24 | dot-notation: 1 25 | consistent-return: 2 26 | wrap-regex: 2 27 | max-len: [2, 80] 28 | new-cap: 1 29 | valid-jsdoc: 1 30 | no-use-before-define: 1 31 | block-scoped-var: 0 32 | strict: 0 33 | no-underscore-dangle: 0 34 | yoda: 0 -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "holy-bible", 3 | "version": "1.2.0", 4 | "description": "A small library providing access to the Bible", 5 | "main": "index.js", 6 | "scripts": { 7 | "lint": "eslint *.js test/*.js", 8 | "test": "node test/*.js", 9 | "pretest": "npm run lint" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "https://github.com/bricejlin/holy-bible.git" 14 | }, 15 | "keywords": [ 16 | "bible", 17 | "god", 18 | "christianity", 19 | "christian", 20 | "scripture", 21 | "word" 22 | ], 23 | "author": "Brice Lin ", 24 | "license": "MIT", 25 | "bugs": { 26 | "url": "https://github.com/bricejlin/holy-bible/issues" 27 | }, 28 | "homepage": "https://github.com/bricejlin/holy-bible", 29 | "dependencies": { 30 | "bible-passage-reference-parser": "^1.0.0", 31 | "es6-promise": "^2.0.1", 32 | "zero-fill": "~2.2.0" 33 | }, 34 | "devDependencies": { 35 | "blue-tape": "^0.1.8", 36 | "eslint": "^0.24.0" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Brice Lin 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | var test = require('blue-tape'); 2 | var bible = require('../'); 3 | 4 | test('get', function (t) { 5 | t.plan(7); 6 | 7 | bible.get('John 11:35').then(function (res) { 8 | t.equal(res.text, 'Jesus wept.'); 9 | t.equal(res.passage, 'John.11.35'); 10 | }); 11 | 12 | bible.get('John11:35').then(function (res) { 13 | t.equal(res.text, 'Jesus wept.'); 14 | t.equal(res.passage, 'John.11.35'); 15 | }); 16 | 17 | bible.get('Jn11:35').then(function (res) { 18 | t.equal(res.text, 'Jesus wept.'); 19 | }); 20 | 21 | bible.get('John 11:35-36').then(function (res) { 22 | t.equal(res.text, 'Jesus wept. The Jews therefore said, Behold how ' + 23 | 'he loved him!'); 24 | }); 25 | 26 | bible.get('Jn 11:57-12:1').then(function (res) { 27 | t.equal(res.text, 'Now the chief priests and the Pharisees had given ' + 28 | 'commandment, that, if any man knew where he was, he ' + 29 | 'should show it, that they might take him. Jesus ' + 30 | 'therefore six days before the passover came to ' + 31 | 'Bethany, where Lazarus was, whom Jesus raised from ' + 32 | 'the dead.'); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Holy Bible [![Build Status](https://travis-ci.org/bricejlin/holy-bible.svg?branch=master)](https://travis-ci.org/bricejlin/holy-bible) [![npm version](https://badge.fury.io/js/holy-bible.svg)](http://badge.fury.io/js/holy-bible) 2 | 3 | 4 | Easy-to-use JS library for retrieving bible scripture. 5 | 6 | 7 | ## Installation 8 | 9 | ```bash 10 | $ npm install holy-bible --save 11 | ``` 12 | 13 | ## Usage 14 | 15 | ```js 16 | var bible = require('holy-bible'); 17 | 18 | bible.get('John 15:13', 'ASV') // also supports 2-letter abbrev (ie: Jn 15:13) 19 | .then(function (res) { 20 | console.log(res.text); 21 | }); 22 | 23 | // Greater love hath no man than this, that a man lay down his life for his friends. 24 | ``` 25 | 26 | ## Documentation 27 | 28 | ###.get(verse [, version]) => Promise 29 | 30 | ######verse - A bible passage 31 | Type: `String` 32 | 33 | ######version - Bible version 34 | Type: `String` 35 | Default: `'ASV'` 36 | 37 | 38 | ######Resolves into an object 39 | ```js 40 | { 41 | version: 'ASV', 42 | passage: 'John.15.13', 43 | text: 'Greater love...' 44 | } 45 | ``` 46 | 47 | ## Currently Supported Versions 48 | 49 | - ASV 50 | - KJV 51 | 52 | ## Tests 53 | 54 | ```bash 55 | $ npm install 56 | $ npm test 57 | ``` 58 | 59 | ## License 60 | 61 | [MIT](https://github.com/bricejlin/holy-bible/blob/master/LICENSE) -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.1.0", 3 | // List of configurations. Add new configurations or edit existing ones. 4 | "configurations": [ 5 | { 6 | // Name of configuration; appears in the launch configuration drop down menu. 7 | "name": "Launch index.js", 8 | // Type of configuration. 9 | "type": "node", 10 | // Workspace relative or absolute path to the program. 11 | "program": "index.js", 12 | // Automatically stop program after launch. 13 | "stopOnEntry": false, 14 | // Command line arguments passed to the program. 15 | "args": [], 16 | // Workspace relative or absolute path to the working directory of the program being debugged. Default is the current workspace. 17 | "cwd": ".", 18 | // Workspace relative or absolute path to the runtime executable to be used. Default is the runtime executable on the PATH. 19 | "runtimeExecutable": null, 20 | // Optional arguments passed to the runtime executable. 21 | "runtimeArgs": ["--nolazy"], 22 | // Environment variables passed to the program. 23 | "env": { 24 | "NODE_ENV": "development" 25 | }, 26 | // Use JavaScript source maps (if they exist). 27 | "sourceMaps": false, 28 | // If JavaScript source maps are enabled, the generated code is expected in this directory. 29 | "outDir": null 30 | }, 31 | { 32 | "name": "Attach", 33 | "type": "node", 34 | // TCP/IP address. Default is "localhost". 35 | "address": "localhost", 36 | // Port to attach to. 37 | "port": 5858, 38 | "sourceMaps": false 39 | } 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /bibleBooks.js: -------------------------------------------------------------------------------- 1 | // bibleBooks.js 2 | 3 | 'use strict'; 4 | 5 | /** 6 | * Book numbers (1-66) mapped to standard Bible book names. 7 | */ 8 | const BOOK_NAMES = { 9 | 1: "Genesis", 10 | 2: "Exodus", 11 | 3: "Leviticus", 12 | 4: "Numbers", 13 | 5: "Deuteronomy", 14 | 6: "Joshua", 15 | 7: "Judges", 16 | 8: "Ruth", 17 | 9: "1 Samuel", 18 | 10: "2 Samuel", 19 | 11: "1 Kings", 20 | 12: "2 Kings", 21 | 13: "1 Chronicles", 22 | 14: "2 Chronicles", 23 | 15: "Ezra", 24 | 16: "Nehemiah", 25 | 17: "Esther", 26 | 18: "Job", 27 | 19: "Psalms", 28 | 20: "Proverbs", 29 | 21: "Ecclesiastes", 30 | 22: "Song of Solomon", 31 | 23: "Isaiah", 32 | 24: "Jeremiah", 33 | 25: "Lamentations", 34 | 26: "Ezekiel", 35 | 27: "Daniel", 36 | 28: "Hosea", 37 | 29: "Joel", 38 | 30: "Amos", 39 | 31: "Obadiah", 40 | 32: "Jonah", 41 | 33: "Micah", 42 | 34: "Nahum", 43 | 35: "Habakkuk", 44 | 36: "Zephaniah", 45 | 37: "Haggai", 46 | 38: "Zechariah", 47 | 39: "Malachi", 48 | 40: "Matthew", 49 | 41: "Mark", 50 | 42: "Luke", 51 | 43: "John", 52 | 44: "Acts", 53 | 45: "Romans", 54 | 46: "1 Corinthians", 55 | 47: "2 Corinthians", 56 | 48: "Galatians", 57 | 49: "Ephesians", 58 | 50: "Philippians", 59 | 51: "Colossians", 60 | 52: "1 Thessalonians", 61 | 53: "2 Thessalonians", 62 | 54: "1 Timothy", 63 | 55: "2 Timothy", 64 | 56: "Titus", 65 | 57: "Philemon", 66 | 58: "Hebrews", 67 | 59: "James", 68 | 60: "1 Peter", 69 | 61: "2 Peter", 70 | 62: "1 John", 71 | 63: "2 John", 72 | 64: "3 John", 73 | 65: "Jude", 74 | 66: "Revelation" 75 | }; 76 | 77 | module.exports = { BOOK_NAMES }; 78 | -------------------------------------------------------------------------------- /dist/holy-bible.js: -------------------------------------------------------------------------------- 1 | /******/ (function(modules) { // webpackBootstrap 2 | /******/ // The module cache 3 | /******/ var installedModules = {}; 4 | 5 | /******/ // The require function 6 | /******/ function __webpack_require__(moduleId) { 7 | 8 | /******/ // Check if module is in cache 9 | /******/ if(installedModules[moduleId]) 10 | /******/ return installedModules[moduleId].exports; 11 | 12 | /******/ // Create a new module (and put it into the cache) 13 | /******/ var module = installedModules[moduleId] = { 14 | /******/ exports: {}, 15 | /******/ id: moduleId, 16 | /******/ loaded: false 17 | /******/ }; 18 | 19 | /******/ // Execute the module function 20 | /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 21 | 22 | /******/ // Flag the module as loaded 23 | /******/ module.loaded = true; 24 | 25 | /******/ // Return the exports of the module 26 | /******/ return module.exports; 27 | /******/ } 28 | 29 | 30 | /******/ // expose the modules object (__webpack_modules__) 31 | /******/ __webpack_require__.m = modules; 32 | 33 | /******/ // expose the module cache 34 | /******/ __webpack_require__.c = installedModules; 35 | 36 | /******/ // __webpack_public_path__ 37 | /******/ __webpack_require__.p = ""; 38 | 39 | /******/ // Load entry module and return exports 40 | /******/ return __webpack_require__(0); 41 | /******/ }) 42 | /************************************************************************/ 43 | /******/ ([ 44 | /* 0 */ 45 | /***/ function(module, exports, __webpack_require__) { 46 | 47 | module.exports = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"./dist/holy-bible\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())); 48 | 49 | 50 | /***/ } 51 | /******/ ]); -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var Promise = require('es6-promise').Promise; 4 | var zeroFill = require('zero-fill'); 5 | 6 | var BCVParser = 7 | require('bible-passage-reference-parser/js/en_bcv_parser').bcv_parser; 8 | var bcv = new BCVParser(); 9 | 10 | var BOOK_TO_INDEX = require('./indexes/book-index-map'); 11 | var VERSE_INDEX = require('./indexes/verse-index-map'); 12 | 13 | // Added to allow integer verse reference 14 | var { decodeVerseId } = require('./decodeVerseId'); 15 | var { BOOK_NAMES } = require('./bibleBooks'); 16 | 17 | var BIBLES = { 18 | 'asv': require('./bibles/asv'), 19 | 'kjv': require('./bibles/kjv') 20 | }; 21 | 22 | module.exports = (function () { 23 | var bible = {}; 24 | 25 | /** 26 | * Retrieve bible passages 27 | * 28 | * @param {String|Number} psg - bible book/chapter/verse (string or integer) 29 | * @param {String} ver - bible version 30 | * @return {Promise} returns String passage 31 | */ 32 | bible.get = function (psg, ver) { 33 | var self = this; 34 | var v = ver || 'asv'; 35 | v = v.toLowerCase(); 36 | 37 | if (typeof psg === 'number') { 38 | // New behavior: treat as integer verseId 39 | const bibleVersion = BIBLES[v]; 40 | const paddedVerseId = zeroFill(8, psg); // Pad to 8 digits like '01001001' 41 | const mappedIndex = VERSE_INDEX[paddedVerseId]; 42 | 43 | if (mappedIndex == null) { 44 | return Promise.reject(new Error('Invalid verse ID')); 45 | } 46 | 47 | const verseText = bibleVersion[mappedIndex]; 48 | 49 | const { book, chapter, verse } = decodeVerseId(psg); 50 | const bookName = BOOK_NAMES[book]; 51 | if (!bookName) { 52 | return Promise.reject(new Error('Invalid book number from verse ID')); 53 | } 54 | 55 | const passageName = `${bookName} ${chapter}:${verse}`; 56 | 57 | return Promise.resolve({ 58 | version: v, 59 | passage: passageName, 60 | text: verseText 61 | }); 62 | } 63 | 64 | // OLD behavior for strings 65 | if (typeof psg !== 'string') { 66 | throw new TypeError('Passage should be a string or integer'); 67 | } 68 | 69 | // clean/normalize psg to bcv object 70 | var psgBCV = bcv.parse(psg).parsed_entities()[0].entities[0]; 71 | 72 | if (!psgBCV) { throw new Error('Bad bible passage input'); } 73 | 74 | return new Promise(function (res, rej) { 75 | // parse psg into index ranges 76 | var start = self._bcvToInd(psgBCV.start); 77 | var end = self._bcvToInd(psgBCV.end); 78 | var psgOsis = psgBCV.osis; 79 | var text = (end - start === 0) ? self._getVerses(BIBLES[v], start) 80 | : self._getVerses(BIBLES[v], start, end); 81 | 82 | if (text) { 83 | var data = { version: v, passage: psgOsis, text: text }; 84 | res(data); 85 | } else { 86 | rej(Error('Ahhhhh!!! Nooo!!!')); 87 | } 88 | }); 89 | }; 90 | 91 | /** 92 | * Convert book, chapter, verse object into verse index 93 | * 94 | * @param {Object} psg - bible book/chapter/verse obj 95 | * @return {String} verse index (ie: 01001001) 96 | */ 97 | bible._bcvToInd = function (psg) { 98 | var book = BOOK_TO_INDEX[psg.b].b; 99 | var b = zeroFill(2, book); 100 | var c = zeroFill(3, psg.c); 101 | var v = zeroFill(3, psg.v); 102 | 103 | return b + c + v; 104 | }; 105 | 106 | /** 107 | * Convert book, chapter, verse object into verse index 108 | * 109 | * @param {Object} bVersions - bible version object 110 | * @param {String} start - start index 111 | * @param {String} end - end index 112 | * @return {String} bible passage 113 | */ 114 | bible._getVerses = function (bVersions, start, end) { 115 | var s = VERSE_INDEX[start]; 116 | var e = VERSE_INDEX[end]; 117 | var arr = []; 118 | 119 | // Return single verse if no end 120 | if (!e) { return bVersions[s]; } 121 | 122 | for (var i = Number(s), len = Number(e); i < len + 1; i++) { 123 | arr.push(bVersions[i]); 124 | } 125 | 126 | return arr.join(' '); 127 | }; 128 | 129 | return bible; 130 | })(); 131 | -------------------------------------------------------------------------------- /indexes/book-index-map.json: -------------------------------------------------------------------------------- 1 | {"Gen":{"b":1,"p":1},"Ge":{"b":1,"p":0},"Gn":{"b":1,"p":0},"Exo":{"b":2,"p":1},"Ex":{"b":2,"p":0},"Exod":{"b":2,"p":0},"Lev":{"b":3,"p":1},"Le":{"b":3,"p":0},"Lv":{"b":3,"p":0},"Num":{"b":4,"p":1},"Nu":{"b":4,"p":0},"Nm":{"b":4,"p":0},"Nb":{"b":4,"p":0},"Deut":{"b":5,"p":1},"Dt":{"b":5,"p":0},"Josh":{"b":6,"p":1},"Jos":{"b":6,"p":0},"Jsh":{"b":6,"p":0},"Judg":{"b":7,"p":1},"Jdg":{"b":7,"p":0},"Jg":{"b":7,"p":0},"Jdgs":{"b":7,"p":0},"Ruth":{"b":8,"p":1},"Rth":{"b":8,"p":0},"Ru":{"b":8,"p":0},"1 Sam":{"b":9,"p":1},"1 Sa":{"b":9,"p":0},"1Samuel":{"b":9,"p":0},"1S":{"b":9,"p":0},"I Sa":{"b":9,"p":0},"1 Sm":{"b":9,"p":0},"1Sa":{"b":9,"p":0},"I Sam":{"b":9,"p":0},"1Sam":{"b":9,"p":0},"I Samuel":{"b":9,"p":0},"1st Samuel":{"b":9,"p":0},"First Samuel":{"b":9,"p":0},"2 Sam":{"b":10,"p":1},"2 Sa":{"b":10,"p":0},"2S":{"b":10,"p":0},"II Sa":{"b":10,"p":0},"2 Sm":{"b":10,"p":0},"2Sa":{"b":10,"p":0},"II Sam":{"b":10,"p":0},"2Sam":{"b":10,"p":0},"II Samuel":{"b":10,"p":0},"2Samuel":{"b":10,"p":0},"2nd Samuel":{"b":10,"p":0},"Second Samuel":{"b":10,"p":0},"1 Kgs":{"b":11,"p":1},"1 Ki":{"b":11,"p":0},"1K":{"b":11,"p":0},"I Kgs":{"b":11,"p":0},"1Kgs":{"b":11,"p":0},"I Ki":{"b":11,"p":0},"1Ki":{"b":11,"p":0},"I Kings":{"b":11,"p":0},"1Kings":{"b":11,"p":0},"1st Kgs":{"b":11,"p":0},"1st Kings":{"b":11,"p":0},"First Kings":{"b":11,"p":0},"First Kgs":{"b":11,"p":0},"1Kin":{"b":11,"p":0},"2 Kgs":{"b":12,"p":1},"2 Ki":{"b":12,"p":0},"2K":{"b":12,"p":0},"II Kgs":{"b":12,"p":0},"2Kgs":{"b":12,"p":0},"II Ki":{"b":12,"p":0},"2Ki":{"b":12,"p":0},"II Kings":{"b":12,"p":0},"2Kings":{"b":12,"p":0},"2nd Kgs":{"b":12,"p":0},"2nd Kings":{"b":12,"p":0},"Second Kings":{"b":12,"p":0},"Second Kgs":{"b":12,"p":0},"2Kin":{"b":12,"p":0},"1 Chron":{"b":13,"p":1},"1 Ch":{"b":13,"p":0},"I Ch":{"b":13,"p":0},"1Ch":{"b":13,"p":0},"1 Chr":{"b":13,"p":0},"I Chr":{"b":13,"p":0},"1Chr":{"b":13,"p":0},"I Chron":{"b":13,"p":0},"1Chron":{"b":13,"p":0},"I Chronicles":{"b":13,"p":0},"1Chronicles":{"b":13,"p":0},"1st Chronicles":{"b":13,"p":0},"First Chronicles":{"b":13,"p":0},"2 Chron":{"b":14,"p":1},"2 Ch":{"b":14,"p":0},"II Ch":{"b":14,"p":0},"2Ch":{"b":14,"p":0},"II Chr":{"b":14,"p":0},"2Chr":{"b":14,"p":0},"II Chron":{"b":14,"p":0},"2Chron":{"b":14,"p":0},"II Chronicles":{"b":14,"p":0},"2Chronicles":{"b":14,"p":0},"2nd Chronicles":{"b":14,"p":0},"Second Chronicles":{"b":14,"p":0},"Ezra":{"b":15,"p":1},"Ezr":{"b":15,"p":0},"Neh":{"b":16,"p":1},"Ne":{"b":16,"p":0},"Esth":{"b":17,"p":1},"Es":{"b":17,"p":0},"Job":{"b":18,"p":0},"Jb":{"b":18,"p":0},"Pslm":{"b":19,"p":1},"Ps":{"b":19,"p":0},"Psalms":{"b":19,"p":0},"Psa":{"b":19,"p":0},"Psm":{"b":19,"p":0},"Pss":{"b":19,"p":0},"Prov":{"b":20,"p":1},"Pr":{"b":20,"p":0},"Prv":{"b":20,"p":0},"Eccles":{"b":21,"p":1},"Eccl":{"b":21,"p":0},"Ec":{"b":21,"p":0},"Qoh":{"b":21,"p":0},"Qoheleth":{"b":21,"p":0},"Song":{"b":22,"p":1},"So":{"b":22,"p":0},"Canticle of Canticles":{"b":22,"p":0},"Canticles":{"b":22,"p":0},"Song of Songs":{"b":22,"p":0},"SOS":{"b":22,"p":0},"Isa":{"b":23,"p":1},"Is":{"b":23,"p":0},"Jer":{"b":24,"p":1},"Je":{"b":24,"p":0},"Jr":{"b":24,"p":0},"Lam":{"b":25,"p":1},"La":{"b":25,"p":0},"Ezek":{"b":26,"p":1},"Eze":{"b":26,"p":0},"Ezk":{"b":26,"p":0},"Dan":{"b":27,"p":1},"Da":{"b":27,"p":0},"Dn":{"b":27,"p":0},"Hos":{"b":28,"p":1},"Ho":{"b":28,"p":0},"Joel":{"b":29,"p":1},"Joe":{"b":29,"p":0},"Jl":{"b":29,"p":0},"Amos":{"b":30,"p":1},"Am":{"b":30,"p":0},"Obad":{"b":31,"p":1},"Ob":{"b":31,"p":0},"Jonah":{"b":32,"p":1},"Jnh":{"b":32,"p":0},"Jon":{"b":32,"p":0},"Micah":{"b":33,"p":1},"Mic":{"b":33,"p":0},"Nah":{"b":34,"p":1},"Na":{"b":34,"p":0},"Hab":{"b":35,"p":1},"Zeph":{"b":36,"p":1},"Zep":{"b":36,"p":0},"Zp":{"b":36,"p":0},"Haggai":{"b":37,"p":1},"Hag":{"b":37,"p":0},"Hg":{"b":37,"p":0},"Zech":{"b":38,"p":1},"Zec":{"b":38,"p":0},"Zc":{"b":38,"p":0},"Mal":{"b":39,"p":0},"Ml":{"b":39,"p":0},"Matt":{"b":40,"p":1},"Mt":{"b":40,"p":0},"Mark":{"b":41,"p":1},"Mrk":{"b":41,"p":0},"Mk":{"b":41,"p":0},"Mr":{"b":41,"p":0},"Luke":{"b":42,"p":1},"Luk":{"b":42,"p":0},"Lk":{"b":42,"p":0},"John":{"b":43,"p":1},"Jn":{"b":43,"p":0},"Jhn":{"b":43,"p":0},"Acts":{"b":44,"p":1},"Ac":{"b":44,"p":0},"Rom":{"b":45,"p":1},"Ro":{"b":45,"p":0},"Rm":{"b":45,"p":0},"1 Cor":{"b":46,"p":1},"1 Co":{"b":46,"p":0},"I Co":{"b":46,"p":0},"1Co":{"b":46,"p":0},"I Cor":{"b":46,"p":0},"1Cor":{"b":46,"p":0},"I Corinthians":{"b":46,"p":0},"1Corinthians":{"b":46,"p":0},"1st Corinthians":{"b":46,"p":0},"First Corinthians":{"b":46,"p":0},"2 Cor":{"b":47,"p":1},"2 Co":{"b":47,"p":0},"II Co":{"b":47,"p":0},"2Co":{"b":47,"p":0},"II Cor":{"b":47,"p":0},"2Cor":{"b":47,"p":0},"II Corinthians":{"b":47,"p":0},"2Corinthians":{"b":47,"p":0},"2nd Corinthians":{"b":47,"p":0},"Second Corinthians":{"b":47,"p":0},"Gal":{"b":48,"p":1},"Ga":{"b":48,"p":0},"Ephes":{"b":49,"p":1},"Eph":{"b":49,"p":0},"Phil":{"b":50,"p":1},"Php":{"b":50,"p":0},"Col":{"b":51,"p":0},"1 Thess":{"b":52,"p":1},"1 Th":{"b":52,"p":0},"I Th":{"b":52,"p":0},"1Th":{"b":52,"p":0},"I Thes":{"b":52,"p":0},"1Thes":{"b":52,"p":0},"I Thess":{"b":52,"p":0},"1Thess":{"b":52,"p":0},"I Thessalonians":{"b":52,"p":0},"1Thessalonians":{"b":52,"p":0},"1st Thessalonians":{"b":52,"p":0},"First Thessalonians":{"b":52,"p":0},"2 Thess":{"b":53,"p":1},"2 Th":{"b":53,"p":0},"II Th":{"b":53,"p":0},"2Th":{"b":53,"p":0},"II Thes":{"b":53,"p":0},"2Thes":{"b":53,"p":0},"II Thess":{"b":53,"p":0},"2Thess":{"b":53,"p":0},"II Thessalonians":{"b":53,"p":0},"2Thessalonians":{"b":53,"p":0},"2nd Thessalonians":{"b":53,"p":0},"Second Thessalonians":{"b":53,"p":0},"1 Tim":{"b":54,"p":1},"1 Ti":{"b":54,"p":0},"I Ti":{"b":54,"p":0},"1Ti":{"b":54,"p":0},"I Tim":{"b":54,"p":0},"1Tim":{"b":54,"p":0},"I Timothy":{"b":54,"p":0},"1Timothy":{"b":54,"p":0},"1st Timothy":{"b":54,"p":0},"First Timothy":{"b":54,"p":0},"2 Tim":{"b":55,"p":1},"2 Ti":{"b":55,"p":0},"II Ti":{"b":55,"p":0},"2Ti":{"b":55,"p":0},"II Tim":{"b":55,"p":0},"2Tim":{"b":55,"p":0},"II Timothy":{"b":55,"p":0},"2Timothy":{"b":55,"p":0},"2nd Timothy":{"b":55,"p":0},"Second Timothy":{"b":55,"p":0},"Titus":{"b":56,"p":1},"Tit":{"b":56,"p":0},"Philem":{"b":57,"p":1},"Phm":{"b":57,"p":0},"Hebrews":{"b":58,"p":1},"Heb":{"b":58,"p":0},"James":{"b":59,"p":1},"Jas":{"b":59,"p":0},"Jm":{"b":59,"p":0},"1 Pet":{"b":60,"p":1},"1 Pe":{"b":60,"p":0},"I Pe":{"b":60,"p":0},"1Pe":{"b":60,"p":0},"I Pet":{"b":60,"p":0},"1Pet":{"b":60,"p":0},"I Pt":{"b":60,"p":0},"1 Pt":{"b":60,"p":0},"1Pt":{"b":60,"p":0},"I Peter":{"b":60,"p":0},"1Peter":{"b":60,"p":0},"1st Peter":{"b":60,"p":0},"First Peter":{"b":60,"p":0},"2 Pet":{"b":61,"p":1},"2 Pe":{"b":61,"p":0},"II Pe":{"b":61,"p":0},"2Pe":{"b":61,"p":0},"II Pet":{"b":61,"p":0},"2Pet":{"b":61,"p":0},"II Pt":{"b":61,"p":0},"2 Pt":{"b":61,"p":0},"2Pt":{"b":61,"p":0},"II Peter":{"b":61,"p":0},"2Peter":{"b":61,"p":0},"2nd Peter":{"b":61,"p":0},"Second Peter":{"b":61,"p":0},"1 John":{"b":62,"p":1},"1 Jn":{"b":62,"p":0},"I Jn":{"b":62,"p":0},"1Jn":{"b":62,"p":0},"I Jo":{"b":62,"p":0},"1Jo":{"b":62,"p":0},"I Joh":{"b":62,"p":0},"1Joh":{"b":62,"p":0},"I Jhn":{"b":62,"p":0},"1 Jhn":{"b":62,"p":0},"1Jhn":{"b":62,"p":0},"I John":{"b":62,"p":0},"1John":{"b":62,"p":0},"1st John":{"b":62,"p":0},"First John":{"b":62,"p":0},"2 John":{"b":63,"p":1},"2 Jn":{"b":63,"p":0},"II Jn":{"b":63,"p":0},"2Jn":{"b":63,"p":0},"II Jo":{"b":63,"p":0},"2Jo":{"b":63,"p":0},"II Joh":{"b":63,"p":0},"2Joh":{"b":63,"p":0},"II Jhn":{"b":63,"p":0},"2 Jhn":{"b":63,"p":0},"2Jhn":{"b":63,"p":0},"II John":{"b":63,"p":0},"2John":{"b":63,"p":0},"2nd John":{"b":63,"p":0},"Second John":{"b":63,"p":0},"3 John":{"b":64,"p":1},"3 Jn":{"b":64,"p":0},"III Jn":{"b":64,"p":0},"3Jn":{"b":64,"p":0},"III Jo":{"b":64,"p":0},"3Jo":{"b":64,"p":0},"III Joh":{"b":64,"p":0},"3Joh":{"b":64,"p":0},"III Jhn":{"b":64,"p":0},"3 Jhn":{"b":64,"p":0},"3Jhn":{"b":64,"p":0},"III John":{"b":64,"p":0},"3John":{"b":64,"p":0},"3rd John":{"b":64,"p":0},"Third John":{"b":64,"p":0},"Jude":{"b":65,"p":1},"Jud":{"b":65,"p":0},"Rev":{"b":66,"p":1},"Re":{"b":66,"p":0},"The Revelation":{"b":66,"p":0}} --------------------------------------------------------------------------------