U
    yc,                     @   sL   d dl Z d dlZd dlmZmZ ddlmZmZ edZ	G dd dZ
dS )    N)OptionalUnion   )LanguageFilterProbingStates%   [a-zA-Z]*[-]+[a-zA-Z]*[^a-zA-Z-]?c                   @   s   e Zd ZdZejfeddddZddddZee	e
 dd	d
Zee	e
 dddZeeef edddZeedddZedddZeeeef edddZeeeef edddZeeeef edddZdS )CharSetProbergffffff?N)lang_filterreturnc                 C   s$   t j| _d| _|| _tt| _d S )NT)	r   	DETECTING_stateactiver   logging	getLogger__name__logger)selfr    r   @/tmp/pip-build-0we0fmvo/pip/pip/_vendor/chardet/charsetprober.py__init__,   s    zCharSetProber.__init__)r	   c                 C   s   t j| _d S N)r   r
   r   r   r   r   r   reset2   s    zCharSetProber.resetc                 C   s   d S r   r   r   r   r   r   charset_name5   s    zCharSetProber.charset_namec                 C   s   t d S r   NotImplementedErrorr   r   r   r   language9   s    zCharSetProber.language)byte_strr	   c                 C   s   t d S r   r   )r   r   r   r   r   feed=   s    zCharSetProber.feedc                 C   s   | j S r   )r   r   r   r   r   state@   s    zCharSetProber.statec                 C   s   dS )Ng        r   r   r   r   r   get_confidenceD   s    zCharSetProber.get_confidence)bufr	   c                 C   s   t dd| } | S )Ns   ([ -])+    )resub)r    r   r   r   filter_high_byte_onlyG   s    z#CharSetProber.filter_high_byte_onlyc                 C   sZ   t  }t| }|D ]@}||dd  |dd }| sJ|dk rJd}|| q|S )u7  
        We define three types of bytes:
        alphabet: english alphabets [a-zA-Z]
        international: international characters [-ÿ]
        marker: everything else [^a-zA-Z-ÿ]
        The input buffer can be thought to contain a series of words delimited
        by markers. This function works to filter all words that contain at
        least one international character. All contiguous sequences of markers
        are replaced by a single space ascii character.
        This filter applies to all scripts which do not use English characters.
        N   r!   )	bytearrayINTERNATIONAL_WORDS_PATTERNfindallextendisalpha)r    filteredwordsword	last_charr   r   r   filter_international_wordsL   s    
z(CharSetProber.filter_international_wordsc                 C   s   t  }d}d}t| d} t| D ]R\}}|dkrB|d }d}q$|dkr$||krr|sr|| ||  |d d}q$|s|| |d	  |S )
a[  
        Returns a copy of ``buf`` that retains only the sequences of English
        alphabet and high byte characters that are not between <> characters.
        This filter can be applied to all scripts which contain both English
        characters and extended ASCII characters, but is currently only used by
        ``Latin1Prober``.
        Fr   c   >r      <r!   TN)r'   
memoryviewcast	enumerater*   )r    r,   in_tagprevcurrbuf_charr   r   r   remove_xml_tagsn   s     	
zCharSetProber.remove_xml_tags)r   
__module____qualname__SHORTCUT_THRESHOLDr   NONEr   r   propertyr   strr   r   r   bytesr'   r   r   r   floatr   staticmethodr$   r0   r;   r   r   r   r   r   (   s"   !r   )r   r"   typingr   r   enumsr   r   compiler(   r   r   r   r   r   <module>   s   