Files
intellecton/venv/lib/python3.12/site-packages/jinja2/__pycache__/lexer.cpython-312.pyc
T

195 lines
31 KiB
Plaintext
Raw Normal View History

Ë
jZtã óUdZddlZddlZddlmZddlmZddlm Z ddl
m Z ddl
mZdd lmZej"r
ddlZdd
lmZed «Zej.ej0d fed
<ej4d«Zej4d«Zej4dej:«Zej4dej>ej@z«Z!ej4dej>ej@z«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 «Z0e d!«Z1e d"«Z2e d#«Z3e d$«Z4e d%«Z5e d&«Z6e d'«Z7e d(«Z8e d)«Z9e d*«Z:e d+«Z;e d,«Z<e d-«Z=e d.«Z>e d/«Z?e d0«Z@e d1«ZAe d2«ZBe d3«ZCe d4«ZDe d5«ZEe d6«ZFe d7«ZGe d8«ZHe d9«ZIe d:«ZJe d;«ZKe d<«ZLe d=«ZMe d>«ZNe d?«ZOe d@«ZPe dA«ZQe dB«ZRe dC«ZSidDe#“dEe;“dFe'“dGe*“dHe3“dIe2“dJe6“dKe<“dLe.“dMe8“dNe/“dOe9“dPe-“dQe7“dRe)“dSe4“dTe+“e,e0e1e$e(e%e5e&e:dUœ ¥ZTeTj««Dcic]\}}||Œ
c}}ZVeWeT«eWeV«k(sJdV«ej4dNdWj±dX„eYeTdY„¬Z«D««dO«ZZe[eIeKeJe=eNeOePg«Z\e[e=eQeKePg«Z]d[e^d\e^fd]„Z_d^d_d\e^fd`„Z`dae^d\e^fdb„Zadce^d\ebfdd„Zcdedfd\eej0e^e^ffdg„ZeGdh„di«ZfGdj„d_e«ZhGdk„dl«ZiGdm„dn«Zjdudo„ZkGdp„dqel«ZmGdr„dse«ZnGdt„d «Zoycc}}w)vzúImplements 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)Úinterné)Úpattern)ÚTemplateSyntaxError)ÚLRUCache)Ú Environmenté2ÚLexerÚ _lexer_cachez\s+z (\r\n|\r|\n)z7('([^'\\]*(?:\\.[^'\\]*)*)'|"([^"\\]*(?:\\.[^"\\]*)*)")z¿
(
0b(_?[0-1])+ # binary
|
0o(_?[0-7])+ # octal
|
0x(_?[\da-f])+ # hex
|
[1-9](_?\d)* # decimal
|
0(_?0)* # decimal zero
)
(?<!\.) # doesn't start with a .
(\d+_)*\d+ # digits, possibly _ separated
(
(\.(\d+_)*\d+)? # optional fractional part
e[+\-]?(\d+_)*\d+ # exponent part
|
\.(\d+_)*\d+ # required fractional part
)
ÚaddÚassignÚcolonÚcommaÚdivÚdotÚeqÚfloordivÚgtÚgteqÚlbraceÚlbracketÚlparenÚltÚlteqÚmodÚmulÚneÚpipeÚpowÚrbraceÚrbracketÚrparenÚ semicolonÚsubÚtildeÚ
whitespaceÚfloatÚintegerÚnameÚstringÚoperatorÚ block_beginÚ block_endÚvariable_beginÚ variable_endÚ raw_beginÚraw_endÚ
comment_beginÚ comment_endÚcommentÚlinestatement_beginÚlinestatement_endÚlinecomment_beginÚlinecomment_endÚ linecommentÚdataÚinitialÚeofú/z//Ú%z**ú}z==z!=ú>) z>=ú<z<=ú;zoperators droppedrPc#óFK|]}tj|«Œy­w©N)ÚreÚescape)Ú.0Úxs úO/home/antigravity/intellecton/venv/lib/python3.12/site-packages/jinja2/lexer.pyú <genexpr>rZsèø€ÒP !”˜1—ÑPùs!cót|« SrT)Úlen©rXs rYú<lambda>r^s ÌÈAËÀw€ó)ÚkeyÚ
token_typeÚreturncóØ|tvr t|Stdtdtdtdt
dt dtdtdtdtd td
td i j||«S) Nzbegin of commentzend of commentr6zbegin of statement blockzend of statement blockzbegin of print statementzend of print statementzbegin of line statementzend of line statementztemplate data / textzend of template)Úreverse_operatorsÚTOKEN_COMMENT_BEGINÚTOKEN_COMMENT_ENDÚ
TOKEN_COMMENTÚTOKEN_LINECOMMENTÚTOKEN_BLOCK_BEGINÚTOKEN_BLOCK_ENDÚTOKEN_VARIABLE_BEGINÚTOKEN_VARIABLE_ENDÚTOKEN_LINESTATEMENT_BEGINÚTOKEN_LINESTATEMENT_ENDÚ
TOKEN_DATAÚ TOKEN_EOFÚget)ras rYÚ_describe_token_typerr¥svØÔ  Ñ ÐИ9ÜÐÐÐÐ!Ð#<ÜÐ!8ÜÐÐ
÷
cˆ*
"r_ÚtokenÚTokencój|jtk(r |jSt|j«S)z#Returns a description of the token.)ÚtypeÚ
TOKEN_NAMEÚvaluerr)rss rYÚdescribe_tokenry¹s'à ‡zz”ZÒØ{‰{Ðä  §
¡
Ó +r_Úexprcódd|vr |jdd«\}}|tk(r|S|}t|«S)z0Like `describe_token` but for token expressions.rOr)Úsplitrwrr)rzrvrxs rYÚdescribe_token_exprr}Ás:à
ˆd—j‘j  aÓ(‰ ˆˆeà ”:Ò ØˆLàˆä  Ó %r_rxcó>ttj|««S)zsCount the number of newline characters in the string. This is
useful for extensions that filter a stream.
)r\Ú
newline_reÚfindall)rxs rYÚcount_newlinesrÎsô Œz×!  )r_Ú environmentr
có–tj}t|j«t||j«ft|j
«t ||j
«ft|j«t||j«fg}|j>|jt|j«td||j«zf«|j>|jt|j«td||j«zf«t|d¬«Dcgc]}|ddŒ c}Scc}w)zACompiles all the rules from the environment into a list of rules.Nz ^[ \t\v]*z(?:^|(?<=\S))[^\S\r\n]*T)Úreverser)rUrVr\Úcomment_start_stringreÚblock_start_stringriÚvariable_start_stringrkÚline_statement_prefixÚappendrmÚline_comment_prefixÚTOKEN_LINECOMMENT_BEGINÚsorted)rÚrulesrXs rYÚ
compile_rulesrÕs-ä
‰ €Aô
 × Ù
