o
    0b~!                     @   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   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  nd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  nt||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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   2usr/lib/python3.10/site-packages/jmespath/lexer.pytokenize   s   














RzLexer.tokenizec                 C   s6   | j }| j}|  | jv r|| j7 }|  | jv s|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 | _| jS |  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r<| jdkr|d7 }|   | jd u r.t|| j|d  d| d|| j7 }|   | j|ks|   |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 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 %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   sp   | j }d| d d }z| j | }dt|||dW S  ty7 } zt|dd }t|||dd }~ww )Nr,   Zquoted_identifierr   r   r   r*   )r;   rV   r   rY   strsplitr   )rI   r   r^   r_   eZ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      s2    
W	r   )	rh   r[   jsonr   Zjmespath.exceptionsr   r   objectr   rN   rN   rN   rO   <module>   s
    