
    Nwg                     $    d dl mZ  G d d      Zy)    )
strip_tagsc                   <    e Zd ZdZdZdZdZd Zd Zd Z	d Z
dd
Zy	)Highlighterhighlightedspan    c                    || _         d|v rt        |d         | _        d|v r
|d   | _        d|v r
|d   | _        | j                   j                         D ch c]$  }|j                  d      r|j                         & c}| _        y c c}w )N
max_lengthhtml_tag	css_class-)	queryintr   r   r   split
startswithlowerquery_words)selfr   kwargswords       R/var/www/horilla/myenv/lib/python3.12/site-packages/haystack/utils/highlighting.py__init__zHighlighter.__init__
   s    
6!!&"67DO":.DM& #K0DN &*ZZ%5%5%7
!ts?SDJJL
 
s   B	.B	c                     t        |      | _        | j                         }| j                  |      \  }}| j	                  |||      S )N)r   
text_blockfind_highlightable_wordsfind_windowrender_html)r   r   highlight_locationsstart_offset
end_offsets        r   	highlightzHighlighter.highlight   sI    $Z0";;=#'#3#34G#H j 3\:NN    c                 .   i }t        | j                        }| j                  j                         }| j                  D ]T  }||vrg ||<   d}||k  s|j	                  |||      }|dk(  r-||   j                  |       |t        |      z   }||k  rAV |S )Nr   )lenr   r   r   findappend)r   word_positionsr!   lower_text_blockr   r    next_offsets          r   r   z$Highlighter.find_highlightable_words    s     )
??002$$ 	7D>)')t$L+.33D,
S "$t$++K8*SY6 +	7" r#   c                 <   d}| j                   }t        |      s||fS g }|j                         D ]"  \  }}t        |      s|j                  |       $ t        |      s||fS t        |      dk(  r|d   |d   | j                   z   fS t	        |      }d}|d d d   | j                   kD  r|d d d   }|| j                   z   }t        |d d       D ]G  \  }}	d}
||dz   d  D ]5  }||	z
  | j                   k  r|
dz  }
nd}
|
|kD  s#|	}|	| j                   z   }|
}7 I ||fS )Nr      r%   )r   r&   itemsextendsorted	enumerate)r   r   
best_startbest_endwords_found_offset_listhighest_densitycountstartcurrent_densityends               r   r   zHighlighter.find_window;   ss   
?? &')) 2779 	0NA{;"";/	0
 ;)){q NKNT__$DEE [)
 sA0$Sb)!,J!DOO3H%k#2&67 	6LE5O"519;/ 6;0#q(O&'O #_4!&J$t6H&5O6	6  H%%r#   Nc                    | j                   || }g }|j                         D ]  \  }}||D cg c]	  }||z
  |f c}z  } t        |      }	| j                  rd| j                  d| j                  d}
nd| j                  z  }
d| j                  z  }d}d}d}d}|	D ]k  \  }}|||t        |      z    }|j                         |k(  s+||t        |      z   k  r=|||t        |      z   | |
z   |z   |z   z  }|}|}|t        |      z   }m |||d  z  }|dkD  rd|z  }|t        | j                         k  rd	|z  }|S c c}w )
N<z class="z">z<%s>z</%s>r	   r   z...%sz%s...)r   r.   r0   r   r   r&   r   )r   r   r    r!   text	term_listterm	locationslocloc_to_termhl_starthl_endhighlighted_chunkmatched_so_farprevprev_strcurcur_stractual_terms                      r   r   zHighlighter.render_htmlo   s   |J7 	288: 	KOD)	J3-t4JJI	K Y' >>,0MM4>>JH/H4==( ' 	8LCsS3w<%78K   "g-H--!H-4x?+MPVV! " "%s;'7!7!	8& 	T./22! '*; ;DOO,, '*; ;  ] Ks   D>)NNN)__name__
__module____qualname__r   r   r   r   r   r"   r   r   r    r#   r   r   r      s1    IHJJ
 O62&h6!r#   r   N)django.utils.htmlr   r   rP   r#   r   <module>rR      s    (a! a!r#   