Sc@sddlZddlZddlZddlZddlmZmZmZddlmZddl m Z ddl m Z ddl mZmZddlmZddlmZdd lTd d lmZmZmZmZmZd d lmZmZmZd d lm Z de!fdYZ"de"fdYZ#de"fdYZ$de"fdYZ%de&fdYZ'de&fdYZ(de(fdYZ)de&fdYZ*de&fdYZ+e,fZ-d Z.d!Z/d"Z0d#efd$YZ1d%Z2e,e,d&Z3e,e,d'Z4e,e,d(Z5e,d)Z6e,d*Z7d+Z8d,Z9d-Z:d.Z;d/Z<d0Z=d1Z>d2Z?d3Z@d4ZAeBd5eCeDfDZEeDd6ZFd7ZGd8ZHd9ZId:ZJe,iid;ZKiie,d<ZLejMd=ZNd>ZOd?ZPd@ZQdAZRdBZSdCZTdDZUdEZVdFZWdGZXdHe&fdIYZYdJZZeCe,gdKZ[dLe&fdMYZ\dNe&fdOYZ]dPe&fdQYZ^gZ_e,e,dRdSdTZ`dSdSdUZadVZbdWZce,dSdXZddYZedZZfd[e&fd\YZgd]e&fd^YZhehZid_e&fd`YZjekdaZldbZmejMdcZnge,ddZoejZpdeZqidfdg6dhdi6djdk6dldm6dndo6Zrx(erD] Zsetepeseqeresq!WejuZvieCdpZwejMdqZxdrZyeCie,e,eCeCdsZzdtZ{e,duZ|dvZ}dwZ~dxZdyZdS(ziN(tiziptcounttchain(t decorator(tcontextmanager(tlatex(t BaseFormattFormat(ttokenize(tParser(t*i(tcustomtdbt dependenciestcachet structure(tFLAVORStFORMATSt Reference(t benchmarkingt WikiExceptioncBseZRS((t__name__t __module__(((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRstNoContentExceptioncBseZRS((RR(((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRstElementNotFoundcBseZRS((RR(((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRst PropNotFoundcBseZRS((RR(((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRst moverridecBs#eZdZdZdZRS(cCs}x/|jD]!}t|ts t|q Wx;|D]3}|dj r`|ddks9t|q9W||_dS(NiR (tvaluest isinstancetunicodetAssertionErrortisuppertkw(tselfR tvtk((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt__init__s  1cCs)ttj|_tjj|jdS(N(tdictt eval_statet moverridestold_moverridestupdateR (R!((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt __enter__$scCs|jt_dS(N(R(R&R'(R!texc_typetexc_valtexc_tb((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt__exit__'s(RRR$R*R.(((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRs  t eoverridecBs#eZdZdZdZRS(cCs|||_xl|D]d}|djs2t|t||dst||ds||dkst|qWdS(Nitenametelement(R tislowerRthasattrtNone(R!R R#((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyR$+s  cCs)ttj|_tjj|jdS(N(R%R&t eoverridestold_eoverridesR)R (R!((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyR*0scCs|jt_dS(N(R6R&R5(R!R+R,R-((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyR.3s(RRR$R*R.(((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyR/*s  t push_currentcBs#eZdZdZdZRS(cCsOi|d6}t|dr;|jdk r;|j|dDs  tcontextcBs#eZdZdZdZRS(cCs ||_dS(N(R (R!R ((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyR$PscCs)ttj|_tjj|jdS(N(R%R&RBt old_contextR)R (R!((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyR*RscCs|jt_dS(N(RCR&RB(R!R+R,R-((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyR.Us(RRR$R*R.(((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRBOs  cCs tj|ttdf\}}t}|tk rx|D]\}}}|dkr{tjj|d|krPqq>|dkrtj j|d|krPqq>|dkr>tj j|d|krPqq>q>Wt }n|r|Stj j ttSdS(NR/RR>(Rtget_memotget_context_tagtNO_MEMOR4tFalseR&R5tgetR'R@tTruetmemoable_stackR<tset(tkeytrettrestrtfoundttyptnametval((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytget_memo_or_push[s$%      cCstjj}t}x|D]\}}|dkr_|jd|tjj|dfq|dkr|jd|tjj|dfq|dkr|jd|tj j|dfqt st |qWt j |t||ftjdj|dS(NR/R>Ri(R&RJR=RKtaddR5RHR4R@R'RGRRtset_memoRER)(RLRRtmemoableRNRPRQ((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytset_memo_and_poprs       c st}t}t|dkrt|dkr[t|dksNt||d}n|d}|dkswt|jdrd|krt}nd}qnd}t||}|gt|tfg}|dkrg}n|dkr|r|g|}n|r6g|D]} | |f^q}nxt|dkrg} x|D]\} } } xu| D]m| krtd |d j| gfnt fd d DD}|s|dkrn|dks |dkrm| s | rm|r]j d rGtd rG|j | dfqj|j |fqm|j nj |rt|}|dkr| st||7}qn| j | g|| p| fqnqnWqXW| }q9W|S(Niiitprunetinverttexcludesexclude!t!s&Infinite %s loop in recursive_get: %s!s->c3s=|]3}j|r't|nd|kVqdS(N(t has_propvalt to_pythonR4(t.0tr(tnt restrictions(sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pys scss|]}t|dVqdS(sutf-8N(R(R^tsr((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pys susubownedi(RXsinvertRZsexclude!( RIRGtlenRR?R]tlistRtjointallR\R<(telmt prop_nametargsRatincl_elmt with_ownertfilterRMtnewtetnewnewtpathtltprunedt passed_restrtadding((R`RasU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt recursive_getsb       "  #    tRefExtractingFormatcBsGeZdZdZdZddZddZddZRS(cCsg|_d|_dS(N(trefsR4t link_toks(R!((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyR$s cCs,|jdk r(|jjt|ndS(Nu(RxR4R<tText(R!ttext((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRzscCsdS(Nu((R!Rz((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyterrorscCsG|tkrg|_n+|jdk rC|jjt||ndS(Nu(tLINKRxR4R<tStart(R!tttarg((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytstarts   cCs|tkred|krYt|dts=tt||jj||jfnd|_n+|jdk r|jjt ||ndS(NR0u( R|RRRtreprRwR<RxR4tEnd(R!R~R((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytends  % cCs/|jdk r+|jjt||ndS(Nu(RxR4R<tEntity(R!R~R((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytentitysN( RRR$RzR{R4RRR(((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRvs      c Cs|tkr|jd rd|krd}d|kr[|jd}|jd}nd|krd|krt|}|dk r|j}n|}dtd|d|d td fSndifS( Nt/s://it.t uR0RiR8uowner( R|R?R4tsplitR=t get_elementR0R%tget_overridden_element(thtstyRiRgR0((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt ref_link_funcs(    c Cs_|dk rDd|jj|jf}t|}|tk rD|Sn|dk rtj|j sit |j |}t |j d}t jj|nt|t st |}t j}t j}gt _t} titd6!t jj|d| dtWdQX|t _t j} |t _|dk rRt|| j| fn| j| fS(Nsg_r_e_w_l:%s.%ssutf-8t in_get_refstformatt link_func(R4R1R0tpropnameRSRFRt get_flavortbinaryRt get_propvalRtvalueR&R taddDepRtmentionsterrorsRvRBRIt mainparsertparseRRWRw( t text_or_elmRtpropvalRLRMtpvRzt old_mentionst old_errorstreft new_errors((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt get_reference_enames_with_labelss0        "    cCs;t|||\}}g|D]\}}|^q|fS(N(R(RRRt with_labelsRtdRq((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytget_reference_enamesscCs<t|||\}}g|D]}tj|d^qS(NR0(RRR(RRRt with_argsRR((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytget_referencesscCstd||S(NR(tget_eval_state_delta(RR((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytget_mention_enames!scCs)gt||D]}tj|^qS(sCReturn all elements linked to or named in this wikitext or propval.(RRR(RRRn((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt get_mentions$scCs9y ttd||dkSWntk r4tSXdS(sReturn true if any errors are encountered evaluating this propval. This probably only works properly if the logged in user is omniscient; we could catch the non-wiki exceptions that can arise, but we don't.RiN(RcRRRI(RgR((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt has_errors)s  cCs(t|dr|j}n|j|S(NR1(R3R1tis_ancestor_of(R1tancestor((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt has_ancestor3s cCs4t|dr|j}n||kp3|j|S(NR1(R3R1R(R1R((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytis_a7s cGs"d|kstt|||S(Nt__(Rtgetattr(tobjectRQRi((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt safe_getattr<scCsEt|tst|yt||Wntk r@tSXtS(N(RtattrelmRRRRGRI(tobjRQ((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pythas_propBs  cstdr+tjjjStdrGtSttrvgD]}t|^q]SttrtfdDSSdS(NR1R0c3s1|]'}t|t|fVqdS(N(t baz_eval_wrap(R^R#(RttoPython(sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pys Rs( R3RR1RiR8RRdRR%(RRta((RRsU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRJs   cstfd}||S(NcsQg|D]}t|^q}td|jD}t|||S(Ncss'|]\}}|t|fVqdS(N(tbaz_eval_unwrap(R^R#R"((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pys Zs(RR%titemsR(tfuncRiR R(R(sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pythelperWs(R(RRR((RsU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytbaz_eval_wrap_funcVscsttrjSttrEgD]}t|^q/SttrntfdDSttrtdSSdS(Nc3s+|]!}t|t|fVqdS(N(R(R^R#(RM(sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pys cssutf-8(RRtunwrap__RdRR%tstrR(RMR_((RMsU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyR]s  cCstjj|tS(N(R&RBRHRG(RL((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt get_contextiscCscd}xVtjD]K}tj|}|ttfksDttj|r|d|7}qqW|S(Ntt+(R&RBRIRGR(ttagR#RR((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyREks !ccs|]}|iid6td6td6td6td6dd6td|d6td6td 6td 6t d 6t d 6td |d6tt |d6tt |d6tt |d6tt|d6tt|d6tt|d6td6fVqdS(t __builtins__RRRIRGR4c_s t||S(N(R%(RiR ((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt{sR%tanyRfRcR3RcSs t|S(N(Rd(Rn((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRst list_propsRuRRRRRRN(RRRIRGR4RRRfRcRRRuRRRRRR(R^R((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pys tscstt|jdkrdSd|kr7tdn9|jdd}d||f}t|}|tk ru|Std|ybtt|}|j ifd d 6dfd d 6t ||}t |}Wnvt k rnttk r^}t|tr?tjd |jdr?d}nd}tt||nXt|||SdS(NiuRs8The string '__' is not allowed to appear in expressions!s Rs baz_eval%s:%sRcs |kS(N((ts(telemlocs(sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRstdefinedcsj||S(N(RH(RR(R(sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRsRHs$^global name '(\w+)' is not defined$sD (If you're using a generator expression, try a list comprehension.)R(RctstripRtreplaceRSRFt _elemdictR%tBAZ_EVAL_GLOBALSR)R4tevalRRt ExceptionRt NameErrortretsearchRiRRW(texprRRLRMt eval_globalsRntextra((RsU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytbaz_evals:       cCs6t|dt}t|tr.t|gS|SdS(sDReturns a generator for tokens representing the given baz_eval expr.RN(RRGRt basestringRy(RRM((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt full_evals cCsIt|}t|dr9|dd}t|}n t|}|S(Nt__call__(RR3R4t tokens_textR(RRMtgen((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt unicode_evals   cCstdj|tjS(Ntstring(RRR&R(R((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytstring_tokenizescCsd}x|D]}|jtkrj|jtkrj|jddksPt||t|jd7}q |jtkst|||j7}q W|S(Nuii( toptENTITYtstyletMACRORR4RRtTEXT(ttoksRMR~((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRs cCstjdjd|fx)|jD]}t|ts'tq'W|tjkr`tj|St|}tj j |||j |rt ||d|d|S|SdS(NiRR5R'( R&RJRTRRRRR't get_propnameR t addPropvalDepR\trender_propval(R1RhtdefaultR5R'R"((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytrender_allow_overrides  c Cs\x)|jD]}t|ts tq WxI|D]A}|djsUt|t||ds3t|q3Wx;|D]3}|dj r|ddkst|qWttdt t t }t t j}t t j} t j} t jj|t jj||t _|jt||d|} |t _| t _| t _| S(s8Render the propval as plain text, tracking dependencies.iR0R ttxttcontent(RRRRR2R3RR Rt macro_funcRtmakeRestrictedR%R&R5R'RR)trendertrecurse( R1RhR5R'RR"R#tparserR6R(t old_parserRM((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRs& # 1     s^(\w+)[=]([^=].*)$cCsid}i}xV|D]N}tj|}|rM|jd||jdsUndefined propname '%s'!(R&RJRTR@R(tpname((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyR]s  cCs"|tjkrtj|SdSdS(N(R&R'R4(tmname((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt get_moverridegs tArgcBseZdZdZRS(cCs ||_dS(N(traw(R!R((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyR$nsccstt|jVdS(N(RyRR(R!RiR((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRps(RRR$R(((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRms cCst|}t|dr'|j}nUt|dr[d|jjdj|jf}n!t|}|dkr||}nd||f}t|}|t k r|St t ||dt }t |dkstt||d|dS( NR0R1u%s/%sRsto_python:%s.%sR]ii(RR3R0R1ReRiRR4RSRFRdRRIRcRRW(t ename_or_eRt memo_enameRLRMtls((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyR]ss"        c#sw|dk stt|drN|}|j}t|dst|nKt|drr|}|jj}n't|}|dkrt|nt|}|dk st|dk sti}i}|}t|drMx8tt |j D]!} |j | |t | d(R:R0(R!((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt__str__.scCst|to|j|jkS(N(RRR:(R!R8((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt__eq__0scCs|j| S(N(RA(R!R8((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt__ne__2scCs t|jS(N(thashR:(R!((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt__hash__4sN( RRR4R$RR?R@RARBRD(((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRs    RcBsAeZdZdZdZdZdZddZRS(cCs||_i|_dS(N(t_elemdict__toPythont_elemdict__locals(R!R((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyR$8s cCsA||jks|tjkr"tSt|tsCt|d}n|dkrStS|djst j dj d|ft j dj d|f|t j ks|t j krtSt|}tj||dk rtSntt|rtStj|}|dk rtStt dr9t jj|ntSdS(Nsutf-8iiR/RR (RFR R RIRRR4RGRR&RJRTR5R'RtfooR<R3R'RRR R(R!RLR9Rn((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt __contains__;s.     cCstj|||jkr'|j|S|tjkrbtjjtjt tjj |j St |d}||krtjt td|n|dj r|tjkrtj|S|ddkr|dtjkrtj|dS|tjkr4tt|r4ttt|ddS|dj r|tjkrt|}|dk r|j|sttt ||j |Snt t||j SdS(Nsutf-8sNo element '%s' exists!it_i(RGR<RFR R R&R R R RR RERRGR>RR'R5R3R'RRR4RR\RR(R!RLR9((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt __getitem__Ts,      #   cCs||j|(R!RLR((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRHps  N( RRR$RHRJRKRLR4RH(((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyR7s      t environmentRcs:dkrnfd}||_|S(Nc3st|}g}xR|jD]D\}}|dkrM|jt|qtd|fqWtjtdkr%dk rt dVx|D] }|VqWt t t Vt dVqt ddj d|DfVx|D] }|VqWt t t Vt d Vntjtd krd krt d Vx|D] }|VqZWt t t Vt d Vqt dVx|D] }|VqWt t t Vt dVn$x|D] }|VqWt t t VdS(Ntsubclasss#Unknown arg '%s' in %s environment!thtmls<%s>ss
Rcss|]}d|VqdS(RN((R^tc((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pys ss
ttexRMs \begin{%s} s\end{%s}s\%s{t}(RRR<RRR&RRR4tLiteralRt ENV_BREAKRIRe(RRRit subclassesRLRRR~(RQttagnamettexmodettexname(sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytenv{sF     "         (R4t__doc__(RQRXRVRWtdocRY((RQRVRWRXsU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRMws   ( c s"dfd}||_|S(Nc3sFx?D],}tjt|krt|VdSqWtVdS(N(R&RRRSRy(RRR#(RR (sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytatos  (R4RZ(RR[R R\((RR sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytatoms csfd}|S(NcsttjS(N(RR R(R(R(sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytlps((RR^((RsU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytleafpropscsfd}|S(sA macro that turns something like <>Foo<>Bar<> into
Foo
Bar
c 3s t|f}t|}g}xR|jD]D\}}|dkr_|jt|q1td|fq1Wt|tkrxttdfD] }|VqWnNtj t dkrXt ddj d|DfVxRt t|D]>}t d|Vx||D] } | Vq,Wt d VqWt d Vntj t d krt d VxRt t|D]>}t d |Vx||D] } | VqWt d VqWt dVn'x$|D]} x| D] } | VqWqWdS(NRNsUnknown arg '%s' in %s divided!sToo many %ss in a %s!ROs
Rcss|]}d|VqdS(RN((R^RP((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pys ss
s
RQs \begin{%s} s\%s{RRs \end{%s}(R RRR<RRRct_errorR&RRRSReR!( RRtpartsRiRURLRRRnR,R~R(tdividertinnerRQ(sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytdivs>       ((RQRbRcRd((RbRcRQsU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytdivideds#cs+gfd}||_d|_|S(Nc3s6tVx|D] }|VqWtVdS(N(R}R(RRR~(RR(sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytfmts  t latexalike(RZthidden(RRR[Rf((RRsU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt inline_formats  csdfd}|S(Nc3sd}tjdjd|f|tjkr\x`ttj|jD] }|VqJWn:dtjksdtjkr}ntdtjfdS(sFor references with arguments.uarg%diRu1uarg1s No arg %s: %sN(R&RJRTR'RRR(RRtarg_nameR~(tnum(sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytargis  (R4(RkRl((RksU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt arg_indexs cs"dfd}d|_|S(Ncs'tddjdDfS(Ns"%s" may only be used in a %s!s or css|]}d|VqdS(s"%s"N((R^RP((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pys s(R`Re(RR(t containerRQ(sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytillstillegal(R4Rh(RQRnRo((RnRQsU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRps tnoescapecBs)eZdZdZdZdZRS(s4Wrap a format such that it's escape method is a nop.cCs ||_dS(N(t_noescape__format(R!R((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyR$scCs|S(N((R!Rz((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytescapescCst|j|S(N(RRr(R!tattr((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyR?s(RRRZR$RsR?(((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRqs  tmaxwecBseZdZRS(cCsdS(Ni((R!R8((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt__cmp__ s(RRRv(((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRu stMacroscBseZedZedZedZedZedZedZedZ ee ddZ ee d dZ ee ed Zee d Zee d Zee ed Zee dddZee dZee dZedZeedddddZeedddddZeedddddZeedd d!dd"Zeed#dd$Zeed%d&d'd(dd)Zeed%d&d'd*dd+Z eed%d,d'd-dd.Z!eed%d,d'd/dd0Z"eed%d,d'd1dd2Z#eed%d3d'd4dd5Z$eed6dd7Z%eed8dd9Z&eed:dd;Z'ee(e)dd<Z*ee(e+dd=Z,ee(e+dd=Z-ee(e.dd>Z/ee(e0dd?Z1ee(e2dd@Z3ee(e4ddAZ5ee(e6dBddCZ7ee(e6dDddCZ8ee(e6dEddCZ9ee(e6dFddCZ:ee(e6dGddCZ;ee(e6dHddIZ<ee(e6dJddKZ=ee(e6dLddMZ>ee(e6dNddOZ?ee(e6dPddQZ@ee(e6dRddSZAee dTZBedUZCedVZDee edWZEedXZFedYZGedZZHed[ZIed\ZJed]ZKed^ZLee d_ZMed`daZNedbZOedcZPeddZQedeZRedfZSedgZTedhZUeeVdJZWeeVdLZXeeVdNZYeeVdPZZeeVdRZ[eeVdiZ\eeVdjZ]eeVdkZ^eeVdlZ_RS(mccsttVdS(sStart a new paragraph.N(RRT(R((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytparsccsx|D] }|VqWdS(s?Treat the content as its own block, separate from surroundings.N((RRR~((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytblocks ccslt|}t|d}tjt|krhx6|D]+}|jtkr\t|jVq6|Vq6WndS(sInclude the markup, unsanitized, in the given format, with macros evaluated. Use like {{{<>Raw HTML<>}}}.iN( RRR&RRRRRSR(RRRiRfR~((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyR!s  ccst|}ttj}ttj}x|jD]\}}t|}t|drn|tj|>...<>}}}.R0RN( RR%R&R'R5RRR3RRR4R(RRRiR.RR#R"R~((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytlet0s  !   ccst|}ttj}i}x4|jD]&\}}t|}|td|><><>}}}.R N(RR%R&R@RRtpsubstR>(RRRiR/tpstubstR#R"R~((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytpletHs    cCs tdS(sWhen evaluating a reference, the content of the macro. For self-closing macros, content evaluates to None. When not in reference context, raises an exception.N(R(R((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRYsccst|d}dj|}xstrt|}|r=Pn |d}t|dkr]dS|dd\}}|dkrPq!dj|}q!Wx|ddD] }|VqWdS(sHEvaluate the content only if a condition is true. Can contain {{{<>}}} and/or {{{<>}}}. For example: {{{ <> he <> she <> they <> }}}telsetelifu iiN(selseselif(RReRIRRc(RRtparttagstcondRRRQR~((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt_ifas    R~tifRc#st|djfdtD}|dk rrt||Vx|D] }|VqRWt||Vnt||VdS(sBuilds a link dynamically, evaluating and joining arguments. Use like {{{<>Packet<>}}} or {{{<>}}}.Rc3s|]}t|VqdS(N(R(R^R(Ri(sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pys sN(RRetsortedR4R}RR(RRRtdestR~((RisU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytlinks %   cCstj||dtS(NR(RwRtIMAGE(RR((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytimagescCstj|d|dtS(s?Counts the number of elements that would be matched by foreach.RR(RwtforeachRI(RR((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRsc' #s) t|}d|ks$d|kr3tdn|d}|d=|d|d=g}g}d}x||kr||d%kr||dkrtn||=|j||d||d=|j||d||d=|d7}qjWdkrstdqgntt}g d} t} t} td} d} x|jD]\}}t |t s|j dkr |j j 7 q|j d kr=d |kr|j d d\}}n |}d }|j }d |kr0|j }|d } |d}q|} }q|j dkr^t|} q|j dkrt|} q|j dkrt|} q|j dkrt|q|j dkrt|} qx-td|D] }|VqWqj|j|qjWt|}| sfd}dtd|||}WdQXj d tdkrx/|D]'}|dk st|||fqWg|D]}i|6^q}nx7|D]/}x&|D]dk st|qWqWtfd|DsBtdng|D]}tt|^qI}ttj}ttj}xt||D]\}}g}x}|D]u}||t|}xP|D]H}|dkrtd|nt|} || |<|j| qWqW|}qWt|d krtd|jg}!xV|D]N}|y*td|Dr|!j|nWqdtk rqdXqdW|!}WdQXnrttt|Vnt|d kr%| dk r%xt| tD] }"|"VqWnx0t D]"|j dfdq2Wfd | ri}#xa|D]Y}|}| |kr|| nt!}$|$|#kr|#|$j|qz|g|#|$>...<>}}}. "group" can either be an element, in which case the content is evaluated with var set to each of that element's descendents in turn, or a particular element's prop (generally of flavor references), in which case the content is evaluated with var set to each of the elements referenced in that prop value, in turn. Nested loops can be created in a single macro by adding {{{foreach group2 var2}}} after the first var name. You can also sum counts by doing something like: {{{<>}}}. Parameters after the var name can be conditions filtering the specified group; these should generally be in parentheses. foreach also takes a large number of optional keyword parameters, which take a value after an =: orderBy: a prop the group members have they should be ordered by groupBy: the group members should be grouped by the specified prop. If the value contains a comma, the markup after the comma is used as a group header. ifNone: markup that should be evaluated if the group is empty. asTree: put the evaluations of the content in a nested list structure reflecting the inheritance tree of the group. Doesn't support nested loops. inRowsOf: put the evaluations in a table with the specified number of columns. {{{<>}}} may be used to break an evaluation into several rows. recursive: if the group was based on a references-flavor prop and group members have that prop, evaluate the content for the elements referenced in their values for the prop, and so on. childrenOnly: use the specified element's children only, not all of its descendents. iisB{{{foreach}}} takes at least two parameters! See [[edit:Macros]]!iRRs6{{{foreach}}} must have content! See [[edit:Macros]]!torderbytgroupbyt,RRitifnonetastreet recursivet childrenonlytinrowsofsUnknown foreach parameter '%s'!cset|dr<r/tjj||jSt|Sn%t|ts]tt ||SdS(NR0( R3R&R Rt get_childrenRRRdRR(t list_or_elm(t childrenOnly(sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytget_list(s  !cSsx|D]}t||ds3t||drG||tj|FssLength error unpacking for %s!sGot None evaluating %s!sforeach filtering %scss|]}t|VqdS(N(R(R^R_((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pys csRLcs0|djr,t|dStS(Ni(R\R]tMAXWE(R(tfR(sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRqs,c3s$|x|D] }|VqWdS(N((RRR~(R(sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytstickonvs  u???tbreakc3sttVxjD]b}ttVxCD];}ttVx||D] }|VqKWttVq*WttVqW2dS(N(Rt TABLE_ROWR}t TABLE_CELL(RPRR~(t content_bitsRtthis_row(sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytend_rows      c3s%|jdk sttjj|ttj}|tj>}}} in an element's substitution to allow that element to serve as a context for property/macro evaluation.uleafucontentR1uownerRiuarg%du/iunameN(RRRGRR3R8R4R1RR/RRIR0RRRR}R|RBR7RR( Rtleaftccontenttis_refst eover_dicttcurrentthrefR,tcntR~((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyR(sH               cCsdS(srSuppress any content. Useful for leaving comments only relevant to people editing a prop's value.(((RR((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytcommentsccst|}ddddg}xM|jD]?\}}|dkrZt|||d
%s
%s
%s
s
RQs:\cleardoublepage \resetnumbering \headers{%s}{%s}{%s}{%s} s \cleardoublepage N(iiii( RRRRRdR&RRRSttuple(RRRitheadfootRLRRRR~((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt withheaderss.        tcenterRVR[sCenter the content.trightRXt flushrightsRight-justify the content.tleftt flushleftsLeft-justify the content.tdboxRWtcommands#Put a double box around the contenttfiguresMake a floating figure.ROu
RQs \clearpagesStart a new logical page.s\cleardoublepagesStart a new piece of paper.u
s\par\smallskip sInsert a small gap.s \par\medskip sInsert a medium gap.s \par\bigskip sInsert a big gap.uu ableofcontentssInsert a table of contents.u…s Ellipsis.uætaeuÆtAEsBold.sItalic.s Monospace.s Underline.sStrike.s Footnote.is Small text.iiiiisNormal font size.is Large text.isRather large text.isVery large text.is Huge text.isVery huge text.ccsJ|dkrttVn,ttVx|D] }|Vq,WttVdS(sNo indentation.N(R4RtNOINDENTR}R(RRR~((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytnoindentfs     ccs?tdj|}t|ts0t|t|VdS(sgEvaluate the given expression and output its value. E.g., {{{<>}}} will output 8.u N(RReRRRRy(Rtresult((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt_evalqsccsdj|j}tjdjd|f|tjkrlttj|drlttj|jVntt |VdS(saReturn a macro's value as a string, unevaluated. Useful for args of macro-like elements.u iRRN( ReRR&RJRTR'R3RyRR(Rtargstr((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRzs ccsrt|}d|kr'tdn|djd\}}t|}|d=i}x*|jD]\}} t| ||(t jsarg_escapesutf-8ukuedits((RRRRRRR3R!RcRiRR1t conversiontflatten_filterstget_from_cacheR0R&t extensionR4RtevaluateRIR t DISCORDIAt cache_propvaltmakeUncacheablet OMNISCIENCERRt addRawDepRR<RSRRt bazki.utilRRRRy(RRteditableRiR0RhR1RzR#R"R,RtflattceRRtdepsRRRRR((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRs                       ccs<tjtdk}x"tj|d|D] }|Vq)WdS(s,Like {{{<>}}}, but adds an edit link.RORN(R&RRRwR(RRR~((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRsc cst|}d|ks$d|kr3tdn|d}|d}d|krft|d}nd}t|}t|}x|jD]|}|tdkr|dk rtj |j |krqqnt i|d|6x|D] }|VqWWdQXqqWdS(sEvaluate the content once for each prop in the given element. Use like {{{<> * <><>}}}. Can be given an extra ##flavor=whatever## arg to limit it to props of a given flavor.iis'##foreachpropin## takes two parameters!R3uthisR N( RRRR4RdRRRRtget_propR3R>( RRRiR0R2R3R1RR~((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt foreachpropins&          c cst|}d|ks$d|kr3tdntj}gt_t|d}|d}t|}tj}|t_x>|D]6}ti||6x|D] }|VqWWdQXqWdS(Niis1{{{foreachimage}}} takes at least two parameters!(RRR&RRRdR( RRRit old_imagesRRtlatched_imagesR,R~((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt foreachimages         ccst|}d|ks*t|dkr9tdn|djd\}}t|}t|}||krtd|j|fnttVt t ||j dVt tVdS(sgRender the source of the given prop of an element. Use like {{{<>}}}.is&##sourceof## takes only one parameter!Rs/##%s## has no prop ##%s## to get the source of!sutf-8N( RRcRRRRR0R}t CODEBLOCKRyRRR(RRiR0RhR1((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytsourceofs      ccsXt|}d|ks*t|dkr9tdnt|d}t|VdS(sQRender the propname of the given prop; useful in {{{<>}}}.is&##propname## takes only one parameter!N(RRcRRRy(RRiRh((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyR0s   c cst|}d|ks*t|dkr9tdn|d}d|krY|dnd}xttD]}|jd rlttt|dd|krl|jdr|d }nt i||6x|D] }|VqWWdQXqlqlWdS( sEvaluate content once for each built-in macro. Sets the argument to the name of the built-in macro. Optionally, a second argument selects a class of macro hidden by default.iis-##foreachmacro## takes one or two parameters!RIRhiN(ii( RRcRR4tdirR'R?RtendswithR(RRRiR2texpected_hiddenRR~((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt foreachmacro=s   "  ccs t|}d|ks*t|dkr9tdn|d}tjdjd|f|tjkr|tj|}ntt|dr|d}n"tt|std|nt t t|dd}|dk rxt |t D] }|VqWndS( s-Given a built-in macro, render its help text.is&##macrodoc## takes only one parameter!iRRIsNo such macro ##%s##!RZN( RRcRR&RJRTR'R3R'RR4RR(RRiRQR[R~((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytmacrodocSs      cCsdj|j}d|kr<|jdd\}}n |}d}tjdjd|f|tjkrtj|}n|dk rtt |||Stt ||SdS(s:Evaluate the built-in macro named by the given expression.u RiRiRN( ReRRR&RJRTR'R4RR'(RRRRQ((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytmacrojs  Rccsx|D] }|VqWdS(sSpecial indicator macro. Propvals that //start// with this macro will be considered 'abstract', and the interface will encourage users to override them in children. Has no effect on evaluation.N((RRR~((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyR|s ccs.ddlm}tt|jjVdS(sEvauates to the current year.i(tdatetimeN(RRyRtnowtyear(RR((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRscCsStdsOt|}|tjks<t|tjftjtj|>}}} return non-iterator "%s"!u sError: no such macro %s!s)%s is a reference that evaluates to None!is%s.%sRtwikitexts<No element or macro ##%s## exists evaluating %s! (Tried %s.)sNo element ##%s## exists!(0tMACRO_NAME_PATtmatchR4RRRGRR&RJRTRIR'R3R'RRR\RR RR R&RRbRRyRR`ReRR"RRRtis_refR]RRRRRcR2R5RR0R@RRi(RQRRRtorignametmacedt overridableR9RgtpnamtoveR~RRntflavR_Rteval_bit((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyRs  $                 !&          A         csfd}|S(Nc3s7t|}ddl}t|jd|VdS(NitNFC(Rt unicodedataRyt normalize(RRRR(R(sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytamac s  ((RR((RsU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pytaccent sút'ùt`üt"ũt~ūt=c Cstjt_|t_|dk r@tjj|j|n|t_i|tj 6|tj 6t_ |dkr~gt_ n |gt_ idd6t_ i|d6t_xa|jD]S\}}t|dr|tj |]+)>>>cCs1ytj|jdSWntk r,dSXdS(Nis???(R&RRR>(Ru((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyt unplaceholderO s c Cs)t|dr|j}|}|j} |dk s9t| dk sKt|jdk sft||dkrtj|j}n|jr|j} nt |jd} |j } n*d}d} |} t } |dk st|stt d s!tt t jntt j} t|| |||d|| rS|t jdRBR4RFRSRWRuRvRRRRRRRRRRRRRRRRER%RGRIRRRRRRRRtcompileRRRRR RRRRRRRR]RR4RRRGRMR]R_ReRiRmRpRqRuRRwR|RR`RtRR'Rt ACCENT_MACROStsymRtlocalR&RRRRRRRRRR(((sU/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/wiki.pyts $ (       A "          '            !>  -  ,     _        +  L