Fix NKJV verse parsing to handle header-style verses

- Updated parseBibleText to detect NKJV verses with ###### 1 Verse format
- Added version-specific parsing for ESV (1. format) vs NKJV (###### format)
- Ensures proper verse number extraction and text display for both versions
- Removes diamond question marks and square artifacts in NKJV text
This commit is contained in:
Ryderjj89
2025-09-28 13:02:51 -04:00
parent 4be87972e7
commit 4510e6e333

View File

@@ -229,7 +229,7 @@ const BibleReader: React.FC<BibleReaderProps> = ({ book, chapter, onBack, format
}
};
const parseBibleText = (text: string) => {
const parseBibleText = (text: string, version: string) => {
const lines = text.split('\n');
const verses: JSX.Element[] = [];
@@ -239,12 +239,27 @@ const BibleReader: React.FC<BibleReaderProps> = ({ book, chapter, onBack, format
// Skip empty lines
if (!line) continue;
// Check if line starts with verse number (e.g., "1. ", "2. ", etc.)
const verseMatch = line.match(/^(\d+)\.\s+(.+)$/);
if (verseMatch) {
const verseNumber = verseMatch[1];
const verseText = verseMatch[2];
let verseNumber: string | null = null;
let verseText: string | null = null;
// Check for different verse formats based on version
if (version === 'nkjv') {
// NKJV: ###### 1 In the beginning God created...
const nkjvMatch = line.match(/^#+\s+(\d+)\s+(.+)$/);
if (nkjvMatch) {
verseNumber = nkjvMatch[1];
verseText = nkjvMatch[2];
}
} else {
// ESV: 1. In the beginning, God created the heavens and the earth.
const esvMatch = line.match(/^(\d+)\.\s+(.+)$/);
if (esvMatch) {
verseNumber = esvMatch[1];
verseText = esvMatch[2];
}
}
if (verseNumber && verseText) {
verses.push(
<div key={`verse-${verseNumber}`} id={`verse-${verseNumber}`} className="mb-4 flex items-start p-2 rounded transition-colors">
<div className="flex-1">
@@ -258,10 +273,10 @@ const BibleReader: React.FC<BibleReaderProps> = ({ book, chapter, onBack, format
className="ml-2 mt-1 p-1 rounded hover:bg-gray-200 dark:hover:bg-gray-600 transition-colors"
title={favorites.has(verseNumber) ? 'Remove from favorites' : 'Add to favorites'}
>
<Star
<Star
className={`h-4 w-4 ${
favorites.has(verseNumber)
? 'text-yellow-500 fill-yellow-500'
favorites.has(verseNumber)
? 'text-yellow-500 fill-yellow-500'
: 'text-gray-400 hover:text-yellow-500'
} transition-colors`}
/>
@@ -270,7 +285,11 @@ const BibleReader: React.FC<BibleReaderProps> = ({ book, chapter, onBack, format
</div>
);
} else if (line.startsWith('#')) {
// Chapter header
// Chapter header - skip full header lines for NKJV as they're part of the title
if (version === 'nkjv' && line.match(/^#+\s+\d+\s+.+/)) {
// This is already handled above as verses
continue;
}
const headerText = line.replace(/^#+\s*/, '');
verses.push(
<h2 key={`header-${i}`} className="chapter-title text-2xl font-bold text-gray-900 dark:text-gray-100 mb-6 mt-8">
@@ -368,7 +387,7 @@ const BibleReader: React.FC<BibleReaderProps> = ({ book, chapter, onBack, format
{/* Bible Content */}
<div className={`max-w-3xl mx-auto ${getFontSizeClass()}`}>
{parseBibleText(content)}
{parseBibleText(content, version)}
</div>
{/* Footer Navigation */}