"""Hadith utility functions — narrator extraction and highlighting.""" import re # Arabic narrator markers _AR_NARRATORS = [ "حَدَّثَنَا", "أَخْبَرَنَا", "حَدَّثَنِي", "أَخْبَرَنِي", "عَنْ", "قَالَ", "سَمِعْتُ", "أَنْبَأَنَا", "ثنا", "أنا", ] # English narrator markers _EN_NARRATORS = [ "Narrated", "told us", "informed us", "heard", "on the authority of", "from", "said", "reported", ] def highlight_narrators(text: str, lang: str = "arabic") -> str: """Highlight common narrator markers in Hadith text using markdown bolding.""" if not text: return text if lang == "arabic" or any(m in text for m in _AR_NARRATORS): # Highlight Arabic markers for marker in _AR_NARRATORS: # Match word with optional diacritics pattern = re.compile(f"({re.escape(marker)})", re.U) text = pattern.sub(r"**\1**", text) else: # Highlight English markers for marker in _EN_NARRATORS: pattern = re.compile(f"\\b({re.escape(marker)})\\b", re.I) text = pattern.sub(r"**\1**", text) return text