U
    yc                     @   sh   d dl 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mZmZmZ G dd deZd	S )
    )OptionalUnion   )CharSetProber)CodingStateMachine)LanguageFilterMachineStateProbingState)HZ_SM_MODELISO2022CN_SM_MODELISO2022JP_SM_MODELISO2022KR_SM_MODELc                       s   e Zd ZdZejfedd fddZdd fddZee	e
 dd	d
Zee	e
 dddZedddZeeef edddZ  ZS )EscCharSetProberz
    This CharSetProber uses a "code scheme" approach for detecting encodings,
    whereby easily recognizable escape or shift sequences are relied on to
    identify these encodings.
    N)lang_filterreturnc                    s   t  j|d g | _| jtj@ r@| jtt | jtt	 | jtj
@ r\| jtt | jtj@ rx| jtt d| _d | _d | _tj| _|   d S )N)r   r   )super__init__	coding_smr   r   CHINESE_SIMPLIFIEDappendr   r
   r   JAPANESEr   KOREANr   active_sm_count_detected_charset_detected_languager	   	DETECTING_statereset)selfr   	__class__ </tmp/pip-build-0we0fmvo/pip/pip/_vendor/chardet/escprober.pyr   0   s    zEscCharSetProber.__init__)r   c                    s@   t    | jD ]}d|_|  qt| j| _d | _d | _d S )NT)r   r   r   activelenr   r   r   )r   r   r   r!   r"   r   @   s    


zEscCharSetProber.resetc                 C   s   | j S Nr   r   r!   r!   r"   charset_nameI   s    zEscCharSetProber.charset_namec                 C   s   | j S r%   )r   r'   r!   r!   r"   languageM   s    zEscCharSetProber.languagec                 C   s   | j r
dS dS )NgGz?g        r&   r'   r!   r!   r"   get_confidenceQ   s    zEscCharSetProber.get_confidence)byte_strr   c                 C   s   |D ]}| j D ]}|jsq||}|tjkrdd|_|  jd8  _| jdkrtj| _| j	    S q|tj
krtj| _| | _|j| _| j	    S qq| j	S )NFr   r   )r   r#   
next_stater   ERRORr   r	   NOT_MEr   stateITS_MEFOUND_ITget_coding_state_machiner   r)   r   )r   r+   cr   coding_stater!   r!   r"   feedT   s"    





zEscCharSetProber.feed)__name__
__module____qualname____doc__r   NONEr   r   propertyr   strr(   r)   floatr*   r   bytes	bytearrayr	   r5   __classcell__r!   r!   r   r"   r   )   s   	r   N)typingr   r   charsetproberr   codingstatemachiner   enumsr   r   r	   escsmr
   r   r   r   r   r!   r!   r!   r"   <module>   s
   