4@54 I d Z ddlZddlmZ ddlmZ ddlmZ ddlm Z ddlm Z dd lmZ dd lmZ ddl mZ ddlmZ ed Z ej dej Z ej d Z ej dej Z ej d Z ej dej ej z Z eddd ddlmZ dZn# e $ r ej d ZdZY nw xY w e d Z! e d Z" e d Z# e d Z$ e d Z% e d Z& e d Z' e d! Z( e d" Z) e d# Z* e d$ Z+ e d% Z, e d& Z- e d' Z. e d( Z/ e d) Z0 e d* Z1 e d+ Z2 e d, Z3 e d- Z4 e d. Z5 e d/ Z6 e d0 Z7 e d1 Z8 e d2 Z9 e d3 Z: e d4 Z; e d5 Z< e d6 Z= e d7 Z> e d8 Z? e d9 Z@ e d: ZA e d; ZB e d< ZC e d= ZD e d> ZE e d? ZF e d@ ZG e dA ZH e dB ZI e dC ZJ e dD ZK e dE ZL e dF ZM e dG ZN e dH ZO e dI ZP e dJ ZQi dKe!dLe9dMe%dNe(dOe1dPe0dQe4dRe:dSe,dTe6dUe-dVe7dWe+dXe5dYe'dZe2d[e)e*e.e/e"e&e#e3e$e8d\ ZR eSd] eeR D ZT eUeR eUeT k s J d^ ej d_d`V da eWeRdb c D z ZX eYeGeIeHe;eLeMeNg ZZ eYe;eOeIeNg Z[dd Z\de Z]df Z^dg Z_dh Z` G di djea Zb G dk dlec Zde G dm dnea Zee G do dpea Zfdq Zg G dr dsec Zh G dt duea ZidS )vzImplements a Jinja / Python combination lexer. The ``Lexer`` class is used to do some preprocessing. It filters out invalid operators like the bitshift operators we don't allow in templates. It separates template code and python code in expressions. N)literal_eval)deque) itemgetter )implements_iterator)intern) iteritems) text_type)TemplateSyntaxError)LRUCache2 z\s+z(\r\n|\r|\n)z7('([^'\\]*(?:\\.[^'\\]*)*)'|"([^"\\]*(?:\\.[^"\\]*)*)")z (\d+_)*\d+z (?