Ë
    ðmxi±N  ã                  óÄ  — d dl mZ d dlmZ d dlmZ ddlmZmZm	Z	 ddl
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ  G d„ d«      Z G d	„ d
e«      Z G d„ de«      Z G d„ de«      Z  G d„ de«      Z! G d„ de«      Z" G d„ de«      Z# G d„ de«      Z$ G d„ de«      Z% G d„ de«      Z& ed¬«      	 	 	 	 	 	 d!d„«       Z' ed¬«      	 d"	 	 	 	 	 	 	 d#d„«       Z(y )$é    )Úannotations)Ú	lru_cache)Ú	getLoggeré   )ÚCOMMON_SAFE_ASCII_CHARACTERSÚTRACEÚUNICODE_SECONDARY_RANGE_KEYWORD)Úis_accentuatedÚ	is_arabicÚis_arabic_isolated_formÚis_case_variableÚis_cjkÚis_emoticonÚ	is_hangulÚis_hiraganaÚis_katakanaÚis_latinÚis_punctuationÚis_separatorÚ	is_symbolÚis_thaiÚis_unprintableÚremove_accentÚunicode_rangeÚis_cjk_uncommonc                  ó:   — e Zd ZdZdd„Zdd„Zd	d„Zed
d„«       Zy)ÚMessDetectorPluginzy
    Base abstract class used for mess detection plugins.
    All detectors MUST extend and implement given methods.
    c                ó   — t         ‚)z@
        Determine if given character should be fed in.
        ©ÚNotImplementedError©ÚselfÚ	characters     úL/home/htdocs/ttos/venv/lib/python3.12/site-packages/charset_normalizer/md.pyÚeligiblezMessDetectorPlugin.eligible'   ó
   € ô "Ð!ó    c                ó   — t         ‚)z‰
        The main routine to be executed upon character.
        Insert the logic in witch the text would be considered chaotic.
        r   r!   s     r$   ÚfeedzMessDetectorPlugin.feed-   s
   € ô
 "Ð!r'   c                ó   — t         ‚)zB
        Permit to reset the plugin to the initial state.
        r   ©r"   s    r$   ÚresetzMessDetectorPlugin.reset4   r&   r'   c                ó   — t         ‚)z…
        Compute the chaos ratio based on what your feed() has seen.
        Must NOT be lower than 0.; No restriction gt 0.
        r   r+   s    r$   ÚratiozMessDetectorPlugin.ratio:   s
   € ô "Ð!r'   N©r#   ÚstrÚreturnÚbool©r#   r0   r1   ÚNone©r1   r4   ©r1   Úfloat)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r%   r)   r,   Úpropertyr.   © r'   r$   r   r   !   s*   „ ñó
