U
    ³.¬b~!  ã                   @   s@   d dl Z d dlZd dlmZ d dlmZmZ G dd„ deƒZdS )é    N)Úloads)Ú
LexerErrorÚEmptyExpressionErrorc                   @   s¢   e Zd Zeejd ƒZeejej d ƒZeejƒZ	edƒZ
ddddddd	d
d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d„ Zd S )!ÚLexerÚ_z 	
ÚdotZstarZrbracketÚcommaÚcolonÚcurrentZlparenZrparenZlbraceÚrbrace)
Ú.Ú*ú]ú,ú:ú@ú(ú)Ú{Ú}c                 c   s<  |   |¡ | jd k	�r$| j| jkrN| j| j | j| j| jd dœV  |  ¡  q
| j| jkrš| j}| j}|  ¡ | jkr€|| j7 }qfd|||t|ƒ dœV  q
| j| jkr°|  ¡  q
| jdk�r.| j}|  ¡ }|dkrð|  ¡  dd||d dœV  n<|d	k�r|  ¡  d
d||d dœV  ndd||d dœV  q
| jdk�rF|  	¡ V  q
| jdk�rd|  
ddd¡V  q
| jdk�r‚|  
ddd¡V  q
| jdk�rš|  ¡ V  q
| j| jk�rÔ| j}|  ¡ }dt|ƒ||t|ƒ dœV  q
| jdk�r.| j}|  ¡ }t|ƒdk�rdt|ƒ||t|ƒ dœV  nt||d| d�‚q
| jdk�rF|  ¡ V  q
| jdk�rd|  
ddd¡V  q
| jdk�r‚|  
ddd ¡V  q
| jd!k�r |  
dd"d#¡V  q
| jdk�r
|  ¡ dk�rÜd$d%| jd | jdœV  |  ¡  n,| jd k�rð| j}n
| jd }t|dd&d�‚q
t| j| jd'| j d�‚q
d(d)| j| jdœV  d S )*Né   ©ÚtypeÚvalueÚstartÚendZunquoted_identifierú[r   Úflattenz[]é   ú?Úfilterz[?Zlbracketú'ú|ÚorÚpipeú&ÚandZexprefú`Únumberú-zUnknown token '%s'©Zlexer_positionZlexer_valueÚmessageú"ú<ú=ZlteÚltú>ZgteÚgtú!ÚneÚnotÚeqz==zUnknown token '='zUnknown token %sÚeofÚ )Ú_initialize_for_expressionÚ_currentÚSIMPLE_TOKENSÚ	_positionÚ_nextÚSTART_IDENTIFIERÚVALID_IDENTIFIERÚlenÚ
WHITESPACEÚ_consume_raw_string_literalÚ_match_or_elseÚ_consume_literalÚVALID_NUMBERÚ_consume_numberÚintr   Ú_consume_quoted_identifierÚ_length)ÚselfÚ
expressionr   ÚbuffÚ	next_charÚposition© rN   ú2/tmp/pip-unpacked-wheel-l21h4tpp/jmespath/lexer.pyÚtokenize   sÂ    

 þ
 
ÿ

 ÿ

 ÿ
 ÿ
 
ÿ
 
ÿ
þ ÿ

ýþ ÿzLexer.tokenizec                 C   s*   | j }| j}|  ¡ | jkr&|| j7 }q|S )N)r;   r9   r<   rD   )rI   r   rK   rN   rN   rO   rE   q   s
    zLexer._consume_numberc                 C   s@   |s
t ƒ ‚d| _|| _t| jƒ| _| j| j | _t| jƒ| _d S )Nr   )r   r;   Ú_expressionÚlistÚ_charsr9   r?   rH   )rI   rJ   rN   rN   rO   r8   x   s    z Lexer._initialize_for_expressionc                 C   s:   | j | jd krd | _n|  j d7  _ | j| j  | _| jS )Nr   )r;   rH   r9   rS   )rI   rN   rN   rO   r<   �   s
    zLexer._nextc                 C   s|   | j }d}|  ¡  | j|krp| jdkr6|d7 }|  ¡  | jd kr\t|| j|d … d| d�‚|| j7 }|  ¡  q|  ¡  |S )Nr7   ú\zUnclosed %s delimiterr*   )r;   r<   r9   r   rQ   )rI   Ú	delimiterr   rK   rN   rN   rO   Ú_consume_until‰   s     


þ

zLexer._consume_untilc                 C   s¤   | j }|  d¡ dd¡}zt|ƒ}W nf tk
rŠ   z td| ¡  ƒ}t dt¡ W n0 tk
r„   t	|| j
|d … d| d�‚Y nX Y nX | j | }d|||dœS )	Nr'   z\`z"%s"z deprecated string literal syntaxzBad token %sr*   Úliteralr   )r;   rV   Úreplacer   Ú
ValueErrorÚlstripÚwarningsÚwarnÚPendingDeprecationWarningr   rQ   )rI   r   ÚlexemeZparsed_jsonÚ	token_lenrN   rN   rO   rC   ž   s(    ÿþ
 ÿzLexer._consume_literalc              
   C   s~   | j }d|  d¡ d }z| j | }dt|ƒ||dœW S  tk
rx } z$t|ƒ d¡d }t|||d�‚W 5 d }~X Y nX d S )Nr,   Zquoted_identifierr   r   r   r*   )r;   rV   r   rY   ÚstrÚsplitr   )rI   r   r^   r_   ÚeÚerror_messagerN   rN   rO   rG   ³   s    
 ÿþz Lexer._consume_quoted_identifierc                 C   s0   | j }|  d¡ dd¡}| j | }d|||dœS )Nr!   z\'rW   r   )r;   rV   rX   )rI   r   r^   r_   rN   rN   rO   rA   À   s    
 ÿz!Lexer._consume_raw_string_literalc                 C   sH   | j }| j}|  ¡ }||kr:|  ¡  ||| ||d dœS ||||dœS )Nr   r   )r;   r9   r<   )rI   ÚexpectedZ
match_typeZ	else_typer   r
   rL   rN   rN   rO   rB   Ç   s     ÿ ÿzLexer._match_or_elseN)Ú__name__Ú
__module__Ú__qualname__ÚsetÚstringÚascii_lettersr=   Údigitsr>   rD   r@   r:   rP   rE   r8   r<   rV   rC   rG   rA   rB   rN   rN   rN   rO   r      s0   
öW	r   )	ri   r[   Újsonr   Zjmespath.exceptionsr   r   Úobjectr   rN   rN   rN   rO   Ú<module>   s   