File: //lib64/python3.9/email/__pycache__/header.cpython-39.pyc
a
    �DOg&^  �                   @   s�   d Z g d�ZddlZddlZddlZddlZddlmZ ddlm	Z
 e
jZdZdZ
dZd	Zd
ZdZdZed
�Zed�Ze�dejejB �Ze�d�Ze�d�ZejjZdd� Zddd�ZG dd� d�ZG dd� d�Z G dd� de!�Z"dS )z+Header encoding and decoding functionality.)�Header�
decode_header�make_header�    N)�HeaderParseError)�charset�
� �    z        � �N   z 	�us-asciizutf-8ai  
  =\?                   # literal =?
  (?P<charset>[^?]*?)   # non-greedy up to the next ? is the charset
  \?                    # literal ?
  (?P<encoding>[qQbB])  # either a "q" or a "b", case insensitive
  \?                    # literal ?
  (?P<encoded>.*?)      # non-greedy up to the next ?= is the encoded string
  \?=                   # literal ?=
  z[\041-\176]+:$z
\n[^ \t]+:c              	   C   s�  t | d�rdd� | jD �S t�| �s.| dfgS g }| �� D ]�}t�|�}d}|r:|�d�}|rj|�� }d}|r~|�|ddf� |rL|�d��	� }|�d��	� }|�d�}|�|||f� qLq:g }	t
|�D ]J\}
}|
dkr�|d r�||
d	  d r�||
d  d �� r�|	�|
d � q�t|	�D ]}||= �qg }
|D ]�\}}}|du �rV|
�||f� n�|d
k�r|t
j�|�}|
�||f� n||dk�r�t|�d }|�r�|d
dd| � 7 }zt
j�|�}W n tj�y�   td��Y n0 |
�||f� ntd| ���q2g }d }}|
D ]v\}}t|t��r*t|d�}|du �r>|}|}nB||k�r`|�||f� |}|}n |du �rx|t| 7 }n||7 }�q|�||f� |S )a;  Decode a message header value without converting charset.
    Returns a list of (string, charset) pairs containing each of the decoded
    parts of the header.  Charset is None for non-encoded parts of the header,
    otherwise a lower-case string containing the name of the character set
    specified in the encoded string.
    header may be a string that may or may not contain RFC2047 encoded words,
    or it may be a Header object.
    An email.errors.HeaderParseError may be raised when certain decoding error
    occurs (e.g. a base64 decoding exception).
    �_chunksc                 S   s(   g | ] \}}t �|t|��t|�f�qS � )�_charsetZ_encode�str)�.0�stringr   r   r   �$/usr/lib64/python3.9/email/header.py�
<listcomp>M   s   �z!decode_header.<locals>.<listcomp>NTr   F�   �   �q�b�   z===zBase64 decoding errorzUnexpected encoding: zraw-unicode-escape)�hasattrr
   �ecre�search�
splitlines�split�pop�lstrip�append�lower�	enumerate�isspace�reversed�email�
quoprimimeZ
header_decode�lenZ
base64mime�decode�binascii�Errorr   �AssertionError�
isinstancer   �bytes�BSPACE)�header�words�line�parts�firstZ	unencodedr   �encoding�encodedZdroplist�n�w�dZ
decoded_wordsZencoded_stringZwordZpaderrZ	collapsedZ	last_word�last_charsetr   r   r   r   =   s|    
�
4
r   c                 C   sF   t |||d�}| D ].\}}|dur4t|t�s4t|�}|�||� q|S )a�  Create a Header from a sequence of pairs as returned by decode_header()
    decode_header() takes a header value string and returns a sequence of
    pairs of the format (decoded_string, charset) where charset is the string
    name of the character set.
    This function takes one of those sequence of pairs and returns a Header
    instance.  Optional maxlinelen, header_name, and continuation_ws are as in
    the Header constructor.
    )�
maxlinelen�header_name�continuation_wsN)r   r-   �Charsetr!   )Zdecoded_seqr;   r<