o
    ‚.ÚdL  ã                   @   s^  U d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 ddlm
Z
 dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& ddlm'Z' ddlm(Z( dd lm)Z) dd!lm*Z* dd"lm+Z+ dd#lm,Z, e-e(e*efƒZ.eeƒZ/d$ed%e	fd&d'„Z0d(ed%efd)d*„Z1e$ee'ee&ee#ee!e0e,e1iZ2ee3eegef f e4d+< d(ed%efd,d-„Z5d(ed%eee3ef e6f fd.d/„Z7d6d1e3d2e8d%efd3d4„Z9d5S )7zXFunctions for parsing loop expressions.

Like those found in `for` and `tablerow` tags.
é    )ÚCallable)ÚDict)ÚTuple)ÚLiquidSyntaxError©ÚCONTINUE)ÚContinue)ÚIntegerLiteral)ÚLoopArgument)ÚLoopExpression)ÚLoopIterable)Úmake_parse_range)Úparse_float_literal)Úparse_identifier)Úparse_integer_literal)Úparse_string_literal)Ú	parse_obj)Útokenize)ÚTokenStream)Úto_int)ÚTOKEN_COLON)Ú
TOKEN_COLS)ÚTOKEN_COMMA)ÚTOKEN_CONTINUE)Ú	TOKEN_EOF)ÚTOKEN_FLOAT)ÚTOKEN_IDENTIFIER)ÚTOKEN_IN)ÚTOKEN_INTEGER)ÚTOKEN_LBRACKET)ÚTOKEN_LIMIT)ÚTOKEN_LPAREN)ÚTOKEN_OFFSET)ÚTOKEN_REVERSED)ÚTOKEN_STRINGÚ_Úreturnc                 C   s   t S )z=Parse the special `continue` value for the `offset` argument.r   )r%   © r'   úU/var/www/Matress/matenv/lib/python3.10/site-packages/liquid/expressions/loop/parse.pyÚparse_continue4   s   r)   Ústreamc              
   C   sD   z
t t| jd ƒƒW S  ty! } ztd| jd ›ƒ|‚d}~ww )z,Try to parse a string literal as an integer.é   zinvalid integer argument N)r	   r   ÚcurrentÚ
ValueErrorr   ©r*   Úerrr'   r'   r(   Úparse_string_argument9   s   ÿþ€ÿr0   Ú	TOKEN_MAPc              
   C   sD   z
t | jd  | ƒW S  ty! } ztd| jd ›ƒ|‚d}~ww )z<Parse a object from the stream of tokens as a loop argument.é   úunexpected r+   N)r1   r,   ÚKeyErrorr   r.   r'   r'   r(   Úparse_loop_argumentM   s   €ÿr5   c                 C   s˜   i }d}	 | j \}}}|tkr	 ||fS |tv r0t| ƒ |  t¡ t| ƒ t| ƒ||< t| ƒ n|tkr;t| ƒ d}n|tkrDt| ƒ nt	d|›ƒ‚q)zKParse loop arguments from the stream of tokens until the end of the stream.FTr3   )
r,   r   Ú	LOOP_ARGSÚnextÚexpectr   r5   r#   r   r   )r*   Ú	argumentsÚ	_reversedr%   ÚtypÚvalr'   r'   r(   Úparse_loop_argumentsU   s(   ò


ïr=   r2   ÚexprÚlinenumc                 C   sÊ   t t| |ƒƒ}| t¡ t|ƒd }| t¡ t|ƒ |jd tkr+t|ƒ}t|ƒ n)|jd tkr;t	|ƒ}t|ƒ n|jd t
krKt|ƒ}t|ƒ n	td|jd d‚t|ƒ\}}td|||dœ|¤ŽS )	zParse a loop expression string.r+   r2   zinvalid loop expressionr   )r?   )ÚnameÚiterableÚ	reversed_Nr'   )r   r   r8   r   r7   r   r,   r   r$   r   r!   Úparse_ranger   r=   r   )r>   r?   r*   r@   Ú
expressionÚargsrB   r'   r'   r(   Úparsep   s"   




rF   N)r2   ):Ú__doc__Útypingr   r   r   Úliquid.exceptionsr   Úliquid.expressionr   r   r	   r
   r   r   Úliquid.expressions.commonr   r   r   r   r   Ú!liquid.expressions.filtered.parser   Úparse_simple_objÚliquid.expressions.loop.lexr   Úliquid.expressions.streamr   Úliquid.limitsr   Úliquid.tokenr   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   Ú	frozensetr6   rC   r)   r0   r1   ÚstrÚ__annotations__r5   Úboolr=   ÚintrF   r'   r'   r'   r(   Ú<module>   sl    ýÿú
"