o
     JAfB                  	   @   s  g d 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i de	e	dfde	e	dfde	e	dfde	e	dfde	e	dfde	e	dfde	e	dfde	e	dfde	e	dfde	e	dfde	e	dfde	e	dfd
dde
e
dfde
e
dfde
ddfde
ddfe
ddfe
e
dfee
dfd Zi 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-dd.dd/dd0dd1ddddd2dd3d
d4Zd5d6dd7Zdd8d9Zd:d; Zd<d= Zd>d? ZG d@dA dAZdS )B)Charset	add_aliasadd_charset	add_codec    )partialN)errors)encode_7or8bit            us-asciizunknown-8bit 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viscii)NNNbig5gb2312zeuc-jpiso-2022-jp	shift_jisutf-8)r   zkoi8-rr   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ks_c_5601-1987zeuc-kr)zlatin-9Zlatin_10zlatin-10cp949euc_jpeuc_krasciieucgb2312_cnbig5_tw)r   r   r   c                 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    $/usr/lib/python3.10/email/charset.pyr   m   s   r   c                 C      	 |t | < d S N)ALIASES)aliasZ	canonicalr    r    r!   r         r   c                 C   r"   r#   )	CODEC_MAP)r   Z	codecnamer    r    r!   r      s   r   c                 C   s   |t kr
| ddS | |S )Nr   surrogateescape)UNKNOWN8BITencode)stringcodecr    r    r!   _encode   s   
r-   c                   @   sZ   e Zd Z	 efddZdd 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   zt |tr|d nt|d}W n ty   t|w | }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)selfr3   ZhencZbencconvr    r    r!   __init__   s0   




zCharset.__init__c                 C   s
   | j  S r#   )r3   r1   r8   r    r    r!   __repr__   s   
zCharset.__repr__c                 C   s   t | t | kS r#   )r/   r1   )r8   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 )Nzquoted-printablebase64)r6   QPr4   r   r;   r    r    r!   get_body_encoding   s   

zCharset.get_body_encodingc                 C   s   	 | j p| jS r#   )r   r3   r;   r    r    r!   get_output_charset  r&   zCharset.get_output_charsetc                 C   s8   	 | j pd}t||}| |}|d u r|S |||S )Nr   )r7   r-   _get_encoderheader_encode)r8   r+   r,   header_bytesencoder_moduler    r    r!   rD     s   



zCharset.header_encodec                 C   s  	 | j pd}t||}| |}t|j|d}|  }t|t }g }	g }
t|| }|D ]F}|
	| t
|
}|t||}||krs|
  |	sS|
sS|		d  n|	rWdnd}t
|
}t||}|		|| |g}
t|| }q-t
|
}t||}|		|| |	S )Nr   )r    r   )r7   r-   rC   r   rD   rB   lenRFC2047_CHROME_LENnextappendEMPTYSTRINGjoinheader_lengthpop)r8   r+   Z
maxlengthsr,   rE   rF   encoderr   extralinesZcurrent_linemaxlen	characterZ	this_linelength	separatorZjoined_liner    r    r!   header_encode_lines*  s:   








zCharset.header_encode_linesc                 C   sZ   | j tkrtjS | j tkrtjS | j tkr+tj|}tj|}||k r(tjS tjS d S r#   )r5   r4   email
base64mimer@   
quoprimimer   rN   )r8   rE   Zlen64Zlenqpr    r    r!   rC   h  s   


zCharset._get_encoderc                 C   s   	 |s|S | j tu rt|tr|| j}tj|S | j t	u r6t|tr+|| j}|
d}tj|S t|trD|| j
d}|S )Nlatin1r   )r6   r4   r.   r/   r*   r   rX   rY   body_encoder@   decoderZ   )r8   r+   r    r    r!   r\   w  s   





zCharset.body_encodeN)__name__
__module____qualname__DEFAULT_CHARSETr:   r<   r>   rA   rB   rD   rW   rC   r\   r    r    r    r!   r      s    +!>r   )__all__	functoolsr   Zemail.base64mimerX   Zemail.quoprimimer   Zemail.encodersr   r@   r4   r   rI   ra   r)   rL   r   r$   r'   r   r   r   r-   r   r    r    r    r!   <module>   s   
















	

	