"ó"ó"ð ò"ó ñ"r'   r   c                  ó>   — e Zd Zdd„Zdd„Zd	d„Zdd„Zed
d„«       Zy)Ú TooManySymbolOrPunctuationPluginc                óJ   — d| _         d| _        d| _        d | _        d| _        y )Nr   F)Ú_punctuation_countÚ_symbol_countÚ_character_countÚ_last_printable_charÚ_frenzy_symbol_in_wordr+   s    r$   Ú__init__z)TooManySymbolOrPunctuationPlugin.__init__D   s*   € Ø'(ˆÔØ"#ˆÔØ%&ˆÔà04ˆÔ!Ø,1ˆÕ#r'   c                ó"   — |j                  «       S ©N©Úisprintabler!   s     r$   r%   z)TooManySymbolOrPunctuationPlugin.eligibleL   ó   € Ø×$Ñ$Ó&Ð&r'   c                ó8  — | xj                   dz  c_         || j                  k7  ro|t        vrgt        |«      r| xj                  dz  c_        || _        y |j                  «       du r-t        |«      r"t        |«      du r| xj                  dz  c_        || _        y )Nr   Fé   )	rC   rD   r   r   rA   Úisdigitr   r   rB   r!   s     r$   r)   z%TooManySymbolOrPunctuationPlugin.feedO   s�   € Ø×Ò Ñ"Õð ˜×2Ñ2Ò2ØÔ!=Ñ=ä˜iÔ(Ø×'Ò'¨1Ñ,Õ'ð %.ˆÕ!ð ×!Ñ!Ó# uÑ,Ü˜iÔ(Ü 	Ó*¨eÑ3à×"Ò" aÑ'Õ"à$-ˆÕ!r'   c                ó.   — d| _         d| _        d| _        y ©Nr   )rA   rC   rB   r+   s    r$   r,   z&TooManySymbolOrPunctuationPlugin.reseta   s   € Ø"#ˆÔØ !ˆÔØˆÕr'   c                ó€   — | j                   dk(  ry| j                  | j                  z   | j                   z  }|dk\  r|S dS )Nr   ç        ç333333Ó?)rC   rA   rB   )r"   Úratio_of_punctuations     r$   r.   z&TooManySymbolOrPunctuationPlugin.ratiof   sO   € à× Ñ  AÒ%Øð ×#Ñ# d×&8Ñ&8Ñ8Ø×!Ñ!ñ'"Ðð (<¸sÒ'BÐ#ÐKÈÐKr'   Nr5   r/   r3   r6   ©	r8   r9   r:   rF   r%   r)   r,   r<   r.   r=   r'   r$   r?   r?   C   s,   „ ó2ó'ó.ó$ð
 òLó ñLr'   r?   c                  ó>   — e Zd Zdd„Zdd„Zd	d„Zdd„Zed
d„«       Zy)ÚTooManyAccentuatedPluginc                ó    — d| _         d| _        y rP   ©rC   Ú_accentuated_countr+   s    r$   rF   z!TooManyAccentuatedPlugin.__init__s   s   € Ø%&ˆÔØ'(ˆÕr'   c                ó"   — |j                  «       S rH   )Úisalphar!   s     r$   r%   z!TooManyAccentuatedPlugin.eligiblew   s   € Ø× Ñ Ó"Ð"r'   c                óp   — | xj                   dz  c_         t        |«      r| xj                  dz  c_        y y ©Nr   )rC   r
   rZ   r!   s     r$   r)   zTooManyAccentuatedPlugin.feedz   s1   € Ø×Ò Ñ"Õä˜)Ô$Ø×#Ò# qÑ(Ö#ð %r'   c                ó    — d| _         d| _        y rP   rY   r+   s    r$   r,   zTooManyAccentuatedPlugin.reset€   s   € Ø !ˆÔØ"#ˆÕr'   c                óf   — | j                   dk  ry| j                  | j                   z  }|dk\  r|S dS )Né   rR   gffffffÖ?rY   )r"   Úratio_of_accentuations     r$   r.   zTooManyAccentuatedPlugin.ratio„   s=   € à× Ñ  1Ò$Øà'+×'>Ñ'>À×AVÑAVÑ'VÐØ(=ÀÒ(EÐ$ÐNÈ3ÐNr'   Nr5   r/   r3   r6   rU   r=   r'   r$   rW   rW   r   s,   „ ó)ó#ó)ó$ð òOó ñOr'   rW   c                  ó>   — e Zd Zdd„Zdd„Zd	d„Zdd„Zed
d„«       Zy)ÚUnprintablePluginc                ó    — d| _         d| _        y rP   )Ú_unprintable_countrC   r+   s    r$   rF   zUnprintablePlugin.__init__Ž   s   € Ø'(ˆÔØ%&ˆÕr'   c                 ó   — y©NTr=   r!   s     r$   r%   zUnprintablePlugin.eligible’   ó   € Ør'   c                ón   — t        |«      r| xj                  dz  c_        | xj                  dz  c_        y r^   )r   rf   rC   r!   s     r$   r)   zUnprintablePlugin.feed•   s,   € Ü˜)Ô$Ø×#Ò# qÑ(Õ#Ø×Ò Ñ"Ör'   c                ó   — d| _         y rP   )rf   r+   s    r$   r,   zUnprintablePlugin.resetš   s
   € Ø"#ˆÕr'   c                óZ   — | j                   dk(  ry| j                  dz  | j                   z  S )Nr   rR   ra   )rC   rf   r+   s    r$   r.   zUnprintablePlugin.ratio�   s/   € à× Ñ  AÒ%Øà×'Ñ'¨!Ñ+¨t×/DÑ/DÑDÐDr'   Nr5   r/   r3   r6   rU   r=   r'   r$   rd   rd   �   s,   „ ó'óó#ó
