f9! J d dl mZmZ ddlmZ ddlmZ G d de ZdS ) )ListUnion )
CharSetProber)ProbingStatec 8 e Zd ZdZdZdZd fdZd fdZede fd Z
ede fd Zdefd
Z
defdZdefdZdefd
ZdefdZdefdZdee ddfdZdee ddfdZdeeef defdZedefd ZdefdZ xZS )
UTF1632Proberad
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.
gGz?returnNc 2 t d| _ dgdz | _ dgdz | _ t
j | _ g d| _ d| _ d| _
d| _ d| _ d| _
d| _ | d S )Nr r r r r F)super__init__positionzeros_at_modnonzeros_at_modr DETECTING_statequadinvalid_utf16beinvalid_utf16leinvalid_utf32beinvalid_utf32le'first_half_surrogate_pair_detected_16be'first_half_surrogate_pair_detected_16leresetself __class__s J/opt/cloudlinux/venv/lib/python3.11/site-packages/chardet/utf1632prober.pyr zUTF1632Prober.__init__) s
C!G !sQw", LL $$$$7<47<4
c
t d| _ dgdz | _ dgdz | _ t
j | _ d| _ d| _ d| _
d| _ d| _ d| _
g d| _ d S )Nr r
Fr )r r r r r r r r r r r r r r r r s r! r zUTF1632Prober.reset8 s
C!G !sQw",$$$$7<47<4 LL r" c | rdS | rdS | rdS | rdS dS )Nzutf-32bezutf-32lezutf-16bezutf-16lezutf-16)is_likely_utf32beis_likely_utf32leis_likely_utf16beis_likely_utf16ler s r! charset_namezUTF1632Prober.charset_nameF sk !!## :!!## :!!## :!!## :xr" c dS )N r) s r! languagezUTF1632Prober.languageS s rr" c 2 t d| j dz S )N ?g @maxr r) s r! approx_32bit_charsz UTF1632Prober.approx_32bit_charsW 3
+,,,r" c 2 t d| j dz S )Nr0 g @r1 r) s r! approx_16bit_charsz UTF1632Prober.approx_16bit_charsZ r4 r" c | }|| j k ok| j d |z | j k oR| j d |z | j k o9| j d |z | j k o | j d |z | j k o| j S Nr r )r3 MIN_CHARS_FOR_DETECTIONr EXPECTED_RATIOr r r approx_charss r! r% zUTF1632Prober.is_likely_utf32be] s ..00t;;
a </$2EE
)!!$|3d6II
)!!$|3d6II
) $Q',69LL
) ((
r" c | }|| j k ok| j d |z | j k oR| j d |z | j k o9| j d |z | j k o | j d |z | j k o| j S r8 )r3 r; r r<