ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ ǚPc@sjdZddlZddlZddlmZmZmZddlmZiZ de fdYZ dS(sGprovides the Lexer class for parsing template strings into parse trees.iN(t parsetreet exceptionstutil(tadjust_whitespacetLexercBseZdedddZedZddZdZdZ dZ e j dZ dZdZd Zd Zd Zd Zd ZdZdZdZRS(cCs||_||_tj|j|_d|_d|_d|_d|_g|_ g|_ g|_ ||_ ||_ tjr|rtjdn|dkrg|_n't|ds|g|_n ||_dS(Niis4Mako for Python 3 does not support disabling Unicodet__iter__(ttexttfilenameRt TemplateNodettemplatetmatched_linenotmatched_charpostlinenotmatch_positionttagt control_linet ternary_stacktdisable_unicodetencodingRtpy3kRtUnsupportedErrortNonet preprocessorthasattr(tselfRRRtinput_encodingR((s;/opt/alt/python27/lib/python2.7/site-packages/mako/lexer.pyt__init__s(              cCs,i|jd6|jd6|jd6|jd6S(NtsourceR tposR(RR R R(R((s;/opt/alt/python27/lib/python2.7/site-packages/mako/lexer.pytexception_kwargs,s   cCsoyt||f}WnKtk ra|r?tj||}ntj|}|t||fcompile the given regexp, cache the reg, and call match_reg().(t _regexp_cachetKeyErrortretcompilet match_reg(Rtregexptflagstreg((s;/opt/alt/python27/lib/python2.7/site-packages/mako/lexer.pytmatch3s cCs|j}|j|j|j}|r|j\}}||krU|d|_n ||_|j|_tjd|j||j!}|d}x<|dkr||jkr|j|dkr|d8}qW|||_ |jt |7_n|S(smatch the given regular expression object to the current text position. if a match occurs, update the current text and line position. is\nis ( R R&RtspanR R R tfindallt textlengthR tlen(RR%tmpR&tstarttendtlinestcp((s;/opt/alt/python27/lib/python2.7/site-packages/mako/lexer.pyR"As     1 cGsg|j}dj|}d}xBtrb|jd}|rBq!n|jdtj}|rcq!n|jd|}|r|jddkr|dkr|d8}q!n|j||jt|jd!|jdfS|jd|tj}|r=||jdj d 7}||jdj d8}q!nt j d d j||j q!WdS( Nt|is#.*\ns((\"\"\"|\'\'\'|\"|\')((?is"Unterminated control keyword: '%s'(R_RRRRRR"RSR*R)R5R t match_endtmatch_expressiontmatch_control_linet match_commenttmatch_tag_startt match_tag_endtmatch_python_blockt match_textRRXRR9RDRRR RR (Rtpreproc((s;/opt/alt/python27/lib/python2.7/site-packages/mako/lexer.pytparsesT            c CsU|jdtjtjBtjB}|rM|j\}}}||_i}|rxTtjd|D]=}|\}}} |p| } | jdd} | || # closing s)\s*(\w+)\s*=\s*(?:'([^']*)'|\"([^\"]*)\")s s Rs(.*?)(?=\)sUnclosed tag: <%%%s>ii(R&R tIR6tXtgroupsRDR(treplaceRORRERRHRR9RtTextR7ReR5tFalse( RR&RDtattrRGt attributestatttkeytval1tval2R((s;/opt/alt/python27/lib/python2.7/site-packages/mako/lexer.pyRds8      cCs|jd}|rt|jsItjd|jd|jnT|jdj|jdkrtjd|jd|jdjf|jn|jjt St SdS(Ns\s(Closing tag without opening tag: iis.Closing tag does not match tag: <%%%s>( R&R*RRR9R7RRDRHR5Ro(RR&((s;/opt/alt/python27/lib/python2.7/site-packages/mako/lexer.pyRe4s  cCs@|jdtj}|r8|j}|r1|StSntSdS(Ns\Z(R&R R6R7R5Ro(RR&tstring((s;/opt/alt/python27/lib/python2.7/site-packages/mako/lexer.pyR`Fs cCsY|jdtjtjB}|rQ|jd}|rM|jtj|ntSt SdS(Ns (.*?) # anything, followed by: ( (?<=\n)(?=[ \t]*(?=%|\#\#)) # an eval or line-based # comment preceded by a # consumed newline and whitespace | (?=\${) # an expression | (?=\#\*) # multiline comment | (?=s it!R R( R&R R R=RRORtCodeR7R5Ro(RR&tlineRRR-((s;/opt/alt/python27/lib/python2.7/site-packages/mako/lexer.pyRfms"cCs|jd}|r|j|j}}|jdd\}}|dkrd|jd\}}nd}|jdd}|jtj||jd|d |t St SdS( Ns\${s\|R1R0ts s R R( R&R R R=RmRORt ExpressiontstripR5Ro(RR&RyRRR-tescapes((s;/opt/alt/python27/lib/python2.7/site-packages/mako/lexer.pyRa}s  cCsT|jdtj}|rL|jd}|jd}|dkr5tjd|}|sytjd||jn|jdd\}}|dk }|rt|j stjd||f|jq|j dj |krtjd ||j dj f|jqn|j t j |||n|j t j|tStSdS( NsB(?<=^)[\t ]*(%(?!%)|##)[\t ]*((?:(?:\\r?\n)|[^\r\n])*)(?:\r?\n|\Z)iit%s(end)?(\w+)\s*(.*)sInvalid control line: '%s's!No starting keyword '%s' for '%s'is'Keyword '%s' doesn't match keyword '%s'(R&R tMR7RR9RRR*RRDRORRBtCommentR5Ro(RR&toperatorRtm2RGRD((s;/opt/alt/python27/lib/python2.7/site-packages/mako/lexer.pyRbs<    cCsC|jdtj}|r;|jtj|jdtStSdS(s*matches the multiline version of a comments<%doc>(.*?)iN( R&R R6RORRR7R5Ro(RR&((s;/opt/alt/python27/lib/python2.7/site-packages/mako/lexer.pyRcs N(t__name__t __module__RRoRtpropertyRR&R"R=ROR R!RSR_RiRdReR`RgRfRaRbRc(((s;/opt/alt/python27/lib/python2.7/site-packages/mako/lexer.pyRs&    * ( 5 -     #( t__doc__R RUtmakoRRRt mako.pygenRRtobjectR(((s;/opt/alt/python27/lib/python2.7/site-packages/mako/lexer.pyts