
    ^j4                       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 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" d1dZ#d2dZ$ ee      d3d       Z% e&d  ejN                         D              Z(de)d<   e(D  cg c]  } | d    	 c} Z*de)d<   d4dZ+d2dZ,d2dZ-d2dZ.d2dZ/d2dZ0 ee      d2d       Z1 ee      d2d       Z2 ee      d2d       Z3 ee      d2d       Z4 ee      d2d       Z5 ee      d2d       Z6 ee      d2d        Z7 ee      d2d!       Z8 ee      d2d"       Z9d5d#Z: ee      d2d$       Z;	 d6	 	 	 	 	 d7d%Z< ed&      d8d'       Z=d9d(Z>d:d)Z?d;d<d*Z@d=d+ZAd>d,ZBd-ej                  d.f	 	 	 	 	 	 	 d?d/ZD	 	 d@	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dAd0ZEyc c} w )B    )annotationsN)bisect_right)IncrementalDecoder)aliases)	lru_cache)findall)	Generator   )ENCODING_MARKSIANA_SUPPORTED_SIMILARRE_POSSIBLE_ENCODING_INDICATIONUNICODE_RANGES_COMBINED_SECONDARY_RANGE_NAMESUTF8_MAXIMAL_ALLOCATIONCOMMON_CJK_CHARACTERS_LATIN_CJK_HANGUL	_KATAKANA	_HIRAGANA_THAI_ARABIC_ARABIC_ISOLATED_FORM_ACCENT_KEYWORDS_ACCENTUATEDc                Z   	 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  }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HIRAGANATHAIARABICzISOLATED FORM)unicodedataname
ValueErrorr   r   r   r   r   r   r   r   r   r   )	characterdescflagskws       Q/opt/ringagent/.cad-venv/lib/python3.12/site-packages/charset_normalizer/utils.py_character_flagsr,   "   s    $$Y/ E$}4TT~4d"**E :\!EL
 L7  s   B 	B*)B*c                8    t        t        |       t        z        S N)boolr,   r   r'   s    r+   is_accentuatedr1   D   s     +l:;;    )maxsizec                    t        j                  |       }|s| S |j                  d      }t        t	        |d   d            S )N r      )r$   decompositionsplitchrint)r'   
decomposedcodess      r+   remove_accentr=   H   sA    !//	:J!'',Es58R !!r2   c              #  T   K   | ]   \  }}|j                   |j                  |f " y wr.   )startstop).0r%   	ord_ranges      r+   	<genexpr>rC   U   s+      <i __innd+<s   &(zlist[tuple[int, int, str]]_UNICODE_RANGES_SORTEDz	list[int]_UNICODE_RANGE_STARTSc                r    t        |       }t        t        |      dz
  }|dk\  rt        |   \  }}}||k  r|S y)zK
    Retrieve the Unicode range official name from a single character.
    r
   r   N)ordr   rE   rD   )r'   character_ordidxr?   r@   r%   s         r+   unicode_rangerJ   \   sI     YM ,m
<q
@C
ax237tT4Kr2   c                8    t        t        |       t        z        S r.   )r/   r,   r   r0   s    r+   is_latinrL   l   s     +f455r2   c                Z    t        j                  |       }d|v ryt        |       }|yd|v S )NPTFPunctuationr$   categoryrJ   r'   character_categorycharacter_ranges      r+   is_punctuationrU   p   s=    )229=
  "/	":OO++r2   c                p    t        j                  |       }d|v sd|v ryt        |       }|yd|v xr |dk7  S )NSNTFFormsLorP   rR   s      r+   	is_symbolr[   ~   sP    )229=
  C+=$="/	":Oo%D*<*DDr2   c                2    t        |       }|yd|v xs d|v S )NF	EmoticonsPictographs)rJ   )r'   rT   s     r+   is_emoticonr_      s*    "/	":O/)M]o-MMr2   c                j    | j                         s| dv ryt        j                  |       }d|v xs |dv S )N>      ｜<>+TZ>   PcPdPo)isspacer$   rQ   )r'   rS   s     r+   is_separatorrj      sB    i+AA)229=$$P(:>P(PPr2   c                D    | j                         | j                         k7  S r.   )islowerisupperr0   s    r+   is_case_variablern      s    )"3"3"555r2   c                8    t        t        |       t        z        S r.   )r/   r,   r   r0   s    r+   is_cjkrp      s     +d233r2   c                8    t        t        |       t        z        S r.   )r/   r,   r   r0   s    r+   is_hiraganarr           +i788r2   c                8    t        t        |       t        z        S r.   )r/   r,   r   r0   s    r+   is_katakanaru      rs   r2   c                8    t        t        |       t        z        S r.   )r/   r,   r   r0   s    r+   	is_hangulrw           +g566r2   c                8    t        t        |       t        z        S r.   )r/   r,   r   r0   s    r+   is_thairz      s     +e344r2   c                8    t        t        |       t        z        S r.   )r/   r,   r   r0   s    r+   	is_arabicr|      rx   r2   c                8    t        t        |       t        z        S r.   )r/   r,   r   r0   s    r+   is_arabic_isolated_formr~      s     +.CCDDr2   c                    | t         vS r.   )r   r0   s    r+   is_cjk_uncommonr      s    111r2   c                    | t         v S r.   )r   )
