codexparser 0.1.39 → 0.1.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/CodexParser.js +65 -39
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codexparser",
3
- "version": "0.1.39",
3
+ "version": "0.1.41",
4
4
  "description": "This is a Javascript Bible parser and text scanner. It will search through texts and collate all scripture references into an array and parse them into objects, and it will parse passages into objects by book, chapter, verse, and testament. ",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -248,7 +248,6 @@ class CodexParser {
248
248
  index: passage.index,
249
249
  version: this._handleVersion(passage.version, testament),
250
250
  }
251
-
252
251
  const parts = passage.reference.split(",")
253
252
  const isSingleChapter = this.singleChapterBook.some((singleChapterBook) => singleChapterBook[book])
254
253
 
@@ -316,10 +315,8 @@ class CodexParser {
316
315
  parsedPassage.passages = this.populate(parsedPassage)
317
316
  parsedPassage.scripture = this.scripturize(parsedPassage)
318
317
  parsedPassage.valid = this._isValid(parsedPassage, passage.reference)
319
-
320
318
  return parsedPassage
321
319
  })
322
-
323
320
  this.versification()
324
321
  return this
325
322
  }
@@ -416,6 +413,7 @@ class CodexParser {
416
413
  populate(parsedPassage) {
417
414
  const passages = []
418
415
  const { book, chapter, verses, type } = parsedPassage
416
+ this._setVersion(parsedPassage)
419
417
  if (type === "single_chapter") {
420
418
  // Handle single chapter references
421
419
  if (this.chapterVerses[book] && this.chapterVerses[book][chapter]) {
@@ -457,16 +455,30 @@ class CodexParser {
457
455
  },
458
456
  ]
459
457
 
460
- // Iterate over the range of chapters and verses
461
- for (let i = refs[0].chapter; i <= refs[1].chapter; i++) {
462
- const startVerse = i === refs[0].chapter ? refs[0].verse : 1
463
- const endVerse = i === refs[1].chapter ? refs[1].verse : this.chapterVerses[book][i].length
458
+ const startChapter = refs[0].chapter
459
+ const startVerse = refs[0].verse
460
+ const endChapter = refs[refs.length - 1].chapter
461
+ const endVerse = refs[refs.length - 1].verse
462
+
463
+ // Loop through the range of chapters
464
+ for (let chapter = startChapter; chapter <= endChapter; chapter++) {
465
+ // Determine the starting verse for the current chapter
466
+ const chapterStartVerse = chapter === startChapter ? startVerse : 1
467
+ // Determine the ending verse for the current chapter
468
+ const chapterEndVerse = chapter === endChapter ? endVerse : this.chapterVerses[book][chapter].length
469
+
470
+ // Get the array of verses for the current chapter
471
+ const verses = this.chapterVerses[book][chapter].slice(chapterStartVerse - 1, chapterEndVerse)
464
472
 
465
- for (let j = startVerse; j <= endVerse; j++) {
473
+ // Loop through the verses in the current chapter
474
+ for (let j = 0; j < verses.length; j++) {
475
+ const currentVerse = chapterStartVerse + j
476
+
477
+ // Add the verse to the passages array
466
478
  passages.push({
467
479
  book,
468
- chapter: i,
469
- verse: j,
480
+ chapter,
481
+ verse: currentVerse,
470
482
  })
471
483
  }
472
484
  }
@@ -545,49 +557,63 @@ class CodexParser {
545
557
  * @return {object} The object with the human-readable name, chapter and verses and a hash.
546
558
  */
547
559
  scripturize(passage) {
548
- const { book, chapter, passages } = passage
560
+ const { book, chapter, passages, to } = passage
549
561
 
550
562
  // Extract verses from the passages array
551
- const verses = passages.map((p) => p.verse)
563
+ const verses = passages.map((p) => ({ chapter: p.chapter, verse: p.verse }))
552
564
  let formattedVerses = ""
553
565
 
554
- if (verses.length === 1) {
555
- // If there is only one verse
556
- formattedVerses = verses[0].toString()
557
- } else if (verses.length === 2 && verses[1] === verses[0] + 1) {
558
- // If there are exactly two verses and they are consecutive, use a comma
559
- formattedVerses = `${verses[0]},${verses[1]}`
566
+ if (to && to.chapter && to.chapter !== chapter) {
567
+ // Handle multi-chapter range
568
+ const startChapter = chapter
569
+ const startVerses = verses.filter((v) => v.chapter === startChapter).map((v) => v.verse)
570
+
571
+ const endChapter = to.chapter
572
+ const endVerses = verses.filter((v) => v.chapter === endChapter).map((v) => v.verse)
573
+
574
+ const startFormatted =
575
+ startVerses.length > 1 ? `${startVerses[0]}-${startVerses[startVerses.length - 1]}` : startVerses[0]
576
+
577
+ const endFormatted =
578
+ endVerses.length > 1 ? `${endVerses[0]}-${endVerses[endVerses.length - 1]}` : endVerses[0]
579
+
580
+ formattedVerses = `${startChapter}:${startFormatted}-${endChapter}:${endFormatted}`
560
581
  } else {
561
- // For more than two verses, or non-consecutive verses
562
- let ranges = []
563
- let tempRange = [verses[0]]
564
-
565
- for (let i = 1; i < verses.length; i++) {
566
- if (verses[i] === verses[i - 1] + 1) {
567
- // If the verse is consecutive, add to tempRange
568
- tempRange.push(verses[i])
569
- } else {
570
- // If not consecutive, finalize tempRange
571
- ranges.push(tempRange)
572
- tempRange = [verses[i]]
582
+ // Handle single-chapter range
583
+ const startVerses = verses.map((v) => v.verse)
584
+
585
+ if (startVerses.length === 1) {
586
+ formattedVerses = startVerses[0].toString()
587
+ } else {
588
+ // Group consecutive verses into ranges
589
+ let ranges = []
590
+ let tempRange = [startVerses[0]]
591
+
592
+ for (let i = 1; i < startVerses.length; i++) {
593
+ if (startVerses[i] === startVerses[i - 1] + 1) {
594
+ tempRange.push(startVerses[i])
595
+ } else {
596
+ ranges.push(tempRange)
597
+ tempRange = [startVerses[i]]
598
+ }
573
599
  }
600
+ ranges.push(tempRange)
601
+
602
+ formattedVerses = ranges
603
+ .map((range) => (range.length > 1 ? `${range[0]}-${range[range.length - 1]}` : range[0]))
604
+ .join(",")
574
605
  }
575
- ranges.push(tempRange) // Push the last range
576
606
 
577
- // Format ranges: convert consecutive numbers to ranges, non-consecutive remain separate
578
- formattedVerses = ranges
579
- .map((range) => (range.length > 1 ? `${range[0]}-${range[range.length - 1]}` : range[0]))
580
- .join(",")
607
+ formattedVerses = `${chapter}:${formattedVerses}`
581
608
  }
582
609
 
583
610
  // Format the final passage
584
- const colon = formattedVerses ? ":" : ""
585
- const full = `${book} ${chapter}${colon}${formattedVerses}`.trim()
611
+ const full = `${book} ${formattedVerses}`.trim()
586
612
  const hash = full.toLowerCase().replace(/ /g, "_").replace(/:/g, ".").replace(/-/g, ".").replace(/,/g, ".")
587
613
 
588
614
  return {
589
615
  passage: full,
590
- cv: `${chapter}${colon}${formattedVerses}`,
616
+ cv: formattedVerses,
591
617
  hash,
592
618
  }
593
619
  }
@@ -612,7 +638,7 @@ class CodexParser {
612
638
  passages.forEach((passageSet) => {
613
639
  passageSet.passages.forEach((passage) => {
614
640
  if (passage.versification) {
615
- newPassages.push(passage.book + " " + passage.versification.eng)
641
+ newPassages.push(passage.book + " " + passage.versification[this.version])
616
642
  } else {
617
643
  newPassages.push(passage.book + " " + passage.chapter + ":" + passage.verse)
618
644
  }