ó PlQTc @sáddlZddlZddlmZmZmZmZmZmZm Z m Z m Z m Z m Z mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZddlm Z ddl!Tddl"m#Z#ddl$m%Z%d„Z&d „Z'd „Z(d „Z)d „Z*d „Z+d„Z,dd„Z.e.e_.d„Z/e/e_/idƒd6d„d6d…d6d†d6Z0d„Z1e1e_1edd d!ƒe_2d"„Z3e3e_3d#„Z4e4e_4d$„Z5e5e_5d%„Z6e6e_6d&„Z7e7e_7d'„Z8e8e_8ed(d)d*ƒe_9dd+„Z:e:e_:ed,d-d.ƒe_;d/„Z<e<e_<d0„Z=d1„Z>e>e_>dd2„Z?e?e_?e?e_@dd3„ZAeAeBeCƒeDeCƒƒe_EeAeFeGƒƒe_Hid4d56ZId6„ZJd7„ZKeKd8d9d:ƒe_Le_MeKd9d8d:ƒe_Ne_Od;„ZPd<„ZQeQd=d>d?d:d@ƒeQdAdBdCd:d@ƒeQdDdEdCd:dFƒeQdGdEdHd:dFƒeQdIdJdKd:dLƒeQdMdNdOd:dMd4dMƒeQdPdQdRd:dSd4dSƒeQdTdUdVd:dTd4dTƒeQdWdXdYd:dWd4dWƒeQdZd[d\d:dZd4dZƒeQd]d]d^ƒeQd_d_d`ƒeQdadbdcd:dad4daƒeQdddbdcd:ddd4ddƒeQdedfdgd:dhd4didjdkƒeQdldldmƒdn„ZReRdoƒe_SeRdpƒe_TdqZUdrZVds„ZWdtdu„ZXedvd-dwƒe_Yedvd-dxƒe_ZeXdyƒe_[eXdzƒe_\eXd{ƒe_]eXd|ƒe_^eXd}ƒe__eXd~ƒe_`eXdƒe_aeXd€ƒe_bedƒe_ced‚ƒe_ddS(‡iÿÿÿÿN(tmacrost environmenttillegaltdividedt WikiExceptiontNoContentExceptiont safesplittparse_macro_argstrecursetbaz_evalt full_evaltleafproptrender_propvaltrender_allow_overridet get_formatt get_elementtget_current_elementt get_propnamet get_topthist get_contextt get_moverridetatomt eoverridet moverridetcontexttmakeRestrictedt tokens_texttstring_tokenize(tFORMATS(t*(t LATEX_SIZESi(tcustomccs?ttd|ƒƒ$xt||ƒD] }|Vq&WWdQXdS(Ntform(RtdictR(tenametpnameR tt((sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pytmoverride_thunkscCs@t|d|ƒt|d|ƒt|d|ƒt|d|ƒfS(Nutopleftutoprightu bottomleftu bottomright(R%(R R"((sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pyt get_headfootsccsÄtdƒVx|dD] }|VqWtdƒVtdƒVx|dD] }|VqFWtdƒVtdƒVx|dD] }|VqvWtdƒVtdƒVx|d D] }|Vq¦WtdƒVdS( Nss
is
is
i(tLiteral(theadfootR$((sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pythtml_div_headerss            ccsYtdƒVx|dD] }|VqWtdƒVx|dD] }|Vq;WtdƒVdS(Nsis is(R'(R(R$((sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pythtml_table_header/s    ccsYtdƒVx|dD] }|VqWtdƒVx|dD] }|Vq;WtdƒVdS(Nsis is(R'(R(R$((sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pythtml_table_footer7s    ccs£tdƒVx|dD] }|VqWtdƒVx|dD] }|Vq;WtdƒVx|dD] }|Vq`WtdƒVx|dD] }|Vq…Wtd ƒVdS( Ns\lhead{is}\rhead{is}\lfoot{is}\rfoot{is} (R'(R(R$((sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pytlatex_cmd_headers?s        ccsKt}x>|D]6}|s'tdƒVnt}x|D] }|Vq4Wq WdS(Ns}{(tTrueR'tFalse(R(tfirstthfR$((sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pytlatex_arg_headersMs  cCsdS(scPlaceholder that evaluates to 'sheet' or 'card' or 'badge' when evaluating headers and footers.t((targlisttcontent((sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pyR Wsccs›t|ƒ}d}ddddg}xi|jƒD][\}}|dkr^t|ƒjƒ}q1|dkr|td|ƒ}q1td|ƒ‚q1W|jƒs¥d}ntƒtdkrtd|ƒVxt |ƒD] }|VqÔWx|D] }|VqêWt t t ƒVtd ƒVn‚tƒtd krtd ƒVxt |ƒD] }|Vq@Wx|D] }|VqVWt t t ƒVtd ƒVnx|D] }|VqˆWd S(s…Render content as a sheet. Takes an element to get headers and footers from, and optionally a 'color' parameter for paper color.R2tcoloriusheetsUnknown arg '%s' in sheet!twhitethtmls
s
ttexs\begin{sheet} s \end{sheet}N(((((RtitemsR tstripR&RRRR'R)tEntityt ENV_BREAKR-R,(R3R4targsR5R(tkeytvalR$((sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pytsheet]s<             g @iitnormalgÍÌÌÌÌÌ @gÍÌÌÌÌÌ@tlargeg@g333333 @ttallgø?iþÿÿÿtminiccst|dƒ}t|ƒ}d}d}dddd g}xŠ|jƒD]|\}}|dkrst|ƒjƒ}qF|dkr”t|ƒjƒ}qF|dkr²td|ƒ}qFtd|ƒ‚qFW|jƒsÛd }n|tkrtd |d jtj ƒƒfƒ‚nt |ƒd kr0td ƒ‚nât |ƒd krU|d} d} n |\} } t ƒt dkr't d||fƒVxt|ƒD] } | Vq–Wt dƒVx| D] } | Vq·Wt dƒVt dƒVx| D] } | VqãWt dƒVxt|ƒD] } | Vq Wt dƒVnët ƒt dkrÛt|\} } }t|}t d| | |fƒVt dƒVxt|ƒD] } | Vq‡Wx| D] } | VqWt dƒVx| D] } | Vq¾Wt dƒVn7x| D] } | VqâWttƒVx| D] } | VqWdS(!sŸRender content as a card. Takes an element to get headers and footers from, and optionally a 'color' parameter for paper color and a 'size' parameter.tflipR2RAR5tsizeiucardsUnknown arg '%s' in card!R6s.Unknown card size '%s'; valid options are: %s.s, is%More than one ##flip## in a ##card##!iR7s s s s
s s
R8s\begin{card}{%sin}{%sin}{\%s} s\front{s} \back{s } \end{card} N(sflip(((((RRR9R R:R&RtSIZEStjointkeystlenRRR'R*R+RR,R;R<(R3R4tpartsR=R5RFR(R>R?tfronttbackR$twthtfont((sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pytcardŠst       "                         RERQtsignc cst|ƒ}d}d}d}ddddg}xÆ|jƒD]¸\}}|dkrjt|ƒjƒ}q=|dkr…t|ƒ}q=|dkr£td|ƒ}q=|dkråt|ƒjƒjƒ}|dkrõtd ƒ‚qõq=td |ƒ‚q=W|jƒsd }ntƒt d krÚt d |j ƒ|fƒVxt |ƒD] } | VqIWt dƒVx|D] } | VqjWt dƒVt dƒVx|D] } | Vq–Wt dƒVxt |ƒD] } | Vq½Wt dƒVn²tƒt dkrkt d|fƒVxt|ƒD] } | Vq Wt dƒVx|D] } | Vq-Wt dƒVx|D] } | VqNWt dƒVn!tdƒVx|D] } | Vq}WdS(sÜRender content as a packet. Takes a label for the outside and an element to get headers and footers from, and optionally a 'color' parameter for paper color and a 'style' parameter ("envelope" or "folding").R2tEnvelopeR5iiupackettstyletFoldings:The only valid packet styles are "envelope" and "folding"!sUnknown arg '%s' in packet!R6R7s" s s s
s s
R8s \%sPacket{s}{t}uPacket: N(((((RSRU(RR9R R:R R&t capitalizeRRRR'tlowerR*R+R1tText( R3R4R=tlabelR5RTR(R>R?R$((sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pytpacketÐsd                            c cst|ƒ}d}d}ddddg}x„|jƒD]v\}}|dkrdt|ƒjƒ}q7|dkrt|ƒ}q7|dkrtd|ƒ}q7td|ƒ‚q7W|jƒsÆd}ntƒtdkrTt d |ƒVt d ƒVxt |ƒD] }|VqWx|D] }|VqWt d ƒVx|D] }|Vq7Wt d ƒVn«tƒtd krÞt dƒVxt |ƒD] }|VqWt dƒVx|D] }|Vq Wt dƒVx|D] }|VqÁWt dƒVn!t dƒVx|D] }|VqðWdS(NR2R5iiunotebooksUnknown arg '%s' in notebook!R6R7s
s
s
s
R8s\startnotebook{s}{RVs \endnotebook u Notebook: ((((( RR9R R:R R&RRRR'R)R1RY( R3R4R=RLR5R(R>R?R$((sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pytnotebook sP                       ccsSt|ƒ}d|kr1t|dƒjƒ}n1ttƒddƒ}|dtƒ_t|ƒ}tƒtdkrºtdƒVt |ƒVtdƒVx|D] }|VqWtdƒVn•tƒtdkrtdƒVt |ƒVtd ƒVx|D] }|VqõWtd ƒVn=t t d ƒVt |ƒVt t d ƒVx|D] }|Vq@Wd S( s-Dummy page for previewing outside a notebook.it gknextpageR7s

s

s
R8s\begin{nbpage}{s} s \end{nbpage} iN( RR R:tgetattrRR]tunicodeRR'RYtStarttHEADINGtEnd(R3R4R=ttitleR$((sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pytpage7s2               ccst|ƒ}d}d}d}ddddg}xÙ|jƒD]Ë\}}|dkrjt|ƒjƒ}q=|dkrˆtd|ƒ}q=|dkr©t|ƒjƒ}q=|dkrøt|ƒjƒ}d} || krtd d j| ƒƒ‚qq=td|ƒ‚q=W|jƒs!d}n|tkrUtd|d jtjƒƒfƒ‚nt ƒt dkrÆt d|j ƒ||fƒVxt |ƒD] } | Vq“Wx|D] } | Vq©Wt dƒVn·t ƒt dkr\t|\} } } t| } t d|| | | fƒVxt|ƒD] } | VqWt dƒVx|D] } | Vq?Wt dƒVn!tdƒVx|D] } | VqnWdS(NR2tlightRAR5iubadgeRFRTtdarktsimpleRDs$The only valid badge styles are: %s!s, sUnknown arg '%s' in badge!R6s/Unknown badge size '%s'; valid options are: %s.R7s
s
R8s \NameBadge[%s]{%sin}{%sin}{\%s}{s}{RVuBadge: (((((slightsdarkRgRD(RR9R R:R&RRHRGRIRRR'RXR)RR1RY(R3R4R=R5RTRFR(R>R?t valid_stylesR$RNRORP((sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pytbadgeWs^         "           ccsÌt|ƒ}t|d#ƒ}t|ƒd$ks9t|ƒ‚d}d}d}d}d}d%d&d'd(g} x |jƒD]þ\} } | dkr£t| ƒjƒ}qv| dkrÍtt| ƒjƒƒg}qv| dkrît| ƒjƒ}qv| dkrt| ƒjƒ}qv| dkr3| } t d | ƒ} qv| dkrdtt| ƒjƒƒggd}qvt d | ƒ‚qvW|jƒsd }n|dkrßt | d d ƒg}t|ƒdkrß|j t | d d ƒƒqßn|dkrt | dd ƒ}n|dkr%td| dfƒ}n|j ƒ}|d)krPt d|ƒ‚ntƒtdkrQxÝtt|ƒƒD]É} td|jƒ|fƒVxt| ƒD] }|Vq¤WtdƒVx|| D] }|VqÉWtdƒVtdƒVx|| D] }|VqùWtdƒVtdƒVx|D] }|Vq%WtdƒVqvWtdƒVnwtƒtdkr§tdƒVxt| ƒD] }|Vq|Wtd|fƒVx|dD] }|Vq¨Wtd ƒVt|ƒVtd ƒVx|dD] }|VqãWtttƒVtd ƒVt|ƒdkrmx|dD] }|Vq(Wtd ƒVx|dD] }|VqMWtttƒVn td ƒVtd ƒVx|D] }|VqŠWtd!ƒVn!td"ƒVx|D] }|Vq¹WdS(*NREiiuR5tblurbtlocationRFusignsUnknown arg '%s' in packet!R6unameusignbackublurbu%s.%susizetBigtMediumtSmalls0Sign size must be big, medium, or small, not %s!R7s
s

s

s
s
s
R8s \headfoot{s }\Sign[\%s]{is}{RVuSign: (sflip(ii(((((RlsMediumsSmall(RRRJtAssertionErrortNoneR9R R:RYR&RR%tappendRWRRtxrangeR'RXR)R1R;R<R-(R3R4R=RKtnameR5RFRkRjR(R>R?theadfoot_enametiR$((sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pyRR‹s¬       %                                   c csËt|ƒ}t|dƒ}|jdƒ}td|ƒ}t|ƒt|ƒksWt‚tƒtdkr•tdƒVxt |ƒD] }|Vq‚Wd}t }xçt t|ƒƒD]Ó} || } t || dƒ} tdƒVtt | d d ƒƒVtd ƒVx| D] }|Vq Wtd ƒV|| 7}|d kr]|sTtdƒVt}nd}q°|d krxtdƒ‚q°tdƒVq°WtdƒVn2x/|D]'} x| D] }|Vq©WttƒVqœWdS(NtbreakiupagefoldR8s\begin{pagefold} iis\pfpart{gY@gš™™™™™$@sin}{s} ids \clearpage s$Pagefold side doesn't add up to 100!s\hrule s\end{pagefold} (sbreak(RRtpopR&RJRoRRR'R,R.RrtinttstrR-RR;tHRULE( R3R4R=RKRtR(R$ttotaltflippedRutparttheight((sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pytpagefoldçsD                  t upsidedownttexmodetcommandc cs½t|ƒ}d|ksBd|ksBd|ksBt|ƒdkrQtdƒ‚n|dkrltdƒ‚nt|dƒjƒ}t|dƒjƒ}ttd|d||fƒ}t ƒt dkr+t dƒVt d ƒV|Vt d ƒVt d ƒVx|D] }|VqWt d ƒVt d ƒVnŽt ƒt dkr‡t dƒV|Vt d||fƒVx|D] }|VqjWt dƒVn2t t dƒVx|D] }|VqœWtt dƒVdS(Niiis+##imageheader## takes exactly 3 parameters!s##imageheader## needs content!s %s^d%sx%sR7s s s s
s s
R8s \imageheader{s}{%spx}{%spx}{RV(RRJRRpRR R:R;tIMAGERRR'R`tHEADERRb(R3R4R=twidthR~timgR$((sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pyt imageheaders< 6               tsecrettdocs*Mark this content as secret, for printing.c csåt|ƒ}t|dƒ}t|dƒ}t|dƒ}t|dƒ}d|krkt|dƒ}nd}d|krt|dƒ}nd}tƒtdkrËtd ||ƒ} td ||ƒ} td | ƒVtd | ƒVtd |ƒVtd|ƒVtd|ƒVtd|ƒVtd|ƒVtd|ƒVtdƒVxŠ|D]i} | jtkr¿| jt krtdƒVqÄ| jt krªtdƒVqÄt sÄt | ƒ‚q[| Vq[Wnx|D] } | VqÒWdS(NiiiiiiiR8g&@g!@s\LabelCols=%s s\LabelRows=%s s\LeftPageMargin=%sin s\RightPageMargin=%sin s\TopPageMargin=%sin s\BottomPageMargin=%sin s\InterLabelColumn=%sin s\InterLabelRow=%sin s \LabelSetup s\addresslabel{\centering s} ( RR RRRxR'RTtUNORDERED_ITEMtoptSTARTtENDR.Ro( R3R4R=RORNtv_marginth_margintv_gapth_gaptrowstcolsR$((sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pytlabels<sB       cCsdS(Nt1((((sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pyt current_rungsccsá|djddƒ\}}t|ƒ}t|ƒ}|j|ƒ}tƒ}tr¾ttƒVtt d||fdfƒVt tƒVt dƒVtt ƒVt |j|ƒƒVt t ƒVnxt||ƒD] }|VqÎWdS(Nit.is%s.%su (tsplitRRt get_propvalR–R.R`tSTRIKER;tMACRORpRbRYtBOLDt get_overlayR(R3R"tpropnametelementtpropvaltrunR$((sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pytruntimejs       ccs‰tƒttƒVttƒVtdƒV|rEtdj|ƒƒVn|rdx|D] }|VqRWntdƒVttƒVttƒVdS(NuTODO: u u :TODO(RR`RœtITALICRYRHRb(R3R4R$((sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pyttodo}s       cs‡‡fd†}|S(Nc3sØt|dƒ}t|ƒdkr0tdƒ‚nˆVttƒVx|dD] }|VqKWttƒVˆdk ryˆVnt|ƒdkrÔttƒVttƒVx|dD] }|Vq¬WttƒVttƒVndS(NRvisToo many parts in a quote!ii(sbreak(RRJRR`R£RbRptRIGHT(R3R4RKR$(tendtstart(sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pytenvŽs"        ((R§R¦R¨((R¦R§sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pytquotestAt?cCsd}tƒ}|dk s!t‚t||dƒ}d|krRtd|ƒ‚n|dd!jƒ}d|kr—|dtd ƒg|d |dásiit pronounupper( t startswithtvaluesthasattrRRÁthiddentsetattrR!R±(tmacR­R®R³taR¿R±((R³sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pyt_pronÑs(         ttheythetshetittthemthimtherttheirthistitsttheirstherstthemselfthimselftherselftitselftspousethusbandtwifet offspringtsontdaughtertchildtkidtboytgirltsiblingtbrothertsistertparenttfathertmothertuncletaunttnephewtniecetpersontmantwomanthumantgendertmaletfemaletneutert uncertainR°tothertmistertmisscs‡fd†}|S(Nc3sztdƒ}tdƒ|kr,tˆƒVnJt}x|D]}t}|Vq9W|svxt|dƒD] }|VqdWndS(Nucurrentuleafuname(RRYR.R-R(R3R4tcurrentt had_contentR$(tyou(sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pytyýs   ((RR((RsV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pytyouishüs uYouuyouu <<
>>u
<<>>cCsÇtd„dDƒƒ}||dsR/tmiddletlasttprefixtsuffixtfulliR¬s, iR—iiiÿÿÿÿtinformaltformals%s %stsurnametgiven(sfirstsmiddleslastsprefixssuffix(	R!tSUFR˜treplacetPRERJRotendswithRH(Rstgdtbits((sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pyt	parsenamesL	


unamecs"d‡‡fd†}d|_|S(Nc	3s¤dj|ƒ}|jƒr*|jƒ}nˆ}tƒ}t||dtdtdtƒƒ}|dkr…td|j	|fƒ‚nt
|ƒ}t|ˆƒVdS(Nu t
moverridestpretsufs&%s.%s is not defined for name parsing!(RHR:RR
R!RRRpRR"RRY(R3R4targstrtnamepRµRstnamedict(tnamepropR}(sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pytnpBs	tnamepart(RpRÉ(R}RR((RR}sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pyRAs	R¬s4Marks the end of a title or prefix for name parsing.s;Marks the start of an end title or suffix for name parsing.R/RRRRR
R	Ruplayerucontact(g
@ii(gÍÌÌÌÌÌ@gÍÌÌÌÌÌ@i(g@g333333@i(g@gø?iþÿÿÿ(etsystretbazbase.wikiRRRRRRRRRR	R
RRR
RRRRRRRRRRRRRRtbazbase.flavorsRtredbeans.tokenstredbeans.latexRR2RR%R&R)R*R+R,R1RpR R@RGRQRER[R\RdRiRRRR€R‡RˆR”R–R¢R¤tTODOR©R`tCENTERRbtcenquoteR;tNOINDENTtbigquoteR²R¹R¾tmfR½tfmtfmnRÁRÍRtYouRRRRRRRR/RRRRR
R	Rtplayertcontact(((sV/afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/gameki/macros.pytsIJ	
							
		#	
	C		9		+				2		Z		(	!		)				
		
				"		2