$ð òEó ñEr'   rd   c                  ó>   — e Zd Zdd„Zdd„Zd	d„Zdd„Zed
d„«       Zy)ÚSuspiciousDuplicateAccentPluginc                ó.   — d| _         d| _        d | _        y rP   ©Ú_successive_countrC   Ú_last_latin_characterr+   s    r$   rF   z(SuspiciousDuplicateAccentPlugin.__init__¦   s   € Ø&'ˆÔØ%&ˆÔà15ˆÕ"r'   c                ó<   — |j                  «       xr t        |«      S rH   )r\   r   r!   s     r$   r%   z(SuspiciousDuplicateAccentPlugin.eligible¬   s   € Ø× Ñ Ó"Ò:¤x°	Ó':Ð:r'   c                ó~  — | xj                   dz  c_         | j                  �•t        |«      rŠt        | j                  «      ru|j                  «       r/| j                  j                  «       r| xj                  dz  c_        t        |«      t        | j                  «      k(  r| xj                  dz  c_        || _        y r^   )rC   rr   r
   Úisupperrq   r   r!   s     r$   r)   z$SuspiciousDuplicateAccentPlugin.feed¯   s”   € Ø×Ò Ñ"Õà×&Ñ&Ð2Ü˜yÔ)Ü˜t×9Ñ9Ô:à× Ñ Ô" t×'AÑ'A×'IÑ'IÔ'KØ×&Ò&¨!Ñ+Õ&ä˜YÓ'¬=¸×9SÑ9SÓ+TÒTØ×&Ò&¨!Ñ+Õ&Ø%.ˆÕ"r'   c                ó.   — d| _         d| _        d | _        y rP   rp   r+   s    r$   r,   z%SuspiciousDuplicateAccentPlugin.reset½   s   € Ø!"ˆÔØ !ˆÔØ%)ˆÕ"r'   c                óZ   — | j                   dk(  ry| j                  dz  | j                   z  S )Nr   rR   rM   )rC   rq   r+   s    r$   r.   z%SuspiciousDuplicateAccentPlugin.ratioÂ   s/   € à× Ñ  AÒ%Øà×&Ñ&¨Ñ*¨d×.CÑ.CÑCÐCr'   Nr5   r/   r3   r6   rU   r=   r'   r$   rn   rn   ¥   s,   „ ó6ó;ó/ó*ð
 òDó ñDr'   rn   c                  ó>   — e Zd Zdd„Zdd„Zd	d„Zdd„Zed
