
    `it1                    V   % S SK Jr  S SKrS SKrS SKrS SKJr  S SKJr  S SK	J
r
  S SKJr  S SKJr  S SKJr  S S	KJr  S
SKJrJrJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$  \" \S9S2S j5       r%\" \S9S3S j5       r&\" \S9S4S j5       r'\(" S \RR                  " 5        5       5      r*S\+S'   \* V s/ s H  o S    PM	     sn r,S\+S'   \" \S9S5S j5       r-\" \S9S3S j5       r.\" \S9S3S j5       r/\" \S9S3S j5       r0\" \S9S3S j5       r1\" \S9S3S j5       r2\" \S9S3S j5       r3\" \S9S3S j5       r4\" \S9S3S j5       r5\" \S9S3S j5       r6\" \S9S3S j5       r7\" \S9S3S  j5       r8\" \S9S3S! j5       r9\" \S9S3S" j5       r:\" \S9S3S# j5       r;\" \<" \5      S9S6S$ j5       r=\" \S9S3S% j5       r>S7S8S& jjr?\" S'S9S9S( j5       r@S:S) jrAS;S* jrBS<S=S+ jjrCS>S, jrDS?S- jrES.\R                  S/4       S@S0 jjrG SA                   SBS1 jjrHgs  sn f )C    )annotationsN)bisect_right)IncrementalDecoder)aliases)	lru_cache)findall)	Generator)MultibyteIncrementalDecoder   )ENCODING_MARKSIANA_SUPPORTED_SIMILARRE_POSSIBLE_ENCODING_INDICATIONUNICODE_RANGES_COMBINEDUNICODE_SECONDARY_RANGE_KEYWORDUTF8_MAXIMAL_ALLOCATIONCOMMON_CJK_CHARACTERS_LATIN_CJK_HANGUL	_KATAKANA	_HIRAGANA_THAI_ARABIC_ARABIC_ISOLATED_FORM_ACCENT_KEYWORDS_ACCENTUATED)maxsizec                    [         R                  " U 5      nSnSU;   a	  U[        -  nSU;   a	  U[        -  nSU;   a	  U[
        -  nSU;   a	  U[        -  nSU;   a	  U[        -  nSU;   a	  U[        -  nSU;   a  U[        -  nS	U;   a	  U[        -  n[         H  nX1;   d  M
  U[        -  n  U$    U$ ! [         a     gf = f)
zRCompute all name-based classification flags with a single unicodedata.name() call.r   LATINCJKHANGULKATAKANAHIRAGANATHAIARABICzISOLATED FORM)unicodedataname
ValueErrorr   r   r   r   r   r   r   r   r   r   )	characterdescflagskws       VC:\Users\13-19\Desktop\python_web\travel\Lib\site-packages\charset_normalizer/utils.py_character_flagsr.   &   s    $$Y/ E$}4TT~4d"**E:\!EL 
 L7  s   B2 2
B?>B?c                8    [        [        U 5      [        -  5      $ N)boolr.   r   r)   s    r-   is_accentuatedr3   I   s     +l:;;    c                    [         R                  " U 5      nU(       d  U $ UR                  S5      n[        [	        US   S5      5      $ )N r      )r&   decompositionsplitchrint)r)   
decomposedcodess      r-   remove_accentr>   N   sA    !//	:J!'',Es58R !!r4   c              #  X   #    U  H   u  pUR                   UR                  U4v   M"     g 7fr0   )startstop).0r'   	ord_ranges      r-   	<genexpr>rD   [   s(      <: __innd+:s   (*zlist[tuple[int, int, str]]_UNICODE_RANGES_SORTEDz	list[int]_UNICODE_RANGE_STARTSc                r    [        U 5      n[        [        U5      S-
  nUS:  a  [        U   u  p4nX:  a  U$ g)zC
Retrieve the Unicode range official name from a single character.
r   r   N)ordr   rF   rE   )r)   character_ordidxr@   rA   r'   s         r-   unicode_rangerK   b   sE    
 YM ,m
<q
@C
ax237TKr4   c                8    [        [        U 5      [        -  5      $ r0   )r1   r.   r   r2   s    r-   is_latinrM   s   s     +f455r4   c                d    [         R                  " U 5      nSU;   a  g[        U 5      nUc  gSU;   $ )NPTFPunctuationr&   categoryrK   r)   character_categorycharacter_ranges      r-   is_punctuationrV   x   s=    )229=
  "/	":OO++r4   c                    [         R                  " U 5      nSU;   d  SU;   a  g[        U 5      nUc  gSU;   =(       a    US:g  $ )NSNTFFormsLorQ   rS   s      r-   	is_symbolr\      sP    )229=
  C+=$="/	":Oo%D*<*DDr4   c                B    [        U 5      nUc  gSU;   =(       d    SU;   $ )NF	EmoticonsPictographs)rK   )r)   rU   s     r-   is_emoticonr`      s*    "/	":O/)M]o-MMr4   c                    U R                  5       (       d  U S;   a  g[        R                  " U 5      nSU;   =(       d    US;   $ )N>   +<>   ｜TZ>   PcPdPo)isspacer&   rR   )r)   rT   s     r-   is_separatorrk      sE    i+AA)229=$$P(:>P(PPr4   c                D    U R                  5       U R                  5       :g  $ r0   )islowerisupperr2   s    r-   is_case_variablero      s    )"3"3"555r4   c                8    [        [        U 5      [        -  5      $ r0   )r1   r.   r   r2   s    r-   is_cjkrq      s     +d233r4   c                8    [        [        U 5      [        -  5      $ r0   )r1   r.   r   r2   s    r-   is_hiraganars           +i788r4   c                8    [        [        U 5      [        -  5      $ r0   )r1   r.   r   r2   s    r-   is_katakanarv      rt   r4   c                8    [        [        U 5      [        -  5      $ r0   )r1   r.   r   r2   s    r-   	is_hangulrx           +g566r4   c                8    [        [        U 5      [        -  5      $ r0   )r1   r.   r   r2   s    r-   is_thair{      s     +e344r4   c                8    [        [        U 5      [        -  5      $ r0   )r1   r.   r   r2   s    r-   	is_arabicr}      ry   r4   c                8    [        [        U 5      [        -  5      $ r0   )r1   r.   r   r2   s    r-   is_arabic_isolated_formr      s     +.CCDDr4   c                    U [         ;  $ r0   )r   r2   s    r-   is_cjk_uncommonr      s    111r4   c                6   ^  [        U 4S j[         5       5      $ )Nc              3  ,   >#    U  H	  oT;   v   M     g 7fr0    )rB   keyword
range_names     r-   rD   -is_unicode_range_secondary.<locals>.<genexpr>   s     T4S*$4Ss   )anyr   )r   s   `r-   is_unicode_range_secondaryr      s    T4STTTr4   c                    U R                  5       SL =(       a*    U R                  5       SL =(       a    U S:g  =(       a    U S:g  $ )NFu   ﻿)rj   isprintabler2   s    r-   is_unprintabler      sL     	u$ 	"!!#u,	"	" !	r4   c           	        [        U [        [        45      (       d  [        e[	        U 5      n[        [        U S[        X!5       R                  SSS95      n[	        U5      S:X  a  gU HW  nUR                  5       R                  SS5      n[        R                  " 5        H  u  pVXT:X  a  Us  s  $ Xd:X  d  M  Us  s  $    MY     g)zO
Extract using ASCII-only decoder any specified encoding in the first n-bytes.
Nasciiignoreerrorsr   -_)
isinstancebytes	bytearray	TypeErrorlenr   r   mindecodelowerreplacer   items)sequencesearch_zoneseq_lenresultsspecified_encodingencoding_aliasencoding_ianas          r-   any_specified_encodingr      s     h	 233x=G ',3w,-44WX4NG
 7|q%/557??SI
 .5]]_)N3$$2$$	 .= & r4      c                |    U S;   =(       d1    [        [        R                  " SU  35      R                  [        5      $ )zI
Verify is a specific encoding is a multi byte one based on it IANA name
>	   utf_7utf_8utf_16utf_32	utf_16_be	utf_16_le	utf_32_be	utf_32_le	utf_8_sig
encodings.)
issubclass	importlibimport_moduler   r
   )r'   s    r-   is_multi_byte_encodingr     sC    
  
 
  
*TF 34GG#
r4   c                    [          HJ  n[         U   n[        U[        5      (       a  U/nU H   nU R                  U5      (       d  M  X4s  s  $    ML     g)z1
Identify and extract SIG/BOM in given sequence.
)Nr4   )r   r   r   
startswith)r   iana_encodingmarksmarks       r-   identify_sig_or_bomr     sU    
 (%3M%BeU##GED""4(($**  ( r4   c                    U S;  $ )N>   r   r   r   )r   s    r-   should_strip_sig_or_bomr   .  s     444r4   c                    U R                  5       R                  SS5      n [        R                  " 5        H  u  p#XU4;   d  M  Us  $    U(       a  [	        SU  S35      eU $ )zIReturns the Python normalized encoding name (Not the IANA official name).r   r   zUnable to retrieve IANA for '')r   r   r   r   r(   )cp_namestrictr   r   s       r-   	iana_namer   2  s_    mmo%%c3/G
 *1%}55   *9 8	CDDNr4   c                   [        U 5      (       d  [        U5      (       a  g[        R                  " SU  35      R                  n[        R                  " SU 35      R                  nU" SS9nU" SS9nSn[	        S5       H:  n[        U/5      nUR                  U5      UR                  U5      :X  d  M5  US-  nM<     US-  $ )Ng        r   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	            r-   cp_similarityr   C  s    k**.D[.Q.Q''*[M(BCVVI''*[M(BCVVI(9D(9D!"3Z$aSz;;}%])CC!Q&! 
 !3&&r4   c                :    U [         ;   =(       a    U[         U    ;   $ )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     r-   is_cp_similarr   W  s%     	-- 	?1+>>r4   charset_normalizerz)%(asctime)s | %(levelname)s | %(message)sc                    [         R                  " U 5      nUR                  U5        [         R                  " 5       nUR	                  [         R
                  " U5      5        UR                  U5        g r0   )logging	getLoggersetLevelStreamHandlersetFormatter	Formatter
addHandler)r'   levelformat_stringloggerhandlers        r-   set_logging_handlerr   b  sU    
 t$F
OOE##%G**=9:
gr4   c	              #    #    U(       a"  USL a  U H  n	XX-    n
U
(       d    g U
v   M     g U H  n	X-   nU[        U 5      S-   :  a  M  X	X-    nU(       a	  USL a  Xl-   nUR                  UU(       a  SOSS9n
U(       ag  U	S:  aa  [        US5      nU(       aN  U
S U U;  aE  [        XS-
  S	5       H2  nXU nU(       a	  USL a  Xl-   nUR                  USS9n
U
S U U;   d  M2    O   U
v   M     g 7f)
NF   r   r   r   r   r7      )r   r   r   r   )	sequencesr   offsets
chunk_sizebom_or_sig_availablestrip_sig_or_bomsig_payloadis_multi_byte_decoderdecoded_payloadr   chunk	chunk_endcut_sequencechunk_partial_size_chkjs                  r-   cut_sequence_chunksr   o  s)     0E9A#7EK	  AI3y>A--$8L#(8E(A*9 ''#8xh ( E %Q.1*b.A& $556oM"1!eR0'09'=/4D4M+6+EL , 3 3M( 3 S !8"89_L! 1 KG s   CC/"C/)r)   strreturnr;   )r)   r   r   r1   )r)   r   r   r   )r)   r   r   
str | None)r   r   r   r1   )i    )r   r   r   r;   r   r   )r'   r   r   r1   )r   r   r   ztuple[str | None, bytes])r   r   r   r1   )T)r   r   r   r1   r   r   )r   r   r   r   r   float)r   r   r   r   r   r1   )r'   r   r   r;   r   r   r   Noner0   )r   r   r   r   r   r   r   r;   r   r1   r   r1   r   r   r   r1   r   r   r   zGenerator[str, None, None])I
__future__r   r   r   r&   bisectr   codecsr   encodings.aliasesr   	functoolsr   rer   typingr	   _multibytecodecr
   constantr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r.   r3   r>   sortedr   rE   __annotations__rF   rK   rM   rV   r\   r`   rk   ro   rq   rs   rv   rx   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   INFOr   r   )es   0r-   <module>r     s   "     % %       * *+ ,D *+< ,< *+" ," 6< <288:< 6 2  3I#I2HQaD2H#I y I *+ ,  *+6 ,6 *+, ,, *+E ,E *+N ,N *+Q ,Q *+6 ,6 *+4 ,4 *+9 ,9 *+9 ,9 *+7 ,7 *+5 ,5 *+7 ,7 *+E ,E *+2 ,2 3./0U 1U *+ ,@ 3 ($5"'( %D



 
 
	
, #'555 5 	5
 5 5 5  5  5  5a $Js   5H&