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:
@@ -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 */}
|
||||
|
||||
Reference in New Issue
Block a user