
    |j*7                       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% d.d	Z&d/d
Z'd0dZ( e)d  ejT                         D              Z+de,d<   e+D  cg c]  } | d    	 c} Z-de,d<   d1dZ.d/dZ/d/dZ0d/dZ1d/dZ2d/dZ3d/dZ4d/dZ5d/dZ6d/dZ7d/dZ8d/dZ9d/dZ:d/dZ;d/dZ<d2d Z=d/d!Z>	 d3	 	 	 	 	 d4d"Z? e
d#      d5d$       Z@d6d%ZAd7d&ZBd8d9d'ZCd:d(ZDd;d)ZEd*ej                  d+f	 	 	 	 	 	 	 d<d,ZG	 	 d=	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d>d-ZHyc c} w )?    )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_RADIUSc                   	 t        j                  |       }d}d|v r	|t        z  }d|v r	|t        z  }d|v r	|t
        z  }d|v r|t        z  }d|v r	|t        z  }d|v r	|t        z  }d|v r	|t        z  }d	|v r|t        z  }d
|v r	|t        z  }d|v s|j                  d      r	|t        z  }d|v r	|t        z  }|dv r	|t        z  }t         D ]  }||v s|t"        z  } |S  |S # t        $ r Y yw xY w)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   )	characterdescflagskws       P/opt/daily-market/.venv/lib/python3.12/site-packages/charset_normalizer/utils.py_character_flagsr7   '   sC   $$Y/ E$}4T$((ET~4d"**ETT]];7FF++ :\!EL
 LG  s   C# #	C/.C/c                8    t        t        |       t        z        S N)boolr7   r   r2   s    r6   is_accentuatedr<   Q   s     +l:;;    c                    t        j                  |       }|s| S |j                  d      }t        t	        |d   d            S )N r      )r.   decompositionsplitchrint)r2   
decomposedcodess      r6   remove_accentrG   U   sA    !//	:J!'',Es58R !!r=   c              #  T   K   | ]   \  }}|j                   |j                  |f " y wr9   )startstop).0r/   	ord_ranges      r6   	<genexpr>rM   a   s+      <i __innd+<s   &(zlist[tuple[int, int, str]]_UNICODE_RANGES_SORTEDz	list[int]_UNICODE_RANGE_STARTSc                    t        |       }|dk  ry|dk  ryt        t        |      dz
  }|dk\  rt        |   \  }}}||k  r|S y)zK
    Retrieve the Unicode range official name from a single character.
        zControl character   zBasic Latinr   r   N)ordr   rO   rN   )r2   character_ordidxrI   rJ   r/   s         r6   unicode_rangerV   h   s_     YMr"s ,m
