ó
    Ô…g9!  ã                   óB   • S SK JrJr  SSKJr  SSKJr   " S S\5      rg)é    )ÚListÚUnioné   )ÚCharSetProber)ÚProbingStatec                   ó>  ^ • \ rS rSrSrSrSrSU 4S jjrSU 4S jjr\	S\
4S	 j5       r\	S\
4S
 j5       rS\4S jrS\4S jrS\4S jrS\4S jrS\4S jrS\4S jrS\\   SS4S jrS\\   SS4S jrS\\\4   S\4S jr\	S\4S j5       rS\4S jrSr U =r!$ )ÚUTF1632Proberé   aL  
This class simply looks for occurrences of zero bytes, and infers
whether the file is UTF16 or UTF32 (low-endian or big-endian)
For instance, files looking like (       [nonzero] )+
have a good probability to be UTF32BE.  Files looking like (   [nonzero] )+
may be guessed to be UTF16BE, and inversely for little-endian varieties.
é   g®Gázî?ÚreturnNc                 ó  >• [         TU ]  5         SU l        S/S-  U l        S/S-  U l        [
        R                  U l        / SQU l        SU l	        SU l
        SU l        SU l        SU l        SU l        U R                  5         g )Nr   é   ©r   r   r   r   F)ÚsuperÚ__init__ÚpositionÚzeros_at_modÚnonzeros_at_modr   Ú	DETECTINGÚ_stateÚquadÚinvalid_utf16beÚinvalid_utf16leÚinvalid_utf32beÚinvalid_utf32leÚ'first_half_surrogate_pair_detected_16beÚ'first_half_surrogate_pair_detected_16leÚreset©ÚselfÚ	__class__s    €Ú7/usr/lib/python3/dist-packages/chardet/utf1632prober.pyr   ÚUTF1632Prober.__init__)   s~   ø€ Ü‰ÑÔØˆŒØ˜C !™GˆÔØ !˜s Q™wˆÔÜ"×,Ñ,ˆŒÚ ˆŒ	Ø$ˆÔØ$ˆÔØ$ˆÔØ$ˆÔØ7<ˆÔ4Ø7<ˆÔ4Ø�
