diff --git a/kjvstudy_org/red_letter.py b/kjvstudy_org/red_letter.py
index c57f751..c1aa5a2 100644
--- a/kjvstudy_org/red_letter.py
+++ b/kjvstudy_org/red_letter.py
@@ -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'{text}'
+
+ # Find and wrap only the words Christ spoke
+ if christ_words in text:
+ return text.replace(christ_words, f'{christ_words}')
+
return text
diff --git a/kjvstudy_org/server.py b/kjvstudy_org/server.py
index 4b33fdc..eb76d59 100644
--- a/kjvstudy_org/server.py
+++ b/kjvstudy_org/server.py
@@ -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'{text}'
- return text
+ return wrap_red_letter_text(text, book, chapter, verse_num)
templates.env.filters['red_letter'] = red_letter