ˆk× 
ô
 × Ù
ˆk× 
ô
 × Ù
ˆk× 
ð
€Eð$×
ä™q ×!BÑ!BÓ
ô
ð×
äK×*©Q¨{×/NÑ/NÓ-OÑ
ô
ô" Ô 7aˆAˆaˆbŠEÒ 7ùÒ 7sÄ7 EcópeZdZdZefdedejeddfdZde dejedd fd
Z y) ÚFailurezjClass that raises a `TemplateSyntaxError` if called.
Used by the `Lexer` to specify known errors.
ÚmessageÚclsrbNcó ||_||_yrT)rÚ error_class)Úselfrr“s rYÚ__init__zFailure.__init__sðˆŒ ØˆÕr_ÚlinenoÚfilenamez te.NoReturncó<|j|j||«rT)r•r)rr˜r™s rYÚ__call__zFailure.__call__ sØ×јtŸ|™|¨V°XÓ>r_) Ú__name__Ú
__module__Ú __qualname__Ú__doc__rÚstrÚTyper—ÚintÚOptionalr©r_rYrrþsWñð
@SñØðØ!"§¡Ð(;Ñ!<ðà
óð ?˜sð?¨a¯j©j¸©oð?À-ô?r_rcóXeZdZUeed<eed<eed<defdZdedefdZdedefd „Z y
) rtr˜rvrxrbcót|«SrT)ry©rs rYÚ__str__z
Token.__str__s
ܘ#r_rzcó‚|j|k(ryd|vr+|jdd«|j|jgk(Sy)z¸Test a token against a token expression. This can either be a
token type or ``'token_type:token_value'``. This can only test
against string values and types.
TrOrF)rvr|rx©rrzs rYÚtestz
Token.tests@ð 9‰9˜Ò Øà $‰;Ø—:‘:˜c 1Ó%¨$¯)©)°T·Z±ZÐ)@Ñ r_Úiterablecó,tˆfd|D««S)z(Test against multiple token expressions.c3ó@K|]}j|«Œy­wrT))rWrzrs €rYrZz!Token.test_any.<locals>.<genexpr>&søèø€Ò8 t4—9‘9˜T—?Ñ8ùsƒ)Úany)rr­s` rYÚtest_anyzToken.test_any$sø€äÓ8¨xÔ8r_N)
rÚ__annotations__r Úboolr¬r_rYrtrt
sCØ ƒKØ
ƒIØ ƒJðó
˜ð
 ó
ð9 9¨$ô9r_có,eZdZdZddZddZdefdZy) ÚTokenStreamIteratorz`The iterator for tokenstreams. Iterate over the stream
until the eof token is reached.
rbNcó||_yrT)Ústream)rs rYr—zTokenStreamIterator.__init__.s ؈ r_có|SrTs rYÚ__iter__zTokenStreamIterator.__iter__1s؈ r_cóÀ|jj}|jtur |jj «t
t
|j«|SrT)ÚcurrentrvrpÚcloseÚ
StopIterationÚnext©rrss rYÚ__next__zTokenStreamIterator.__next__4sDØ ×à :‰:œÑ K‰K× Ñ Ô ÜÐ ä ˆT[‰[ÔØˆ r_)Ú TokenStreamrbN)rb)rr—rtr_rY)sñóóð˜%ôr_có,eZdZdZdej
edejedejefdZ de
fdZ de fdZ
ede fd „«Zd
edd fd Zdefd
Zddedd fdZdedejefdZdede fdZdefdZddZdedefdZy )zÛA token stream is an iterable that yields :class:`Token`\s. The
parser however does not iterate over it but calls :meth:`next` to go
one token ahead. The current active token is stored as :attr:`current`.
Ú generatorr+r™có®t|«|_t«|_||_||_d|_tdtd«|_ t|«y)NFrÚ) ÚiterÚ_iterrÚ_pushedr+r™ÚclosedrtÚ
TOKEN_INITIALr»)rr+r™s rYr—zTokenStream.__init__EsDô ˜)“_ˆŒ
Ü(-«ˆŒ ؈Œ Ø ˆŒ
؈Œ ܘ
¨rÓ2ˆŒ Ü ˆT
r_rbcót|«SrT)s rYzTokenStream.__iter__Ss
Ü" (r_cóht|j«xs|jjtuSrT)rvrps rYÚ__bool__zTokenStream.__bool__Vs%ÜD—LG T§\¡\×%6Ñ%6¼iÐ%GÐGr_có| S)z Are we at the end of the stream?r¥s rYÚeoszTokenStream.eosYs ðˆxˆr_rsNcó:|jj|«y)z Push a token back to the stream.N)r‰r¿s rYÚpushzTokenStream.push^sà ×ј"r_códt|«}|j}|j|«||_|S)zLook at the next token.))rÚ old_tokenÚresults rYÚlookzTokenStream.lookbs,䘓Jˆ ØˆØ Ø ˆŒ ؈
r_Úncó:t|«D]
}t|«Œy)zGot n tokens ahead.N)Úranger¾)rÚ_s rYÚskipzTokenStream.skipjsäq“ò ˆ  r_rzcóP|jj|«r t|«Sy)zqPerform the token test and return the token if it matched.
Otherwise the return value is `None`.
N)s rYÚnext_ifzTokenStream.next_ifos#ð <‰<× Ñ ˜ ˜“:Ð àr_có(|j|«duS)z8Like :meth:`next_if` but only returns `True` or `False`.N)s rYÚskip_ifzTokenStream.skip_ifxsà|‰|˜Ð-r_có*|j}|jr!|jj«|_|S|jjtur t |j «|_|S|S#t$r|j«Y|SwxYw)z|Go one token ahead and return the old one.
Use the built-in :func:`next` instead of calling this directly.
) r»Úpopleftrvrp)rÚrvs rYzTokenStream.__next__|sð
\‰\ˆà <Š<ØŸ<™<×1ˆDŒLðˆ ð
\‰\×
Ñ
¤iÑ

