U
    M8c~!                     @   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rd$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-dwe9sm7_/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   