‰
�ó    c                 óì   >• [         TU ]  5         SU l        S/S-  U l        S/S-  U l        [
        R                  U l        SU l        SU l	        SU l
        SU l        SU l        SU l        / SQU l        g )Nr   r   Fr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s    €r"   r   ÚUTF1632Prober.reset8   ss   ø€ Ü‰‰ŒØˆŒØ˜C !™GˆÔØ !˜s Q™wˆÔÜ"×,Ñ,ˆŒØ$ˆÔØ$ˆÔØ$ˆÔØ$ˆÔØ7<ˆÔ4Ø7<ˆÔ4Ú ˆ�	r$   c                 ó´   • U R                  5       (       a  gU R                  5       (       a  gU R                  5       (       a  gU R                  5       (       a  gg)Nzutf-32bezutf-32lezutf-16bezutf-16lezutf-16)Úis_likely_utf32beÚis_likely_utf32leÚis_likely_utf16beÚis_likely_utf16le©r    s    r"   Úcharset_nameÚUTF1632Prober.charset_nameF   sM   € à×!Ñ!×#Ñ#ØØ×!Ñ!×#Ñ#ØØ×!Ñ!×#Ñ#ØØ×!Ñ!×#Ñ#Øàr$   c                 ó   • g)NÚ © r,   s    r"   ÚlanguageÚUTF1632Prober.languageS   s   € àr$   c                 ó4   • [        SU R                  S-  5      $ )Nç      ð?g      @©Úmaxr   r,   s    r"   Úapprox_32bit_charsÚ UTF1632Prober.approx_32bit_charsW   ó   € Ü�3˜Ÿ™¨Ñ+Ó,Ð,r$   c                 ó4   • [        SU R                  S-  5      $ )Nr5   g       @r6   r,   s    r"   Úapprox_16bit_charsÚ UTF1632Prober.approx_16bit_charsZ   r:   r$   c                 óž  • U R                  5       nXR                  :¬  =(       a©    U R                  S   U-  U R                  :„  =(       aƒ    U R                  S   U-  U R                  :„  =(       a]    U R                  S   U-  U R                  :„  =(       a7    U R                  S   U-  U R                  :„  =(       a    U R
                  (       + $ ©Nr   r   é   é   )r8   ÚMIN_CHARS_FOR_DETECTIONr   ÚEXPECTED_RATIOr   r   ©r    Úapprox_charss     r"   r(   ÚUTF1632Prober.is_likely_utf32be]   sÂ   € Ø×.Ñ.Ó0ˆØ×;Ñ;Ñ;÷ 
Ø×Ñ˜aÑ  <Ñ/°$×2EÑ2EÑE÷ )Ø×!Ñ! !Ñ$ |Ñ3°d×6IÑ6IÑI÷)à×!Ñ! !Ñ$ |Ñ3°d×6IÑ6IÑI÷)ð ×$Ñ$ QÑ'¨,Ñ6¸×9LÑ9LÑL÷)ð ×(Ñ(Ô(ð	
r$   c                 óž  • U R                  5       nXR                  :¬  =(       a©    U R                  S   U-  U R                  :„  =(       aƒ    U R                  S   U-  U R                  :„  =(       a]    U R                  S   U-  U R                  :„  =(       a7    U R                  S   U-  U R                  :„  =(       a    U R
                  (       + $ r?   )r8   rB   r   rC   r   r   rD   s     r"   r)   ÚUTF1632Prober.is_likely_utf32leg   sÂ   € Ø×.Ñ.Ó0ˆØ×;Ñ;Ñ;÷ 
Ø× Ñ  Ñ# lÑ2°T×5HÑ5HÑH÷ )Ø×!Ñ! !Ñ$ |Ñ3°d×6IÑ6IÑI÷)à×!Ñ! !Ñ$ |Ñ3°d×6IÑ6IÑI÷)ð ×!Ñ! !Ñ$ |Ñ3°d×6IÑ6IÑI÷)ð ×(Ñ(Ô(ð	
r$   c                 óF  • U R                  5       nXR                  :¬  =(       a}    U R                  S   U R                  S   -   U-  U R                  :„  =(       aG    U R                  S   U R                  S   -   U-  U R                  :„  =(       a    U R
                  (       + $ )Nr   rA   r   r@   )r<   rB   r   rC   r   r   rD   s     r"   r*   ÚUTF1632Prober.is_likely_utf16beq   ó    € Ø×.Ñ.Ó0ˆØ×;Ñ;Ñ;÷ 
Ø×!Ñ! !Ñ$ t×';Ñ';¸AÑ'>Ñ>À,ÑNØ×!Ñ!ñ"÷ )à×"Ñ" 1Ñ%¨×(9Ñ(9¸!Ñ(<Ñ<ÀÑLØ×!Ñ!ñ"÷)ð ×(Ñ(Ô(ð	
r$   c                 óF  • U R                  5       nXR                  :¬  =(       a}    U R                  S   U R                  S   -   U-  U R                  :„  =(       aG    U R                  S   U R                  S   -   U-  U R                  :„  =(       a    U R
                  (       + $ )Nr   r@   r   rA   )r<   rB   r   rC   r   r   rD   s     r"   r+   ÚUTF1632Prober.is_likely_utf16le{   rK   r$   r   c                 ó  • US   S:w  d.  US   S:”  d%  US   S:X  a#  US   S:X  a  SUS   s=::  a  S::  a
  O  OSU l         US   S:w  d.  US   S:”  d%  US   S:X  a&  US   S:X  a  SUS   s=::  a  S::  a  O  g	SU l        g	g	g	g	)
z®
Validate if the quad of bytes is valid UTF-32.

UTF-32 is valid in the range 0x00000000 - 0x0010FFFF
excluding 0x0000D800 - 0x0000DFFF

https://en.wikipedia.org/wiki/UTF-32
r   r   é   éØ   r@   éß   TrA   N)r   r   )r    r   s     r"   Úvalidate_utf32_charactersÚ'UTF1632Prober.validate_utf32_characters…   s”   € ð �‰G�q‹LØ�A‰w˜‹~Ø�Q‘˜1“  a¡¨A£°$¸$¸q¹'Õ2IÀTÖ2Ià#'ˆDÔ à�‰G�q‹LØ�A‰w˜‹~Ø�Q‘˜1“  a¡¨A£°$¸$¸q¹'Õ2IÀTÖ2Ià#'ˆDÕ ð 3J �r$   Úpairc                 óª  • U R                   (       d6  SUS   s=::  a  S::  a  O  OSU l         O=SUS   s=::  a  S::  a
  O  O*SU l        O"SUS   s=::  a  S::  a  O  OSU l         OSU l        U R                  (       d7  SUS   s=::  a  S::  a  O  OSU l        g	SUS   s=::  a  S::  a  O  g	SU l        g	g	SUS   s=::  a  S::  a  O  OSU l        g	SU l        g	)
a	  
Validate if the pair of bytes is  valid UTF-16.

UTF-16 is valid in the range 0x0000 - 0xFFFF excluding 0xD800 - 0xFFFF
with an exception for surrogate pairs, which must be in the range
0xD800-0xDBFF followed by 0xDC00-0xDFFF

https://en.wikipedia.org/wiki/UTF-16
rP   r   éÛ   TéÜ   rQ   Fr   N)r   r   r   r   )r    rT   s     r"   Úvalidate_utf16_charactersÚ'UTF1632Prober.validate_utf16_characters›   sÄ   € ð ×;×;Ø�t˜A‘wÕ& $Ö&Ø?C�Õ<Ø˜˜a™Õ( DÖ(Ø'+�Ô$øà�t˜A‘wÕ& $Ö&Ø?D�Õ<à'+�Ô$à×;×;Ø�t˜A‘wÕ& $Ö&Ø?C�Õ<Ø˜˜a™Õ( DÖ(Ø'+�Õ$ð )ð �t˜A‘wÕ& $Ö&Ø?D�Õ<à'+�Õ$r$   Úbyte_strc                 ó´  • U HÇ  nU R                   S-  nX R                  U'   US:X  aW  U R                  U R                  5        U R                  U R                  SS 5        U R                  U R                  SS 5        US:X  a  U R                  U==   S-  ss'   OU R
                  U==   S-  ss'   U =R                   S-  sl         MÉ     U R                  $ )Nr   rA   r   r@   r   )r   r   rR   rX   r   r   Ústate)r    rZ   ÚcÚmod4s       r"   ÚfeedÚUTF1632Prober.feed»   s»   € ÛˆAØ—=‘= 1Ñ$ˆDØ�I‰I�d‰OØ�q‹yØ×.Ñ.¨t¯y©yÔ9Ø×.Ñ.¨t¯y©y¸¸1¨~Ô>Ø×.Ñ.¨t¯y©y¸¸1¨~Ô>Ø�A‹vØ×!Ñ! $Ó'¨1Ñ,Ô'à×$Ñ$ TÓ*¨aÑ/Ó*Ø�MŠM˜QÑ�Mñ ð �z‰zÐr$   c                 óB  • U R                   [        R                  [        R                  1;   a  U R                   $ U R	                  5       S:”  a!  [        R                  U l         U R                   $ U R
                  S:”  a  [        R                  U l         U R                   $ )Ngš™™™™™é?i   )r   r   ÚNOT_MEÚFOUND_ITÚget_confidencer   r,   s    r"   r\   ÚUTF1632Prober.stateÊ   sz   € à�;‰;œ<×.Ñ.´×0EÑ0EÐFÓFà—;‘;ÐØ×ÑÓ  4Ó'Ü&×/Ñ/ˆDŒKð
 �{‰{Ðð	 �]‰]˜XÓ%ô '×-Ñ-ˆDŒKØ�{‰{Ðr$   c                 ó²   • U R                  5       (       d?  U R                  5       (       d*  U R                  5       (       d  U R                  5       (       a  S$ S$ )Ng333333ë?g        )r+   r*   r)   r(   r,   s    r"   rd   ÚUTF1632Prober.get_confidence×   sT   € ð ×&Ñ&×(Ñ(Ø×)Ñ)×+Ñ+Ø×)Ñ)×+Ñ+Ø×)Ñ)×+Ñ+ð ð		
ð ð		
r$   )r   r   r   r   r   r   r   r   r   r   r   )r   N)"Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rB   rC   r   r   ÚpropertyÚstrr-   r2   Úfloatr8   r<   Úboolr(   r)   r*   r+   r   ÚintrR   rX   r   ÚbytesÚ	bytearrayr   r_   r\   rd   Ú__static_attributes__Ú__classcell__)r!   s   @r"   r	   r	      s  ø† ñð !Ðà€N÷÷!ð ð
˜có 
ó ð
ð ð˜#ó ó ðð- Eô -ð- Eô -ð
 4ô 
ð
 4ô 
ð
 4ô 
ð
 4ô 
ð(¨d°3©ið (¸Dô (ð,,¨d°3©ið ,¸Dô ,ð@˜U 5¨)Ð#3Ñ4ð ¸ô ð ð
�|ó 
ó ð
ð

 ÷ 

ò 

r$   r	   N)Útypingr   r   Úcharsetproberr   Úenumsr   r	   r1   r$   r"   Ú<module>ry      s   ð÷* å (Ý ôF
�Mõ F
r$   