o
    nkj*7                     @  s8  U d dl mZ d dlZd dlZd dl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mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% dsddZ&dtddZ'duddZ(e)dd e* D Z+de,d< dd e+D Z-de,d< dvddZ.dtdd Z/dtd!d"Z0dtd#d$Z1dtd%d&Z2dtd'd(Z3dtd)d*Z4dtd+d,Z5dtd-d.Z6dtd/d0Z7dtd1d2Z8dtd3d4Z9dtd5d6Z:dtd7d8Z;dtd9d:Z<dwd<d=Z=dtd>d?Z>	@dxdydDdEZ?e
ddFdzdHdIZ@d{dKdLZAd|dNdOZBd}d~dSdTZCddXdYZDddZd[ZEd\ejFd]fddadbZG		cdddqdrZHdS )    )annotationsN)bisect_right)IncrementalDecoder)	lru_cache)	Generator   )ENCODING_MARKSIANA_SUPPORTED_SIMILARRE_POSSIBLE_ENCODING_INDICATIONUNICODE_RANGES_COMBINED_SECONDARY_RANGE_NAMESCOMMON_CJK_CHARACTERS_LATIN_CJK_HANGUL	_KATAKANA	_HIRAGANA_HALFWIDTH_KATAKANA_THAI_ARABIC_ARABIC_ISOLATED_FORM	_LIGATURE_SUPERSCRIPT_SENTENCE_OPEN_PUNCTUATION_ACCENT_KEYWORDS_ACCENTUATED_KNOWN_MB_DECODERS_KNOWN_MB_CLASSES_IANA_NAMES_MULTIBYTE_SEARCH_RADIUS	characterstrreturnintc                 C  s  zt | }W n
 ty   Y dS w d}d|v r|tO }d|v r$|tO }d|v r,|tO }d|v r<|tO }d|v r<|tO }d|v rD|tO }d|v rL|t	O }d	|v r\|t
O }d
|v r\|tO }d|v se|dri|tO }d|v rq|tO }|dv ry|tO }tD ]}||v r|tO } |S q{|S )zRCompute all name-based classification flags with a single unicodedata.name() call.r   LATINCJKHANGULKATAKANA	HALFWIDTHHIRAGANATHAIARABICzISOLATED FORMLIGATUREz	LETTER AESUPERSCRIPT>   INVERTED QUESTION MARKINVERTED EXCLAMATION MARK)unicodedataname
ValueErrorr   r   r   r   r   r   r   r   r   endswithr   r   r   r   r   )r    descflagskw r7   V/home/djax/ivt_ai_plugin/venv/lib/python3.10/site-packages/charset_normalizer/utils.py_character_flags'   sJ   r9   boolc                 C     t t| t@ S N)r:   r9   r   r    r7   r7   r8   is_accentuatedQ      r>   c                 C  s.   t | }|s	| S |d}tt|d dS )N r      )r0   decompositionsplitchrr#   )r    
decomposedcodesr7   r7   r8   remove_accentU   s
   

rG   c                 c  s"    | ]\}}|j |j|fV  qd S r<   )startstop).0r1   	ord_ranger7   r7   r8   	<genexpr>a   s
    
rL   zlist[tuple[int, int, str]]_UNICODE_RANGES_SORTEDc                 C  s   g | ]}|d  qS )r   r7   )rJ   er7   r7   r8   
<listcomp>e   s    rO   z	list[int]_UNICODE_RANGE_STARTS
str | Nonec                 C  sT   t | }|dk r
dS |dk rdS tt|d }|dkr(t| \}}}||k r(|S dS )zK
    Retrieve the Unicode range official name from a single character.
        zControl character   zBasic Latinr   r   N)ordr   rP   rM   )r    character_ordidxrH   rI   r1   r7   r7   r8   unicode_rangeh   s   rW   c                 C  r;   r<   )r:   r9   r   r=   r7   r7   r8   is_latin}   r?   rX   c                 C  s2   t | }d|v rdS t| }|d u rdS d|v S )NPTFPunctuationr0   categoryrW   r    character_categorycharacter_ranger7   r7   r8   is_punctuation   s   
