U
    „}ag :  ã                   @   sÂ   d Z ddlZddlZddlZddlmZmZ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 dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ G dd„ dƒZdS )a  
Module containing the UniversalDetector detector class, which is the primary
class a user of ``chardet`` should use.

:author: Mark Pilgrim (initial port to Python)
:author: Shy Shalom (original C code)
:author: Dan Blanchard (major refactoring for 3.0)
:author: Ian Cordasco
é    N)ÚListÚOptionalÚUnioné   )ÚCharSetGroupProber)ÚCharSetProber)Ú
InputStateÚLanguageFilterÚProbingState)ÚEscCharSetProber)ÚLatin1Prober)ÚMacRomanProber)ÚMBCSGroupProber)Ú
ResultDict)ÚSBCSGroupProber)ÚUTF1632Proberc                	   @   sä   e Zd ZdZdZe d¡Ze d¡Ze d¡Z	dddd	d
ddddœZ
ddddddddœZejdfeeddœdd„Zeedœdd„ƒZeedœdd„ƒZeee dœdd„ƒZddœd d!„Zeeef dd"œd#d$„Zedœd%d&„ZdS )'ÚUniversalDetectoraq  
    The ``UniversalDetector`` class underlies the ``chardet.detect`` function
    and coordinates all of the different charset probers.

    To get a ``dict`` containing an encoding and its confidence, you can simply
    run:

    .. code::

            u = UniversalDetector()
            u.feed(some_bytes)
            u.close()
            detected = u.result

    gš™™™™™É?s   [€-ÿ]s   (|~{)s   [€-Ÿ]zWindows-1252zWindows-1250zWindows-1251zWindows-1256zWindows-1253zWindows-1255zWindows-1254zWindows-1257)ú
iso-8859-1z
iso-8859-2z
iso-8859-5z
iso-8859-6z
iso-8859-7z
iso-8859-8ú
iso-8859-9ziso-8859-13zISO-8859-11ZGB18030ZCP949úUTF-16)Úasciir   ztis-620r   Úgb2312zeuc-krzutf-16leFN)Úlang_filterÚshould_rename_legacyÚreturnc                 C   sd   d | _ d | _g | _d dd dœ| _d| _d| _tj| _d| _	|| _
t t¡| _d| _|| _|  ¡  d S )Nç        ©ÚencodingÚ
confidenceÚlanguageFó    )Ú_esc_charset_proberÚ_utf1632_proberÚ_charset_probersÚresultÚdoneÚ	_got_datar   Ú
PURE_ASCIIÚ_input_stateÚ
_last_charr   ÚloggingÚ	getLoggerÚ__name__ÚloggerÚ_has_win_bytesr   Úreset)Úselfr   r   © r1   ú]/var/www/html/publicvenv/lib/python3.8/site-packages/pip/_vendor/chardet/universaldetector.pyÚ__init__d   s     ýzUniversalDetector.__init__)r   c                 C   s   | j S ©N)r(   ©r0   r1   r1   r2   Úinput_state{   s    zUniversalDetector.input_statec                 C   s   | j S r4   )r.   r5   r1   r1   r2   Úhas_win_bytes   s    zUniversalDetector.has_win_bytesc                 C   s   | j S r4   )r#   r5   r1   r1   r2   Úcharset_probersƒ   s    z!UniversalDetector.charset_probersc                 C   sf   ddddœ| _ d| _d| _d| _tj| _d| _| jr>| j 	¡  | j
rN| j
 	¡  | jD ]}| 	¡  qTdS )zæ
        Reset the UniversalDetector and all of its probers back to their
        initial states.  This is called by ``__init__``, so you only need to
        call this directly in between analyses of different documents.
        Nr   r   Fr    )r$   r%   r&   r.   r   r'   r(   r)   r!   r/   r"   r#   )r0   Úproberr1   r1   r2   r/   ‡   s    


