diff --git a/app/db/.editorconfig b/app/db/.editorconfig index 59d9a3a3..2b849b98 100644 --- a/app/db/.editorconfig +++ b/app/db/.editorconfig @@ -11,6 +11,9 @@ trim_trailing_whitespace = true [*.ts] quote_type = single +[bible-reference.ts] +max_line_length=1000 + [*.md] max_line_length = off trim_trailing_whitespace = false diff --git a/app/db/.prettierrc b/app/db/.prettierrc new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/app/db/.prettierrc @@ -0,0 +1 @@ +{} diff --git a/app/db/src/app/common/bible-reference.ts b/app/db/src/app/common/bible-reference.ts index 84cf0276..9ff4161b 100644 --- a/app/db/src/app/common/bible-reference.ts +++ b/app/db/src/app/common/bible-reference.ts @@ -3,64 +3,8 @@ // Jason@walljm.com // www.walljm.com // Jeremy@marzhillstudios.com // jeremy.marzhillstudios.com -import { NONE_TYPE } from '@angular/compiler'; - -class StringUtils { - public static trim(str: string): string { - return str.replace(/^\s+|\s+$/g, ''); - } - - public static ltrim(str: string): string { - return str.replace(/^\s+/, ''); - } - - public static rtrim(str: string): string { - return str.replace(/\s+$/, ''); - } -} - -export enum Overlap { - Intersect, - Subset, - None, -} - export class BibleReference { - constructor(reference: string) { - this.section = { - book: null, - start: { - chapter: 0, - verse: 0, - }, - end: { - chapter: 0, - verse: 0, - }, - }; - this.ref = reference.toLowerCase().trim(); - this.parseReference(); - - if (this.section.end.chapter === 0) { - this.section.end.chapter = this.section.start.chapter; - } - if ( - Number(this.section.start.verse) > Number(this.section.end.verse) && - this.section.start.chapter === this.section.end.chapter - ) { - this.section.end.verse = this.section.start.verse; - } - if (this.section.start.verse === 0) { - this.section.start.verse = 1; - } - if (this.section.end.verse === 0) { - this.section.end.verse = this.section.book.chapters[ - this.section.end.chapter - ]; - } - } - - public static Books: Array = [ + static Books: Array = [ { name: 'Unknown', abbreviation: 'Unk', @@ -75,59 +19,7 @@ export class BibleReference { longName: 'Book of Genesis', bookNumber: 1, lastChapter: 66, - chapters: [ - 0, - 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, - ], + chapters: [0, 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], }, { bookNumber: 2, @@ -135,49 +27,7 @@ export class BibleReference { name: 'Exodus', longName: 'Book of Exodus', lastChapter: 40, - chapters: [ - 0, - 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, - ], + chapters: [0, 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], }, { bookNumber: 3, @@ -185,36 +35,7 @@ export class BibleReference { abbreviation: 'Lev', longName: 'Leviticus', lastChapter: 27, - chapters: [ - 0, - 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, - ], + chapters: [0, 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], }, { bookNumber: 4, @@ -222,45 +43,7 @@ export class BibleReference { abbreviation: 'Num', longName: 'Book of Numbers', lastChapter: 36, - chapters: [ - 0, - 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, - ], + chapters: [0, 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], }, { bookNumber: 5, @@ -268,43 +51,7 @@ export class BibleReference { abbreviation: 'Deut', longName: 'Book of Deuteronomy', lastChapter: 34, - chapters: [ - 0, - 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, - ], + chapters: [0, 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], }, { bookNumber: 6, @@ -312,33 +59,7 @@ export class BibleReference { abbreviation: 'Josh', longName: 'Book of Joshua', lastChapter: 24, - chapters: [ - 0, - 18, - 24, - 17, - 24, - 15, - 27, - 26, - 35, - 27, - 43, - 23, - 24, - 33, - 15, - 63, - 10, - 18, - 28, - 51, - 9, - 45, - 34, - 16, - 33, - ], + chapters: [0, 18, 24, 17, 24, 15, 27, 26, 35, 27, 43, 23, 24, 33, 15, 63, 10, 18, 28, 51, 9, 45, 34, 16, 33], }, { bookNumber: 7, @@ -346,30 +67,7 @@ export class BibleReference { abbreviation: 'Jud', longName: 'Book of Judges', lastChapter: 21, - chapters: [ - 0, - 36, - 23, - 31, - 24, - 31, - 40, - 25, - 35, - 57, - 18, - 40, - 15, - 25, - 20, - 20, - 31, - 13, - 31, - 30, - 48, - 25, - ], + chapters: [0, 36, 23, 31, 24, 31, 40, 25, 35, 57, 18, 40, 15, 25, 20, 20, 31, 13, 31, 30, 48, 25], }, { bookNumber: 8, @@ -385,40 +83,7 @@ export class BibleReference { abbreviation: '1 Sam', longName: 'First Book of Samuel', lastChapter: 31, - chapters: [ - 0, - 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, - ], + chapters: [0, 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], }, { bookNumber: 10, @@ -426,33 +91,7 @@ export class BibleReference { abbreviation: '2 Sam', longName: 'Second Book of Samuel', lastChapter: 24, - chapters: [ - 0, - 27, - 32, - 39, - 12, - 25, - 23, - 29, - 18, - 13, - 19, - 27, - 31, - 39, - 33, - 37, - 23, - 29, - 33, - 43, - 26, - 22, - 51, - 39, - 25, - ], + chapters: [0, 27, 32, 39, 12, 25, 23, 29, 18, 13, 19, 27, 31, 39, 33, 37, 23, 29, 33, 43, 26, 22, 51, 39, 25], }, { bookNumber: 11, @@ -460,31 +99,7 @@ export class BibleReference { abbreviation: '1 Kng', longName: 'First Book of Kings', lastChapter: 22, - chapters: [ - 0, - 53, - 46, - 28, - 34, - 18, - 38, - 51, - 66, - 28, - 29, - 43, - 33, - 34, - 31, - 34, - 34, - 24, - 46, - 21, - 43, - 29, - 53, - ], + chapters: [0, 53, 46, 28, 34, 18, 38, 51, 66, 28, 29, 43, 33, 34, 31, 34, 34, 24, 46, 21, 43, 29, 53], }, { bookNumber: 12, @@ -492,34 +107,7 @@ export class BibleReference { abbreviation: '2 Kng', longName: 'Second Book of Kings', lastChapter: 25, - chapters: [ - 0, - 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, - ], + chapters: [0, 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], }, { bookNumber: 13, @@ -527,38 +115,7 @@ export class BibleReference { abbreviation: '1 Chr', longName: 'First Book of Chronicles', lastChapter: 29, - chapters: [ - 0, - 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, - ], + chapters: [0, 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], }, { bookNumber: 14, @@ -566,45 +123,7 @@ export class BibleReference { abbreviation: '2 Chr', longName: 'Second Book of Chronicles', lastChapter: 36, - chapters: [ - 0, - 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, - ], + chapters: [0, 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], }, { bookNumber: 15, @@ -636,51 +155,7 @@ export class BibleReference { abbreviation: 'Job', longName: 'Book of Job', lastChapter: 42, - chapters: [ - 0, - 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, - ], + chapters: [0, 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], }, { bookNumber: 19, @@ -688,159 +163,7 @@ export class BibleReference { abbreviation: 'Psalm', longName: 'Book of Psalms', lastChapter: 150, - chapters: [ - 0, - 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, - ], + chapters: [0, 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], }, { bookNumber: 20, @@ -848,40 +171,7 @@ export class BibleReference { abbreviation: 'Prov', longName: 'Book of Proverbs', lastChapter: 31, - chapters: [ - 0, - 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, - ], + chapters: [0, 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], }, { bookNumber: 21, @@ -905,75 +195,7 @@ export class BibleReference { abbreviation: 'Isa', longName: 'Book of Isaiah', lastChapter: 66, - chapters: [ - 0, - 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, - ], + chapters: [0, 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], }, { bookNumber: 24, @@ -981,61 +203,7 @@ export class BibleReference { abbreviation: 'Jer', longName: 'Book of Jeremiah', lastChapter: 52, - chapters: [ - 0, - 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, - ], + chapters: [0, 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], }, { bookNumber: 25, @@ -1051,57 +219,7 @@ export class BibleReference { abbreviation: 'Eze', longName: 'Book of Ezekiel', lastChapter: 48, - chapters: [ - 0, - 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, - ], + chapters: [0, 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], }, { bookNumber: 27, @@ -1213,37 +331,7 @@ export class BibleReference { abbreviation: 'Matt', longName: 'Gospel of Matthew', lastChapter: 28, - chapters: [ - 0, - 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, - ], + chapters: [0, 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], }, { bookNumber: 41, @@ -1251,25 +339,7 @@ export class BibleReference { abbreviation: 'Mark', longName: 'Gospel of Mark', lastChapter: 16, - chapters: [ - 0, - 45, - 28, - 35, - 41, - 43, - 56, - 37, - 38, - 50, - 52, - 33, - 44, - 37, - 72, - 47, - 20, - ], + chapters: [0, 45, 28, 35, 41, 43, 56, 37, 38, 50, 52, 33, 44, 37, 72, 47, 20], }, { bookNumber: 42, @@ -1277,33 +347,7 @@ export class BibleReference { abbreviation: 'Luke', longName: 'Gospel of Luke', lastChapter: 24, - chapters: [ - 0, - 80, - 52, - 38, - 44, - 39, - 49, - 50, - 56, - 62, - 42, - 54, - 59, - 35, - 35, - 32, - 31, - 37, - 43, - 48, - 47, - 38, - 71, - 56, - 53, - ], + chapters: [0, 80, 52, 38, 44, 39, 49, 50, 56, 62, 42, 54, 59, 35, 35, 32, 31, 37, 43, 48, 47, 38, 71, 56, 53], }, { bookNumber: 43, @@ -1311,30 +355,7 @@ export class BibleReference { abbreviation: 'John', longName: 'Gospel of John', lastChapter: 21, - chapters: [ - 0, - 51, - 25, - 36, - 54, - 47, - 71, - 53, - 59, - 41, - 42, - 57, - 50, - 38, - 31, - 27, - 33, - 26, - 40, - 42, - 31, - 25, - ], + chapters: [0, 51, 25, 36, 54, 47, 71, 53, 59, 41, 42, 57, 50, 38, 31, 27, 33, 26, 40, 42, 31, 25], }, { bookNumber: 44, @@ -1342,37 +363,7 @@ export class BibleReference { abbreviation: 'Acts', longName: 'Acts of the Apostles', lastChapter: 28, - chapters: [ - 0, - 26, - 47, - 26, - 37, - 42, - 15, - 60, - 40, - 43, - 48, - 30, - 25, - 52, - 28, - 41, - 40, - 34, - 28, - 41, - 38, - 40, - 30, - 35, - 27, - 27, - 32, - 44, - 31, - ], + chapters: [0, 26, 47, 26, 37, 42, 15, 60, 40, 43, 48, 30, 25, 52, 28, 41, 40, 34, 28, 41, 38, 40, 30, 35, 27, 27, 32, 44, 31], }, { bookNumber: 45, @@ -1380,25 +371,7 @@ export class BibleReference { abbreviation: 'Rom', longName: 'Epistle to the Romans', lastChapter: 16, - chapters: [ - 0, - 32, - 29, - 31, - 25, - 21, - 23, - 25, - 39, - 33, - 21, - 36, - 21, - 14, - 23, - 33, - 27, - ], + chapters: [0, 32, 29, 31, 25, 21, 23, 25, 39, 33, 21, 36, 21, 14, 23, 33, 27], }, { bookNumber: 46, @@ -1406,25 +379,7 @@ export class BibleReference { abbreviation: '1 Cor', longName: 'First Epistle to the Corinthians', lastChapter: 16, - chapters: [ - 0, - 31, - 16, - 23, - 21, - 13, - 20, - 40, - 13, - 27, - 33, - 34, - 31, - 13, - 40, - 58, - 24, - ], + chapters: [0, 31, 16, 23, 21, 13, 20, 40, 13, 27, 33, 34, 31, 13, 40, 58, 24], }, { bookNumber: 47, @@ -1584,31 +539,7 @@ export class BibleReference { abbreviation: 'Rev', longName: 'Book of Revelations', lastChapter: 22, - chapters: [ - 0, - 20, - 29, - 22, - 11, - 14, - 17, - 17, - 13, - 21, - 11, - 19, - 17, - 18, - 20, - 8, - 21, - 18, - 24, - 21, - 15, - 27, - 21, - ], + chapters: [0, 20, 29, 22, 11, 14, 17, 17, 13, 21, 11, 19, 17, 18, 20, 8, 21, 18, 24, 21, 15, 27, 21], }, ]; @@ -1616,7 +547,38 @@ export class BibleReference { section: Section; errAcc: string; - public static parseBook(fbook: string): Book { + constructor(reference: string) { + this.section = { + book: null, + start: { + chapter: 0, + verse: 0, + }, + end: { + chapter: 0, + verse: 0, + }, + }; + this.ref = reference.toLowerCase().trim(); + this.parseReference(); + + if (this.section.end.chapter === 0) { + this.section.end.chapter = this.section.start.chapter; + } + if (Number(this.section.start.verse) > Number(this.section.end.verse) && this.section.start.chapter === this.section.end.chapter) { + this.section.end.verse = this.section.start.verse; + } + if (this.section.start.verse === 0) { + this.section.start.verse = 1; + } + if (this.section.end.verse === 0) { + this.section.end.verse = this.section.book.chapters[this.section.end.chapter]; + } + } + + //#region Public Static Functions + + static parseBook(fbook: string): Book { if (fbook.search(/\b(genesis|gen|ge|gn)\b/i) !== -1) { return this.bookName(1); } @@ -1644,31 +606,19 @@ export class BibleReference { if (fbook.search(/\b(1|i|1st|first)\s*(samuel|sa|sam|sml)\b/i) !== -1) { return this.bookName(9); } - if ( - fbook.search(/\b(2|ii|2nd|second|sec)\s*(samuel|sa|sam|sml)\b/i) !== -1 - ) { + if (fbook.search(/\b(2|ii|2nd|second|sec)\s*(samuel|sa|sam|sml)\b/i) !== -1) { return this.bookName(10); } - if ( - fbook.search(/\b(1|i|1st|first)\s*(kings|king|kgs|kn|k|ki)\b/i) !== -1 - ) { + if (fbook.search(/\b(1|i|1st|first)\s*(kings|king|kgs|kn|k|ki)\b/i) !== -1) { return this.bookName(11); } - if ( - fbook.search(/\b(2|ii|2nd|second|sec)\s*(kings|king|kgs|kn|k|ki)\b/i) !== - -1 - ) { + if (fbook.search(/\b(2|ii|2nd|second|sec)\s*(kings|king|kgs|kn|k|ki)\b/i) !== -1) { return this.bookName(12); } - if ( - fbook.search(/\b(1|i|1st|first)\s*(chronicles|chron|ch|chr)\b/i) !== -1 - ) { + if (fbook.search(/\b(1|i|1st|first)\s*(chronicles|chron|ch|chr)\b/i) !== -1) { return this.bookName(13); } - if ( - fbook.search(/\b(2|ii|2nd|second|sec)\s*(chronicles|chron|ch|chr)\b/i) !== - -1 - ) { + if (fbook.search(/\b(2|ii|2nd|second|sec)\s*(chronicles|chron|ch|chr)\b/i) !== -1) { return this.bookName(14); } if (fbook.search(/\b(ezra|ezr)\b/i) !== -1) { @@ -1689,17 +639,10 @@ export class BibleReference { if (fbook.search(/\b(proverbs|prov|pr|pro|proverb|prv|prvbs)\b/i) !== -1) { return this.bookName(20); } - if ( - fbook.search(/\b(ecclesiastes|eccl|ecc|eccles|ec|ecl|ecclesiaste)\b/i) !== - -1 - ) { + if (fbook.search(/\b(ecclesiastes|eccl|ecc|eccles|ec|ecl|ecclesiaste)\b/i) !== -1) { return this.bookName(21); } - if ( - fbook.search( - /\b(song\sof\ssolomon|song\sof\ssongs|sos|ss|son|so|song|songs)\b/i - ) !== -1 - ) { + if (fbook.search(/\b(song\sof\ssolomon|song\sof\ssongs|sos|ss|son|so|song|songs)\b/i) !== -1) { return this.bookName(22); } if (fbook.search(/\b(isaiah|is|isah|isai|ia)\b/i) !== -1) { @@ -1782,25 +725,13 @@ export class BibleReference { if (fbook.search(/\b(romans|rom|ro|rm|roman)\b/i) !== -1) { return this.bookName(45); } - if ( - fbook.search( - /\b(1|i|1st|first)\s*(corinthian|cor|corinthians|corinth|corin|corth|corint)\b/i - ) !== -1 - ) { + if (fbook.search(/\b(1|i|1st|first)\s*(corinthian|cor|corinthians|corinth|corin|corth|corint)\b/i) !== -1) { return this.bookName(46); } - if ( - fbook.search( - /\b(2|ii|2nd|second|sec)\s*(corinthian|cor|corinthians|corinth|corin|corth|corint)\b/i - ) !== -1 - ) { + if (fbook.search(/\b(2|ii|2nd|second|sec)\s*(corinthian|cor|corinthians|corinth|corin|corth|corint)\b/i) !== -1) { return this.bookName(47); } - if ( - fbook.search( - /\b(galatians|galatian|galations|gal|ga|gala|galation|galat)\b/i - ) !== -1 - ) { + if (fbook.search(/\b(galatians|galatian|galations|gal|ga|gala|galation|galat)\b/i) !== -1) { return this.bookName(48); } if (fbook.search(/\b(ephesians|eph|ep|ephes|ephe|ephs)\b/i) !== -1) { @@ -1809,34 +740,19 @@ export class BibleReference { if (fbook.search(/\b(philippians|phi|phil|ph|philip)\b/i) !== -1) { return this.bookName(50); } - if ( - fbook.search(/\b(colossians|col|co|colossian|colos|coloss)\b/i) !== -1 - ) { + if (fbook.search(/\b(colossians|col|co|colossian|colos|coloss)\b/i) !== -1) { return this.bookName(51); } - if ( - fbook.search( - /\b(1|i|1st|first)\s*(thessalonians|the|thessa|thessalonian|thes|thess|th)\b/i - ) !== -1 - ) { + if (fbook.search(/\b(1|i|1st|first)\s*(thessalonians|the|thessa|thessalonian|thes|thess|th)\b/i) !== -1) { return this.bookName(52); } - if ( - fbook.search( - /\b(2|ii|2nd|second|sec)\s*(thessalonians|the|thessa|thessalonian|thes|thess|th)\b/i - ) !== -1 - ) { + if (fbook.search(/\b(2|ii|2nd|second|sec)\s*(thessalonians|the|thessa|thessalonian|thes|thess|th)\b/i) !== -1) { return this.bookName(53); } - if ( - fbook.search(/\b(1|i|1st|first)\s*(timothy|tim|ti|timoth|tm)\b/i) !== -1 - ) { + if (fbook.search(/\b(1|i|1st|first)\s*(timothy|tim|ti|timoth|tm)\b/i) !== -1) { return this.bookName(54); } - if ( - fbook.search(/\b(2|ii|2nd|second|sec)\s*(timothy|tim|timoth|tm)\b/i) !== - -1 - ) { + if (fbook.search(/\b(2|ii|2nd|second|sec)\s*(timothy|tim|timoth|tm)\b/i) !== -1) { return this.bookName(55); } if (fbook.search(/\b(titus|tit)\b/i) !== -1) { @@ -1851,15 +767,10 @@ export class BibleReference { if (fbook.search(/\b(james|jam|ja|jas|jms|jame|jm)\b/i) !== -1) { return this.bookName(59); } - if ( - fbook.search(/\b(1|i|1st|first)\s*(peter|pe|pet|pete|pt|p)\b/i) !== -1 - ) { + if (fbook.search(/\b(1|i|1st|first)\s*(peter|pe|pet|pete|pt|p)\b/i) !== -1) { return this.bookName(60); } - if ( - fbook.search(/\b(2|ii|2nd|second|sec)\s*(peter|pe|pet|pete|pt|p)\b/i) !== - -1 - ) { + if (fbook.search(/\b(2|ii|2nd|second|sec)\s*(peter|pe|pet|pete|pt|p)\b/i) !== -1) { return this.bookName(61); } if (fbook.search(/\b(jude|ju)\b/i) !== -1) { @@ -1872,25 +783,15 @@ export class BibleReference { return this.bookName(0); } - public static toString(section: Section) { + static toString(section: Section) { // get the starting book, chapter, verse - let ref = section.book.name - .concat(' ') - .concat(section.start.chapter.toString()) - .concat(':') - .concat(section.start.verse.toString()); + let ref = section.book.name.concat(' ').concat(section.start.chapter.toString()).concat(':').concat(section.start.verse.toString()); - if ( - section.start.chapter === section.end.chapter && - section.start.verse === section.end.verse - ) { + if (section.start.chapter === section.end.chapter && section.start.verse === section.end.verse) { return ref; } - if ( - section.start.chapter === section.end.chapter && - section.start.verse !== section.end.verse - ) { + if (section.start.chapter === section.end.chapter && section.start.verse !== section.end.verse) { return ref.concat(' - ').concat(section.end.verse.toString()); } @@ -1901,45 +802,35 @@ export class BibleReference { return ref.concat(section.end.verse.toString()); } - public static bookName(booknum: number): Book { + static bookName(booknum: number): Book { return this.Books[booknum]; } - public static formatReferenceKey( - book: number | string, - chapter: number | string, - vs: number | string - ) { + static formatReferenceKey(book: number | string, chapter: number | string, vs: number | string) { return `${book}:${chapter}:${vs}`; } - public static makePassageFromReferenceKey(referenceKey: string) { + static makePassageFromReferenceKey(referenceKey: string) { const keyArray = referenceKey.split(':'); const book = BibleReference.bookName(parseInt(keyArray[0], 10)).name; return new BibleReference(`${book} ${keyArray[1]}:${keyArray[2]}`); } - public static overlap( - leftRef: BibleReference, - rightRef: BibleReference - ): Overlap { + static overlap(leftRef: BibleReference, rightRef: BibleReference): Overlap { if (leftRef.section.book !== rightRef.section.book) { // either of the above means we are not overlapping return Overlap.None; } if (leftRef.section.end.chapter === rightRef.section.start.chapter) { - if ( - leftRef.section.end.verse > rightRef.section.start.verse || - rightRef.section.end.verse > leftRef.section.start.verse - ) { + if (leftRef.section.end.verse > rightRef.section.start.verse || rightRef.section.end.verse > leftRef.section.start.verse) { return Overlap.Intersect; } } return Overlap.None; } - public static mergeReference(ref1: BibleReference, ref2: BibleReference) { + static mergeReference(ref1: BibleReference, ref2: BibleReference) { // eliminate based on book first. if (ref1.section.book !== ref2.section.book) { // either of the above mean we are not overlapping @@ -1950,6 +841,10 @@ export class BibleReference { return null; } + //#endregion + + //#region Private Parsing Functions + private parseReference() { this.parseKeyReference(); if (this.ref.length === 0) { @@ -2080,11 +975,7 @@ export class BibleReference { }); } - private maybeParseChapterOrVerse( - foundSecondBook: boolean, - foundFirstVerse: boolean, - isEnd: boolean - ) { + private maybeParseChapterOrVerse(foundSecondBook: boolean, foundFirstVerse: boolean, isEnd: boolean) { const self = this; return this.maybeDo(() => { if (self.ref.search(/:/) !== -1 || foundSecondBook || !foundFirstVerse) { @@ -2111,12 +1002,34 @@ export class BibleReference { } } + //#endregion + public toString() { // get the starting book, chapter, verse return BibleReference.toString(this.section); } } +class StringUtils { + public static trim(str: string): string { + return str.replace(/^\s+|\s+$/g, ''); + } + + public static ltrim(str: string): string { + return str.replace(/^\s+/, ''); + } + + public static rtrim(str: string): string { + return str.replace(/\s+$/, ''); + } +} + +export enum Overlap { + Intersect, + Subset, + None, +} + export interface Book { name: string; abbreviation: string; diff --git a/app/db/tslint.json b/app/db/tslint.json index 5f5e81e8..5f2e6387 100644 --- a/app/db/tslint.json +++ b/app/db/tslint.json @@ -22,7 +22,6 @@ "options": ["spaces"] }, "max-classes-per-file": false, - "max-line-length": [true, 140], "member-ordering": [ true, {