o
    .d                     @   s  d Z ddl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' dd%lm(Z( dd&lm)Z) dd'lm*Z* eefeefe(efe#d(fed)fed*fed+fee
fed,fe&d-fed.fe%d/fed0fd1e'd2fed3ffZ+e,e)eee!eeee"eg	Z-e$d4fge+R Z.e,e ge-Z/e0d51d6d7 e+D ej2Z3e0d51d8d7 e.D ej2Z4dAd:e5d;e6d<ee fd=d>Z7dAd:e5d;e6d<ee fd?d@Z8dS )Bz$Tokenize boolean liquid expressions.    N)Iterator)LiquidSyntaxError)GROUP_IDENTINDEX)GROUP_IDENTQUOTED)GROUP_QUOTED)IDENTIFIER_PATTERN)IDENTINDEX_PATTERN)IDENTSTRING_PATTERN)STRING_PATTERN)Token)	TOKEN_AND)TOKEN_BLANK)TOKEN_CONTAINS)	TOKEN_DOT)TOKEN_EMPTY)TOKEN_FALSE)TOKEN_FLOAT)TOKEN_IDENTIFIER)TOKEN_IDENTINDEX)TOKEN_IDENTSTRING)TOKEN_ILLEGAL)TOKEN_INTEGER)TOKEN_LBRACKET)TOKEN_LPAREN)TOKEN_NEWLINE)	TOKEN_NIL)	TOKEN_NOT)
TOKEN_NULL)TOKEN_OR)TOKEN_RANGE)TOKEN_RANGE_LITERAL)TOKEN_RBRACKET)TOKEN_RPAREN)
TOKEN_SKIP)TOKEN_STRING)
TOKEN_TRUE)	operatorsz\.\.z-?\d+\.(?!\.)\d*z-?\d+\bz\.z\(z\)z\[]z\n)OPz[!=<>]{1,2}z[ \t\r]+.z\((?=.+?\.\.)|c                 c   &    | ]\}}d | d| dV  qdS z(?P<>)N .0namepatternr/   r/   V/var/www/Matress/matenv/lib/python3.10/site-packages/liquid/expressions/boolean/lex.py	<genexpr>^      $ r5   c                 c   r+   r,   r/   r0   r/   r/   r4   r5   c   r6      sourcelinenumreturnc                 c   s    t }t| D ]}|j}|dusJ | }|d}|tkr'||v r'|}n\|tkr1|t}nR|t	kr=t}|t
}nF|tkrG|t}n<|dkrhzt| }W n1 tyg } z
td||d|d}~ww |tkrq|d7 }q|tkrvq|tkrtd||d||7 }|||fV  qdS )z'Yield tokens from a boolean expression.N
r(   unknown operator r9   r7   unexpected )keywords	OUTPUT_REfinditer	lastgroupgroupcountr   r   r   r   r   r$   r   r&   KeyErrorr   r   r#   r   r8   r9   	_keywordsmatchkindvaluenewlineserrr/   r/   r4   tokenizeh   sL   
rM   c                 c   s>   t }t| D ]}|j}|dusJ | }|d}|tkr'||v r'|}nk|tkr6|| ||fV  t}n\|t	kr@|t
}nR|tkrLt}|t}nF|tkrV|t}n<|dkrwzt| }W n1 tyv } z
td||d|d}~ww |tkr|d7 }q|tkrq|tkrtd||d||7 }|||fV  qdS )zYield tokens from a boolean expression.

    Extra tokens are generated to distinguish the start of a range expression from the
    start of a logical group.
    Nr;   r(   r<   r=   r7   r>   )not_keywordsPAREN_TOKENS_RErA   rB   rC   rD   r   r    r   r   r   r   r   r$   r   r&   rE   r   r   r#   r   rF   r/   r/   r4   tokenize_with_parens   sR   
rP   )r7   )9__doc__retypingr   liquid.exceptionsr   liquid.expressions.commonr   r   r   r   r   r	   r
   r   liquid.tokenr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   token_rules	frozensetr?   paren_token_rulesrN   compilejoinDOTALLr@   rO   strintrM   rP   r/   r/   r/   r4   <module>   s     '