o {nh/@sddlmZddlZddlZddlZddlmZddlmZddl m Z ddl m Z ddl mZddlmZd d lmZmZmZmZmZmZmZe ed diddZe ed djddZe ed dkddZe ed diddZe ed diddZe ed diddZe ed diddZe ed didd Z e ed did!d"Z!e ed did#d$Z"e ed did%d&Z#e ed did'd(Z$e ed did)d*Z%e ed did+d,Z&e ed did-d.Z'e ed did/d0Z(e ed did1d2Z)e e*ed dld4d5Z+e ed did6d7Z,dmdnd=d>Z-e d?d dodAdBZ.dpdDdEZ/dqdGdHZ0drdsdLdMZ1dtdQdRZ2dudSdTZ3dUej4dVfdvdZd[Z5 dwdxdgdhZ6dS)y) annotationsN)IncrementalDecoder)aliases) lru_cache)findall) Generator)MultibyteIncrementalDecoder)ENCODING_MARKSIANA_SUPPORTED_SIMILARRE_POSSIBLE_ENCODING_INDICATIONUNICODE_RANGES_COMBINEDUNICODE_SECONDARY_RANGE_KEYWORDUTF8_MAXIMAL_ALLOCATIONCOMMON_CJK_CHARACTERS)maxsize characterstrreturnboolcCsdzt|}Wn tyYdSwd|vp1d|vp1d|vp1d|vp1d|vp1d|vp1d|vp1d |vS) NFz WITH GRAVEz WITH ACUTEz WITH CEDILLAzWITH DIAERESISzWITH CIRCUMFLEXz WITH TILDEz WITH MACRONzWITH RING ABOVE unicodedataname ValueErrorr descriptionrC/usr/local/lib/python3.10/dist-packages/charset_normalizer/utils.pyis_accentuateds( rcCs.t|}|s |S|d}tt|ddS)N r)r decompositionsplitchrint)r decomposedcodesrrr remove_accent-s  r' str | NonecCs.t|}tD] \}}||vr|SqdS)zK Retrieve the Unicode range official name from a single character. N)ordr items)r character_ord range_name ord_rangerrr unicode_range8s r.cC*z t|}Wd|vStyYdSw)NFLATINrrrrris_latinFs   r1cCs2t|}d|vr dSt|}|durdSd|vS)NPTF Punctuationrcategoryr.rcharacter_categorycharacter_rangerrris_punctuationOs r9cCsBt|}d|vs d|vrdSt|}|durdSd|vo |dkS)NSNTFFormsLor4r6rrr is_symbol^s r>cCs$t|}|dur dSd|vpd|vS)NF Emoticons Pictographs)r.)rr8rrr is_emoticonmsrAcCs.|s|dvr dSt|}d|vp|dvS)N>|+<>TZ>PcPdPo)isspacerr5)rr7rrr is_separatorws rKcCs||kSN)islowerisupperrrrris_case_variablesrPcCr/)NFCJKrrcharacter_namerrris_cjk   rTcCr/)NFHIRAGANArrRrrr is_hiraganarUrWcCr/)NFKATAKANArrRrrr is_katakanarUrYcCr/)NFHANGULrrRrrr is_hangulrUr[cCr/)NFTHAIrrRrrris_thairUr]cCr/)NFARABICrrRrrr is_arabicrUr_cCs4zt|}Wn tyYdSwd|vod|vS)NFr^z ISOLATED FORMrrRrrris_arabic_isolated_forms  r`cCs|tvSrL)rrOrrris_cjk_uncommonsrar,cstfddtDS)Nc3s|]}|vVqdSrLr).0keywordr,rr sz-is_unicode_range_secondary..)anyrrdrrdris_unicode_range_secondarysrgcCs(|duo|duo|dko|dkS)NFu)rJ isprintablerOrrris_unprintables  rj sequencebytes search_zoner$cCst|tstt|}tt|dt||jddd}t|dkr$dS|D]'}| dd}t D]\}}||krB|S||krL|Sq4q&dS)zW Extract using ASCII-only decoder any specified encoding in the first n-bytes. Nasciiignoreerrorsr-_) isinstancerm TypeErrorlenrr mindecodelowerreplacerr*)rlrnseq_lenresultsspecified_encodingencoding_alias encoding_ianarrrany_specified_encodings&    rrcCs |dvpttd|jtS)zQ Verify is a specific encoding is a multi byte one based on it IANA name > utf_7utf_8utf_16utf_32 utf_16_be utf_16_le utf_32_be utf_32_le utf_8_sig encodings.) issubclass importlib import_modulerr)rrrris_multi_byte_encodings  rtuple[str | None, bytes]cCsJtD] }t|}t|tr|g}|D]}||r!||fSqqdS)z9 Identify and extract SIG/BOM in given sequence. )N)r rurm startswith)rl iana_encodingmarksmarkrrridentify_sig_or_boms  rrcCs|dvS)N>rrr)rrrrshould_strip_sig_or_bom(srTcp_namestrictcCsN|dd}tD]\}}|||fvr|Sq |r%td|d|S)zIReturns the Python normalized encoding name (Not the IANA official name).rsrtzUnable to retrieve IANA for '')rzr{rr*r)rrrrrrr iana_name,s r iana_name_a iana_name_bfloatc Cst|st|r dStd|j}td|j}|dd}|dd}d}tdD]}t|g}||||krA|d7}q,|dS) Ngrrprqrr )rrrrrangermry) rr decoder_a decoder_bid_aid_bcharacter_match_counti to_be_decodedrrr cp_similarity=s    rcCs|tvo |t|vS)z Determine if two code page are at least 80% similar. IANA_SUPPORTED_SIMILAR dict was generated using the function cp_similarity. )r )rrrrr is_cp_similarQs rcharset_normalizerz)%(asctime)s | %(levelname)s | %(message)slevel format_stringNonecCs:t|}||t}|t|||dSrL)logging getLoggersetLevel StreamHandler setFormatter Formatter addHandler)rrrloggerhandlerrrrset_logging_handler\s  r sequencesroffsetsr chunk_sizebom_or_sig_availablestrip_sig_or_bom sig_payloadis_multi_byte_decoderdecoded_payloadGenerator[str, None, None]c cs&|r|dur|D]} || | |} | sdS| Vq dS|D]p} | |} | t|dkr/q || | |} |rA|durA|| } | j||rHdndd} |r| dkrt|d} |r| d| |vrt| | dd D]#}||| } |r{|dur{|| } | j|dd} | d| |vrnqi| Vq dS) NFrprrqrr )rwryrxr)rrrrrrrrrrchunk chunk_end cut_sequencechunk_partial_size_chkjrrrcut_sequence_chunksisD       r)rrrr)rrrr)rrrr()r,rrr)rk)rlrmrnr$rr()rrrr)rlrmrr)rrrr)T)rrrrrr)rrrrrr)rrrrrr)rrrr$rrrrrL)rrmrrrrrr$rrrrrrmrrrr(rr)7 __future__rrrrcodecsrencodings.aliasesr functoolsrrertypingr_multibytecodecrconstantr r r r rrrrr'r.r1r9r>rArKrPrTrWrYr[r]r_r`rarwrgrjrrrrrrrINFOrrrrrrs~       $