<q
@C
ax237tT4Kr=   c                8    t        t        |       t        z        S r9   )r:   r7   r   r;   s    r6   is_latinrX   }   s     +f455r=   c                Z    t        j                  |       }d|v ryt        |       }|yd|v S )NPTFPunctuationr.   categoryrV   r2   character_categorycharacter_ranges      r6   is_punctuationra      s=    )229=
  "/	":OO++r=   c                p    t        j                  |       }d|v sd|v ryt        |       }|yd|v xr |dk7  S )NSNTFFormsLor\   r^   s      r6   	is_symbolrg      sP    )229=
  C+=$="/	":Oo%D*<*DDr=   c                2    t        |       }|yd|v xs d|v S )NF	EmoticonsPictographs)rV   )r2   r`   s     r6   is_emoticonrk      s*    "/	":O/)M]o-MMr=   c                j    | j                         s| dv ryt        j                  |       }d|v xs |dv S )N>      ｜+<>TZ>   PcPdPo)isspacer.   r]   )r2   r_   s     r6   is_separatorrv      sB    i+AA)229=$$P(:>P(PPr=   c                D    | j                         | j                         k7  S r9   )islowerisupperr;   s    r6   is_case_variablerz      s    )"3"3"555r=   c                8    t        t        |       t        z        S r9   )r:   r7   r   r;   s    r6   is_cjkr|      s     +d233r=   c                8    t        t        |       t        z        S r9   )r:   r7   r   r;   s    r6   is_hiraganar~           +i788r=   c                8    t        t        |       t        z        S r9   )r:   r7   r   r;   s    r6   is_katakanar      r   r=   c                8    t        t        |       t        z        S r9   )r:   r7   r   r;   s    r6   	is_hangulr           +g566r=   c                8    t        t        |       t        z        S r9   )r:   r7   r   r;   s    r6   is_thair      s     +e344r=   c                8    t        t        |       t        z        S r9   )r:   r7   r   r;   s    r6   	is_arabicr      r   r=   c                8    t        t        |       t        z        S r9   )r:   r7   r   r;   s    r6   is_arabic_isolated_formr      s     +.CCDDr=   c                    | t         vS r9   )r   r;   s    r6   is_cjk_uncommonr      s    111r=   c                    | t         v S r9   )r   )
range_names    r6   is_unicode_range_secondaryr      s    ///r=   c                f    | j                          xr | j                          xr | dk7  xr | dk7  S )Nu   ﻿)ru   isprintabler;   s    r6   is_unprintabler      sF     	"%%''	"	" !	r=   c                   t        | t        t        f      st        t	        |       }| dt        ||       }|j                         }d|vrd|vry|j                  dd      }t        j                  |      D ]L  }|j                  d      j                         j                  dd	      }t        j                  |      }|J|c S  y)
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)	sequencesearch_zoneseq_lensearch_byteslowered_bytesdecoded_zonematchspecified_encodingencoding_ianas	            r6   any_specified_encodingr      s     h	 23x=G 7c';78L &&(M%*M*I$++GH+EL099,G !"[[^113;;CE#(:;$  	! r=   )maxsizec                    | t         v ryt        D ](  }	 t        j                  |      j	                  |         y y# t
        t        t        f$ r Y Bw xY w)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)r/   providers     r6   is_multi_byte_encodingr      sd    
 !! & 	##H-66t<  	 ^[9 		s   $<AAc                    t         D ]>  }t         |   }t        |t              r|g}|D ]  }| j                  |      s||fc c S  @ y)z9
    Identify and extract SIG/BOM in given sequence.
    )Nr=   )r	   r   r   
startswith)r   iana_encodingmarksmarks       r6   identify_sig_or_bomr     s[    
 ( +%3M%BeU#GE 	+D""4($d**	++ r=   c                
    | dvS )N>   utf_16utf_32 )r   s    r6   should_strip_sig_or_bomr   (  s     444r=   c                    | j                         j                  dd      } t        j                  |       }||S |rt	        d|  d      | S )zIReturns the Python normalized encoding name (Not the IANA official name).r   r   zUnable to retrieve IANA for '')r   r   r   r   r0   )cp_namestrictr   s      r6   	iana_namer   ,  sQ    mmo%%c3/GOOG,M 8	CDDNr=   c                t   t        |       st        |      ryt        j                  d|        j                  }t        j                  d|       j                  } |d      } |d      }d}t	        d      D ]7  }t        |g      }|j                  |      |j                  |      k(  s3|dz  }9 |dz  S )Ng        z
encodings.r   r   r      r   )r   r   r   r   ranger   r   )	iana_name_aiana_name_b	decoder_a	decoder_bid_aid_bcharacter_match_countito_be_decodeds	            r6   cp_similarityr   :  s    k*.D[.Q''*[M(BCVVI''*[M(BCVVI(9D(9D!"3Z '$aSz;;}%])CC!Q&!'
 !3&&r=   c                ,    | t         v xr |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   s     r6   is_cp_similarr   N  s%     	-- 	?1+>>r=   charset_normalizerz)%(asctime)s | %(levelname)s | %(message)sc                    t        j                  |       }|j                  |       t        j                         }|j	                  t        j
                  |             |j                  |       y r9   )logging	getLoggersetLevelStreamHandlersetFormatter	Formatter
addHandler)r/   levelformat_stringloggerhandlers        r6   set_logging_handlerr   Y  sU    
 t$F
OOE##%G**=9:
gr=   c
              #  P  K   |rG|j                  d      r6t        |      }
t        |       }|D ]  }||
z  |z  }||||z    }|s y |  y |r|s|D ]  }||||z    }|s y |  y |	r4|s| n| t        |      d  }|D ]  }||||z    }|s y t        ||        y |D ]  }||z   }|t        |       dz   kD  r| |||z    }|r|s||z   }|j                  ||rdnd      }|r|dkD  rt	        |d      }|d | }d}|rXt        |      }
||
z  t        |       z  }t        d|t        z
        }t	        |
|t        z         }|j                  |||      dk\  }|rE|sC||vr?t        ||d	z
  d
      D ],  }| || }|r|s||z   }|j                  |d      }|d | |v s, n |  y w)Niso2022_   r   r   r   r   r@   F   )	r   r   strr   r   maxr    findr   )	sequencesr   offsets
chunk_sizebom_or_sig_availablestrip_sig_or_bomsig_payloadis_multi_byte_decoderdecoded_payloaddeferred_decoding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js                            r6   cut_sequence_chunksr  f  sd     =33J?_-i. 	A/?BN#N^j5PQEK	 
!6 	A#AJ7EK		
 
 .I9S=M=O3P 	  	3A%a!j.9LlM22		3  2	AJI3y>A--$QZ8L#,<*\9 ''#8xh ( E %Q.1*b.A&$%<&<=$"%(%9N&'.&8C	N&JO#&q/<T*T#UL!$&:R(R"J (,,\<T ! $($O;"1a!eR0 	"'09'=/8H+6+EL , 3 3M( 3 S !8"89_L!	" Ke2	s   FF&F&)r2   r   returnrD   )r2   r   r  r:   )r2   r   r  r   )r2   r   r  
str | None)r   r   r  r:   )i    )r   bytes | bytearrayr   rD   r  r	  )r/   r   r  r:   )r   r
  r  ztuple[str | None, bytes])r   r   r  r:   )T)r   r   r   r:   r  r   )r   r   r   r   r  float)r   r   r   r   r  r:   )r/   r   r   rD   r   r   r  None)NF)r   r
  r   r   r   r   r   rD   r   r:   r   r:   r   r   r   r:   r   r	  r   r:   r  zGenerator[str, None, None])I
__future__r   r   r   r.   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    r7   r<   rG   sorteditemsrN   __annotations__rO   rV   rX   ra   rg   rk   rv   rz   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   INFOr   r  )es   0r6   <module>r     s
   "     %        8'T<" 6< <8288:< 6 2  3I#IQAaD#I y I*6,ENQ6499757E20 59.18 4 0$5'( %D



 
 
	
, #'#^ ^^ ^ 	^
 ^ ^ ^  ^  ^ ^  ^C $Js   E