zUniversalDetector.reset)Úbyte_strr   c                 C   sœ  | j r
dS |sdS t|tƒs$t|ƒ}| jsÚ| tj¡rFddddœ| _nv| tjtj	f¡rhddddœ| _nT| d¡r‚ddddœ| _n:| d	¡rœd
dddœ| _n | tj
tjf¡r¼ddddœ| _d| _| jd dk	rÚd| _ dS | jtjk�r(| j |¡rþtj| _n*| jtjk�r(| j | j| ¡�r(tj| _|dd… | _| j�sFtƒ | _| jjtjk�rŒ| j |¡tjk�rŒ| jj| j ¡ ddœ| _d| _ dS | jtjk�ræ| j�s®t| j ƒ| _| j |¡tjk�r˜| jj| j ¡ | jj!dœ| _d| _ n²| jtjk�r˜| j"�sBt#| j ƒg| _"| j t$j%@ �r&| j" &t'ƒ ¡ | j" &t(ƒ ¡ | j" &t)ƒ ¡ | j"D ]:}| |¡tjk�rH|j| ¡ |j!dœ| _d| _  �q„�qH| j* |¡�r˜d| _+dS )aý  
        Takes a chunk of a document and feeds it through all of the relevant
        charset probers.

        After calling ``feed``, you can check the value of the ``done``
        attribute to see if you need to continue feeding the
        ``UniversalDetector`` more data, or if it has made a prediction
        (in the ``result`` attribute).

        .. note::
           You should always call ``close`` when you're done feeding in your
           document if ``done`` is not already ``True``.
        Nz	UTF-8-SIGç      ð?Ú r   zUTF-32s   þÿ  zX-ISO-10646-UCS-4-3412s     ÿþzX-ISO-10646-UCS-4-2143r   Tr   éÿÿÿÿ),r%   Ú
isinstanceÚ	bytearrayr&   Ú
startswithÚcodecsÚBOM_UTF8r$   ÚBOM_UTF32_LEÚBOM_UTF32_BEÚBOM_LEÚBOM_BEr(   r   r'   ÚHIGH_BYTE_DETECTORÚsearchÚ	HIGH_BYTEÚESC_DETECTORr)   Ú	ESC_ASCIIr"   r   Ústater
   Ú	DETECTINGÚfeedÚFOUND_ITÚcharset_nameÚget_confidencer!   r   r   r   r#   r   r	   ÚNON_CJKÚappendr   r   r   ÚWIN_BYTE_DETECTORr.   )r0   r:   r9   r1   r1   r2   rN   š   s–    
ý

ü

ü


ÿþýý
ý
zUniversalDetector.feedc           	   	   C   sš  | j r| jS d| _ | js&| j d¡ nØ| jtjkrBddddœ| _n¼| jtjkrþd}d}d}| j	D ]"}|sjq`| 
¡ }||kr`|}|}q`|rþ|| jkrþ|j}|dk	s¤t‚| ¡ }| 
¡ }| d	¡rÒ| jrÒ| j ||¡}| jrî| j |päd ¡ |¡}|||jdœ| _| j ¡ tjk�r”| jd
 dk�r”| j d¡ | j	D ]`}|�s@�q2t|tƒ�rv|jD ] }| j d|j|j| 
¡ ¡ �qRn| j d|j|j| 
¡ ¡ �q2| jS )zæ
        Stop analyzing the current document and come up with a final
        prediction.

        :returns:  The ``result`` attribute, a ``dict`` with the keys
                   `encoding`, `confidence`, and `language`.
        Tzno data received!r   r;   r<   r   Nr   ziso-8859r   z no probers hit minimum thresholdz%s %s confidence = %s)r%   r$   r&   r-   Údebugr(   r   r'   rI   r#   rQ   ÚMINIMUM_THRESHOLDrP   ÚAssertionErrorÚlowerr@   r.   ÚISO_WIN_MAPÚgetr   Ú
LEGACY_MAPr   ÚgetEffectiveLevelr*   ÚDEBUGr>   r   Úprobers)	r0   Zprober_confidenceZmax_prober_confidenceZ
max_proberr9   rP   Úlower_charset_namer   Zgroup_proberr1   r1   r2   Úclose  sv    	

 ÿ
 ÿý

ü
üzUniversalDetector.close)r,   Ú
__module__Ú__qualname__Ú__doc__rV   ÚreÚcompilerG   rJ   rT   rY   r[   r	   ÚALLÚboolr3   ÚpropertyÚintr6   r7   r   r   r8   r/   r   Úbytesr?   rN   r   r`   r1   r1   r1   r2   r   8   sN   


øùýü r   )rc   rA   r*   rd   Útypingr   r   r   Úcharsetgroupproberr   Úcharsetproberr   Úenumsr   r	   r
   Z	escproberr   Zlatin1proberr   Zmacromanproberr   Zmbcsgroupproberr   Ú
resultdictr   Zsbcsgroupproberr   Zutf1632proberr   r   r1   r1   r1   r2   Ú<module>   s   