r`   c                 C  sB   t | }d|v sd|v rdS t| }|d u rdS d|v o |dkS )NSNTFFormsLor[   r]   r7   r7   r8   	is_symbol   s   
re   c                 C  s$   t | }|d u r
dS d|v pd|v S )NF	EmoticonsPictographs)rW   )r    r_   r7   r7   r8   is_emoticon   s   rh   c                 C  s.   |   s| dv r
dS t| }d|v p|dv S )N>      ｜+<>TZ>   PcPdPo)isspacer0   r\   )r    r^   r7   r7   r8   is_separator   s   
rr   c                 C  s   |   |  kS r<   )islowerisupperr=   r7   r7   r8   is_case_variable   r?   ru   c                 C  r;   r<   )r:   r9   r   r=   r7   r7   r8   is_cjk   r?   rv   c                 C  r;   r<   )r:   r9   r   r=   r7   r7   r8   is_hiragana   r?   rw   c                 C  r;   r<   )r:   r9   r   r=   r7   r7   r8   is_katakana   r?   rx   c                 C  r;   r<   )r:   r9   r   r=   r7   r7   r8   	is_hangul   r?   ry   c                 C  r;   r<   )r:   r9   r   r=   r7   r7   r8   is_thai   r?   rz   c                 C  r;   r<   )r:   r9   r   r=   r7   r7   r8   	is_arabic   r?   r{   c                 C  r;   r<   )r:   r9   r   r=   r7   r7   r8   is_arabic_isolated_form   r?   r|   c                 C  s   | t vS r<   )r   r=   r7   r7   r8   is_cjk_uncommon      r}   
range_namec                 C  s   | t v S r<   )r   )r   r7   r7   r8   is_unicode_range_secondary   r~   r   c                 C  s$   |    o|   o| dko| dkS )Nu   ﻿)rq   isprintabler=   r7   r7   r8   is_unprintable   s   
r       sequencebytes | bytearraysearch_zonec           	      C  s   t | ttfs	tt| }| dt|| }| }d|vr$d|vr$dS |jddd}t	|D ]}|
d dd	}t|}|durJ|  S q0dS )
zW
    Extract using ASCII-only decoder any specified encoding in the first n-bytes.
    Ns   codings   charsetasciiignoreerrorsr   -_)
isinstancebytes	bytearray	TypeErrorlenminlowerdecoder
   finditergroupreplacer   get)	r   r   seq_lensearch_byteslowered_bytesdecoded_zonematchspecified_encodingencoding_ianar7   r7   r8   any_specified_encoding   s   
r   )maxsizer1   c                 C  sJ   | t v rdS tD ]}zt||  W  dS  tttfy"   Y qw dS )zQ
    Verify is a specific encoding is a multi byte one based on it IANA name
    TF)r   r   	importlibimport_modulegetcodecImportErrorAttributeErrorLookupError)r1   providerr7   r7   r8   is_multi_byte_encoding   s   	r   tuple[str | None, bytes]c                 C  sJ   t D ] }t | }t|tr|g}|D ]}| |r!||f    S qqdS )z9
    Identify and extract SIG/BOM in given sequence.
    )N    )r   r   r   
startswith)r   iana_encodingmarksmarkr7   r7   r8   identify_sig_or_bom  s   

r   r   c                 C  s   | dvS )N>   utf_16utf_32r7   )r   r7   r7   r8   should_strip_sig_or_bom(  r~   r   Tcp_namestrictc                 C  s>   |   dd} t| }|dur|S |rtd|  d| S )zIReturns the Python normalized encoding name (Not the IANA official name).r   r   NzUnable to retrieve IANA for '')r   r   r   r   r2   )r   r   r   r7   r7   r8   	iana_name,  s   
r   iana_name_aiana_name_bfloatc           	      C  s   t | st |r
dS td|  j}td| j}|dd}|dd}d}tdD ]}t|g}||||krA|d7 }q,|d S )Ng        z
encodings.r   r   r      r   )r   r   r   r   ranger   r   )	r   r   	decoder_a	decoder_bid_aid_bcharacter_match_countito_be_decodedr7   r7   r8   cp_similarity:  s   


r   c                 C  s   | t v o	|t |  v S )z
    Determine if two code page are at least 80% similar. IANA_SUPPORTED_SIMILAR dict was generated using
    the function cp_similarity.
    )r	   )r   r   r7   r7   r8   is_cp_similarN  s   
r   charset_normalizerz)%(asctime)s | %(levelname)s | %(message)slevelformat_stringNonec                 C  s:   t | }|| t  }|t | || d S r<   )logging	getLoggersetLevelStreamHandlersetFormatter	Formatter
addHandler)r1   r   r   loggerhandlerr7   r7   r8   set_logging_handlerY  s
   

r   F	sequencesr   offsetsr   
chunk_sizebom_or_sig_availablestrip_sig_or_bomsig_payloadr   is_multi_byte_decoderdecoded_payloaddeferred_decodingGenerator[str, None, None]c
                 c  s$   |r-| dr-t|}
t| }|D ]}||
 | }||||  }|s' d S |V  qd S |rH|sH|D ]}||||  }|sB d S |V  q3d S |	rp|sN| n| t|d  }|D ]}||||  }|sg d S t||V  qXd S |D ]}|| }|t| d krqr| |||  }|r|s|| }|j||rdndd}|r|dkrt|d}|d | }d}|rt|}
||
 t|  }td|t }t|
|t }||||dk}|r|s||vrt||d	 d
D ]"}| || }|r|s|| }|j|dd}|d | |v r nq|V  qrd S )Niso2022_   r   r   r   r   rA   F   )	r   r   r!   r   r   maxr   findr   )r   r   r   r   r   r   r   r   r   r   decoded_lengthsequence_lengthr   decoded_offsetchunk
base_bytescut_sequence	chunk_endchunk_partial_size_chkchunk_prefixfound_nearbyexpected_offsetsearch_start
search_endjr7   r7   r8   cut_sequence_chunksf  s   


r   )r    r!   r"   r#   )r    r!   r"   r:   )r    r!   r"   r!   )r    r!   r"   rQ   )r   r!   r"   r:   )r   )r   r   r   r#   r"   rQ   )r1   r!   r"   r:   )r   r   r"   r   )r   r!   r"   r:   )T)r   r!   r   r:   r"   r!   )r   r!   r   r!   r"   r   )r   r!   r   r!   r"   r:   )r1   r!   r   r#   r   r!   r"   r   )NF)r   r   r   r!   r   r   r   r#   r   r:   r   r:   r   r   r   r:   r   rQ   r   r:   r"   r   )I
__future__r   r   r   r0   bisectr   codecsr   	functoolsr   typingr   constantr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r9   r>   rG   sorteditemsrM   __annotations__rP   rW   rX   r`   re   rh   rr   ru   rv   rw   rx   ry   rz   r{   r|   r}   r   r   r   r   r   r   r   r   r   INFOr   r   r7   r7   r7   r8   <module>   sb    h

*






	
	













