U
    j7g                     @   s   d dl Z d dlZd dlmZmZmZ d dlmZ edZ	dd e
dD ZdZd	Zed
 Zee Zee d Zee ZedZedZe dZG dd dZG dd dZdS )    N)ascii_lettersascii_lowercasedigits)castasciic                 C   s   h | ]}d |d dqS )%02Xr   )encode).0i r   4/tmp/pip-unpacked-wheel-w6bmm3py/yarl/_quoting_py.py	<setcomp>   s     r      z:/?#[]@z!$'()*,+&=;z-._~s   [A-Z0-9][A-Z0-9]z[A-Fa-f0-9][A-Fa-f0-9]zutf-8c                   @   s>   e Zd ZdddddeeeeddddZeed	d
dZdS )_Quoter FT)safe	protectedqsrequoteN)r   r   r   r   returnc                C   s   || _ || _|| _|| _d S )N)_safe
_protected_qs_requote)selfr   r   r   r   r   r   r   __init__   s    z_Quoter.__init__valr   c                 C   sx  |d krd S t |tstd|s&dS |jddd}t }t }| j}|t7 }| js\|d7 }|| j7 }|d}d}|t	|k r\|| }|d	7 }|r|t
kr|d
 }|| t	|dkr|d	d  }	t|	s|d |  |d8 }qtz"tt|d	d  ddd}
W n4 tk
rH   |d |  |d8 }Y qtY nX |
| jkrb|| n$|
|kr||t|
 n
|| |  qtt	|dkrt|t	|krt|d |  |d	8 }qtn@|tdkr| jr|  || |t	|krt|d qt| jr,|tdkr,|td qt||krB|| qt|d|dd qt|d}||krt|S |S )NArgument should be strr   utf8ignore)errorsr   r   r             s   %25      baser    +r   )
isinstancestr	TypeErrorr	   	bytearrayr   ALLOWEDr   r   lenBASCII_LOWERCASEappend_IS_HEXmatchextendclearchrintdecode
ValueErrorordr   )r   r   Zbvalretpctr   Zbsafeidxchbufunquotedret2r   r   r   __call__$   s    





"











z_Quoter.__call____name__
__module____qualname__r.   boolr   rE   r   r   r   r   r      s   r   c                   @   s:   e Zd ZddddeeeddddZeedd	d
ZdS )	_Unquoterr   F)r"   unsafer   N)r"   rL   r   r   c                C   s*   || _ || _|| _t | _tdd| _d S )NT)r   )_ignore_unsafer   r   _quoter
_qs_quoter)r   r"   rL   r   r   r   r   r   v   s
    z_Unquoter.__init__r   c                 C   s  |d krd S t |tstd|s&dS ttjt }g }d}|t|k r|| }|d7 }|dkr|t|d kr|||d  }t	|rt
t|ddg}|d7 }z||}W n tk
rF   |d	 t|jd	  }	|||	|d	   |  z||}W n2 tk
r@   |||d	 |  Y Y q<Y nX Y nX |sPq<| jr|d
kr| |}
|
d kr~td||
 q<|| jks|| jkr| |}
|
d krtd||
 q<|| q<|jr|d t|jd	  }	|||	|d   |  |dkrH| jr0|| jkr<|d q<|d q<|| jkr|d tt| dd  }|D ]}|| qzq<|| q<|jr||t|j d	 d   d|}||kr|S |S )Nr    r   r   r$   r   r'   r(   r)   r&   z+=&;zCannot quote Noner,   r+   )r-   r.   r/   r   codecsBufferedIncrementalDecoderutf8_decoderr2   _IS_HEX_STR	fullmatchbytesr:   r;   UnicodeDecodeErrorbufferr4   resetr   rP   RuntimeErrorrN   rM   rO   hexr=   upperjoin)r   r   decoderr>   r@   rA   r?   brC   Z	start_pctZto_addhrD   r   r   r   rE   }   s    










z_Unquoter.__call__rF   r   r   r   r   rK   u   s   rK   )rQ   restringr   r   r   typingr   r	   r3   rangeZBPCT_ALLOWEDZ
GEN_DELIMSZSUB_DELIMS_WITHOUT_QSZ
SUB_DELIMSZRESERVEDZ
UNRESERVEDr1   compiler5   rT   getincrementaldecoderrS   r   rK   r   r   r   r   <module>   s    



_