Ë
    £2Úi¨L  ã            
       óÒ  — d dl mZ d dlmZ d dlmZ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  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ee'   dee'   de(fd „«       Z) ed!¬«      	 d'd"e'd#e*d$e(de*fd%„«       Z+y&)(é    )Ú	lru_cache)Ú	getLogger)ÚListÚOptionalé   )Ú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_rangec                   óN   — e Zd ZdZdedefd„Zdeddfd„Zd	d„Ze	de
fd„«       Zy)
ÚMessDetectorPluginzy
    Base abstract class used for mess detection plugins.
    All detectors MUST extend and implement given methods.
    Ú	characterÚreturnc                 ó   — t         ‚)z@
        Determine if given character should be fed in.
        ©ÚNotImplementedError©Úselfr   s     úL/var/www/html/acx/venv/lib/python3.12/site-packages/charset_normalizer/md.pyÚeligiblezMessDetectorPlugin.eligible%   ó
   € ô "Ð!ó    Nc                 ó   — 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.reset2   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.ratio8   s
   € ô "Ð!r(   ©r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚboolr&   r*   r-   ÚpropertyÚfloatr/   © r(   r%   r   r      sM   „ ñð
" #ð "¨$ó "ð"˜cð " dó "ó"ð ð"�uò "ó ñ"r(   r   c                   óR   — e Zd Zd	d„Zdedefd„Zdeddfd„Zd	d„Ze	de
fd„«       Zy)
Ú TooManySymbolOrPunctuationPluginr   Nc                 ó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__B   s*   € Ø'(ˆÔØ"#ˆÔØ%&ˆÔà37ˆÔ!Ø,1ˆÕ#r(   r   c                 ó"   — |j                  «       S ©N©Úisprintabler#   s     r%   r&   z)TooManySymbolOrPunctuationPlugin.eligibleJ   ó   € Ø×$Ñ$Ó&Ð&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é   )	r?   r@   r   r   r=   Úisdigitr   r   r>   r#   s     r%   r*   z%TooManySymbolOrPunctuationPlugin.feedM   s�   € Ø×Ò Ñ"Õð ˜×2Ñ2Ò2ØÔ!=Ñ=ä˜iÔ(Ø×'Ò'¨1Ñ,Õ'ð %.ˆÕ!ð ×!Ñ!Ó# uÑ,Ü˜iÔ(Ü 	Ó*¨eÑ3à×"Ò" aÑ'Õ"à$-ˆÕ!r(   c                 ó.   — d| _         d| _        d| _        y ©Nr   )r=   r?   r>   r,   s    r%   r-   z&TooManySymbolOrPunctuationPlugin.reset_   s   € Ø"#ˆÔØ !ˆÔØˆÕr(   c                 ó€   — | j                   dk(  ry| j                  | j                  z   | j                   z  }|dk\  r|S dS )Nr   ç        ç333333Ó?)r?   r=   r>   )r$   Úratio_of_punctuations     r%   r/   z&TooManySymbolOrPunctuationPlugin.ratiod   sO   € à× Ñ  AÒ%Øð ×#Ñ# d×&8Ñ&8Ñ8Ø×!Ñ!ñ'"Ðð (<¸sÒ'BÐ#ÐKÈÐKr(   r0   ©r1   r2   r3   rB   r5   r6   r&   r*   r-   r7   r8   r/   r9   r(   r%   r;   r;   A   sP   „ ó2ð' #ð '¨$ó 'ð.˜cð . dó .ó$ð
 ðL�uò Ló ñLr(   r;   c                   óR   — e Zd Zd	d„Zdedefd„Zdeddfd„Zd	d„Ze	de
fd„«       Zy)
ÚTooManyAccentuatedPluginr   Nc                 ó    — d| _         d| _        y rL   ©r?   Ú_accentuated_countr,   s    r%   rB   z!TooManyAccentuatedPlugin.__init__q   s   € Ø%&ˆÔØ'(ˆÕr(   r   c                 ó"   — |j                  «       S rD   )Úisalphar#   s     r%   r&   z!TooManyAccentuatedPlugin.eligibleu   s   € Ø× Ñ Ó"Ð"r(   c                 óp   — | xj                   dz  c_         t        |«      r| xj                  dz  c_        y y ©Nr   )r?   r   rV   r#   s     r%   r*   zTooManyAccentuatedPlugin.feedx   s1   € Ø×Ò Ñ"Õä˜)Ô$Ø×#Ò# qÑ(Ö#ð %r(   c                 ó    — d| _         d| _        y rL   rU   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é   rN   gffffffÖ?rU   )r$   Úratio_of_accentuations     r%   r/   zTooManyAccentuatedPlugin.ratio‚   s=   € à× Ñ  1Ò$Øà'+×'>Ñ'>À×AVÑAVÑ'VÐØ(=ÀÒ(EÐ$ÐNÈ3ÐNr(   r0   rQ   r9   r(   r%   rS   rS   p   sP   „ ó)ð# #ð #¨$ó #ð)˜cð ) dó )ó$ð ðO�uò Oó ñOr(   rS   c                   óR   — e Zd Zd	d„Zdedefd„Zdeddfd„Zd	d„Ze	de
fd„«       Zy)
ÚUnprintablePluginr   Nc                 ó    — d| _         d| _        y rL   )Ú_unprintable_countr?   r,   s    r%   rB   zUnprintablePlugin.__init__Œ   s   € Ø'(ˆÔØ%&ˆÕr(   r   c                  ó   — y©NTr9   r#   s     r%   r&   zUnprintablePlugin.eligible�   ó   € Ør(   c                 ón   — t        |«      r| xj                  dz  c_        | xj                  dz  c_        y rZ   )r   rb   r?   r#   s     r%   r*   zUnprintablePlugin.feed“   s,   € Ü˜)Ô$Ø×#Ò# qÑ(Õ#Ø×Ò Ñ"Ör(   c                 ó   — d| _         y rL   )rb   r,   s    r%   r-   zUnprintablePlugin.reset˜   s
   € Ø"#ˆÕr(   c                 óZ   — | j                   dk(  ry| j                  dz  | j                   z  S )Nr   rN   r]   )r?   rb   r,   s    r%   r/   zUnprintablePlugin.ratio›   s/   € à× Ñ  AÒ%Øà×'Ñ'¨!Ñ+¨t×/DÑ/DÑDÐDr(   r0   rQ   r9   r(   r%   r`   r`   ‹   sP   „ ó'ð #ð ¨$ó ð#˜cð # dó #ó
