
    h                     H   % S r SSKrSSKrSSKJr  SSKJr  SSKJr  SSKJ	r	  SSKJ
r
  \R                  (       a
  SSKrSS	KJr  \R                   " S
\R"                  \R$                  5      r\R                   " S\R(                  \R*                  5      r\" / SQ5      r\" / SQ5      r\R4                  \R6                  \R8                  \R:                  \R<                  \R>                  S.r \RB                  \"\RF                  \RH                     4   \%S'    " S S5      r&g)z8Parse tokens from the lexer into nodes for the compiler.    N   )nodes)TemplateAssertionError)TemplateSyntaxError)describe_token)describe_token_expr)Environment_ImportInclude
_MacroCall)forifblockextendsprintmacroincludefromimportsetwith
autoescape)eqneltlteqgtgteq)addsubmuldivfloordivmod_math_nodesc                      \ rS rSrSr   SUSSS\S\R                  \   S\R                  \   S	\R                  \   S
S4S jjrS\	4S\S\R                  \
   S\R                  \	   S
S4S jjrS\R                  \   S\R                  \R                  \S4      S\R                  \
   S
S4S jr SVS\S\R                  \
   S
S4S jjr  SWS\R                  \R                  \S4      S\R                  \
   S
S4S jjr SVS\R                  \R                  \S4      S
\4S jjrSVS\R                  \
   S
