Qc@sddlmZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z idd?d@fd6d ddAfd 6d ddBfd 6dddCfd6dDd6ddEdfd6ddFdfd6dGd6Z dZdZdZdZdZdZdZdZdZdZdZdZd Zd!Zd"Zd#Zd$Zd%Zd&Z d'Z!d(Z"d)Z#id*d6d+d6d,d6ed 6ed6ed6Z$ied-6e d.6e!d/6ed06e"d16e#d26ed36Z%d4d5gZ&ej'Z'd6Z(e)d7Z*d8e+fd9YZ,ie,d:6Z-d;e+fd<YZ.dd=Z/dd>Z0dS(Hi(t_Nitgroupit)tfunct(itlistt,it|it%itsymboltstringtendc csj|\}}}|}x@||krW||}|jr=n |dkrZ|d|fVn|dks|dkr|||d!dkr|dkr|d7}||}t}nt}|d7}|}x||kri||}|r|dkr|d7}qn||kr\|s:d |||!jdd |fVPnd |||!jd |fVPn|d7}qWtjtd |n|j s|d kr|}|d7}x@||kr||}|j p|d ksPn|d7}qW|||!} d| |fV|d8}n2|dkr2|d7}Pntjtd||d7}qWdd|fVdS(Ns(,)%|s"'trisr'sr"is\R s\\s string-escapesunterminated stringRR t}s syntax errorR (sr'sr"( tisspacetNonetFalsetTruetreplacetdecodeterrort ParseErrorRtisalnum( tdatatprogramtstartR tpostcRtstdtsym((s7/sys/lib/python2.7/site-packages/mercurial/templater.pyt tokenizers^           !      c CsGg}dt|}}tjtt}x||kr&|jd|}|dkrs|jd||fPn|dkr||ddkr|jd|||d!df|d}q.n||kr|jd|||!fn||d|g}|j|\}}|j|q.Wg|D]} t| |^q.S(Nit{R is\(tlentparserRtelementstfindtappendtparset compileexp( ttmpltcontexttparsedRtstoptptntpdtparsereste((s7/sys/lib/python2.7/site-packages/mercurial/templater.pytcompiletemplateOs$  "  cCsD|d}|tkr't|||Stjtd|dS(Nisunknown method '%s'(tmethodsRRR(texpR)tt((s7/sys/lib/python2.7/site-packages/mercurial/templater.pyR'gs  cCs1|ddkr|dStjtddS(NiR isexpected a symbol(RRR(R3((s7/sys/lib/python2.7/site-packages/mercurial/templater.pyt getsymboloscCs:|s gS|ddkr3t|d|dgS|gS(NiRii(tgetlist(tx((s7/sys/lib/python2.7/site-packages/mercurial/templater.pyR6ts cCsBt|}||jkr7tjtd|n|j|S(Nsunknown function '%s'(R5t_filtersRRR(R3R)tf((s7/sys/lib/python2.7/site-packages/mercurial/templater.pyt getfilter{s cCs[|ddkr!t|d|S|ddkrB|j|dStjtddS(NiR iR sexpected template specifier(R1t_loadRRR(R3R)((s7/sys/lib/python2.7/site-packages/mercurial/templater.pyt gettemplates cCs|S(N((R)tmappingR((s7/sys/lib/python2.7/site-packages/mercurial/templater.pyt runstringscCs|j|}|dkr3|jj|d}ntj|drO||St|tjr{t|}|||<|S|S(Ntt__call__( tgetRt _defaultstutilt safehasattrt isinstancettypest GeneratorTypeR(R)R=tkeytv((s7/sys/lib/python2.7/site-packages/mercurial/templater.pyt runsymbols    cCs?t|d|\}}t|d|}t|||ffS(Nii(R'R:t runfilter(R3R)RRtfilt((s7/sys/lib/python2.7/site-packages/mercurial/templater.pyt buildfilterscCs|\}}}y|||||SWn^tttfk rt|tr^|d}n|}tjtd|j|fnXdS(Nis8template filter '%s' is not compatible with keyword '%s'( t ValueErrortAttributeErrort TypeErrorREttupleRCtAbortRt func_name(R)R=RRRLtdt((s7/sys/lib/python2.7/site-packages/mercurial/templater.pyRKs cCs?t|d|\}}t|d|}t|||ffS(Nii(R'R<trunmap(R3R)RRtctmpl((s7/sys/lib/python2.7/site-packages/mercurial/templater.pytbuildmapsccs,x%|D]\}}||||VqWdS(N((R)R=ttemplateRR((s7/sys/lib/python2.7/site-packages/mercurial/templater.pyt runtemplatesccs|\}}}||||}tj|dr?|}n|j}xV|D]N}t|tr|j||jd|d(R0R((s7/sys/lib/python2.7/site-packages/mercurial/templater.pyt1scCst|dfS(Ni(RJ(R0R((s7/sys/lib/python2.7/site-packages/mercurial/templater.pyR2scCst|d|S(Ni(R'(R0R((s7/sys/lib/python2.7/site-packages/mercurial/templater.pyR3sRAtifRvRlRwR~Rot templatess ../templatesccst|tr|Vntj|dsF|dk rt|Vqnx|D]w}t|trj|VqMtj|ds|dk rt|VqqM|dk rMxt|D] }|VqWqMqMWdS(s=yield a single stream from a possibly nested set of iteratorst__iter__N(REtstrRCRDRt_flatten(tthingR`tj((s7/sys/lib/python2.7/site-packages/mercurial/templater.pyRIs    cCsb|rUt|dks,|d|dkrAttdn|dd!jdS|jdS(sZparse a string using simple c-like syntax. string must be in quotes if quoted is True.iiisunmatched quotesit string_escape(R!t SyntaxErrorRR(Rtquoted((s7/sys/lib/python2.7/site-packages/mercurial/templater.pyt parsestring[s &tenginecBs/eZdZiidZdZdZRS(stemplate expansion engine. template expansion works like this. a map file contains key=value pairs. if value is quoted, it is treated as string. otherwise, it is treated as name of template file. templater is asked to expand a key in map. it looks up key, and looks for strings like this: {foo}. it expands {foo} by looking up foo in map, and substituting it. expansion is recursive: it stops when there is no more {foo} to replace. expansion also allows formatting and filtering. format uses key to expand each item in list. syntax is {key%format}. filter uses function to transform value. syntax is {key|filter1|filter2|...}.cCs(||_||_||_i|_dS(N(t_loaderR8RBt_cache(tselftloadertfilterstdefaults((s7/sys/lib/python2.7/site-packages/mercurial/templater.pyt__init__ys   cCs<||jkr1t|j|||j|RJRMRKRWRYRURdRARlRoRtRvRwR~R2RaRRmRRRtobjectRRRRR(((s7/sys/lib/python2.7/site-packages/mercurial/templater.pytsv$<    4                        & E