3
G\o # @ s d Z ddlZddlmZ ddlmZ ddlmZmZm Z m
Z
ddlmZ ddl
mZ edZejd ejZejd
ejZejdZyedd
d W n" ek
r ejdZdZY nBX ddlmZ ejdjejZdZddlZejd= ddlZe`[ejdZejdZ edZ!edZ"edZ#edZ$edZ%edZ&edZ'edZ(edZ)ed Z*ed!Z+ed"Z,ed#Z-ed$Z.ed%Z/ed&Z0ed'Z1ed(Z2ed)Z3ed*Z4ed+Z5ed,Z6ed-Z7ed.Z8ed/Z9ed0Z:ed1Z;ed2Zed5Z?ed6Z@ed7ZAed8ZBed9ZCed:ZDed;ZEed<ZFed=ZGed>ZHed?ZIed@ZJedAZKedBZLedCZMedDZNedEZOedFZPedGZQe!e9e%e(e1e0e4e:e,e6e-e7e+e5e'e2e)e*e.e/e"e&e#e3e$e8dHZReSdIdJ e eRD ZTejdKdLjUdMdN eVeRdOdP dQD ZWeXeGeIeHe;eLeMeNgZYeXe;eOeIeNgZZdRdS Z[dTdU Z\dVdW Z]dXdY Z^dZd[ Z_G d\d] d]e`ZaG d^d_ d_ebZceG d`da dae`ZdeG dbdc dce`Zeddde ZfG dfdg dge`ZgdS )ha
jinja2.lexer
~~~~~~~~~~~~
This module implements a Jinja / Python combination lexer. The
`Lexer` class provided by this module is used to do some preprocessing
for Jinja.
On the one hand it filters out invalid operators like the bitshift
operators we don't allow in templates. On the other hand it separates
template code and python code in expressions.
:copyright: (c) 2017 by the Jinja Team.
:license: BSD, see LICENSE for more details.
N)deque)
itemgetter)implements_iteratorintern iteritems text_type)TemplateSyntaxError)LRUCache2 z\s+z7('([^'\\]*(?:\\.[^'\\]*)*)'|"([^"\\]*(?:\\.[^"\\]*)*)")z\d+u fööz evalz[a-zA-Z_][a-zA-Z0-9_]*F)_identifierz[\w{0}]+Tzjinja2._identifierz(?z>=