range_names    r+   is_unicode_range_secondaryr      s    ///r2   c                f    | j                          xr | j                          xr | dk7  xr | dk7  S )Nu   ﻿)ri   isprintabler0   s    r+   is_unprintabler      sH      	"%%''	"	" !	r2   c                   t        | t        t        f      st        t	        |       }| dt        ||       j                  dd      }|j                         }d|vrd|vryt        t        |      }t	        |      dk(  ry|D ]T  }|j                         j                  dd	      }t        j                         D ]  \  }}||k(  r|c c S ||k(  s|c c S  V y)
zW
    Extract using ASCII-only decoder any specified encoding in the first n-bytes.
    Nasciiignoreerrorscodingcharsetr   -_)
isinstancebytes	bytearray	TypeErrorlenmindecodelowerr   r   replacer   items)	sequencesearch_zoneseq_lendecoded_zonelowered_zoneresultsspecified_encodingencoding_aliasencoding_ianas	            r+   any_specified_encodingr      s     h	 23x=G !<3w#<=DD E L
 %**,L|#	(E 'G
 7|q% 
%/557??SI
 .5]]_ 	%)NM!33$$ 22$$		%
% r2      c                    | dv ryd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
    >	   utf_7utf_8utf_16utf_32	utf_16_be	utf_16_le	utf_32_be	utf_32_le	utf_8_sigT)
_codecs_cn
_codecs_hk_codecs_iso2022
_codecs_jp
_codecs_kr
_codecs_twF)	importlibimport_modulegetcodecImportErrorAttributeErrorLookupError)r%   providers     r+   is_multi_byte_encodingr     sj    
  
 
  	##H-66t<  	 ^[9 		s   $4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.
    )Nr2   )r   r   r   
startswith)r   iana_encodingmarksmarks       r+   identify_sig_or_bomr   /  s[    
 ( +%3M%BeU#GE 	+D""4($d**	++ r2   c                
    | dvS )N>   r   r    )r   s    r+   should_strip_sig_or_bomr   A  s     444r2   c                    | j                         j                  dd      } t        j                         D ]  \  }}| ||fv s|c 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   r&   )cp_namestrictr   r   s       r+   	iana_namer   E  sh    mmo%%c3/G
 *1 !%~}55  ! 8	CDDNr2   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	            r+   cp_similarityr   V  s    k*.D[.Q''*[M(BCVVI''*[M(BCVVI(9D(9D!"3Z '$aSz;;}%])CC!Q&!'
 !3&&r2   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     r+   is_cp_similarr   j  s%     	-- 	?1+>>r2   charset_normalizerz)%(asctime)s | %(levelname)s | %(message)sc                    t        j                  |       }|j                  |       t        j                         }|j	                  t        j
                  |             |j                  |       y r.   )logging	getLoggersetLevelStreamHandlersetFormatter	Formatter
addHandler)r%   levelformat_stringloggerhandlers        r+   set_logging_handlerr   u  sU    
 t$F
OOE##%G**=9:
gr2   c
              #    K   |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      }|rY|
dkD  rTt        |d      }|rF|d | |vr?t	        |
|
dz
  d      D ],  }| || }|r|s||z   }|j                  |d      }|d | |v s, n |  y w)	N   r   r   r   r   r6      )r   strr   r   r   )	sequencesr   offsets
chunk_sizebom_or_sig_availablestrip_sig_or_bomsig_payloadis_multi_byte_decoderdecoded_payloaddeferred_decodingr   chunk
base_bytescut_sequence	chunk_endchunk_partial_size_chkjs                    r+   cut_sequence_chunksr     s     4 	A#AJ7EK		
 
 .I9S=M=O3P 	  	3A%a!j.9LlM22		3  #	AJI3y>A--$QZ8L#,<*\9 ''#8xh ( E %Q.1*b.A& $556oM"1a!eR0 	"'09'=/8H+6+EL , 3 3M( 3 S !8"89_L!	" KG#	s   C.C;1
C;)r'   r   returnr:   )r'   r   r   r/   )r'   r   r   r   )r'   r   r   
str | None)r   r   r   r/   )i    )r   bytes | bytearrayr   r:   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   r:   r   r   r   None)NF)r   r   r   r   r   r   r   r:   r   r/   r   r/   r   r   r   r/   r   r   r   r/   r   zGenerator[str, None, None])F
__future__r   r   r   r$   bisectr   codecsr   encodings.aliasesr   	functoolsr   rer   typingr	   constantr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r,   r1   r=   sortedr   rD   __annotations__rE   rJ   rL   rU   r[   r_   rj   rn   rp   rr   ru   rw   rz   r|   r~   r   r   r   r   r   r   r   r   r   r   INFOr   r   )es   0r+   <module>r     s   "     % %       *D< *+" ," 6< <8288:< 6 2  3I#IQAaD#I y I 6,ENQ *+6 ,6 *+4 ,4 *+9 ,9 *+9 ,9 *+7 ,7 *+5 ,5 *+7 ,7 *+E ,E *+2 ,20 *+ , 59((.1((V 3& &R$5"'( %D



 
 
	
, #'#E EE E 	E
 E E E  E  E E  ES	 $Js   G