File size: 1,212 Bytes
15f1210
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
"""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