$ð ðE�uò Eó ñEr(   r`   c                   óR   — e Zd Zd	d„Zdedefd„Zdeddfd„Zd	d„Ze	de
fd„«       Zy)
ÚSuspiciousDuplicateAccentPluginr   Nc                 ó.   — d| _         d| _        d | _        y rL   ©Ú_successive_countr?   Ú_last_latin_characterr,   s    r%   rB   z(SuspiciousDuplicateAccentPlugin.__init__¤   s   € Ø&'ˆÔØ%&ˆÔà48ˆÕ"r(   r   c                 ó<   — |j                  «       xr t        |«      S rD   )rX   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 rZ   )r?   rn   r   Úisupperrm   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 rL   rl   r,   s    r%   r-   z%SuspiciousDuplicateAccentPlugin.reset»   s   € Ø!"ˆÔØ !ˆÔØ%)ˆÕ"r(   c                 óZ   — | j                   dk(  ry| j                  dz  | j                   z  S )Nr   rN   rI   )r?   rm   r,   s    r%   r/   z%SuspiciousDuplicateAccentPlugin.ratioÀ   s/   € à× Ñ  AÒ%Øà×&Ñ&¨Ñ*¨d×.CÑ.CÑCÐCr(   r0   rQ   r9   r(   r%   rj   rj   £   sP   „ ó9ð; #ð ;¨$ó ;ð/˜cð / dó /ó*ð
 ðD�uò Dó ñDr(   rj   c                   óR   — e Zd Zd	d„Zdedefd„Zdeddfd„Zd	d„Ze	de
fd„«       Zy)
ÚSuspiciousRanger   Nc                 ó.   — d| _         d| _        d | _        y rL   )Ú"_suspicious_successive_range_countr?   Ú_last_printable_seenr,   s    r%   rB   zSuspiciousRange.__init__É   s   € Ø78ˆÔ/Ø%&ˆÔØ37ˆÕ!r(   r   c                 ó"   — |j                  «       S rD   rE   r#   s     r%   r&   zSuspiciousRange.eligibleÎ   rG   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 rZ   )r?   Úisspacer   r   rx   r   Ú is_suspiciously_successive_rangerw   )r$   r   Úunicode_range_aÚunicode_range_bs       r%   r*   zSuspiciousRange.feedÑ   s‘   € Ø×Ò Ñ"Õð ×ÑÔÜ˜iÔ(ØÔ8Ñ8à(,ˆDÔ%Øà×$Ñ$Ð,Ø(1ˆDÔ%Øä)6°t×7PÑ7PÓ)QˆÜ)6°yÓ)Aˆä+¨O¸_ÔMØ×3Ò3°qÑ8Õ3à$-ˆÕ!r(   c                 ó.   — d| _         d| _        d | _        y rL   )r?   rw   rx   r,   s    r%   r-   zSuspiciousRange.resetè   s   € Ø !ˆÔØ23ˆÔ/Ø$(ˆÕ!r(   c                 ó^   — | j                   dk  ry| j                  dz  | j                   z  }|S )Né   rN   rI   )r?   rw   )r$   Úratio_of_suspicious_range_usages     r%   r/   zSuspiciousRange.ratioí   s<   € à× Ñ  BÒ&Øð ×3Ñ3°aÑ7Ø×!Ñ!ñ2"Ð'ð /Ð.r(   r0   rQ   r9   r(   r%   ru   ru   È   sM   „ ó8ð
' #ð '¨$ó 'ð.˜cð . dó .ó.)ð
 ð/�uò /ó ñ/r(   ru   c                   óR   — e Zd Zd	d„Zdedefd„Zdeddfd„Zd	d„Ze	de
fd„«       Zy)
ÚSuperWeirdWordPluginr   Nc                 ó‚   — 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_watchr?   Ú_bad_character_countÚ_bufferÚ_buffer_accent_countr,   s    r%   rB   zSuperWeirdWordPlugin.__init__ú   sI   € Ø !ˆÔØ$%ˆÔØ()ˆÔ à*/ˆÔ!Ø).ˆÔ à%&ˆÔØ)*ˆÔ!àˆŒØ)*ˆÕ!r(   r   c                  ó   — yrd   r9   r#   s     r%   r&   zSuperWeirdWordPlugin.eligible  re   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| _        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kD  rd| _        t        | j                  d   «      rW| j                  d   j%                  «       r:t'        d„ | j                  D «       «      du r| xj(                  dz  c_        d| _        |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j.                  dz  c_        | xj0                  t        | j                  «      z  c_        d| _        d| _        d| _        d	| _        y |dvr<|j3                  «       du r)t5        |«      rd| _        | xj                  |z  c_        y y y y c c}}w )Nr   FTé   gÃõ(\�ÂÕ?éÿÿÿÿc              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wrD   )rq   )Ú.0Ú_s     r%   ú	<genexpr>z,SuperWeirdWordPlugin.feed.<locals>.<genexpr>-  s   è ø€ Ò>¨A˜AŸI™IŸKÑ>ùs   ‚r�   r   rO   r†   >   r•   ú-ú<ú=ú>ú|ú~)rX   r�   r   rŽ   r‹   r   r   r   r   r   r   r{   r   r   r‡   Úlenr?   rŠ   rq   Úallr‰   ÚzipÚrangerˆ   rŒ   rJ   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Õ@WØ�l‹lØ×Ò Ñ!ÕÜ!$ T§\¡\Ó!2ˆMà×!Ò! ]Ñ2Õ!à Ò!Ø×,Ñ,¨}Ñ<¸tÒCØ04�DÔ-ô # 4§<¡<°Ñ#3Ô4ØŸ™ RÑ(×0Ñ0Ô2ÜÑ>°·±Ô>Ó>À%ÑGà×,Ò,°Ñ1Õ,Ø04�DÔ-Ø Ò" t×'?Ò'?ô !$ D§L¡L´%¸¸=Ó2IÓ J÷"á˜˜1Ø—y‘y”{ò ð"�ñ "ð
 .3Ð$á!¤s¨>Ó':¸]Ñ'JÈcÒ'QØ+/Ð(á+Ø×,Ò,°Ñ1Õ,Ø04�DÔ-à×(Ò(Ø×$Ò$¨Ñ)Õ$Ø×)Ò)¬S°·±Ó->Ñ>Õ)Ø,1�Ô)à',ˆDÔ$ØˆDŒLØ()ˆDÕ%àÐ@Ñ@Ø×!Ñ!Ó# uÑ,Ü˜)Ô$à(,ˆDÔ%Ø�LŠL˜IÑ%ŽLð %ð -ð Aùó/"s   Ç6K1c                 ót   — d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        y )Nr†   Fr   )r�   rŠ   r‹   rˆ   r‡   r?   rŒ   r‰   r,   s    r%   r-   zSuperWeirdWordPlugin.resetP  sA   € ØˆŒØ$)ˆÔ!Ø#(ˆÔ Ø ˆÔØˆÔØ !ˆÔØ$%ˆÔ!Ø#$ˆÕ r(   c                 ór   — | j                   dk  r| j                  dk(  ry| j                  | j                  z  S )Né
   r   rN   )r‡   r‰   rŒ   r?   r,   s    r%   r/   zSuperWeirdWordPlugin.ratioZ  s7   € à×Ñ˜rÒ! d×&>Ñ&>À!Ò&CØà×(Ñ(¨4×+@Ñ+@Ñ@Ð@r(   r0   rQ   r9   r(   r%   r„   r„   ù   sT   „ ó+ð #ð ¨$ó ðC&˜cð C& dó C&óJ%ð ðA�uò Aó ñAr(   r„   c                   óV   — e Zd ZdZd
d„Zdedefd„Zdeddfd„Zd
d„Z	e
defd	„«       Zy)ÚCjkInvalidStopPluginu²   
    GB(Chinese) based encoding often render the stop incorrectly when the content does not fit and
    can be easily detected. Searching for the overuse of 'ä¸…' and 'ä¸„'.
    r   Nc                 ó    — d| _         d| _        y rL   ©Ú_wrong_stop_countÚ_cjk_character_countr,   s    r%   rB   zCjkInvalidStopPlugin.__init__h  s   € Ø&'ˆÔØ)*ˆÕ!r(   r   c                  ó   — yrd   r9   r#   s     r%   r&   zCjkInvalidStopPlugin.eligiblel  re   r(   c                 óz   — |dv r| xj                   dz  c_         y t        |«      r| xj                  dz  c_        y y )N>   õ   ä¸„õ   ä¸…r   )r­   r   r®   r#   s     r%   r*   zCjkInvalidStopPlugin.feedo  s<   € Ø˜Ñ&Ø×"Ò" aÑ'Õ"ØÜ�)ÔØ×%Ò%¨Ñ*Ö%ð r(   c                 ó    — d| _         d| _        y rL   r¬   r,   s    r%   r-   zCjkInvalidStopPlugin.resetv  s   € Ø!"ˆÔØ$%ˆÕ!r(   c                 óT   — | j                   dk  ry| j                  | j                   z  S )Né   rN   )r®   r­   r,   s    r%   r/   zCjkInvalidStopPlugin.ratioz  s*   € à×$Ñ$ rÒ)ØØ×%Ñ%¨×(AÑ(AÑAÐAr(   r0   )r1   r2   r3   r4   rB   r5   r6   r&   r*   r-   r7   r8   r/   r9   r(   r%   rª   rª   b  sU   „ ñó
+ð #ð ¨$ó ð+˜cð + dó +ó&ð ðB�uò Bó ñBr(   rª   c                   óR   — e Zd Zd	d„Zdedefd„Zdeddfd„Zd	d„Ze	de
fd„«       Zy)
ÚArchaicUpperLowerPluginr   Nc                 ó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_finalr?   Ú_last_alpha_seenÚ_current_ascii_onlyr,   s    r%   rB   z ArchaicUpperLowerPlugin.__init__‚  s9   € ØˆŒ	à45ˆÔ,à23ˆÔ*Ø89ˆÔ0à%&ˆÔà/3ˆÔØ)-ˆÕ r(   r   c                  ó   — yrd   r9   r#   s     r%   r&   z ArchaicUpperLowerPlugin.eligible�  re   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   TrI   )rX   r   rº   rJ   r¾   r¼   r»   r½   r¹   r?   Úisasciirq   Ú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)r?   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   rN   )r?   r¼   r,   s    r%   r/   zArchaicUpperLowerPlugin.ratioÅ  s*   € à× Ñ  AÒ%Øà×7Ñ7¸$×:OÑ:OÑOÐOr(   r0   rQ   r9   r(   r%   r·   r·   �  sQ   „ ó.ð #ð ¨$ó ð(*˜cð (* dó (*óT(ð ðP�uò Pó ñPr(   r·   c                   óR   — e Zd Zd	d„Zd	d„Zdedefd„Zdeddfd„Ze	de
fd„«       Zy)
ÚArabicIsolatedFormPluginr   Nc                 ó    — d| _         d| _        y rL   ©r?   Ú_isolated_form_countr,   s    r%   rB   z!ArabicIsolatedFormPlugin.__init__Î  s   € Ø%&ˆÔØ)*ˆÕ!r(   c                 ó    — d| _         d| _        y rL   rË   r,   s    r%   r-   zArabicIsolatedFormPlugin.resetÒ  s   € Ø !ˆÔØ$%ˆÕ!r(   r   c                 ó   — t        |«      S rD   )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 rZ   )r?   r   rÌ   r#   s     r%   r*   zArabicIsolatedFormPlugin.feedÙ  s1   € Ø×Ò Ñ"Õä" 9Ô-Ø×%Ò%¨Ñ*Ö%ð .r(   c                 óX   — | j                   dk  ry| j                  | j                   z  }|S )Nr]   rN   rË   )r$   Úisolated_form_usages     r%   r/   zArabicIsolatedFormPlugin.ratioß  s0   € à× Ñ  1Ò$Øà%)×%>Ñ%>À×AVÑAVÑ%VÐà"Ð"r(   r0   )r1   r2   r3   rB   r-   r5   r6   r&   r*   r7   r8   r/   r9   r(   r%   rÉ   rÉ   Í  sM   „ ó+ó&ð$ #ð $¨$ó $ð+˜cð + dó +ð ð#�uò #ó ñ#r(   rÉ   é   )Úmaxsizer}   r~   r   c                 ó–  — | �|€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àà)8×)>Ñ)>Øó*à×Ñ˜SÓ!ð 'Ðð ò ˆØÔ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   Údecoded_sequenceÚmaximum_thresholdÚdebugc           	      óö  — 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   rN   i   é    rÒ   rÁ   é€   ú
r   c              3   ó4   K  — | ]  }|j                   –— Œ y ­wrD   )r/   )r”   Údts     r%   r–   zmess_ratio.<locals>.<genexpr>Q  s   è ø€ Ò!?¨r "§(¥(Ñ!?ùs   ‚Úcharset_normalizerzIMess-detector extended-analysis start. intermediary_mean_mess_ratio_calc=z mean_mess_ratio=z maximum_threshold=rµ   zStarting with: NzEnding with: iðÿÿÿz: é   )r   Ú__subclasses__r�   rŸ   r    r&   r*   Úsumr   Úlogr	   Ú	__class__r/   Úround)rå   ræ   rç   Úmd_classÚ	detectorsÚlengthÚmean_mess_ratioÚ!intermediary_mean_mess_ratio_calcr   ÚindexÚdetectorÚloggerrí   s                r%   Ú
mess_ratiorý   2  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)gš™™™™™É?F),Ú	functoolsr   Úloggingr   Útypingr   r   Úconstantr   r	   r
   Úutilsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r;   rS   r`   rj   ru   r„   rª   r·   rÉ   r5   r6   r|   r8   rý   r9   r(   r%   ú<module>r     sC  ðÝ Ý ß !÷ñ ÷
÷ ÷ ÷ õ ÷*"ñ "ôD,LÐ'9ô ,Lô^OÐ1ô Oô6EÐ*ô Eô0"DÐ&8ô "DôJ./Ð(ô ./ôbfAÐ-ô fAôRBÐ-ô Bô>IPÐ0ô IPôX#Ð1ô #ñ8 �4ÔðEØ˜c‘]ðEØ5=¸c±]ðEà	òEó ðEñP �4ÔàINñ4%Øð4%Ø.3ð4%ØBFð4%à
ò4%ó ñ4%r(   