B
    0*™\•D  ã               @   sr  d dddgZ ddlmZ ddlZddlZddlmZ ddlmZ d	Z	d
Z
dZdZdZdZdZe	e	dfe	e	dfe	e	dfe	e	dfe	e	dfe	e	dfe	e	dfe	e	dfe	e	dfe	e	dfe	e	dfe	e	dfde
e
dfe
e
dfe
ddfe
ddfe
ddfe
e
dfee
dfdœZddddddddddddddddddddddd dd!œZd"d#dd$œZd+d%d„Zd&d„ Zd'd„ Zd(d)„ ZG d*d „ d ƒZdS ),ÚCharsetÚ	add_aliasÚadd_charsetÚ	add_codecé    )ÚpartialN)Úerrors)Úencode_7or8bité   é   é   é   zus-asciizunknown-8bitÚ )NNNziso-2022-jpzutf-8)z
iso-8859-1z
iso-8859-2z
iso-8859-3z
iso-8859-4z
iso-8859-9ziso-8859-10ziso-8859-13ziso-8859-14ziso-8859-15ziso-8859-16zwindows-1252Zvisciizus-asciiÚbig5Úgb2312zeuc-jpÚ	shift_jisziso-2022-jpzkoi8-rzutf-8z
iso-8859-1z
iso-8859-2z
iso-8859-3z
iso-8859-4z
iso-8859-9ziso-8859-10ziso-8859-13ziso-8859-14ziso-8859-15ziso-8859-16zks_c_5601-1987zeuc-jpzeuc-kr)Úlatin_1zlatin-1Zlatin_2zlatin-2Zlatin_3zlatin-3Zlatin_4zlatin-4Zlatin_5zlatin-5Zlatin_6zlatin-6Zlatin_7zlatin-7Zlatin_8zlatin-8Zlatin_9zlatin-9Zlatin_10zlatin-10Úcp949Úeuc_jpÚeuc_krÚasciiÚeucgb2312_cnÚbig5_tw)r   r   zus-asciic             C   s"   |t krtdƒ‚|||ft| < d S )Nz!SHORTEST not allowed for body_enc)ÚSHORTESTÚ
ValueErrorÚCHARSETS)ÚcharsetZ
header_encZbody_encÚoutput_charset© r   ú8C:\ALexclude\prg\programme\Python37\Lib\email\charset.pyr   m   s    c             C   s   |t | < d S )N)ÚALIASES)ÚaliasZ	canonicalr   r   r   r   ‰   s    c             C   s   |t | < d S )N)Ú	CODEC_MAP)r   Z	codecnamer   r   r   r   ’   s    c             C   s"   |t kr|  dd¡S |  |¡S d S )Nr   Úsurrogateescape)ÚUNKNOWN8BITÚencode)ÚstringÚcodecr   r   r   Ú_encodeŸ   s    r'   c               @   s\   e Zd Zefdd„Zdd„ ZeZdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )r   c             C   sÀ   y$t |tƒr| d¡ n
t|dƒ}W n tk
rB   t |¡‚Y nX | ¡ }t ||¡| _	t
 | j	ttd f¡\}}}|s~| j	}|| _|| _t ||¡| _t | j	| j	¡| _t | j| j¡| _d S )Nr   )Ú
isinstanceÚstrr$   ÚUnicodeErrorr   ZCharsetErrorÚlowerr   ÚgetÚinput_charsetr   r   ÚBASE64Úheader_encodingÚbody_encodingr   r!   Zinput_codecÚoutput_codec)Úselfr-   ZhencZbencÚconvr   r   r   Ú__init__Ó   s&    

zCharset.__init__c             C   s
   | j  ¡ S )N)r-   r+   )r2   r   r   r   Ú__str__ô   s    zCharset.__str__c             C   s   t | ƒt |ƒ ¡ kS )N)r)   r+   )r2   Úotherr   r   r   Ú__eq__ù   s    zCharset.__eq__c             C   s$   | j tkrdS | j tkrdS tS d S )Nzquoted-printableÚbase64)r0   ÚQPr.   r   )r2   r   r   r   Úget_body_encodingü   s
    

zCharset.get_body_encodingc             C   s   | j p
| jS )N)r   r-   )r2   r   r   r   Úget_output_charset  s    zCharset.get_output_charsetc             C   s6   | j pd}t||ƒ}|  |¡}|d kr*|S | ||¡S )Nzus-ascii)r1   r'   Ú_get_encoderÚheader_encode)r2   r%   r&   Úheader_bytesÚencoder_moduler   r   r   r=     s    


zCharset.header_encodec             C   s  | j pd}t||ƒ}|  |¡}t|j|d}|  ¡ }t|ƒt }g }	g }
t|ƒ| }x”|D ]Œ}|
 	|¡ t
 |
¡}| t||ƒ¡}||krZ|
 ¡  |	s¦|
s¦|	 	d ¡ n.|	r®dnd}t
 |
¡}t||ƒ}|	 	||ƒ¡ |g}
t|ƒ| }qZW t
 |
¡}t||ƒ}|	 	||ƒ¡ |	S )Nzus-ascii)r   ú r   )r1   r'   r<   r   r=   r;   ÚlenÚRFC2047_CHROME_LENÚnextÚappendÚEMPTYSTRINGÚjoinÚheader_lengthÚpop)r2   r%   Z
maxlengthsr&   r>   r?   Úencoderr   ZextraÚlinesZcurrent_lineÚmaxlenÚ	characterZ	this_lineÚlengthZ	separatorZjoined_liner   r   r   Úheader_encode_lines,  s6    









zCharset.header_encode_linesc             C   s`   | j tkrtjS | j tkr tjS | j tkrXtj |¡}tj |¡}||k rPtjS tjS nd S d S )N)r/   r.   ÚemailÚ
base64mimer9   Ú
quoprimimer   rG   )r2   r>   Zlen64Zlenqpr   r   r   r<   j  s    


zCharset._get_encoderc             C   sŽ   |s|S | j tkr4t|tƒr(| | j¡}tj |¡S | j t	krjt|tƒrT| | j¡}| 
d¡}tj |¡S t|tƒr†| | j¡ 
d¡}|S d S )NÚlatin1r   )r0   r.   r(   r)   r$   r   rO   rP   Úbody_encoder9   ÚdecoderQ   )r2   r%   r   r   r   rS   y  s    	





zCharset.body_encodeN)Ú__name__Ú
__module__Ú__qualname__ÚDEFAULT_CHARSETr4   r5   Ú__repr__r7   r:   r;   r=   rN   r<   rS   r   r   r   r   r   §   s   ,!>)NNN)Ú__all__Ú	functoolsr   Zemail.base64mimerO   Zemail.quoprimimer   Zemail.encodersr   r9   r.   r   rB   rX   r#   rE   r   r   r!   r   r   r   r'   r   r   r   r   r   Ú<module>   s†   
	