f _&@sFdZgdZddlZddlmZmZmZdZdZdZ dd e d DZ e ddZ e ddZ d ed ed D]Zeee e<qvd e ed<dD]Zeee e<qddZddZddZddZd+ddZddZddZd,dd Ze ddZd!D]Zeeee<qd"efd#d$Zefd%d&ZeZeZd'd(Zd)d*Z dS)-aFQuoted-printable content transfer encoding per RFCs 2045-2047. This module handles the content transfer encoding method defined in RFC 2045 to encode US ASCII-like 8-bit data called `quoted-printable'. It is used to safely encode text that is in a character set similar to the 7-bit US ASCII character set, but that includes some 8-bit characters that are normally not allowed in email bodies or headers. Quoted-printable is very space-inefficient for encoding binary files; use the email.base64mime module for that instead. This module provides an interface to encode and decode both headers and bodies with quoted-printable encoding. RFC 2045 defines a method for including character set information in an `encoded-word' in a header. This method is commonly used for 8-bit real names in To:/From:/Cc: etc. fields, as well as Subject: lines. This module does not do the line wrapping or end-of-line character conversion necessary for proper internationalized headers; it only does dumb encoding and decoding. To deal with the various line wrapping issues, use the email.header module. ) body_decode body_encode body_lengthdecode decodestring header_decode header_encode header_lengthquoteunquoteN) ascii_lettersdigits hexdigits  cCsg|] }d|qS)z=%02X).0crr)/usr/lib64/python3.10/email/quoprimime.py 7rs-!*+/ascii_ s_ !"#$%&'()*+,-./0123456789:;<>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ cCst|t|kS)z>Return True if the octet should be escaped with header quopri.)chr_QUOPRI_HEADER_MAPoctetrrr header_checkJsr cCst|t|kS)z^rz header_length..sum bytearrayrrrrTs rcCstdd|DS)zReturn a body quoted-printable encoding length. :param bytearray: An array of bytes (a.k.a. octets). :return: The length in bytes of the byte array when it is encoded with quoted-printable for bodies. css|]}tt|VqdSr#)r$r!r%rrrr&hrzbody_length..r'r)rrrrasrcCsft|tst|}|s&||n_QUOPRI_BODY_ENCODE_MAPr. splitlinesr$r CRLFjoin) bodyZ maxlineleneolZ soft_breakZ maxlinelen1Z encoded_bodyr.linestartZ laststartstopZroomqrrrrsD     rcCs|s|Sd}|D]}|}|s.||7}qd}t|}||kr||}|dkrd||7}|d7}nv|d|kr||d7}q:n^|d|kr||dtvr||dtvr|t|||d7}|d7}n||7}|d7}||kr:||7}q:q|ddvr||r|d d}|S) z_Decode a quoted-printable string. Lines are separated with eol, which defaults to \n. rr rCr5rDr6r+rN)rGrstripr$rr endswith)r@rKZdecodedrLinrrrrrs8   ,   rcCs|d}t|S)zCTurn a match in the form =AB to the ASCII character with value 0xabr )groupr )matchr1rrr_unquote_matchs rVcCs |dd}tjdt|tjdS)aDecode a string encoded with RFC 2045 MIME header `Q' encoding. This function does not parse a full MIME header value encoded with quoted-printable (like =?iso-8859-1?q?Hello_World?=) -- please use the high level email.header class for that functionality. rrz=[a-fA-F0-9]{2})flags)replaceresubrVASCIIr9rrrr#s r)r)r<)!__doc____all__rYstringr r rrHNLZ EMPTYSTRINGranger:rr!encoderrr;r r"rrr4r r rrFrrrrrVrrrrrs>        O 0