o
    �»^~!  ã                   @   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 	
ÚdotÚstarÚrbracketÚcommaÚcolonÚcurrentÚlparenÚrparenÚlbraceÚrbrace)
Ú.Ú*ú]ú,ú:ú@ú(ú)ú{ú}c                 c   sH  � |   |¡ | jd u�r˜| j| jv r)| j| j | j| j| jd dœV  |  ¡  �nj| j| jv rV| j}| j}|  ¡ | jv rH|| j7 }|  ¡ | jv s<d|||t|ƒ dœV  �n=| j| jv rb|  ¡  �n1| 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  nó| jdkr«|  	¡ V  nè| jdkr¹|  
ddd¡V  nÚ| jdkrÇ|  
ddd¡V  nÌ| jdkrÒ|  ¡ V  nÁ| j| jv rî| j}|  ¡ }dt|ƒ||t|ƒ dœV  n¥| jdk�r| j}|  ¡ }t|ƒdk�rdt|ƒ||t|ƒ dœV  n‚t||d| d�‚| jdk�r&|  ¡ V  nm| jdk�r5|  
ddd¡V  n^| jdk�rD|  
ddd ¡V  nO| jd!k�rS|  
dd"d#¡V  n@| jdk�r‡|  ¡ dk�rqd$d%| jd | jdœV  |  ¡  n"| jd u �r{| j}n| jd }t|dd&d�‚t| j| jd'| j d�‚| jd usd(d)| j| jdœV  d S )*Né   ©ÚtypeÚvalueÚstartÚendÚunquoted_identifierú[r   Úflattenz[]é   ú?Úfilterz[?Úlbracketú'ú|ÚorÚpipeú&ÚandÚexprefú`Únumberú-zUnknown token '%s'©Úlexer_positionÚlexer_valueÚmessageú"ú<ú=ÚlteÚltú>Ú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© rZ   ú0/usr/lib/python3/dist-packages/jmespath/lexer.pyÚtokenize   s¶   €

þ
ÿÿ
ÿ
ÿ
ÿ




ÿ
ÿþÿ

ýþ
±RÿzLexer.tokenizec                 C   s6   | j }| j}|  ¡ | jv r|| j7 }|  ¡ | jv s|S )N)rG   rE   rH   rP   )rU   r   rW   rZ   rZ   r[   rQ   q   s   
ÿzLexer._consume_numberc                 C   s@   |st ƒ ‚d| _|| _t| jƒ| _| j| j | _t| jƒ| _d S )Nr   )r   rG   Ú_expressionÚlistÚ_charsrE   rK   rT   )rU   rV   rZ   rZ   r[   rD   x   s   z Lexer._initialize_for_expressionc                 C   s>   | j | jd krd | _| jS |  j d7  _ | j| j  | _| jS )Nr   )rG   rT   rE   r_   )rU   rZ   rZ   r[   rH   �   s   þzLexer._nextc                 C   s„   | j }d}|  ¡  | j|kr<| jdkr|d7 }|  ¡  | jd u r.t|| j|d … d| d�‚|| j7 }|  ¡  | j|ks|  ¡  |S )NrC   ú\zUnclosed %s delimiterr2   )rG   rH   rE   r   r]   )rU   Ú	delimiterr   rW   rZ   rZ   r[   Ú_consume_until‰   s"   


þ

özLexer._consume_untilc                 C   sœ   | j }|  d¡ dd¡}zt|ƒ}W n/ tyA   ztd| ¡  ƒ}t dt¡ W n ty>   t	|| j
|d … d| d�‚w Y nw | j | }d|||dœS )	Nr/   z\`z"%s"z deprecated string literal syntaxzBad token %sr2   Úliteralr   )rG   rb   Úreplacer   Ú
ValueErrorÚlstripÚwarningsÚwarnÚPendingDeprecationWarningr   r]   )rU   r   ÚlexemeÚparsed_jsonÚ	token_lenrZ   rZ   r[   rO   ž   s,   ÿþÿþû
ÿzLexer._consume_literalc              
   C   sp   | j }d|  d¡ d }z| j | }dt|ƒ||dœW S  ty7 } zt|ƒ d¡d }t|||d�‚d }~ww )Nr6   Úquoted_identifierr   r   r   r2   )rG   rb   r   re   ÚstrÚsplitr   )rU   r   rj   rl   ÚeÚerror_messagerZ   rZ   r[   rS   ³   s   
ÿþ€þz Lexer._consume_quoted_identifierc                 C   s0   | j }|  d¡ dd¡}| j | }d|||dœS )Nr(   z\'rc   r   )rG   rb   rd   )rU   r   rj   rl   rZ   rZ   r[   rM   À   s   
ÿz!Lexer._consume_raw_string_literalc                 C   sH   | j }| j}|  ¡ }||kr|  ¡  ||| ||d dœS ||||dœS )Nr   r   )rG   rE   rH   )rU   ÚexpectedÚ
match_typeÚ	else_typer   r   rX   rZ   rZ   r[   rN   Ç   s   ÿÿzLexer._match_or_elseN)Ú__name__Ú
__module__Ú__qualname__ÚsetÚstringÚascii_lettersrI   ÚdigitsrJ   rP   rL   rF   r\   rQ   rD   rH   rb   rO   rS   rM   rN   rZ   rZ   rZ   r[   r      s2    
öW	r   )	ry   rg   Újsonr   Újmespath.exceptionsr   r   Úobjectr   rZ   rZ   rZ   r[   Ú<module>   s
    