U
    ËZj~!  ã                   @   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Ú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© rO   úQ/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/jmespath/lexer.pyÚtokenize   sÂ    

 þ
 
ÿ

 ÿ

 ÿ
 ÿ
 
ÿ
 
ÿ
þ ÿ

ýþ ÿzLexer.tokenizec                 C   s*   | j }| j}|  ¡ | jkr&|| j7 }q|S )N)r<   r:   r=   rE   )rJ   r   rL   rO   rO   rP   rF   q   s
    zLexer._consume_numberc                 C   s@   |s
t ƒ ‚d| _|| _t| jƒ| _| j| j | _t| jƒ| _d S )Nr   )r   r<   Ú_expressionÚlistÚ_charsr:   r@   rI   )rJ   rK   rO   rO   rP   r9   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<   rI   r:   rT   )rJ   rO   rO   rP   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 )Nr8   ú\zUnclosed %s delimiterr+   )r<   r=   r:   r   rR   )rJ   Ú	delimiterr   rL   rO   rO   rP   Ú_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<   rW   Úreplacer   Ú
ValueErrorÚlstripÚwarningsÚwarnÚPendingDeprecationWarningr   rR   )rJ   r   ÚlexemeZparsed_jsonÚ	token_lenrO   rO   rP   rD   ž   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<   rW   r   rZ   ÚstrÚsplitr   )rJ   r   r_   r`   ÚeÚerror_messagerO   rO   rP   rH   ³   s    
 ÿþz Lexer._consume_quoted_identifierc                 C   s0   | j }|  d¡ dd¡}| j | }d|||dœS )Nr"   z\'rX   r   )r<   rW   rY   )rJ   r   r_   r`   rO   rO   rP   rB   À   s    
 ÿz!Lexer._consume_raw_string_literalc                 C   sH   | j }| j}|  ¡ }||kr:|  ¡  ||| ||d dœS ||||dœS )Nr   r   )r<   r:   r=   )rJ   ÚexpectedZ
match_typeZ	else_typer   r   rM   rO   rO   rP   rC   Ç   s     ÿ ÿzLexer._match_or_elseN)Ú__name__Ú
__module__Ú__qualname__ÚsetÚstringÚascii_lettersr>   Údigitsr?   rE   rA   r;   rQ   rF   r9   r=   rW   rD   rH   rB   rC   rO   rO   rO   rP   r      s0   
öW	r   )	rj   r\   Újsonr   Zjmespath.exceptionsr   r   Úobjectr   rO   rO   rO   rP   Ú<module>   s   