
    w:i6                         d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	m
Z
 ddlmZ dgZd	Zd
Zedz   ZdZ ej        ddde          ZddZd ZdS )zString interpolation routines, i.e. the splitting up a given text into some
parts that are literal strings, and others that are Python expressions.
    )chainN)PseudoToken)TEXT)TemplateSyntaxErrorEXPR)
Expressioninterpolatezrestructuredtext en5abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_z.0123456789$z(?s)z)[uU]?[rR]?("""|\'\'\')((?<!\\)\\\1|.)*?\1|strictc           	   #     K   |||g}g }d}t          t          | ||          dg          D ]Y\  }}	|r|r&t          d                    |          |fV  |dd= d}|	r	 t	          |	                                |d         |d         |          }
t          |
t          |          fV  na# t          $ r-}t          |||d         |d         |j
        pdz             d}~ww xY wn&|                    |	           |t          |          }d|	v rY|	                                }|dxx         t          |          dz
  z  cc<   |dxx         t          |d	                   z  cc<   <|dxx         t          |	          z  cc<   [dS )
a  Parse the given string and extract expressions.
    
    This function is a generator that yields `TEXT` events for literal strings,
    and `EXPR` events for expressions, depending on the results of parsing the
    string.
    
    >>> for kind, data, pos in interpolate("hey ${foo}bar"):
    ...     print('%s %r' % (kind, data))
    TEXT 'hey '
    EXPR Expression('foo')
    TEXT 'bar'
    
    :param text: the text to parse
    :param filepath: absolute path to the file in which the text was found
                     (optional)
    :param lineno: the line number at which the text was found (optional)
    :param offset: the column number at which the text starts in the source
                   (optional)
    :param lookup: the variable lookup mechanism; either "lenient" (the
                   default), "strict", or a custom lookup class
    :return: a list of `TEXT` and `EXPR` events
    :raise TemplateSyntaxError: when a syntax error in an expression is
                                encountered
    N)T r   r      )lookup   
r   )r   lexr   joinr   stripr   tupleSyntaxErrorr   offsetappend
splitlineslen)textfilepathlinenor   r   postextbuftextposis_exprchunkexprerrliness                U/var/www/html/trac/venv/lib/python3.11/site-packages/genshi/template/interpolation.pyr	   r	   '   s     2 VV
$CGGD#x 8 8:,GG ! ! 	% BGGG,,g5555AAAJ JJ%ekkmmSVSV-35 5 5DeCjj00000" J J J-c8SV.1!f
a.HJ J JJJ NN5!!!**5==$$&&EFFFc%jj1n$FFFFFFc%)nn$FFFFFFFc%jj FFFF1! !s   A
B**
C!4(CC!c              #     K   dx}}t          |           }d}	 |r!|                     t          |dz             }d}n|                     t          |          }|dk     s	||dz
  k    rn}| |dz            }|dk    r||k    rd| ||         fV  |dz   }d}|rt                              | |          }	|	|	                                st          d|g|dd          R  |	                                }|	j        d         \  }
}| |
|         }|dk    r|dz  }n|dk    r|dz  }|d	| |dz   |dz
           fV  n|t          v rb||k    rd| ||         fV  |}|dz  }||k     r| |         }|t          vrn|dz  }||k     d	| |dz   |                                         fV  n?|s'|t          k    r||k    rd| ||         fV  d	}|dz   }nd| ||dz            fV  |dz   }||k     rd| |d          fV  d S d S )
Nr   Fr   r   {zinvalid syntax   }T)r   findPREFIXtoken_rematchgroupr   endregs	NAMESTART	NAMECHARSr   )r   r#   r   r   r!   r3   escapednextlevelr1   tstarttendtokenchars                 r)   r   r   _   s     FS
d))CG3 	,YYvvz22FGGYYvs++FA::37**FQJ3;;||T#f*-----1*CE  tS11== ..> </6qrr{< < < <iikk$z!}VD[)C<<QJEEc\\QJE   VaZa/000000Y||T#f*-----1HC))Cyy((q	 ))
 VaZ^,224444444 	TV^^||T#f*-----G1*CC c&1*n-----1*Cg3j SyyT#$$Z y    )Nr   r   r   )__doc__	itertoolsr   retokenizer   genshi.corer   genshi.template.baser   r   genshi.template.evalr   __all____docformat__r5   r6   r/   compiler0   r	   r    r>   r)   <module>rJ      s           				                   : : : : : : : : + + + + + +/%C	%		2::000K  5! 5! 5! 5!p;  ;  ;  ;  ; r>   