Ü# D§J¡JÓ/ ðˆ ˆrˆ øô
Ø
àˆ ð
úsÁA5Á5BÂBcó†t|jjtd«|_t d«|_d|_y)zClose the stream.rÅTN)rtr˜rps rYzTokenStream.closes.ä˜TŸ\™\×0´)¸RÓŒ ܘ"“XˆŒ
؈ r_có®|jj|«s°t|«}|jjtur:t d|d|jj |j|j«t d|dt|j«|jj |j|j«t|«S)z}Expect a given token type and return it. This accepts the same
argument as :meth:`jinja2.lexer.Token.test`.
z%unexpected end of template, expected rNzexpected token z, got ) r}rvrprr˜r+r™rys rYÚexpectzTokenStream.expect“ð|‰|× Ñ  Ô& ,ˆ|‰|× Ñ ¤IÑ;¸D¸8À1ЗLL×—I—Mðô! $ ¨´¸t¿|¹|Ó0LÐ/OÐ ×— ‘ Ø
ó ð
ôDr_)r)rbN)rÚIterablertr r—ÚpropertyrÏr_rY?ñð
à—:‘:˜eÑ ðj‰j˜‰oð ð—*‘*˜S‘/ó ðH˜$óHððóðð#˜%ð# Dóñ $óð
˜Cð A§J¡J¨uÑ$5óð.˜Cð. Dó˜ó"ð ˜ r_c óh|j|j|j|j|j|j
|j |j|j|j|j|jf }tj|«}|t|«xt|<}|S)z(Return a lexer which is probably cached.)r†Úblock_end_stringr‡Úvariable_end_stringr…Úcomment_end_stringrˆÚ trim_blocksÚ
lstrip_blocksÚnewline_sequenceÚkeep_trailing_newliner
rqr )rr`Úlexers rYÚ get_lexerrð¬ð ×××××××××ÑØ×××
€Cô
× Ñ ˜SÓ !€Eà €}Ü$)¨+Ó$6Ð ˜ €Lr_có&eZdZdZdZˆfdZˆxZS)ÚOptionalLStripzWA special tuple for marking a point in the state that can have
lstrip applied.
có$t|||«SrT)ÚsuperÚ__new__)r“ÚmembersÚkwargsÚ __class__s €rYzOptionalLStrip.__new__Ísø€Ü‰w‰˜s ,r_)rÚ __slots__rõÚ
__classcell__)s@rYÄsø„ñð€I÷-r_có¸eZdZUejeed<ejeejedfeje fed<ejeed<y)Ú_RulertokensÚcommandN) rÚPatternr ÚUnionÚTuplerr_rYÑsJØ
Y‰Ys‰^ÓØ
G‰GŸ  c Ñ*¨A¯G©G°GÑ,<Ð 
Z‰Z˜‰_Ôr_cóêeZdZdZddZdedefdZ ddedejed ejed
ejede f
d Z
dd ejeje
eefdejed ejedejefd
Z ddedejed ejed
ejedejeje
eeff
dZy)r a
Class that implements a lexer for a given environment. Automatically
created by the environment class, usually you don't have to do that.
Note that the lexer is not automatically bound to an environment.
Multiple environments can share the same lexer.
rbNcóîtj}dtdtjtfd}t t td«t ttd«t ttd«t ttd«t ttd«t t t"d«g}t%|«}||j&«}||j(«}||j*«}||j,«} |j.rdnd}
|j0|_|j2|_|j4|_d|d|d|d } d
j7| g|D
cgc]\} }
d | d |
d
Œc}
} z«}dt |d|d«t9t:d«d«t |d«t:d«gt<t |d|d|d||
d «t>t@fd«t |d«tCd«fd«gtDt |d|d|d||
d«tFd«g|ztHt |d| d| «tJd«g|ztLt |d|d|d|d||
d
«t9t:tN«d«t |d«tCd«fd«gtPt |d«tRd«g|ztTt |d«tVtXfd«gi|_-ycc}
} w)NrXrbcóltj|tjtjz«SrT)rUÚcompileÚSr]s rYÚczLexer.__init__.<locals>.cãsÜ—:‘:˜a¤§¡¬¯©¡Ó -r_z\n?rÅz(?P<raw_begin>z(\-|\+|)\s*raw\s*(?:\-z\s*|z))rPz(?P<rKz (\-|\+|))Úrootz(.*?)(?:rHú#bygroupz.+z (.*?)((?:\+z|\-ú#popz(.)zMissing end of comment tagz(?:\+z\-z (.*?)((?:z(\-|\+|))\s*endraw\s*(?:\+zMissing end of raw directivez \s*(\n|$)z(.*?)()(?=\n|$)).rUrVr rÿÚ
whitespace_reÚTOKEN_WHITESPACEÚfloat_reÚ TOKEN_FLOATÚ
integer_reÚ
TOKEN_INTEGERÚname_rerwÚ string_reÚ TOKEN_STRINGÚ operator_reÚTOKEN_OPERATORrr†ÚjoinròrorergrfrrirjrkrlÚTOKEN_RAW_BEGINÚ
TOKEN_RAW_ENDrmrnrrhÚTOKEN_LINECOMMENT_ENDrŽ)rrrrÚ tag_rulesÚroot_tag_rulesÚblock_start_reÚ block_end_reÚcomment_end_reÚvariable_end_reÚblock_suffix_reÚ root_raw_rerÖÚ
root_parts_res rYr—zLexer.__init__ßscä I‰Iˆð .”ðŸ¤3™ó
”-Ô!1°4Ó ”(œK¨Ó ”*œm¨TÓ ”'œ:  ”)œ\¨4Ó ”+œ~¨tÓ
$
ˆ ô' 3ˆá˜;×Ù˜× Ù˜;×Ù˜K×<ˆð%0×$;Ò$;™&Àˆà(×6ˆÔà +× <Ñ <ˆÔØ%0×%FÑ%FˆÔ˜.Ø!N $ | n°Bð
 ðŸØ
ˆMÀ.×Q¹$¸!¸Q  Q C q¨¨¨9Ò 
ˆ
ð
äÙ˜ - °Ð"¤:¨zÓóô ‘a˜“gœz¨4Ó ô
ÜÙØ& ~Ð&6°c¸.Ð9IðJØ,¨_Ð,=¸Aóô#Ô$5Ðó
ôa˜“i¤'Ð*FÓ"GÐ!IÈ4Ó
"ô
ÜÙØ   ¨c°,°ð@Ø)˜N¨?Ð*;¸ôó
ð ðñ
ô
Ù˜˜OÐ,¨D°Ð0AÐóð#ðñ#ô
ÜÙØ$ ^Ð$4ð5!Ø!- ¨c°,°ð@Ø)˜N¨?Ð*;¸2ðô
#¤:¬}Óóôa˜“i¤'Ð*HÓ"IÐ!KÈTÓ ô