File: //lib/python3.10/__pycache__/quopri.cpython-310.pyc
o
    E�hc  �                   @   s�   d Z g d�ZdZdZdZdZz
ddlmZmZ W n
 e	y%   dZdZY nw d	d
� Z
dd� Zddd�Zddd�Z
ddd�Zddd�Zdd� Zdd� Zdd� ZedkrWe�  dS dS )zHConversions to/from quoted-printable transport encoding as per RFC 1521.)�encode�decode�encodestring�decodestring�   =�L   s   0123456789ABCDEF�    �    )�a2b_qp�b2a_qpNc                 C   sH   t | t�sJ �| dv r
|S | dkr|S | tkp#d|   ko dkn   S )z�Decide whether a particular byte ordinal needs to be quoted.
    The 'quotetabs' flag indicates whether embedded tabs and spaces should be
    quoted.  Note that line-ending tabs and spaces are always encoded, as per
    RFC 1521.
    �    	�   _�    �   ~)�
isinstance�bytes�ESCAPE)�c�	quotetabs�header� r   �/usr/lib/python3.10/quopri.py�needsquoting   s   "r   c                 C   sB   t | t�rt| �dks
J �t| �} ttt| d  t| d  f� S )zQuote a single character.�   �   )r   r   �len�ordr   �HEX�r   r   r   r   �quote$   s    r   Fc           
      C   s<  t dur| �� }t |||d�}|�|� dS |dfdd�}d}	 | �� }|s'nig }	d}
|dd� dkr;|dd� }d}
|D ]"}t|f�}t|||�rNt|�}|rZ|d	krZ|	�d
� q=|	�|� q=|durh||� t�	|	�}t
|�tkr�||dtd � dd� |td d� }t
|�tkss|}q |dur�|||
d� dS dS )
av  Read 'input', apply quoted-printable encoding, and write to 'output'.
    'input' and 'output' are binary file objects. The 'quotetabs' flag
    indicates whether embedded tabs and spaces should be quoted. Note that
    line-ending tabs and spaces are always encoded, as per RFC 1521.
    The 'header' flag indicates whether we are encoding spaces as _ as per RFC
    1522.N�r   r   �   
c                 S   sn   | r| dd � dv r|� | d d� t| dd � � | � d S | dkr.|� t| �| � d S |� | | � d S )N���r   �   .)�writer   )�s�output�lineEndr   r   r   r#   ;   s
   *zencode.<locals>.writer   r   r!   r
   r   s   =
)r&