\R*                  4S jjrS
\R.                  \R0                  \R                  \R0                     4   4S jr SXS\R                  \S4   S\S
\R                  \R0                     4S jjrS
\R.                  \R6                  \R8                  4   4S jrS
\R<                  4S jrS
\R@                  4S jr!S
\RD                  4S  jr#S
\RH                  4S! jr%S
\RL                  4S" jr'S
\RP                  4S# jr)S$\*S%\S
\*4S& jr+S
\RX                  4S' jr-S
\R\                  4S( jr/S
\R`                  4S) jr1S$\2S
S4S* jr3S
\Rh                  4S+ jr5S
\Rl                  4S, jr7S
\Rp                  4S- jr9S
\Rt                  4S. jr;\<Rz                   SYS/\S0S1S
\R|                  4S2 jj5       r?\<Rz                      SZS/\S0\S\R                  \R                  \S4      S3\S
\R.                  \R                  \R|                  \R                  4   4
S4 jj5       r?    SZS/\S0\S\R                  \R                  \S4      S3\S
\R.                  \R                  \R|                  \R                  4   4
S5 jjr?S[S6\S
\R                  4S7 jjrBS
\R                  4S8 jrCS
\R                  4S9 jrDS
\R                  4S: jrES
\R                  4S; jrFS
\R                  4S< jrGS
\R                  4S= jrHS
\R                  4S> jrIS
\R                  4S? jrJS
\R                  4S@ jrKS[SA\S
\R                  4SB jjrLSXS3\S
\R                  4SC jjrM     S\SD\S6\S\R                  \R                  \S4      SE\S3\S
\R.                  \R                  \R                  4   4SF jjrNS
\R                  4SG jrOS
\R                  4SH jrQS$\R                  S
\R                  4SI jrRS$\R                  S
\R                  4SJ jrSS$\R                  S
\R.                  \R                  \R                  4   4SK jrVS
\R                  4SL jrWS
\R                  \R                  \R                     \R                  \R                     \R                  \R                     \R                  \R                     4   4SM jrYS$\R                  S
\R                  4SN jr[ SXS$\R                  \R                     SO\S
\R                  \R                     4SP jjr\S$\R                  S
\R                  4SQ jr] SVS\R                  \R                  \S4      S
\R                  \R0                     4SR jjr^S
\R                  4SS jr`STrag)]Parser0   z}This is the central parsing class Jinja uses.  It's passed to
extensions and can be used to parse expressions or statements.
Nenvironmentr	   sourcenamefilenamestatereturnc                 "   Xl         UR                  X#XE5      U l        X0l        X@l        SU l        0 U l        UR                  5        H/  nUR                   H  nUR                  U R                  U'   M     M1     SU l
        / U l        / U l        g )NFr   )r(   	_tokenizestreamr*   r+   closed
extensionsiter_extensionstagsparse_last_identifier
_tag_stack_end_token_stack)selfr(   r)   r*   r+   r,   	extensiontags           E/var/www/auris/envauris/lib/python3.13/site-packages/jinja2/parser.py__init__Parser.__init__5   s     '!++F(J	   	 %446I ~~'0$ & 7 !"');=    msglinenoexczte.NoReturnc                     Uc   U R                   R                  R                  nU" XU R                  U R                  5      e)zConvenience method that raises `exc` with the message, passed
line number or last line number as well as the current name and
filename.
)r0   currentrA   r*   r+   )r9   r@   rA   rB   s       r<   failParser.failL   s5     >[[((//F#tyy$--88r?   end_token_stack.c           
         [        5       nU H"  nUR                  [        [        U5      5        M$     U(       a1  SR	                  [        [
        [        [        US   5      5      5      nOS nUc  S/nOSU< S3/nU(       a3  Ub  X;   a  UR                  SU S35        OUR                  SU S35        U R                  (       a#  UR                  SU R                  S   < S35        U R                  S	R	                  U5      U5        g )
Nz or zUnexpected end of template.zEncountered unknown tag .z\You probably made a nesting mistake. Jinja is expecting this tag, but currently looking for z*Jinja was looking for the following tags: z/The innermost block that needs to be closed is  )	r   updatemapr   joinreprappendr7   rE   )r9   r*   rG   rA   expectedexprscurrently_lookingmessages           r<   _fail_ut_eofParser._fail_ut_eofZ   s     #u$EOOC 3U;< %17D#1?23FGH2 !%<45G1$;<GD$422C1DAG
 @AR@SSTU ??NNOOB'*!-
 			#((7#V,r?   c                 <    U R                  XR                  U5        g)zCalled if the parser encounters an unknown tag.  Tries to fail
with a human readable error message that could help to identify
the problem.
N)rU   r8   )r9   r*   rA   s      r<   fail_unknown_tagParser.fail_unknown_tag   s     	$ 5 5v>r?   
end_tokensc                 z    [        U R                  5      nUb  UR                  U5        U R                  SX25        g)z9Like fail_unknown_tag but for end of template situations.N)listr8   rP   rU   )r9   rZ   rA   stacks       r<   fail_eofParser.fail_eof   s6     T**+!LL$$.r?   extra_end_rulesc                     U R                   R                  R                  S;   a  gUb%  U R                   R                  R                  U5      $ g)zAre we at the end of a tuple?)variable_end	block_endrparenTF)r0   rD   typetest_any)r9   r`   s     r<   is_tuple_endParser.is_tuple_end   sD     ;;##'NN(;;&&//@@r?   c                     U =R                   S-  sl         [        R                  [        R                  5      n[        R
                  R                  USU R                    3US9  U$ )zDReturn a new free identifier as :class:`~jinja2.nodes.InternalName`.r   firA   )r6   object__new__r   InternalNameNoder=   )r9   rA   rvs      r<   free_identifierParser.free_identifier   sS    "^^E../

B"T%:%:$; <VL	r?   c                 n   U R                   R                  nUR                  S:w  a  U R                  SUR                  5        U R
                  R                  UR                  5        Sn UR                  [        ;   aV  [        U SU R                   R                  R                   35      nU" 5       U(       a  U R
                  R                  5         $ $ UR                  S:X  a2  U R                  5       U(       a  U R
                  R                  5         $ $ UR                  S:X  a2  U R                  5       U(       a  U R
                  R                  5         $ $ U R                  R                  UR                  5      nUb*  U" U 5      U(       a  U R
                  R                  5         $ $ U R
                  R                  5         SnU R                  UR                  UR                  5        U(       a  U R
                  R                  5         gg! U(       a  U R
                  R                  5         f f = f)	zParse a single statement.r*   ztag name expectedTparse_callfilterNF)r0   rD   re   rE   rA   r7   rP   value_statement_keywordsgetattrpopparse_call_blockparse_filter_blockr2   getrX   )r9   tokenpop_tagfexts        r<   parse_statementParser.parse_statement   s   ##::II)5<<8u{{+	&{{11DF4;;+>+>+D+D*E"FGs  ##%  {{f$,,. ##%  {{h&..0 ##%  //%%ekk2C4y ##% 	 OO!G!!%++u||<##% w##% s&   +AH H H /H +AH $H4drop_needlec                 6   U R                   R                  S5        U R                   R                  S5        U R                  U5      nU R                   R                  R
                  S:X  a  U R                  U5        U(       a  [        U R                   5        U$ )a  Parse multiple statements into a list until one of the end tokens
is reached.  This is used to parse the body of statements as it also
parses template data if appropriate.  The parser checks first if the
current token is a colon and skips it if there is one.  Then it checks
for the block end and parses until if one of the `end_tokens` is
reached.  Per default the active token in the stream at the end of
the call is the matched end token.  If this is not wanted `drop_needle`
can be set to `True` and the end token is removed.
colonrc   eof)r0   skip_ifexpectsubparserD   re   r^   next)r9   rZ   r   results       r<   parse_statementsParser.parse_statements   sr     	G$ 	;'z* ;;##u,MM*%r?   c                 T   [        U R                  5      R                  nU R                  SS9nU R                  R	                  S5      (       a%  U R                  5       n[        R                  " X#US9$ U R                  S5      nU R                  SSS9n[        R                  " X$XQS9$ )zParse an assign statement.Twith_namespaceassignrk   N)zname:endsetr   )r   r0   rA   parse_assign_targetr   parse_tupler   Assignparse_filterr   AssignBlock)r9   rA   targetexprfilter_nodebodys         r<   	parse_setParser.parse_set   s    dkk")))))>;;x((##%D<<V<<''-$$%54$H  dJJr?   c           
         U R                   R                  S5      R                  nU R                  SS9nU R                   R                  S5        U R	                  SSS9nSnU R                   R                  S	5      (       a  U R                  5       nU R                   R                  S
5      nU R                  S5      n[        U R                   5      R                  S:X  a  / nOU R                  SSS9n[        R                  " X#XgXEUS9$ )zParse a for loop.zname:for)name:in)r`   r   F)name:recursive)with_condexprr`   Nname:ifr   )name:endfor	name:elseendfor)r   Tr   rk   )r0   r   rA   r   r   r   parse_expressionr   r   rw   r   For)r9   rA   r   itertest	recursiver   else_s           r<   	parse_forParser.parse_for   s    ##J/66)),)G9%1D   
 ;;y))((*DKK''(89	$$%AB""h.E))*:)MEyytDFSSr?   c                 4   [         R                  " U R                  R                  S5      R                  S9=p U R                  SS9Ul        U R                  S5      Ul        / Ul	        / Ul
        [        U R                  5      nUR                  S5      (       aO  [         R                  " U R                  R                  R                  S9nUR                  R                  U5        M  UR                  S5      (       a  U R                  S	SS
9Ul
         U$ )zParse an if construct.r   rk   TFr   )	name:elifr   
name:endifr   r   )r   r   )r   Ifr0   r   rA   r   r   r   r   elif_r   r   rD   rP   )r9   noder   r~   s       r<   parse_ifParser.parse_if   s    (:(:9(E(L(LMM((u(=DI--.VWDIDJDJ%Ezz+&&xxt{{':':'A'AB##D)K((#44_RV4Wr?   c                 b   [         R                  " [        U R                  5      R                  S9n/ n/ nU R                  R
                  R                  S:w  a  U(       a  U R                  R                  S5        U R                  5       nUR                  S5        UR                  U5        U R                  R                  S5        UR                  U R                  5       5        U R                  R
                  R                  S:w  a  M  X!l        X1l        U R                  SSS9Ul        U$ )	Nrk   rc   commaparamr   )zname:endwithTr   )r   Withr   r0   rA   rD   re   r   r   set_ctxrP   r   targetsvaluesr   r   )r9   r   r   r   r   s        r<   
parse_withParser.parse_with  s    zzdkk!2!9!9:&(%'kk!!&&+5""7+--/FNN7#NN6"KKx(MM$//12 kk!!&&+5 ))*;)N	r?   c                    [         R                  " [        U R                  5      R                  S9n[         R
                  " SU R                  5       5      /Ul        U R                  SSS9Ul	        [         R                  " U/5      $ )Nrk   r   )zname:endautoescapeTr   )r   ScopedEvalContextModifierr   r0   rA   Keywordr   optionsr   r   Scoper9   r   s     r<   parse_autoescapeParser.parse_autoescape"  sh    ..d4;;6G6N6NOlD4I4I4KLM))*At)T	{{D6""r?   c                    [         R                  " [        U R                  5      R                  S9nU R                  R                  S5      R                  Ul        U R                  R                  S5      Ul	        U R                  R                  S5      Ul
        U R                  R                  R                  S:X  a  U R                  S5        U R                  SSS	9Ul        UR                  (       af  UR                   HV  n[!        U[         R"                  5      (       a#  [%        S
 UR                    5       5      (       d  ME  U R                  S5        MX     U R                  R                  SUR                  -   5        U$ )Nrk   r*   zname:scopedzname:requiredr   zpBlock names in Jinja have to be valid Python identifiers and may not contain hyphens, use an underscore instead.)zname:endblockTr   c              3      #    U  HJ  n[        U[        R                  5      (       + =(       d    UR                  R	                  5       (       + v   ML     g 7fN)
isinstancer   TemplateDatadataisspace).0output_nodes     r<   	<genexpr>%Parser.parse_block.<locals>.<genexpr>>  sI      B (7 #;0B0BCC 6&++33556'6s   AAz7Required blocks can only contain comments or whitespacezname:)r   Blockr   r0   rA   r   rw   r*   r   scopedrequiredrD   re   rE   r   r   r   Outputany)r9   r   	body_nodes      r<   parse_blockParser.parse_block(  s&   {{$t{{"3":":;KK&&v.44	kk))-8++O<
 ;;##u,II?
 ))*<$)O	
 ==!YY	!)U\\::c B (1B ? ?
 IIWX ' 	Gdii/0r?   c                     [         R                  " [        U R                  5      R                  S9nU R                  5       Ul        U$ Nrk   )r   Extendsr   r0   rA   r   templater   s     r<   parse_extendsParser.parse_extendsH  s4    }}D$5$<$<=--/r?   r   defaultc                 J   U R                   R                  R                  SS5      (       aq  U R                   R                  5       R	                  S5      (       aC  [        U R                   5      R                  S:H  Ul        U R                   R                  5         U$ X!l        U$ )Nz	name:withzname:withoutname:contextr   )	r0   rD   rf   lookr   r   rw   with_contextskip)r9   r   r   s      r<   parse_import_contextParser.parse_import_contextM  s     ;;''
 
kk %%n55 $T[[ 1 7 76 ADKK  !(r?   c                    [         R                  " [        U R                  5      R                  S9nU R                  5       Ul        U R                  R                  R                  S5      (       aQ  U R                  R                  5       R                  S5      (       a#  SUl
        U R                  R                  S5        OSUl
        U R                  US5      $ )Nrk   zname:ignorezname:missingT   F)r   Includer   r0   rA   r   r   rD   r   r   ignore_missingr   r   r   s     r<   parse_includeParser.parse_includeY  s    }}D$5$<$<=--/;;##M22t{{7G7G7I7N7N8
 8
 #'DKKQ"'D((t44r?   c                 $   [         R                  " [        U R                  5      R                  S9nU R                  5       Ul        U R                  R                  S5        U R                  SS9R                  Ul
        U R                  US5      $ )Nrk   name:asT	name_onlyF)r   Importr   r0   rA   r   r   r   r   r*   r   r   r   s     r<   parse_importParser.parse_importe  so    ||4#4#;#;<--/9%...>CC((u55r?   c                 0  ^ ^ [         R                  " [        T R                  5      R                  S9mT R                  5       Tl        T R                  R                  S5        / Tl        S[        4UU 4S jjn TR                  (       a  T R                  R                  S5        T R                  R                  R                  S:X  Ga  U" 5       (       a  GO$T R                  SS9nUR                  R                  S	5      (       a  T R                  S
UR                  [         S9  T R                  R#                  S5      (       aA  T R                  SS9nTR                  R%                  UR                  UR                  45        O%TR                  R%                  UR                  5        U" 5       (       d$  T R                  R                  R                  S:w  a  OOT R                  R                  S5        GM  ['        TS5      (       d  STl        T$ )Nrk   zname:importr-   c                  .  > TR                   R                  R                  S;   ap  TR                   R                  5       R	                  S5      (       aB  [        TR                   5      R                  S:H  T l        TR                   R                  5         gg)N>   r   withoutr   r   TF)r0   rD   rw   r   r   r   r   r   )r   r9   s   r<   parse_context(Parser.parse_from.<locals>.parse_contextr  sr    {{""(( -  ++""$)).99$($5$;$;v$E!  "r?   Tr   r*   r   _z4names starting with an underline can not be imported)rB   r   r   F)r   
FromImportr   r0   rA   r   r   r   namesboolrD   re   r   r*   
startswithrE   r   r   rP   hasattrr   )r9   r   r   aliasr   s   `   @r<   
parse_fromParser.parse_froml  s   tDKK'8'?'?@--/=)
	t 	 	 zz""7+{{""''61 ??11D1A;;))#..IIN2  
 ;;&&y11 44t4DEJJ%%v{{EJJ&?@JJ%%fkk2 ??dkk&9&9&>&>'&I 'J ""6*+ , t^,, %Dr?   c                 z   / =o!l         / =o1l        U R                  R                  S5        U R                  R                  R
                  S:w  a  U(       a  U R                  R                  S5        U R                  SS9nUR                  S5        U R                  R                  S5      (       a   UR                  U R                  5       5        OU(       a  U R                  S5        UR                  U5        U R                  R                  R
                  S:w  a  M  U R                  R                  S5        g )	Nlparenrd   r   Tr   r   r   z-non-default argument follows default argument)argsdefaultsr0   r   rD   re   r   r   r   rP   r   rE   )r9   r   r  r  args        r<   parse_signatureParser.parse_signature  s    y#%%=8$kk!!&&(2""7+**T*:CKK {{""8,, 5 5 78		IJKK kk!!&&(2 	8$r?   c                    [         R                  " [        U R                  5      R                  S9nU R                  R
                  R                  S:X  a  U R                  U5        O/ Ul        / Ul	        U R                  5       n[        U[         R                  5      (       d  U R                  SUR                  5        X!l        U R                  SSS9Ul        U$ )Nrk   r  zexpected call)zname:endcallTr   )r   	CallBlockr   r0   rA   rD   re   r
  r  r  r   r   CallrE   ru   r   r   )r9   r   	call_nodes      r<   r{   Parser.parse_call_block  s    d4;;&7&>&>?;;##x/  &DIDM))+	)UZZ00IIot{{3	))*;)N	r?   c                     [         R                  " [        U R                  5      R                  S9nU R                  S SS9Ul        U R                  SSS9Ul        U$ )Nrk   T)start_inline)zname:endfilterr   )	r   FilterBlockr   r0   rA   r   rv   r   r   r   s     r<   r|   Parser.parse_filter_block  sU      T[[(9(@(@A''4'@))*=4)P	r?   c                     [         R                  " [        U R                  5      R                  S9nU R                  SS9R                  Ul        U R                  U5        U R                  SSS9Ul	        U$ )Nrk   Tr   )zname:endmacror   )
r   Macror   r0   rA   r   r*   r
  r   r   r   s     r<   parse_macroParser.parse_macro  se    {{$t{{"3":":;,,t,<AA	T"))*<$)O	r?   c                    [         R                  " [        U R                  5      R                  S9n/ Ul         U R                  R
                  R                  S:w  a{  UR                   (       a  U R                  R                  S5        UR                   R                  U R                  5       5        U R                  R
                  R                  S:w  a  M{  U$ )Nrk   rc   r   )
r   r   r   r0   rA   rD   re   r   rP   r   r   s     r<   parse_printParser.parse_print  s    ||4#4#;#;<
kk!!&&+5zz""7+JJd3356 kk!!&&+5 r?   
with_tupler   zte.Literal[True]c                     g r    )r9   r  r   s      r<   r   Parser.parse_assign_target  s     r?   r   c                     g r   r  )r9   r  r   r`   r   s        r<   r   r    s     9<r?   c                    U(       aF  U R                   R                  S5      n[        R                  " UR                  SUR
                  S9nO9U(       a  U R                  SUUS9nOU R                  US9nUR                  S5        UR                  5       (       dA  U R                  S[        U5      R                  R                  5       < 3UR
                  5        U$ )a  Parse an assignment target.  As Jinja allows assignments to
tuples, this function can parse all allowed assignment targets.  Per
default assignments to tuples are parsed, that can be disable however
by setting `with_tuple` to `False`.  If only assignments to names are
wanted `name_only` can be set to `True`.  The `extra_end_rules`
parameter is forwarded to the tuple parsing function.  If
`with_namespace` is enabled, a namespace assignment may be parsed.
r*   storerk   T)
simplifiedr`   r   r   zcan't assign to )r0   r   r   Namerw   rA   r   parse_primaryr   
can_assignrE   re   __name__lower)r9   r  r   r`   r   r~   r   s          r<   r   r    s    " KK&&v.EZZWU\\JF))#$3#1 *  ++>+JNN7#  ""II"4<#8#8#>#>#@"CDfmm r?   r   c                 P    U(       a  U R                  5       $ U R                  5       $ )zParse an expression.  Per default all expressions are parsed, if
the optional `with_condexpr` parameter is set to `False` conditional
expressions are not parsed.
)parse_condexprparse_orr9   r   s     r<   r   Parser.parse_expression   s"    
 &&((}}r?   c                    U R                   R                  R                  nU R                  5       nU R                   R	                  S5      (       a  U R                  5       nU R                   R	                  S5      (       a  U R                  5       nOS n[        R                  " X2XAS9nU R                   R                  R                  nU R                   R	                  S5      (       a  M  U$ )Nr   r   rk   )r0   rD   rA   r+  r   r*  r   CondExpr)r9   rA   expr1expr2expr3s        r<   r*  Parser.parse_condexpr	  s    $$++ kk!!),,MMOE{{"";//++-NN5FE[[((//F kk!!),, r?   c                 t   U R                   R                  R                  nU R                  5       nU R                   R	                  S5      (       ag  U R                  5       n[
        R                  " X#US9nU R                   R                  R                  nU R                   R	                  S5      (       a  Mg  U$ )Nname:orrk   )r0   rD   rA   	parse_andr   r   Orr9   rA   leftrights       r<   r+  Parser.parse_or  s    $$++~~kk!!),,NN$E88D7D[[((//F kk!!),, r?   c                 t   U R                   R                  R                  nU R                  5       nU R                   R	                  S5      (       ag  U R                  5       n[
        R                  " X#US9nU R                   R                  R                  nU R                   R	                  S5      (       a  Mg  U$ )Nname:andrk   )r0   rD   rA   	parse_notr   r   Andr8  s       r<   r6  Parser.parse_and!  s    $$++~~kk!!*--NN$E99T8D[[((//F kk!!*-- r?   c                     U R                   R                  R                  S5      (       aB  [        U R                   5      R                  n[
        R                  " U R                  5       US9$ U R                  5       $ )Nname:notrk   )	r0   rD   r   r   rA   r   Notr>  parse_compare)r9   rA   s     r<   r>  Parser.parse_not*  sX    ;;##J//$++&--F99T^^-f==!!##r?   c                    U R                   R                  R                  nU R                  5       n/ n U R                   R                  R                  nU[
        ;   aI  [        U R                   5        UR                  [        R                  " X@R                  5       5      5        OU R                   R                  S5      (       a5  UR                  [        R                  " SU R                  5       5      5        OU R                   R                  R                  S5      (       a~  U R                   R                  5       R                  S5      (       aP  U R                   R                  S5        UR                  [        R                  " SU R                  5       5      5        OO#U R                   R                  R                  nGM  U(       d  U$ [        R                  " X#US9$ )Nr   inrB  r   notinrk   )r0   rD   rA   parse_math1re   _compare_operatorsr   rP   r   Operandr   r   r   r   Compare)r9   rA   r   ops
token_types        r<   rD  Parser.parse_compare0  sS   $$++!,,11J//T[[!

5==5E5E5GHI$$Y//

5==t/?/?/ABC$$))*55$++:J:J:L:Q:Q; ;   #

5==$2B2B2DEF[[((//F  K}}Tv66r?   c                    U R                   R                  R                  nU R                  5       nU R                   R                  R                  S;   a  [
        U R                   R                  R                     n[        U R                   5        U R                  5       nU" X$US9nU R                   R                  R                  nU R                   R                  R                  S;   a  M  U$ )N)r   r   rk   )r0   rD   rA   parse_concatre   r$   r   r9   rA   r9  clsr:  s        r<   rI  Parser.parse_math1G  s    $$++  "kk!!&&.8dkk11667C%%'Et62D[[((//F kk!!&&.8 r?   c                    U R                   R                  R                  nU R                  5       /nU R                   R                  R                  S:X  aZ  [        U R                   5        UR                  U R                  5       5        U R                   R                  R                  S:X  a  MZ  [        U5      S:X  a  US   $ [        R                  " X!S9$ )Ntilder   r   rk   )
r0   rD   rA   parse_math2re   r   rP   lenr   Concat)r9   rA   r  s      r<   rQ  Parser.parse_concatR  s    $$++  "#kk!!&&'1KK((*+ kk!!&&'1 t9>7N||D00r?   c                    U R                   R                  R                  nU R                  5       nU R                   R                  R                  S;   a  [
        U R                   R                  R                     n[        U R                   5        U R                  5       nU" X$US9nU R                   R                  R                  nU R                   R                  R                  S;   a  M  U$ )N)r    r!   r"   r#   rk   )r0   rD   rA   	parse_powre   r$   r   rR  s        r<   rW  Parser.parse_math2\  s    $$++~~kk!!&&*KKdkk11667CNN$Et62D[[((//F kk!!&&*KK r?   c                    U R                   R                  R                  nU R                  5       nU R                   R                  R                  S:X  a  [        U R                   5        U R                  5       n[        R                  " X#US9nU R                   R                  R                  nU R                   R                  R                  S:X  a  M  U$ )Npowrk   )r0   rD   rA   parse_unaryre   r   r   Powr8  s       r<   r\  Parser.parse_powg  s    $$++!kk!!&&%/$$&E99T8D[[((//F	 kk!!&&%/
 r?   with_filterc                    U R                   R                  R                  nU R                   R                  R                  nUS:X  a:  [	        U R                   5        [
        R                  " U R                  S5      US9nOPUS:X  a:  [	        U R                   5        [
        R                  " U R                  S5      US9nOU R                  5       nU R                  U5      nU(       a  U R                  U5      nU$ )Nr   Frk   r   )r0   rD   re   rA   r   r   Negr`  Posr%  parse_postfixparse_filter_expr)r9   rc  rN  rA   r   s        r<   r`  Parser.parse_unaryq  s    [[((--
$$++ 99T--e4VDD5 99T--e4VDD%%'D!!$'))$/Dr?   c                    U R                   R                  nUR                  S:X  GaB  [        U R                   5        UR                  S;   a.  [
        R                  " UR                  S;   UR                  S9nU$ UR                  S;   a!  [
        R                  " SUR                  S9nU$ U(       a  U R                   R                  R                  S:X  af  [        U R                   5        U R                   R                  S5      n[
        R                  " UR                  UR                  UR                  S9nU$ [
        R                  " UR                  SUR                  S9n U$ UR                  S	:X  a  [        U R                   5        UR                  /nUR                  nU R                   R                  R                  S	:X  aj  UR                  U R                   R                  R                  5        [        U R                   5        U R                   R                  R                  S	:X  a  Mj  [
        R                  " S
R                  U5      US9nU$ UR                  S;   a@  [        U R                   5        [
        R                  " UR                  UR                  S9nU$ UR                  S:X  aA  [        U R                   5        U R                  SS9nU R                   R                  S5        U$ UR                  S:X  a  U R                  5       nU$ UR                  S:X  a  U R                  5       nU$ U R!                  S[#        U5      < 3UR                  5        W$ )zxParse a name or literal value. If ``with_namespace`` is enabled, also
parse namespace attr refs, for use in assignments.r*   )truefalseTrueFalse)rk  rm  rk   )noneNoneNdotloadstring )integerfloatr  T)explicit_parenthesesrd   lbracketlbracezunexpected )r0   rD   re   r   rw   r   ConstrA   r   NSRefr$  rP   rN   r   
parse_list
parse_dictrE   r   )r9   r   r~   r   attrbufrA   s          r<   r%  Parser.parse_primary  s    ##::{{@@{{5;;2B#B5<<X@ ?  00{{4=< ;  DKK$7$7$<$<$E T[[!{{))&1{{5;;

5<<P0 - zz%++vellK, + ZZ8#;;-C\\F++%%**h6

4;;..445T[[! ++%%**h6 ;;rwws|F;D  ZZ//;;u{{5<<@D  ZZ8####>DKKx(  ZZ:%??$D
 	 ZZ8#??$D  IIN5$9#<=u||Lr?   r#  rw  c                   ^ ^^ T R                   R                  R                  nU(       a  S[        R                  4U U4S jjnOS[        R                  4U U4S jjn/ nSn	 U(       a  T R                   R                  S5        T R                  U5      (       a  O`UR                  U" 5       5        T R                   R                  R                  S:X  a  Sn	OO"T R                   R                  R                  nM  U	(       dE  U(       a  US   $ U(       d2  T R                  S[        T R                   R                  5      < 35        [        R                  " US	US
9$ )ao  Works like `parse_expression` but if multiple expressions are
delimited by a comma a :class:`~jinja2.nodes.Tuple` node is created.
This method could also return a regular expression instead of a tuple
if no commas where found.

The default parsing mode is a full tuple.  If `simplified` is `True`
only names and literals are parsed; ``with_namespace`` allows namespace
attr refs as well. The `no_condexpr` parameter is forwarded to
:meth:`parse_expression`.

Because tuples do not require delimiters and may end in a bogus comma
an extra hint is needed that marks the end of a tuple.  For example
for loops support tuples between `for` and `in`.  In that case the
`extra_end_rules` is set to ``['name:in']``.

`explicit_parentheses` is true if the parsing was triggered by an
expression in parentheses.  This is used to figure out if an empty
tuple is a valid expression or not.
r-   c                  "   > T R                  TS9$ )Nr   )r%  )r9   r   s   r<   r5   !Parser.parse_tuple.<locals>.parse  s    )))HHr?   c                  "   > T R                  TS9$ )Nr   )r   r,  s   r<   r5   r    s    ,,=,IIr?   FTr   r   zExpected an expression, got rr  rk   )r0   rD   rA   r   Exprr   rg   rP   re   rE   r   Tuple)
r9   r#  r   r`   rw  r   rA   r5   r  is_tuples
   ` `  `    r<   r   Parser.parse_tuple  s$   6 $$++I5:: I I
J5:: J J $&""7+  11KK {{""''72[[((//F  Aw (		*4;;+>+>?BD
 {{477r?   c                    U R                   R                  S5      n/ nU R                   R                  R                  S:w  a  U(       a  U R                   R                  S5        U R                   R                  R                  S:X  a  OEUR	                  U R                  5       5        U R                   R                  R                  S:w  a  M  U R                   R                  S5        [        R                  " X!R                  S9$ )Nrx  rbracketr   rk   )	r0   r   rD   re   rP   r   r   ListrA   )r9   r~   itemss      r<   r|  Parser.parse_list  s    "":.$&kk!!&&*4""7+{{""'':5LL..01 kk!!&&*4 	:&zz%55r?   c                    U R                   R                  S5      n/ nU R                   R                  R                  S:w  a  U(       a  U R                   R                  S5        U R                   R                  R                  S:X  a  OU R	                  5       nU R                   R                  S5        U R	                  5       nUR                  [        R                  " X4UR                  S95        U R                   R                  R                  S:w  a  M  U R                   R                  S5        [        R                  " X!R                  S9$ )Nry  rbracer   r   rk   )
r0   r   rD   re   r   rP   r   PairrA   Dict)r9   r~   r  keyrw   s        r<   r}  Parser.parse_dict  s    ""8,$&kk!!&&(2""7+{{""''83'')CKKw'))+ELLCszzBC kk!!&&(2 	8$zz%55r?   c                      U R                   R                  R                  nUS:X  d  US:X  a  U R                  U5      nOUS:X  a  U R	                  U5      nO U$ M[  )Nrq  rx  r  )r0   rD   re   parse_subscript
parse_callr9   r   rN  s      r<   rg  Parser.parse_postfix  s^    ,,11JU"jJ&>++D1 x't, r?   c                 &    U R                   R                  R                  nUS:X  a  U R                  U5      nOWUS:X  a6  U R                   R                  R                  S:X  a  U R                  U5      nOUS:X  a  U R                  U5      nO U$ M  )Npiper*   isr  )r0   rD   re   r   rw   
parse_testr  r  s      r<   rh  Parser.parse_filter_expr  s    ,,11JV#((.v%$++*=*=*C*Ct*Kt, x't, r?   c                 T   [        U R                  5      nUR                  S:X  a  U R                  R                  n[        U R                  5        UR                  S:X  a*  [        R
                  " XR                  SUR                  S9$ UR                  S:w  a  U R                  SUR                  5        [        R                  " UR                  UR                  S9n[        R                  " XSUR                  S9$ UR                  S:X  a  / nU R                  R                  R                  S:w  ag  U(       a  U R                  R                  S	5        UR                  U R                  5       5        U R                  R                  R                  S:w  a  Mg  U R                  R                  S5        [        U5      S
:X  a  US   nO [        R                  " USUR                  S9n[        R                  " XSUR                  S9$ U R                  SUR                  5        g )Nrq  r*   rr  rk   ru  zexpected name or numberrx  r  r   r   r   zexpected subscript expression)r   r0   re   rD   r   Getattrrw   rA   rE   rz  Getitemr   rP   parse_subscribedrX  r  )r9   r   r~   
attr_tokenr	  r  s         r<   r  Parser.parse_subscript)  s    T[[! ::,,J&(}}**F5<<  I-		3Z5F5FG++j..z7H7HIC==F5<<HH::#')D++%%**j8KK&&w/D1134 ++%%**j8 KKz*4yA~1gkk$u||D==F5<<HH		15<<@r?   c                    U R                   R                  R                  nU R                   R                  R                  S:X  a  [	        U R                   5        S /nONU R                  5       nU R                   R                  R                  S:w  a  U$ [	        U R                   5        U/nU R                   R                  R                  S:X  a  UR                  S 5        OUU R                   R                  R                  S;  a   UR                  U R                  5       5        OUR                  S 5        U R                   R                  R                  S:X  ak  [	        U R                   5        U R                   R                  R                  S;  a   UR                  U R                  5       5        O#UR                  S 5        OUR                  S 5        [        R                  " USU06$ )Nr   )r  r   rA   )	r0   rD   rA   re   r   r   rP   r   Slice)r9   rA   r  r   s       r<   r  Parser.parse_subscribedH  s^   $$++ ;;##w.6D((*D{{""''726D;;##w.KK[[  %%-BBKK--/0KK;;##w.{{""''/DDD1134D!KK{{40&00r?   c                 j  ^ ^	 T R                   R                  S5      m	/ n/ nS nS nSnS[        SS 4U U	4S jjnT R                   R                  R                  S:w  Ga8  U(       aA  T R                   R                  S5        T R                   R                  R                  S:X  a  GOT R                   R                  R                  S:X  a<  U" US L =(       a    US L 5        [        T R                   5        T R                  5       nGOgT R                   R                  R                  S	:X  a1  U" US L 5        [        T R                   5        T R                  5       nGOT R                   R                  R                  S
:X  a  T R                   R                  5       R                  S:X  a  U" US L 5        T R                   R                  R                  nT R                   R                  S5        T R                  5       nUR                  [        R                  " XxUR                  S95        OBU" US L =(       a    US L =(       a    U(       + 5        UR                  T R                  5       5        SnT R                   R                  R                  S:w  a  GM8  T R                   R                  S5        XX44$ )Nr  Fr   r-   c                 N   > U (       d  TR                  STR                  5        g g )Nz+invalid syntax for function call expression)rE   rA   )r   r9   r~   s    r<   ensure&Parser.parse_call_args.<locals>.ensurew  s    		GV r?   rd   r   r    r_  r*   r   r   rk   T)r0   r   r   rD   re   r   r   r   rw   r   rP   r   r   rA   )
r9   r  kwargsdyn_args
dyn_kwargsrequire_commar  r  rw   r~   s
   `        @r<   parse_call_argsParser.parse_call_argsh  s+    ""8,
	W 	W$ 	W 	W kk!!&&(2""7+ ;;&&++x7{{""''50x4'>J$,>?T[[!002$$))U2zT)*T[[!!224
 KK'',,6((*//8; :-.++--33CKK$$Q' 113EMM%--5<<"PQ 8t+Q
d0BQ6zRKK 5 5 78 MA kk!!&&(2D 	8$X11r?   c           	          U R                   R                  nU R                  5       u  p4pV[        R                  " XXEXbR
                  S9$ r   )r0   rD   r  r   r  rA   )r9   r   r~   r  r  r  r  s          r<   r  Parser.parse_call  s=     ##-1-A-A-C*hzz$f
<<XXr?   r  c           
         U R                   R                  R                  S:X  d  U(       Ga`  U(       d  [        U R                   5        U R                   R	                  S5      nUR
                  nU R                   R                  R                  S:X  af  [        U R                   5        USU R                   R	                  S5      R
                  -   -  nU R                   R                  R                  S:X  a  Mf  U R                   R                  R                  S:X  a  U R                  5       u  pVpxO/ n/ nS =px[        R                  " XXVXxUR                  S9nSnU R                   R                  R                  S:X  a  GMV  U(       a  GM`  U$ )Nr  r*   rq  rJ   r  rk   F)
r0   rD   re   r   r   rw   r  r   FilterrA   )	r9   r   r  r~   r*   r  r  r  r  s	            r<   r   Parser.parse_filter  s4    kk!!&&&0LT[[!KK&&v.E;;D++%%**e3T[[!dkk008>>>> ++%%**e3 {{""''83595I5I5K2h
(,,<<D(u||D !L# kk!!&&&0LL$ r?   c           
         [        U R                  5      nU R                  R                  R                  S5      (       a  [        U R                  5        SnOSnU R                  R	                  S5      R
                  nU R                  R                  R                  S:X  af  [        U R                  5        USU R                  R	                  S5      R
                  -   -  nU R                  R                  R                  S:X  a  Mf  S =pV/ nU R                  R                  R                  S:X  a  U R                  5       u  ppVOU R                  R                  R                  S;   a  U R                  R                  R                  S	S
S5      (       d`  U R                  R                  R                  S5      (       a  U R                  S5        U R                  5       n	U R                  U	5      n	U	/nO/ n[        R                  " XXXVUR                  S9nU(       a  [        R                  " XR                  S9nU$ )NrB  TFr*   rq  rJ   r  >   r*   rv  ry  r  rs  ru  rx  r   r5  r=  zname:isz'You cannot chain multiple tests with isrk   )r   r0   rD   r   r   rw   re   r  rf   rE   r%  rg  r   TestrA   rC  )
r9   r   r~   negatedr*   r  r  r  r  arg_nodes
             r<   r  Parser.parse_test  s   T[[!;;##J//GG{{!!&)//kk!!&&%/C$++,,V4::::D kk!!&&%/ !%$(*;;##x/151E1E1G.D(J[[  %% *
 
 ++%%..{IzRR{{""''	22		CD))+H))(3H:DDzzh5<<
 99T,,7Dr?   c                   ^^ / m/ mTR                   nUb  U R                  R                  U5        SUU4S jjn U R                  (       Ga  U R                  R                  nUR                  S:X  aW  UR
                  (       a/  U" [        R                  " UR
                  UR                  S95        [        U R                  5        GO<UR                  S:X  aF  [        U R                  5        U" U R                  SS95        U R                  R                  S5        OUR                  S:X  a  U" 5         [        U R                  5        UbH  U R                  R                  R                  " U6 (       a   TUb  U R                  R                  5         $ $ U R                  5       n[        U[         5      (       a  TR#                  U5        OTR                  U5        U R                  R                  S	5        O[%        S
5      eU R                  (       a  GM  U" 5         Ub  U R                  R                  5         T$ ! Ub  U R                  R                  5         f f = f)Nc                     > T(       a<  TS   R                   n TR                  [        R                  " TS S  U S95        TS S 2	 g g )Nr   rk   )rA   rP   r   r   )rA   r   data_buffers    r<   
flush_data#Parser.subparse.<locals>.flush_data  s<    $Q..ELLQGHN r?   r   rk   variable_beginTr   rb   block_beginrc   zinternal parsing error)r-   N)rP   r8   r0   rD   re   rw   r   r   rA   r   r   r   rf   rz   r   r   r\   extendAssertionError)r9   rZ   add_datar  r~   rp   r   r  s         @@r<   r   Parser.subparse  s    $&*,%%!!!((4	# 	#	,+++++::'{{ !3!3EKK!UV%ZZ#33%T--D-ABKK&&~6ZZ=0L%!-$++2E2E2N2N#3  $ %%%))+ & --/B!"d++BBKK&&{3()ABB1 +++4 L%%%))+ %%%))+ &s   D=I  B I  I    I c                     [         R                  " U R                  5       SS9nUR                  U R                  5        U$ )z0Parse the whole template into a `Template` node.r   rk   )r   Templater   set_environmentr(   )r9   r   s     r<   r5   Parser.parse  s1    :t//0r?   )	r8   r6   r7   r1   r(   r2   r+   r*   r0   )NNNr   )NN)F)..)TFNF)T)FTNFF)br'  
__module____qualname____firstlineno____doc__strtOptionalr=   r   intTyperE   r  r  rU   rX   r^   r   rg   r   rn   rq   Unionro   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   r
  r  r{   r  r|   r  r  r   r  typingoverloadr$  r   r{  r  r   r*  r+  r6  r>  rD  rI  rQ  rW  r\  r`  r%  r   r|  r  r}  rg  rh  r  r  r  r  r   r  r  r  r   r  r   r  r5   __static_attributes__r  r?   r<   r&   r&   0   s    !%$(!%>"> > jjo	>
 **S/> zz#> 
>4 #'+>	99 

39 VV'(	9
 
9&-jjo&- S 12&- 

3	&-
 
&-R 48??!"C?	? 59"&	/JJqwwsCx01	/ 

3	/ 
		/ @D zz!''#s(*;<	ajjo ASAS &QVVEJJ5G)G!H &< BG''#s(+:>	


	:	K1775<<1B1B#BC 	KT599 T&%(( $EJJ "#%++ #U[[ @u}} 

"
-1
	

5u}} 
56ell 6(E,, (T%J %4 % %// E$5$5 U[[ U\\  __FI1C	  __  9=$<< < AGGCH$56	<
 < 
ejj%++5	6< <  9=$%% % AGGCH$56	%
 % 
ejj%++5	6%Nd ejj 

 %** 5:: $5:: $7uzz 7.	UZZ 	1ejj 1	UZZ 	5:: t uzz $(D (UZZ (X !"9=%*$C8C8 C8 AGGCH$56	C8
 #C8 C8 
ejj(	)C8J
6EJJ 
66EJJ 6%**  ejj UZZ AJJA	
-	.A>1%** 1@62	
	uzz	u}}	

5::	

5::	 
62pYuzz Yejj Y BGJJuzz*:>	
EJJ	.$uzz $ejj $N ;?/**QWWS#X%67/	


	/bu~~ r?   r&   )'r  r  r  rt  r   
exceptionsr   r   lexerr   r   TYPE_CHECKINGtyping_extensionster(   r	   TypeVarr   r   r
   r  r  r   	frozensetrx   rJ  AddSubMulDivFloorDivModr$   r  r  r  r  __annotations__r&   r  r?   r<   <module>r     s    >    . + ! &??"(+U\\5==IYY|U[[%//B
   GH  99999999990QVVC

++, i ir?   