mirror of
https://github.com/kennethreitz/kjvstudy.org.git
synced 2026-06-05 23:00:16 +00:00
Improve red letter edition to highlight only Christ's spoken words
Updated the red letter functionality to wrap only the specific words Jesus spoke within each verse, rather than entire verses. This provides more accurate red letter highlighting similar to traditional red letter Bibles. Changes: - Modified red_letter.py to search for and wrap only Christ's words - Updated JSON structure to store actual quoted text - Changed filter to handle both full verses and partial quotes - Improved accuracy of red letter highlighting 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -24,9 +24,9 @@ def load_red_letter_verses():
|
||||
return data.get("verses", {})
|
||||
|
||||
|
||||
def is_red_letter_verse(book: str, chapter: int, verse: int) -> bool:
|
||||
def get_christ_words(book: str, chapter: int, verse: int) -> str:
|
||||
"""
|
||||
Check if a verse contains words of Christ.
|
||||
Get the actual words spoken by Christ in a verse.
|
||||
|
||||
Args:
|
||||
book: Name of the book (e.g., "Matthew", "John")
|
||||
@@ -34,16 +34,17 @@ def is_red_letter_verse(book: str, chapter: int, verse: int) -> bool:
|
||||
verse: Verse number
|
||||
|
||||
Returns:
|
||||
True if this verse contains Christ's words
|
||||
The words Christ spoke, or None if no words in this verse.
|
||||
Returns 'full' if Christ speaks the entire verse.
|
||||
"""
|
||||
red_letter_verses = load_red_letter_verses()
|
||||
verse_key = f"{book} {chapter}:{verse}"
|
||||
return red_letter_verses.get(verse_key, False)
|
||||
return red_letter_verses.get(verse_key)
|
||||
|
||||
|
||||
def wrap_red_letter_text(text: str, book: str, chapter: int, verse: int) -> str:
|
||||
"""
|
||||
Wrap verse text in red letter span if it contains Christ's words.
|
||||
Wrap the words of Christ in red letter span tags.
|
||||
|
||||
Args:
|
||||
text: The verse text
|
||||
@@ -52,9 +53,19 @@ def wrap_red_letter_text(text: str, book: str, chapter: int, verse: int) -> str:
|
||||
verse: Verse number
|
||||
|
||||
Returns:
|
||||
The text wrapped in a span tag if it's a red letter verse,
|
||||
otherwise returns the original text.
|
||||
The text with Christ's words wrapped in red span tags.
|
||||
"""
|
||||
if is_red_letter_verse(book, chapter, verse):
|
||||
christ_words = get_christ_words(book, chapter, verse)
|
||||
|
||||
if not christ_words:
|
||||
return text
|
||||
|
||||
# If the entire verse is Christ speaking
|
||||
if christ_words == 'full':
|
||||
return f'<span class="words-of-christ">{text}</span>'
|
||||
|
||||
# Find and wrap only the words Christ spoke
|
||||
if christ_words in text:
|
||||
return text.replace(christ_words, f'<span class="words-of-christ">{christ_words}</span>')
|
||||
|
||||
return text
|
||||
|
||||
@@ -1044,12 +1044,10 @@ templates.env.filters['inject_word_markers'] = inject_word_markers
|
||||
|
||||
|
||||
def red_letter(text, book, chapter, verse_num):
|
||||
"""Wrap verse text in red letter span if it contains Christ's words"""
|
||||
from .red_letter import is_red_letter_verse
|
||||
"""Wrap the words of Christ in red letter span tags"""
|
||||
from .red_letter import wrap_red_letter_text
|
||||
|
||||
if is_red_letter_verse(book, chapter, verse_num):
|
||||
return f'<span class="words-of-christ">{text}</span>'
|
||||
return text
|
||||
return wrap_red_letter_text(text, book, chapter, verse_num)
|
||||
|
||||
templates.env.filters['red_letter'] = red_letter
|
||||
|
||||
|
||||
Reference in New Issue
Block a user