d„«       Zy)ÚSuspiciousRangec                ó.   — d| _         d| _        d | _        y rP   )Ú"_suspicious_successive_range_countrC   Ú_last_printable_seenr+   s    r$   rF   zSuspiciousRange.__init__Ë   s   € Ø78ˆÔ/Ø%&ˆÔØ04ˆÕ!r'   c                ó"   — |j                  «       S rH   rI   r!   s     r$   r%   zSuspiciousRange.eligibleÐ   rK   r'   c                ó<  — | xj                   dz  c_         |j                  «       st        |«      s|t        v rd | _        y | j                  €|| _        y t        | j                  «      }t        |«      }t        ||«      r| xj                  dz  c_        || _        y r^   )rC   Úisspacer   r   r|   r   Ú is_suspiciously_successive_ranger{   )r"   r#   Úunicode_range_aÚunicode_range_bs       r$   r)   zSuspiciousRange.feedÓ   s‘   € Ø×Ò Ñ"Õð ×ÑÔÜ˜iÔ(ØÔ8Ñ8à(,ˆDÔ%Øà×$Ñ$Ð,Ø(1ˆDÔ%Øä&3°D×4MÑ4MÓ&NˆÜ&3°IÓ&>ˆä+¨O¸_ÔMØ×3Ò3°qÑ8Õ3à$-ˆÕ!r'   c                ó.   — d| _         d| _        d | _        y rP   )rC   r{   r|   r+   s    r$   r,   zSuspiciousRange.resetê   s   € Ø !ˆÔØ23ˆÔ/Ø$(ˆÕ!r'   c                ó^   — | j                   dk  ry| j                  dz  | j                   z  }|S )Né   rR   rM   )rC   r{   )r"   Úratio_of_suspicious_range_usages     r$   r.   zSuspiciousRange.ratioï   s<   € à× Ñ  BÒ&Øð ×3Ñ3°aÑ7Ø×!Ñ!ñ2"Ð'ð /Ð.r'   Nr5   r/   r3   r6   rU   r=   r'   r$   ry   ry   Ê   s*   „ ó5ó
'ó.ó.)ð
 ò/ó ñ/r'   ry   c                  ó>   — e Zd Zdd„Zdd„Zd	d„Zdd„Zed
d„«       Zy)ÚSuperWeirdWordPluginc                ó�   — d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        y )Nr   FÚ )
Ú_word_countÚ_bad_word_countÚ_foreign_long_countÚ_is_current_word_badÚ_foreign_long_watchrC   Ú_bad_character_countÚ_bufferÚ_buffer_accent_countÚ_buffer_glyph_countr+   s    r$   rF   zSuperWeirdWordPlugin.__init__ü   sQ   € Ø !ˆÔØ$%ˆÔØ()ˆÔ à*/ˆÔ!Ø).ˆÔ à%&ˆÔØ)*ˆÔ!àˆŒØ)*ˆÔ!Ø()ˆÕ r'   c                 ó   — yrh   r=   r!   s     r$   r%   zSuperWeirdWordPlugin.eligible  ri   r'   c                óî  — |j                  «       rð| xj                  |z  c_        t        |«      r| xj                  dz  c_        | j                  du r`t        |«      du st        |«      rHt        |«      du r;t        |«      du r.t        |«      du r!t        |«      du rt        |«      du rd| _        t        |«      s,t        |«      s!t        |«      st        |«      st        |«      r| xj                  dz  c_        y | j                  sy |j                  «       st        |«      st        |«      �rû| j                  �rî| xj                  dz  c_        t!        | j                  «      }| xj"                  |z  c_        |dk\  rµ| j                  |z  dk\  rd| _        n›t        | j                  d   «      rX| j                  d   j'                  «       r;t)        d„ | j                  D «       «      du r| xj*                  dz  c_        d| _        n+| j                  dk(  rd| _        | xj*                  dz  c_        |dk\  rƒ| j                  rwt-        | j                  t/        d	|«      «      D ��cg c]  \  }}|j'                  «       r|‘Œ }}}d}|rt!        |«      |z  d
k  rd}|s| xj*                  dz  c_        d| _        | j$                  rD| xj0                  dz  c_        | xj2                  t!        | j                  «      z  c_        d| _        d| _        d| _        d	| _        d	| _        y |dvr<|j5                  «       du r)t7        |«      rd| _        | xj                  |z  c_        y y y y c c}}w )Nr   FTé   ç      à?éÿÿÿÿc              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wrH   )ru   )Ú.0Ú_s     r$   ú	<genexpr>z,SuperWeirdWordPlugin.feed.<locals>.<genexpr>8  s   è ø€ Ò>¨A˜AŸI™IŸKÑ>ùs   ‚é   r   rS   rŠ   >   r›   ú-ú<ú=ú>ú|ú~)r\   r‘   r
   r’   r�   r   r   r   r   r   r   r“   r   r   r   r‹   ÚlenrC   rŽ   ru   Úallr�   ÚzipÚrangerŒ   r�   rN   r   )r"   r#   Úbuffer_lengthÚcÚiÚcamel_case_dstÚprobable_camel_caseds          r$   r)   zSuperWeirdWordPlugin.feed  s  € Ø×ÑÔØ�LŠL˜IÑ%�LÜ˜iÔ(Ø×)Ò)¨QÑ.Õ)à×(Ñ(¨EÑ1Ü˜iÓ(¨EÑ1´^ÀIÔ5NÜ˜9Ó%¨Ñ.Ü˜iÓ(¨EÑ1Ü 	Ó*¨eÑ3Ü 	Ó*¨eÑ3Ü˜IÓ&¨%Ñ/à+/�Ô(ä�yÔ!Ü˜YÔ'Ü˜yÔ)Ü˜yÔ)Ü˜9Ô%à×(Ò(¨AÑ-Õ(ØØ�|Š|Øà×ÑÔ¤>°)Ô#<ÄÈYÕ@WØ�l‹lØ×Ò Ñ!ÕÜ!$ T§\¡\Ó!2ˆMà×!Ò! ]Ñ2Õ!à Ò!Ø×,Ñ,¨}Ñ<ÀÒCØ04�DÕ-ô # 4§<¡<°Ñ#3Ô4ØŸ™ RÑ(×0Ñ0Ô2ÜÑ>°·±Ô>Ó>À%ÑGà×,Ò,°Ñ1Õ,Ø04�DÕ-Ø×-Ñ-°Ò2Ø04�DÔ-Ø×,Ò,°Ñ1Õ,Ø Ò" t×'?Ò'?ô !$ D§L¡L´%¸¸=Ó2IÓ J÷"á˜˜1Ø—y‘y”{ò ð"�ñ "ð
 .3Ð$á!¤s¨>Ó':¸]Ñ'JÈcÒ'QØ+/Ð(á+Ø×,Ò,°Ñ1Õ,Ø04�DÔ-à×(Ò(Ø×$Ò$¨Ñ)Õ$Ø×)Ò)¬S°·±Ó->Ñ>Õ)Ø,1�Ô)à',ˆDÔ$ØˆDŒLØ()ˆDÔ%Ø'(ˆDÕ$àÐ@Ñ@Ø×!Ñ!Ó# uÑ,Ü˜)Ô$à(,ˆDÔ%Ø�LŠL˜IÑ%ŽLð %ð -ð Aùó1"s   É/M1c                ót   — d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        y )NrŠ   Fr   )r‘   rŽ   r�   rŒ   r‹   rC   r�   r�   r+   s    r$   r,   zSuperWeirdWordPlugin.reset_  sA   € ØˆŒØ$)ˆÔ!Ø#(ˆÔ Ø ˆÔØˆÔØ !ˆÔØ$%ˆÔ!Ø#$ˆÕ r'   c                ór   — | j                   dk  r| j                  dk(  ry| j                  | j                  z  S )Né
   r   rR   )r‹   r�   r�   rC   r+   s    r$   r.   zSuperWeirdWordPlugin.ratioi  s7   € à×Ñ˜rÒ! d×&>Ñ&>À!Ò&CØà×(Ñ(¨4×+@Ñ+@Ñ@Ð@r'   Nr5   r/   r3   r6   rU   r=   r'   r$   rˆ   rˆ   û   s.   „ ó*óóO&ób%ð òAó ñAr'   rˆ   c                  óB   — e Zd ZdZdd„Zd	d„Zd
d„Zdd„Zedd„«       Z	y)ÚCjkUncommonPluginz<
    Detect messy CJK text that probably means nothing.
    c                ó    — d| _         d| _        y rP   ©rC   Ú_uncommon_countr+   s    r$   rF   zCjkUncommonPlugin.__init__v  s   € Ø%&ˆÔØ$%ˆÕr'   c                ó   — t        |«      S rH   )r   r!   s     r$   r%   zCjkUncommonPlugin.eligiblez  s   € Ü�iÓ Ð r'   c                óp   — | xj                   dz  c_         t        |«      r| xj                  dz  c_        y y r^   )rC   r   r´   r!   s     r$   r)   zCjkUncommonPlugin.feed}  s4   € Ø×Ò Ñ"Õä˜9Ô%Ø× Ò  AÑ%Õ Øð &r'   c                ó    — d| _         d| _        y rP   r³   r+   s    r$   r,   zCjkUncommonPlugin.reset„  s   € Ø !ˆÔØ ˆÕr'   c                ól   — | j                   dk  ry| j                  | j                   z  }|dkD  r|dz  S dS )Nra   rR   r—   r¯   r³   )r"   Úuncommon_form_usages     r$   r.   zCjkUncommonPlugin.ratioˆ  sD   € à× Ñ  1Ò$Øà%)×%9Ñ%9¸D×<QÑ<QÑ%QÐð ,?ÀÒ+DÐ" RÑ'ÐMÈ#ÐMr'   Nr5   r/   r3   r6   )
r8   r9   r:   r;   rF   r%   r)   r,   r<   r.   r=   r'   r$   r±   r±   q  s1   „ ñó&ó!óó!ð òNó ñNr'   r±   c                  ó>   — e Zd Zdd„Zdd„Zd	d„Zdd„Zed
d„«       Zy)ÚArchaicUpperLowerPluginc                óf   — d| _         d| _        d| _        d| _        d| _        d | _        d| _        y )NFr   T)Ú_bufÚ_character_count_since_last_sepÚ_successive_upper_lower_countÚ#_successive_upper_lower_count_finalrC   Ú_last_alpha_seenÚ_current_ascii_onlyr+   s    r$   rF   z ArchaicUpperLowerPlugin.__init__•  s9   € ØˆŒ	à45ˆÔ,à23ˆÔ*Ø89ˆÔ0à%&ˆÔà,0ˆÔØ)-ˆÕ r'   c                 ó   — yrh   r=   r!   s     r$   r%   z ArchaicUpperLowerPlugin.eligible¢  ri   r'   c                óZ  — |j                  «       xr t        |«      }|du }|r–| j                  dkD  r‡| j                  dk  r?|j                  «       du r-| j                  du r| xj
                  | j                  z  c_        d| _        d| _        d | _        d| _        | xj                  dz  c_	        d| _        y | j                  du r|j                  «       du rd| _        | j                  �Ž|j                  «       r| j                  j                  «       s*|j                  «       rM| j                  j                  «       r3| j                  du r| xj                  dz  c_        d| _        nd| _        nd| _        | xj                  dz  c_	        | xj                  dz  c_        || _        y )NFr   é@   r   TrM   )r\   r   r¾   rN   rÂ   rÀ   r¿   rÁ   r½   rC   Úisasciiru   Úislower)r"   r#   Úis_concernedÚ	chunk_seps       r$   r)   zArchaicUpperLowerPlugin.feed¥  s�  € Ø ×(Ñ(Ó*ÒJÔ/?À	Ó/JˆØ  EÐ)ˆ	á˜×=Ñ=ÀÒAà×4Ñ4¸Ò:Ø×%Ñ%Ó'¨5Ñ0Ø×,Ñ,°Ñ5à×8Ò8Ø×6Ñ6ñÕ8ð 23ˆDÔ.Ø34ˆDÔ0Ø$(ˆDÔ!ØˆDŒIØ×!Ò! QÑ&Õ!Ø'+ˆDÔ$àà×#Ñ# tÑ+°	×0AÑ0AÓ0CÀuÑ0LØ',ˆDÔ$à× Ñ Ð,Ø×!Ñ!Ô#¨×(=Ñ(=×(EÑ(EÔ(GØ×!Ñ!Ô#¨×(=Ñ(=×(EÑ(EÔ(Gà—9‘9 Ñ$Ø×6Ò6¸!Ñ;Õ6Ø %�D•Ià $�D•Ià!�”	à×Ò Ñ"ÕØ×,Ò,°Ñ1Õ,Ø )ˆÕr'   c                óf   — d| _         d| _        d| _        d| _        d | _        d| _        d| _        y )Nr   FT)rC   r¾   r¿   rÀ   rÁ   r½   rÂ   r+   s    r$   r,   zArchaicUpperLowerPlugin.resetÏ  s9   € Ø !ˆÔØ/0ˆÔ,Ø-.ˆÔ*Ø34ˆÔ0Ø $ˆÔØˆŒ	Ø#'ˆÕ r'   c                óT   — | j                   dk(  ry| j                  | j                   z  S )Nr   rR   )rC   rÀ   r+   s    r$   r.   zArchaicUpperLowerPlugin.ratioØ  s*   € à× Ñ  AÒ%Øà×7Ñ7¸$×:OÑ:OÑOÐOr'   Nr5   r/   r3   r6   rU   r=   r'   r$   r»   r»   ”  s-   „ ó.óó(*óT(ð òPó ñPr'   r»   c                  ó>   — e Zd Zdd„Zdd„Zdd„Zd	d„Zed
d„«       Zy)ÚArabicIsolatedFormPluginc                ó    — d| _         d| _        y rP   ©rC   Ú_isolated_form_countr+   s    r$   rF   z!ArabicIsolatedFormPlugin.__init__á  s   € Ø%&ˆÔØ)*ˆÕ!r'   c                ó    — d| _         d| _        y rP   rÏ   r+   s    r$   r,   zArabicIsolatedFormPlugin.resetå  s   € Ø !ˆÔØ$%ˆÕ!r'   c                ó   — t        |«      S rH   )r   r!   s     r$   r%   z!ArabicIsolatedFormPlugin.eligibleé  s   € Ü˜Ó#Ð#r'   c                óp   — | xj                   dz  c_         t        |«      r| xj                  dz  c_        y y r^   )rC   r   rÐ   r!   s     r$   r)   zArabicIsolatedFormPlugin.feedì  s1   € Ø×Ò Ñ"Õä" 9Ô-Ø×%Ò%¨Ñ*Ö%ð .r'   c                óX   — | j                   dk  ry| j                  | j                   z  }|S )Nra   rR   rÏ   )r"   Úisolated_form_usages     r$   r.   zArabicIsolatedFormPlugin.ratioò  s0   € à× Ñ  1Ò$Øà%)×%>Ñ%>À×AVÑAVÑ%VÐà"Ð"r'   Nr5   r/   r3   r6   )	r8   r9   r:   rF   r,   r%   r)   r<   r.   r=   r'   r$   rÍ   rÍ   à  s*   „ ó+ó&ó$ó+ð ò#ó ñ#r'   rÍ   é   )Úmaxsizec                ó–  — | �|€y| |k(  ryd| v rd|v ryd| v sd|v ryd| v sd|v r	d| v sd|v ry| j                  d«      |j                  d«      }}|D ]  }|t        v rŒ||v sŒ y | dv |dv }}|s|r	d| v sd|v ry|r|ryd	| v sd	|v rd| v sd|v ry| d
k(  s|d
k(  ryd| v sd|v s| dv r!|dv rd| v sd|v ryd| v sd|v ry| d
k(  s|d
k(  ryy)za
    Determine if two Unicode range seen next to each other can be considered as suspicious.
    TFÚLatinÚ	EmoticonsÚ	Combiningú )ÚHiraganaÚKatakanaÚCJKÚHangulzBasic Latin)rÞ   rÝ   ÚPunctuationÚForms)Úsplitr	   )r�   r‚   Úkeywords_range_aÚkeywords_range_bÚelÚrange_a_jp_charsÚrange_b_jp_charss          r$   r€   r€   ü  s‡  € ð Ð /Ð"9Øà˜/Ò)Øà�/Ñ! g°Ñ&@Øà�oÑ%¨¸Ñ)GØð 	�?Ñ" g°Ñ&@Ø�Ñ&¨+¸Ñ*Hàð 	×Ñ˜cÓ"Ø×Ñ˜cÓ"ð 'Ðð
 ò ˆØÔ0Ñ0ØØÐ!Ò!Ùð	ð 	ð
ð	
ð
 	Ð3Ð3ð 'Ðñ 	Ñ,Ø�Ñ  E¨_Ñ$<àÙÑ,Øà�?Ñ" h°/Ñ&AØ�OÑ# u°Ñ'?ØØ˜mÒ+¨À-Ò/OØð 	�Ñ  E¨_Ñ$<ØÐ3Ñ3ØÐ7Ñ7à˜OÑ+¨}ÀÑ/OØØ�oÑ%¨°OÑ)CØØ˜mÒ+¨À-Ò/OØàr'   i   c           	     óö  — t         j                  «       D �cg c]	  } |«       ‘Œ }}t        | «      dz   }d}|dk  rd}n
|dk  rd}nd}t        | dz   t	        |«      «      D ]^  \  }}	|D ]%  }
|
j                  |«      sŒ|
j                  |«       Œ' |	d	kD  r|	|z  d	k(  s	|	|dz
  k(  sŒFt        d
„ |D «       «      }||k\  sŒ^ n |r¦t        d«      }|j                  t        d|› d|› d|› �«       t        | «      dkD  r8|j                  t        d| dd › �«       |j                  t        d| dd › �«       |D ]1  }|j                  t        |j                  › d|j                  › �«       Œ3 t        |d«      S c c}w )zw
    Compute a mess ratio given a decoded bytes sequence. The maximum threshold does stop the computation earlier.
    r   rR   i   é    rÖ   rÅ   é€   ú
r   c              3  ó4   K  — | ]  }|j                   –— Œ y ­wrH   )r.   )rš   Údts     r$   rœ   zmess_ratio.<locals>.<genexpr>e  s   è ø€ Ò!?¨r "§(¥(Ñ!?ùs   ‚Úcharset_normalizerzIMess-detector extended-analysis start. intermediary_mean_mess_ratio_calc=z mean_mess_ratio=z maximum_threshold=é   zStarting with: NzEnding with: iðÿÿÿz: é   )r   Ú__subclasses__r¤   r¦   r§   r%   r)   Úsumr   Úlogr   Ú	__class__r.   Úround)Údecoded_sequenceÚmaximum_thresholdÚdebugÚmd_classÚ	detectorsÚlengthÚmean_mess_ratioÚ!intermediary_mean_mess_ratio_calcr#   ÚindexÚdetectorÚloggerrî   s                r$   Ú
mess_ratior  F  sÁ  € ô $6×#DÑ#DÓ#Fö+Ø‰�
ð+€Ið +ô Ð&Ó'¨!Ñ+€Fà €Oà�‚|Ø13Ñ)Ø	�4ŠØ,.Ñ)à,/Ð)äÐ 0°4Ñ 7¼¸v»ÓGò Ñˆ	�5Ø!ò 	)ˆHØ× Ñ  Õ+Ø—‘˜iÕ(ð	)ð
 �AŠI˜%Ð"CÑCÀqÒHØ�f˜q‘jÓ Ü!Ñ!?°YÔ!?Ó?ˆOàÐ"3Ó3Ùðñ ÜÐ/Ó0ˆà�
‰
Üð1Ø1RÐ0SÐSdÐetÐduð v!Ø!2Ð 3ð5ô	
ô ÐÓ  2Ò%Ø�J‰J”u Ð0@ÀÀ"Ð0EÐ/FÐGÔHØ�J‰J”u Ð.>¸s¸uÐ.EÐ-FÐGÔHàò 	=ˆBØ�J‰J”u §¡ ¨b°·±°
Ð;Õ<ð	=ô � !Ó$Ð$ùò[+s   —E6N)r�   ú
str | Noner‚   r  r1   r2   )gš™™™™™É?F)r÷   r0   rø   r7   rù   r2   r1   r7   ))Ú
__future__r   Ú	functoolsr   Úloggingr   Úconstantr   r   r	   Úutilsr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r?   rW   rd   rn   ry   rˆ   r±   r»   rÍ   r€   r  r=   r'   r$   ú<module>r	     s<  ðÝ "å Ý ÷ñ ÷
÷ ÷ ÷ ÷ ÷,"ñ "ôD,LÐ'9ô ,Lô^OÐ1ô Oô6EÐ*ô Eô0"DÐ&8ô "DôJ./Ð(ô ./ôbsAÐ-ô sAôl NÐ*ô  NôFIPÐ0ô IPôX#Ð1ô #ñ8 �4ÔðFØðFØ2<ðFà	òFó ðFñR �4ÔàINð4%Øð4%Ø.3ð4%ØBFð4%à
ò4%ó ñ4%r'   