Ñò
z‰4Nc           @   s¼  d  d k  Z  d  d k Z d  d k Z d  d k l Z l Z d  d k l Z d  d k l Z d  d k	 l
 Z
 d  d k l Z l Z d d k l Z l Z d d	 k l Z l Z d d
 k l Z l Z l Z l Z l Z d d k l Z l Z d Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e  f d „  ƒ  YZ! d e  f d „  ƒ  YZ" d „  Z# d „  Z$ d „  Z% d „  Z& d „  Z' d „  Z( e) d „ Z* d „  Z+ d „  Z, e- h  h  d „ Z. h  h  d „ Z/ e0 d  ƒ Z1 h d! d" 6Z2 d# „  Z3 d$ „  Z4 e i5 d% e i6 ƒ Z7 d& „  Z8 d' „  Z9 d( „  Z: d) „  Z; d* „  Z< e= e- d+ d, „ Z> d- e  f d. „  ƒ  YZ? d/ e  f d0 „  ƒ  YZ@ e- e- d1 d2 d3 „ ZA d2 d2 d4 „ ZB d5 „  ZC d6 „  ZD d7 „  ZE d8 e  f d9 „  ƒ  YZF d: e  f d; „  ƒ  YZG eG ƒ  ZH d< ZI e i5 d= ƒ ZJ e i5 d> ƒ ZK d? e  f d@ „  ƒ  YZL e= dA „ ZM dB „  ZN e i5 dC ƒ ZO d+ e- dD „ ZP e
 eP eM ƒ ZQ eL ƒ  ZR dE „  ZS h  ZT h  dF „ ZU e= h  e- e- e= dG „ ZV dH „  ZW dI „  ZX dJ „  ZY dK „  ZZ d S(L   iÿÿÿÿN(   t   izipt   count(   t	   decorator(   t   Format(   t   Creole(   t   IllegalMarkupExceptiont   Parseri   (   t   configt   NoResultFound(   t   customt   db(   t   Elementt   Propvalt   Propt
   CacheEntryt
   Dependency(   t   FLAVORSt   FORMATSt	   discordiat   WikiExceptionc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyR      s   t   NoContentExceptionc           B   s   e  Z RS(    (   R   R   (    (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyR      s   t	   moverridec           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   | |  _  d  S(   N(   t   kw(   t   selfR   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   __init__   s    c         C   s+   t  t d ƒ |  _ t d i |  i ƒ d  S(   Nt
   moverrides(   t   dictt
   eval_statet   old_moverridest   updateR   (   R   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt	   __enter__   s    c         C   s   |  i  t d <d  S(   NR   (   R   R   (   R   t   exc_typet   exc_valt   exc_tb(    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   __exit__   s    (   R   R   R   R    R$   (    (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyR      s   		t	   poverridec           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   | |  _  d  S(   N(   R   (   R   R   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyR   "   s    c         C   s+   t  t d ƒ |  _ t d i |  i ƒ d  S(   Nt
   poverrides(   R   R   t   old_poverridesR   R   (   R   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyR    $   s    c         C   s   |  i  t d <d  S(   NR&   (   R'   R   (   R   R!   R"   R#   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyR$   '   s    (   R   R   R   R    R$   (    (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyR%   !   s   		c   	   
      sB  t  |  | d t d d t ƒ} |  g t | ƒ f g } |  g | } x÷ t | ƒ d j oã g  } xÐ | D]È \ } } x¹ | D]± ‰ ˆ | j o* t d | d i | ˆ g ƒ f ƒ ‚ n | ˆ j og t ‡  ‡ f d †  ˆ  Dƒ ƒ oG t  ˆ | d t d d t ƒ} | | 7} | i | ˆ g | f ƒ qz qz Wqg W| } qG W| S(   Nt   parsert
   mainparsert   toPythoni    s&   Infinite %s loop in recursive_get: %s!s   ->c         3   sP   xI |  ]B } | ˆ j o  t  ˆ | d  t d d t ƒn d ˆ  | j Vq Wd S(   R(   R)   R*   N(   t   _recurseR   t   Truet   None(   t   .0t   r(   t   restrictionst   n(    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pys	   <genexpr>8   s   	(	   R+   R   R,   t   listt   lenR   t   joint   allt   append(	   t   elmt	   prop_nameR0   t   rett   newt   newnewt   patht   lt   adding(    (   R0   R1   s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   recursive_get*   s2    	   $
	
&c         C   s   | i  |  ƒ S(   N(   t   isAncestorOf(   t   elementt   ancestor(    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   has_ancestorD   s    c         G   s$   d | j p t  ‚ t |  | | Œ S(   Nt   __(   t   AssertionErrort   getattr(   t   objectt   namet   args(    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   safe_getattrG   s    c         C   se   t  |  t ƒ o t |  | | ƒ St  |  t ƒ o, g  } |  D] } | t | | | ƒ q< ~ S|  Sd  S(   N(   t
   isinstanceR   t   attrelmR2   t   baz_eval_wrap(   t   argR(   R*   t   _[1]t   a(    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyRM   K   s
    ,c            s"   t  ‡ ‡  f d †  ƒ } | |  ƒ S(   Nc            s\   g  } | D] } | t  | ƒ q ~ } t d „  | i ƒ  Dƒ ƒ } t |  | | Ž  ˆ  ˆ ƒ S(   Nc         s   s+   x$ |  ] \ } } | t  | ƒ f Vq Wd  S(   N(   t   baz_eval_unwrap(   R.   t   kt   v(    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pys	   <genexpr>V   s   	 (   RQ   R   t   itemsRM   (   t   funcRI   R   RO   RP   (   R(   R*   (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   helperS   s    '(   R   (   RU   R(   R*   RV   (    (   R*   R(   s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   baz_eval_wrap_funcR   s    c         C   st   t  |  t ƒ o |  i St  |  t ƒ o& g  } |  D] } | t | ƒ q3 ~ St  |  t ƒ o t |  d ƒ S|  Sd  S(   Ns   utf-8(   RK   RL   t	   element__R2   RQ   t   strt   unicode(   R9   RO   R/   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyRQ   Y   s    &c            sq  t  |  i ƒ  ƒ d j o d St | d | ƒ‰  d |  j o t d ƒ ‚ n!y¯ t |  h h  d 6‡  f d †  d 6d  ‡  f d	 † d
 6t d 6t d 6t d 6t	 d 6d  d 6t
 d 6t d 6t d 6t d 6t t | | ƒ d 6t t | | ƒ d 6ˆ  ƒ } t | ƒ SWnn t j
 ob } t | t ƒ o$ t i d | i d ƒ o
 d } n d } t | i t | ƒ | ƒ ƒ ‚ n Xd  S(   Ni    u    R*   RD   s8   The string '__' is not allowed to appear in expressions!t   __builtins__c            s
   |  ˆ  j S(    (    (   t   s(   t   elemlocs(    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   <lambda>l   s    t   definedc            s   ˆ  i  |  | ƒ S(    (   t   get(   R\   t   d(   R]   (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyR^   m   s    R`   t   reprRY   R,   t   FalseR-   t   anyR5   t   hasattrRF   R?   RC   s$   ^global name '(\w+)' is not defined$sD    (If you're using a generator expression, try a list comprehension.)t    (   R3   t   stript	   _elemdictR   t   evalR-   Rb   RY   R,   Rc   Rd   R5   Re   RJ   RW   R?   RC   RQ   t	   ExceptionRK   t	   NameErrort   ret   searchRI   t   escape(   t   exprR(   R*   R9   t   et   extra(    (   R]   s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   baz_evalb   s>    	
	
		
c         C   s   t  |  | d t ƒS(   NR*   (   Rr   Rc   (   Ro   R(   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt	   full_eval‰   s    c         C   s   t  |  | ƒ } t | ƒ } | S(   N(   Rr   RZ   (   Ro   R(   R9   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   unicode_evalŒ   s    c         C   s^   | t  d j o t  d | St t i t ƒ | |  j o t |  | d | d | ƒS| Sd  S(   NR   t
   eoverrides(   R   t   addDepRp   t   enamet   genderpt   render_propval(   RA   R8   t   defaultRu   R   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   render_allow_override‘   s    c         C   s‹   t  t d ƒ  t ƒ } t t d ƒ } t t d ƒ } t d i | ƒ t d i | ƒ t |  i |  i i	 | ƒ } | t d <| t d <| S(   s8   Render the propval as plain text, tracking dependencies.t   txtRu   R   (
   R   R   t   dialectR   R   R   R+   RA   t   propRH   (   t   propvalRu   R   R(   t   old_eoverridesR   R9   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyRy      s    

s   '"t   )t   (c         C   s`  t  } d } d } d } t  } g  } d	 } h  } xt t |  ƒ ƒ D] }	 |  |	 }
 t | ƒ d j o` | d	 j oS |
 i ƒ  oF | o; | | | <| | j o | d 7} n d } | } t  } qCqC | o t d | ƒ ‚ n | |
 7} |
 d j o | o
 t } qC | d	 j o |
 t j o
 |
 } n|
 | j o | o
 d	 } nñ t | ƒ d j o | d |
 j o | i ƒ  n¿ |
 t	 j o | i
 t	 |
 ƒ n |
 d j o t |  ƒ |	 d j ox |  |	 d d j oc |  |	 d d
 j oN t | ƒ d j o; t | t ƒ o' t | ƒ d j o | d  } d } q=n t  } qC W| o | | | <n | S(   s—   Parse an argument string into a map of names to values.

    name will be an integer for positional parameters and a string for
    keyword parameters.Rf   i   i    s!   Text after close paren in %s arg!s   \iÿÿÿÿt   =t   !N(   Rƒ   R„   (   Rc   R-   t   xrangeR3   t   isspaceR   R,   t   QUOTESt   popt   GROUPINGR6   RK   t   int(   t   argstrt   escapingt   buildRH   t   nextnamet   nomoret   nestt   quotet   retmapt   it   char(    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   parse_macro_args­   sX     
-




$9#

c         C   sl   |  i  d  j	 p t ‚ t d i |  i  d f ƒ |  i ƒ  } x( | D]  } t d i | i  d f ƒ qD W| S(   Nt   dependenciest
   __children(   Rw   R-   RE   R   t   addt   getDescendants(   Rp   t   everyonet   dude(    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   _list_descendantsá   s     s   <<([\w#-]+).*>>.*?<</\1>>c         C   s  |  } t  i | ƒ } xL | oD d t | i d ƒ ƒ } t  i | | d d ƒ} t  i | ƒ } q Wg  } d  } | i | ƒ } xƒ | o{ | i |  d | i d ƒ !| f ƒ |  | i d ƒ | i d ƒ !} |  | i d ƒ }  | | i d ƒ } | i | ƒ } q‚ W| i |  | f ƒ | S(   Nt   *i    R   i   (	   t   TAGPAIRRm   R3   t   groupt   subR-   R6   t   startt   end(   t   stringt   patt   modstrt   mt   junkt   retlistt   next(    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   safesplit_tagsë   s&      #c         C   s,   g  } t  |  | ƒ D] } | | d q ~ S(   Ni    (   Rª   (   R£   R¤   RO   t   p(    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt	   safesplitý   s    c         C   s¦   d t  j oŒ |  t  d j o t  d |  S|  t i j o	 t  d S|  t i j o* t  d i t  d i d f ƒ t  d i St  d i |  d f ƒ n t i |  ƒ S(   Nt
   evaluatingRu   t   meR–   t   __parentt   __exists(	   R   R	   t
   ME_ELEMENTt   PARENT_ELEMENTR˜   Rw   t   parentR   R`   (   Rw   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   get_element   s    	c           C   s/   d t  d j o t  d d St t i ƒ Sd S(   sQ   Like get_element(u'leaf'), but allows explicit overriding by setting
    current.u   currentRu   N(   R   R´   R	   t   LEAF_ELEMENT(    (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   get_current_element  s    c         C   s&   |  t  d j o t  d |  S|  Sd  S(   NR&   (   R   (   t   pname(    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   get_propname  s    u    c            sç  t  |  t ƒ o |  } | i }  n t |  ƒ } t | ƒ } | d  j	 p t ‚ t d i | o
 | i n |  | f ƒ | d j o ˆ  i	 | i ƒ St d } t
 t d ƒ ‰ t
 t d ƒ } t
 t d ƒ }	 zè| t d <| t d d <|  t i j o | t d t i <n ˆ d  j	 o' ‡  ‡ ‡ f d †  }
 |
 t d d	 <n# |  t i j o d  t d d	 <n |  t i j p | oX | t d d
 <| o? x< t | ƒ i ƒ  D]$ \ } } | t d d t | ƒ <q¤WqÔn y4 | | } t i d | i | t | i ƒ f ƒ Wn] t j
 oQ t d | d  j	 o
 | i n d  |  | d  j	 o
 | i n d  | f ƒ ‚ n X| o$ t | i i i | i t d | ƒSt | i i i | i ˆ  d | ƒSWd  | t d <|	 t d <ˆ t d <| t d <Xd  S(   NR–   u   element_nameR®   Ru   R   R&   t   thisc             sM   t  d t i } ˆ t i t  d t i <ˆ  i ˆ ƒ } | t  d t i <| S(   NRu   (   R   R	   Rµ   t   subparse(   RI   t   newleafR9   (   R(   t   contentt   oldeover(    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   render_content7  s
    u   contentu   argsu   args   >> %s.%s: %ssC   Element ##%s## (called as ##%s## by ##%s##) has no property ##%s##!R   (   RK   R   Rw   R´   R¸   R-   RE   R   R˜   Rn   R   R	   R²   Rµ   R•   RT   RZ   R
   t   logRb   t   valuet   KeyErrorR   R   R~   t   flavorR*   R}   t   evaluate(   Rw   R·   R(   R*   R¼   R‹   Rp   t   oldmet   oldmovert   oldpoverR¾   t   varRN   t   pv(    (   R(   R¼   R½   s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyR+     s\    (

 $
*,


RL   c           B   s>   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s   | |  _  | |  _ | |  _ d  S(   N(   RX   t   _attrelm__parsert   _attrelm__toPython(   R   RA   R(   R*   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyR   [  s    		c         C   sé   | d  j o t ƒ  ‚ n t | t ƒ p t | d ƒ } n t |  i | d |  i d |  i ƒ} t | t ƒ o t	 | |  i |  i ƒ St | t
 ƒ oI g  } | D]6 } | t | t ƒ o t	 | |  i |  i ƒ n | q£ ~ S| Sd  S(   Ns   utf-8R(   R*   (   R-   RÁ   RK   RZ   R+   RX   RÉ   RÊ   R   RL   R2   (   R   RP   R9   RO   R/   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   __getattr___  s    Bc         C   s   d |  i  i S(   Ns   <@Element %s>(   RX   Rw   (   R   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   __str__o  s    c         C   s    t  | t ƒ o |  i | i j S(   N(   RK   RL   RX   (   R   t   other(    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   __eq__q  s    c         C   s   |  i  | ƒ S(   N(   RÎ   (   R   RÍ   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   __ne__s  s    c         C   s   t  |  i ƒ S(   N(   t   hashRX   (   R   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   __hash__u  s    (   R   R   R   RË   RÌ   RÎ   RÏ   RÑ   (    (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyRL   Z  s   					Rh   c           B   sA   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z RS(   c         C   s   | |  _  | |  _ h  |  _ d  S(   N(   t   _elemdict__parsert   _elemdict__toPythont   _elemdict__locals(   R   R(   R*   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyR   y  s    		c         C   sº   | |  i  j o t St | t ƒ p t | d ƒ } n | d  j o t S| t d j p | t d j o t St d i | d f ƒ y t i	 | ƒ } t SWn t
 j
 o t SXd  S(   Ns   utf-8Ru   R   R–   R°   (   RÔ   R,   RK   RZ   R-   Rc   R   R˜   R   R`   R   (   R   t   keyRp   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   __contains__}  s    "c         C   sŠ   | |  i  j o |  i  | St | d ƒ } | |  j o t d | ƒ ‚ n | t d j o t d | St t | ƒ |  i |  i ƒ Sd  S(   Ns   utf-8s   No element '%s' exists!R   (   RÔ   RZ   RÁ   R   RL   R´   RÒ   RÓ   (   R   RÕ   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   __getitem__Œ  s    c         C   s   | |  i  | <d  S(   N(   RÔ   (   R   RÕ   RÀ   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   __setitem__˜  s    c         C   s   |  i  | =d  S(   N(   RÔ   (   R   RÕ   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   __delitem__š  s    c         C   s'   y |  | SWn t  j
 o | SXd  S(   N(   RÁ   (   R   RÕ   Rz   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyR`   œ  s    N(	   R   R   R   RÖ   R×   RØ   RÙ   R-   R`   (    (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyRh   x  s   					t   commandRf   c            s<   ˆ  d  j o
 ˆ ‰  n ‡ ‡  ‡ ‡ f d †  } | | _ | S(   Nc            sW  |  i  ƒ  t | ƒ } g  } xW | i ƒ  D]I \ } } | d j o | i t | |  ƒ ƒ q) t d | ˆ  f ƒ ‚ q) Wt |  i ƒ  t d ƒ oY ˆ d  j	 o d ˆ |  i
 | ƒ ˆ f Sd ˆ  d i d „  | Dƒ ƒ |  i | ƒ f Snk t |  i ƒ  t d ƒ oC ˆ d	 j o d
 ˆ |  i | ƒ ˆ f Sd ˆ |  i | ƒ f Sn |  i | ƒ Sd  S(   Nt   subclasss#   Unknown arg '%s' in %s environment!t   htmls   <%s>%s</%s>
s   <div class="%s%s">%s</div>
Rf   c         s   s   x |  ] } d  | Vq Wd S(   t    N(    (   R.   t   c(    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pys	   <genexpr>¸  s   	 t   text   environments   \begin{%s}
%s
\end{%s}s   \%s{%s}(   t   flushR•   RT   R6   Rr   R   RK   t
   get_formatR   R-   Rº   R4   t	   fullparse(   R(   R‹   R¼   RI   t
   subclassesRÕ   t   val(   RH   t   texnamet   texmodet   tagname(    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   env§  s.    
 	(   R-   t   __doc__(   RH   Ræ   Rè   Rç   t   docRé   (    (   Ræ   RH   Rç   Rè   s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyRà   £  s
    
	c            s   ‡  ‡ f d †  } |  | _  | S(   Nc            sF   |  i  ƒ  x5 ˆ D]) } t |  i ƒ  t | ƒ o	 ˆ | Sq Wˆ  Sd  S(   N(   Rá   RK   Râ   R   (   R(   R‹   RR   (   Rz   R   (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   atoÅ  s    
 (   Rê   (   Rë   Rz   R   Rì   (    (   Rz   R   s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   atomÄ  s    	c            s   ‡  f d †  } | S(   Nc            s   t  t i ˆ  |  ƒ S(   N(   R+   R	   Rµ   (   R(   R‹   (   R·   (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   lpÏ  s    (    (   R·   Rî   (    (   R·   s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   leafpropÎ  s    c            s/   t  i d ˆ ƒ ‰  ‡ ‡ ‡  ‡ f d †  } | S(   s®   A macro that turns something like <<card>>Foo<<flip/>>Bar<</card>>
    into
    <div class="card">
    <div class="front">Foo</div>
    <div class="back">Bar</div>
    </div>s
   <<%s\s*/>>c      	      sé  t  | ˆ ƒ } t | ƒ } g  } xW | i ƒ  D]I \ } } | d j o | i t | |  ƒ ƒ q. t d | ˆ f ƒ ‚ q. Wt | ƒ t ˆ  ƒ j o |  i d ˆ ˆ f ƒ St |  i	 ƒ  t
 d ƒ ot d ˆ d i d „  | Dƒ ƒ f } x? t t | ƒ ƒ D]+ }	 | d ˆ  |	 |  i | |	 ƒ f 7} qü W| d	 7} | St |  i	 ƒ  t
 d
 ƒ o_ d ˆ } x? t t | ƒ ƒ D]+ }	 | d ˆ  |	 |  i | |	 ƒ f 7} qqW| d ˆ 7} | Sd } x% | D] }
 | |  i |
 ƒ d 7} qÀW| Sd  S(   NRÛ   s   Unknown arg '%s' in %s divided!s   Too many ##%s##s in a ##%s##!RÜ   s   <div class="%s%s">
Rf   c         s   s   x |  ] } d  | Vq Wd S(   RÝ   N(    (   R.   RÞ   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pys	   <genexpr>é  s   	 s   <div class="%s">%s</div>
s   </div>
Rß   s   \begin{%s}
s   \%s{%s}
s	   \end{%s}
s   
(   R¬   R•   RT   R6   Rr   R   R3   Rº   RK   Râ   R   R4   R…   (   R(   R‹   R¼   t   partsRI   Rä   RÕ   Rå   R9   R“   R«   (   t   innert   dividert   divpatRH   (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   divÚ  sD      

  (   Rl   t   compile(   RH   Rò   Rñ   Rô   (    (   Ró   RH   Rñ   Rò   s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   dividedÒ  s    "c            s   ‡  ‡ f d †  } d | _  | S(   Nc            s*   |  i  d ˆ d i d „  ˆ  Dƒ ƒ f ƒ S(   Ns    ##%s## may only be used in a %s!s    or c         s   s   x |  ] } d  | Vq Wd S(   s   ##%s##N(    (   R.   RÞ   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pys	   <genexpr>  s   	 (   Rº   R4   (   R(   R‹   (   t	   containerRH   (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   illÿ  s    	t   illegal(   t   hidden(   RH   R÷   Rø   (    (   R÷   RH   s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyRù   þ  s    	t   noescapec           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s4   Wrap a format such that it's escape method is a nop.c         C   s   | |  _  d  S(   N(   t   _noescape__format(   R   t   format(    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyR     s    c         C   s   | S(   N(    (   R   t   text(    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyRn   
  s    c         C   s   t  |  i | ƒ S(   N(   RF   Rü   (   R   t   attr(    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyRË     s    (   R   R   Rê   R   Rn   RË   (    (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyRû     s   		t   maxwec           B   s   e  Z d  „  Z RS(   c         C   s   d S(   Ni   (    (   R   RÍ   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   __cmp__  s    (   R   R   R  (    (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyR     s   s
   <<%s\s*/>>s<   <<else\s*/>>|<<elif ([^\s/](?:(?:[^/]|/[^>])+[^\s/])?)\s*/>>s   <<after\s*>>(.+)<</after\s*>>t   Macrosc        	   B   s  e  Z e d  „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z	 e e
 d d ƒ ƒ Z e e
 d	 d ƒ ƒ Z e d
 „  ƒ Z e d, d „ ƒ Z e d, d „ ƒ Z e d „  ƒ Z e e d d d d d d d ƒƒ Z e e d d d d d d d ƒƒ Z e e d d d d d d d ƒƒ Z e e d d d ƒƒ Z e e d d d d  d d! ƒ ƒ Z e e d d" d d# d d$ ƒ ƒ Z e d% „  ƒ Z e d& „  ƒ Z e d' „  ƒ Z e d( „  ƒ Z e d) „  ƒ Z e d* „  ƒ Z e d, d+ „ ƒ Z  RS(-   c         C   s   |  i  | ƒ S(   sr   Prevent wiki markup in the content from being evaluated.

        Unlike ##~{{{}}}##, the font style is unchanged.(   Rn   (   R(   R‹   R¼   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   nowiki  s    c         C   s   |  i  d ƒ S(   s   Start a new paragraph.s   

(   Rº   (   R(   R‹   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   par  s    c         C   s   |  i  ƒ  |  i | ƒ S(   s?   Treat the content as its own block, separate from surroundings.(   Rá   Rã   (   R(   R‹   R¼   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   block#  s    c         C   s?   t  |  i ƒ  t | i ƒ  ƒ o |  i | t t ƒ ƒ Sd Sd S(   sx   Include the markup, unsanitized, in the given format.

        Use like {{{<<format html>><b>Raw HTML</b><</format>>}}}.Rf   N(   RK   Râ   R   Rg   Rº   Rû   Rý   (   R(   R‹   R¼   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyRý   '  s     c   	      C   sï   t  | ƒ } t t d ƒ } t t d ƒ } x™ | i ƒ  D]‹ \ } } | i d ƒ o0 | i d ƒ p t ‚ | d d !t d | <q9 | t d j o t d | t d | <q9 t | ƒ t d | <q9 W|  i | ƒ } | t d <| t d <| S(   sv   Define local names for elements or other data.

        Use like {{{<<let current=ExamplePC foo="bar">>...<</let>>}}}.R   Ru   t   "i   iÿÿÿÿ(	   R•   R   R   RT   t
   startswitht   endswithRE   R´   Rº   (	   R(   R‹   R¼   RI   RÅ   R½   RR   RS   R9   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   let1  s     

c         C   s   t  ƒ  ‚ d S(   s°   When 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(   R‹   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyR¼   H  s    c         C   s®   t  | t ƒ } | } x t oy t | |  ƒ } | o Pn | d } t | ƒ d j o d S| d d } d | j o Pq t i | ƒ i d ƒ } q W|  i | d d ƒ S(   sH  Evaluate the content only if a condition is true.

        Can contain {{{<<elif another condition/>>}}} and/or {{{<<else/>>}}}.
        For example:
        {{{
        <<if leaf.gender == "male">>
          he
        <<elif leaf.gender == "female"/>>
          she
        <<else/>>
          they
        <</if>>
        }}}i   i    Rf   t   elif(   Rª   t   ELSE_PATR,   Rr   R3   t   matchRŸ   Rº   (   R(   R‹   R¼   t   parttagst   condRå   t   tg(    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   if_P  s     
t   elset   ifR
  c         C   s   d } xm t  oe t i | ƒ } | d j o Pn | | | i ƒ   7} | |  i | i d ƒ ƒ 7} | | i ƒ  } q	 W| | 7} |  i | ƒ S(   s“   A horrible hack to mess with the expansion order.

        Please don't use this; hopefully Xavid will regain sanity and make
        this go away.Rf   i   N(   R,   t	   AFTER_PATRm   R-   R¡   Rº   RŸ   R¢   (   R(   R‹   R¼   t   rescontR¦   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   expands  s     
c            sE  t  | ƒ } d | j p d | j o t d ƒ ‚ n ˆ d j o t d ƒ ‚ n | d } | d =| d ‰ | d =t ƒ  } g  ‰  d } t } t } t }	 d }
 x¤| i ƒ  D]–\ } } t | t ƒ pm| i ƒ  d j o ˆ  | i	 ƒ  i
 ƒ  7‰  qE| i ƒ  d j o€ d | j o | i
 d d ƒ \ } } n | } d } | i	 ƒ  } d	 | j o$ | i
 ƒ  } | d
 } | d } q4| } } qE| i ƒ  d j o t | ˆ ƒ }
 qE| i ƒ  d j o t | ˆ ƒ } qE| i ƒ  d j o t | ˆ ƒ } qE| i ƒ  d j o t | ˆ ƒ }	 qEˆ i d | ƒ Sq¯ | i | ƒ q¯ Wt | ˆ ƒ } | p˜t | t ƒ o4 |	 o t | d ƒ | i ƒ  } qÀt | ƒ } n t | t ƒ p t ‚ | } t t d ƒ } t | ƒ d
 j o] g  } xJ | D]B } | t d ˆ <t ‡ f d †  | Dƒ ƒ o | i | ƒ qðqðW| } n t | ƒ d
 j o |
 d j	 o ˆ i d |
 ƒ Sx- t ˆ  ƒ D] ‰ | i d ‡ f d †  ƒ qWd } ‡ ‡ ‡ f d †  } | oh  } x[ | D]S } | | j o | | n t } | | j o | | i | ƒ qÑ| g | | <qÑWt t d ƒ } x t | i ƒ  ƒ D]k } | t j o | n d t d | <| o | ˆ i | ƒ 7} n x" | | D] } | | | ƒ 7} qœWqKW| t d <n" x | D] } | | | ƒ 7} qÏW| t d <nK ‡  ‡ ‡ ‡ ‡ f d †  ‰ t | t ƒ p t ‚ d i ˆ | d ƒ ƒ } | S(   s4  Evaluate the content once for each member of some group.

        The basic form is {{{<<foreach group var ...>>...<</foreach>>}}}.
        "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 (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.  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.

        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.
        i   i   sB   {{{foreach}}} takes at least two parameters!  See [[edit:Macros]]!s6   {{{foreach}}} must have content!  See [[edit:Macros]]!t   orderbyt   groupbyt   ,Rf   RÝ   i    t   ifnonet   astreet	   recursivet   childrenonlys3   **//Unknown {{{foreach}}} parameter '{{{%s}}}'!//**R—   Ru   c         3   s"   x |  ] } t  | ˆ  ƒ Vq Wd  S(   N(   Rr   (   R.   R/   (   R(   (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pys	   <genexpr>è  s   	 s   
RÕ   c            s    ˆ  |  j o |  ˆ  i  ƒ  St S(    (   t   rendert   MAXWE(   Rp   (   t   f(    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyR^   ï  s    c            s   |  t  d ˆ <ˆ i ˆ  ƒ S(   NRu   (   R   Rº   (   Rp   (   R¼   R(   t   nam(    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   stickonó  s    R   s   ???c         3   s  |  i  d  j	 p t ‚ t d i |  i  d f ƒ t t d ƒ } |  t d ˆ <ˆ i d d | d ˆ ƒ V| t d <|  i ƒ  } t | ƒ d j oh x- t	 ˆ ƒ D] ‰  | i
 d ‡  f d	 †  ƒ q£ Wx5 | D]) }  x  ˆ |  | d
 ƒ D] } | Vqç WqÍ Wn d  S(   NR–   R—   Ru   s   
 R   RÝ   i    RÕ   c            s   ˆ  |  j o	 |  ˆ  St  S(    (   R  (   Rp   (   R  (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyR^     s    i   (   Rw   R-   RE   R   R˜   R   Rº   t   getChildrenR3   t   reversedt   sort(   Rp   t   deptht   old_overridest   lstt   y(   t   orderByt   digR(   R   R¼   (   R  s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyR*    s     
   N(   R•   R   R-   t   setRc   RT   RK   RŠ   t   lowerRg   t   splitRr   Rº   R˜   R   Rv   R"  Rœ   R2   RE   R   R   R3   R5   R6   R#  R$  R  t   sortedt   keysR4   (   R(   R‹   R¼   RI   t   typt   restrt   groupByt   asTreeR  t   childrenOnlyt   ifNoneRÕ   RN   RÇ   t   groupMarkupt	   groupNamet   list_or_elmR'  R&  t   filtlstRp   R9   R!  t   groupsRå   t	   old_movert   g(    (   R)  R(   R   R¼   R*  R  s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   foreach„  sº    "

	 
 
    "  c         C   s   d S(   sr   Suppress any content.

        Useful for leaving comments only relevant to people editing a prop's
        value.Rf   (    (   R(   R‹   R¼   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   comment  s    c   	      C   s%  t  | ƒ } d d d d g } xV | i ƒ  D]H \ } } | d j o |  i d | ƒ | | d <q+ t d | ƒ ‚ q+ W|  i | ƒ } | i ƒ  oŠ t |  i ƒ  t d ƒ o) d	 t | ƒ } | | 7} | d
 7} | St |  i ƒ  t d ƒ o) d t | ƒ } | | 7} | d 7} | Sn d Sd S(   s>   Renders the four arguments as four headers around the content.Rf   i   i   i   i   s   <<%s/>>s   Unknown arg '%s' in card!RÜ   s‹   <div class="page">
<div class="lheader">%s</div>
<div class="rheader">%s</div>
<div class="lfooter">%s</div>
<div class="rfooter">%s</div>
s   
</div>
Rß   sM   \cleardoublepage
\resetnumbering
\lhead{%s}
\rhead{%s}
\lfoot{%s}
\rfoot{%s}
s   
\cleardoublepage
N(   i   i   i   i   (	   R•   RT   Rº   R   Rg   RK   Râ   R   t   tuple(	   R(   R‹   R¼   RI   t   headfootRÕ   Rå   t   contR9   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   withheaders&  s.     

	t   centerRè   Rç   Rà   Rë   s   Center the content.t   rightRæ   t
   flushrights   Right-justify the content.t   leftt	   flushlefts   Left-justify the content.t   dboxs#   Put a double box around the contentRÜ   u   <hr />Rß   s
   \clearpages   Start a new page.u   <div class="gap"></div>s   \break\vfills   Insert a small gap.c         C   s6   t  | |  ƒ } t | t ƒ p
 t | ‚ |  i | ƒ S(   sg   Evaluate the given expression and output its value.

        E.g., {{{<<eval 3 + 5/>>}}} will output 8.(   Rt   RK   RZ   RE   Rn   (   R(   R‹   t   result(    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   eval_b  s    c      
   C   s›  t  | ƒ } d | j p d | j o t d ƒ ‚ n | d i d ƒ \ } } t | ƒ } | d =h  } x- | i ƒ  D] \ } } t | |  ƒ | | <qu Wd d k }	 |	 i h | d 6ƒ }
 t i	 d | | d	 t
 d
 |
 ƒ } | d j oš t | | t
 d
 d | d t ƒ\ } } } |	 i | | t
 d
 |
 | | ƒ x | D] } t
 d i | ƒ q@Wx9 | d D] } t
 d i | ƒ qfWn t | i d ƒ } | S(   sþ   Evaluate the specified prop of an element cachably.

        This means the evaluation will ignore any context, but that it can
        take advantage of caching.  Limited context can be provided in
        the form of {{{let}}}-style keyword parameters.i   i   s/   ##cache## takes only one non-keyword parameter!t   .iÿÿÿÿNR	  R   Rý   t	   extensiont	   reentrantR–   t   imagess   utf-8(   R•   R   R-  R´   RT   Rr   t
   conversiont   flatten_filtersR   t   get_byR   R-   RÃ   R,   t   cache_propvalR˜   RZ   RÀ   (   R(   R‹   RI   Rw   R8   RA   R	  RR   RS   RO  t   flatt   ceRI  t   depst   metadataRa   R“   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   cachek  s>     


  c   	      C   sÎ   t  | ƒ } d | j p d | j o t d ƒ ‚ n | d } | d =| d } | d =t | ƒ } d } x] | D]U } | t d ƒ j o< t h | | 6ƒ i i ƒ  z | |  i | ƒ 7} Wd QXqq qq W| S(   s™   Evaluate the content once for each prop in the given element.

        Use like
        {{{<<foreachpropin Gizmo p>> * <<Gizmo.p/>><</foreachpropin>>}}}.i   i   s'   ##foreachpropin## takes two parameters!Rf   u   thisN(   R•   R   R´   R¸   R%   R$   R    Rº   (	   R(   R‹   R¼   RI   Rw   RÇ   RA   R9   R·   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   foreachpropin“  s     

 !c            s›   t  | ƒ } d | j p t | ƒ d j o t d ƒ ‚ n | d i d ƒ \ } ‰ t | ƒ ‰ t ˆ ƒ ‰ d i ˆ  i i ‡ ‡  ‡ f d †  ˆ  i	 ƒ ƒ S(   sg   Render the source of the given prop of an element.

        Use like {{{<<sourceof Gizmo.whatzit/>>}}}.i   s&   ##sourceof## takes only one parameter!RK  Rf   c              s   ˆ i  t ˆ ˆ  i d  ƒ ƒ S(   s   utf-8(   Rn   RZ   RÀ   (    (   R8   R(   RA   (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyR^   ¹  s    (
   R•   R3   R   R-  R´   R¸   R4   Rý   t	   codeblockt   state(   R(   R‹   RI   Rw   (    (   R(   R8   RA   s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   sourceofª  s     c      	   C   s  t  | ƒ } d | j p t | ƒ d	 j o t d ƒ ‚ n | d } d } d | j o | d n d } x¡ t t ƒ D]“ } | i d ƒ o| t t t | ƒ d d ƒ | j oZ | i d ƒ o | d  } n t	 h | | 6ƒ i
 i ƒ  z | |  i | ƒ 7} Wd QXqw qw W| S(
   s¿   Evaluate 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.i   i   s-   ##foreachmacro## takes one or two parameters!Rf   t   _Rú   iÿÿÿÿN(   i   i   (   R•   R3   R   R-   t   dirt   macrosR  RF   R  R   R$   R    Rº   (   R(   R‹   R¼   RI   RÇ   R9   t   expected_hiddenR¦   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   foreachmacro¼  s      
 #!c         C   sí   t  | ƒ } d | j p t | ƒ d j o t d ƒ ‚ n | d } | t d j o t d | } n t t | d ƒ o | d } n% t t | ƒ p t d | ƒ ‚ n t t t | ƒ d d ƒ } | d j o d S|  i | ƒ Sd S(	   s-   Given a built-in macro, render its help text.i   s&   ##macrodoc## takes only one parameter!R   R\  s   No such macro ##%s##!Rê   Rf   N(	   R•   R3   R   R   Re   R^  RF   R-   Rº   (   R(   R‹   RI   RH   Rë   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   macrodocÓ  s     
c         C   s¥   | i  ƒ  } d | j o | i d d ƒ \ } } n | } d } | t d j o t d | } n | d j	 o t t | ƒ |  | | ƒ St t | ƒ |  | ƒ Sd S(   s:   Evaluate the built-in macro named by the given expression.RÝ   i   Rf   R   N(   Rg   R-  R   R-   RF   R^  (   R(   R‹   R¼   RH   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   macroê  s    N(!   R   R   t   staticmethodR  R  R  Rý   R	  R¼   R  Rù   t   else_t   elif_R  R-   R=  R>  RB  Rà   RC  RD  RF  RH  Rí   t	   clearpaget   gapRJ  RW  RX  R[  R`  Ra  Rb  (    (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyR    sR   
 ™)	(c      
   C   sv  d |  j p |  d i  ƒ  oW d |  j oJ t d d  j	 o% t i t d ƒ i o d |  }  n d |  }  t } n t } d |  j o¯|  i d d ƒ \ } } | i	 ƒ  } | d j oGd  } d
 | j oE | i d
 d ƒ \ } } d
 | j o | i d
 d ƒ \ } } qn | } d  } | t d j o t d | i
 } n | o t d i d | | f ƒ n | d j o/ t i | | t d t d | ƒ\ } }	 }
 n= | d	 j o/ t i | | t d t d | ƒ\ } }	 }
 n t d i | ƒ | |	 |
 f S| i d ƒ p#y t i d ƒ } Wn$ t j
 o t d i d ƒ q3Xt d i | i
 d f ƒ t d i | i
 d f ƒ d | j o¤ d | j o— x” t | ƒ D]‚ } t d i | i
 d f ƒ t | d i d ƒ | j oE t d i | i
 d f ƒ t | d i d ƒ | |  t d d ƒ f Sq¥Wq3q7n |  i d ƒ o t i |  ƒ } n |  } | |  t d d ƒ f S(   Nt   :i    t   /t   topthiss   get:s   edit:i   R`   t   editRK  Ru   RN  s   %s.%sR–   RL  t
   referencess   //u   InterwikiConfigR°   u   prefixu   urls   utf-8t   stylet   external(   s   getRk  (   u   InterwikiConfigs   __exists(   t   isupperR   R-   R   R`   t   visibleR,   Rc   R-  Rg   Rw   R˜   R	   t   product_linkRy   t	   edit_linkR  R   R   Rœ   RZ   RÀ   R   t
   local_link(   t   hreft   imaget   implicitt   preft   restt   extRw   R·   t   uriRþ   t   infot   iwR“   t   abshref(    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt	   link_funcû  sf    +

  $c         C   sG   t  i ƒ  p t |  ƒ ‚ n' t d i t ƒ | i d |  d ƒ Sd  S(   NR–   s   //**s   **//(   R	   t   is_omniscientRj   R   R˜   t	   DISCORDIARº   (   t   messageR(   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   _error7  s    s   ^([^\s#]+)(?:\#\S+)?c         c   s–  yPt  i |  ƒ } | d  j	 p t ‚ | i d ƒ }  |  } | o | i ƒ  n d } d |  j o° |  t d j oŸ t t |  ƒ oŽ t t |  d ƒ oy t	 ƒ  } y, t
 | |  ƒ |  | j o t |  ƒ n Wn& t j
 o d | i |  f }  n X|  d t i 7}  t } n t } d |  j oÅ |  i ƒ  i d d ƒ \ } }	 y^ t i d | |	 f ƒ t | |	 | d	 | d
 | ƒ}
 t i d | |	 t |
 ƒ f ƒ |
 VWqOt j
 o6 | o t d | | ƒ Vqæt d | | ƒ VqOXnf|  t d j oC t d |  } t | d ƒ o | | | | ƒ Vn t | ƒ Vd  St t |  d ƒ o |  d }  n t t |  ƒ oU | d  j	 o' t t |  ƒ d | d
 | d	 | ƒ VqOt t |  ƒ d | d
 | ƒ Vn‹ t t |  ƒ oh | d  j	 o5 xT t t |  ƒ d	 | i | ƒ ƒ D] } | VqWqOx5 t t |  ƒ ƒ  D] } | Vq*Wn | i d |  ƒ VWn? t j
 o
 ‚  n+ t j
 o } t | i d | ƒ Vn Xd  S(   Ni   u    RK  R   R\  s   %s.%su   .s   %s.%s:R¼   R‹   s   %s.%s => %ss"   No element or macro ##%s## exists!s   No element ##%s## exists!t   __call__R(   s    **//Error: no such macro %s!//**i    (   t   MACRO_NAME_PATR  R-   RE   RŸ   Rg   R   Re   R^  R¶   Rv   R´   R   Rw   R	   t   SUBSTITUTION_PROPR,   Rc   R-  R
   R¿   R+   Rb   R‚  RZ   RF   Rý   Rº   R   R   RI   (   RH   R(   R‹   R¼   R¦   t   orignamet   currt   macedR7   t   pnamR/   t   oveR<  Rp   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt
   macro_func@  s|    	
			
"  c         C   s™   |  i  i d j p t ‚ t |  i i |  i  i | d t ƒ} x( | D]  } t d i	 | i d f ƒ qE Wg  } | D] } | d  j	 o | | qt qt ~ S(   NRl  R*   R–   R°   (   R~   RÂ   RE   R+   RA   Rw   RH   R,   R   R˜   R-   (   R   R(   t   exsRp   RO   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   extractRefs  s    	 c   	      C   sZ  t  t d <| t d <| d  j	 o t d i |  i | f ƒ n |  t d <h |  t i 6|  t i 6t d <h d d 6t d <h | d	 6t d
 <xJ | i ƒ  D]< \ } } t	 | t
 ƒ o | t d | <q– | t d | <q– Wt ƒ  t d <t ƒ  t d <| t d <| t j o4 t | ƒ  } t | t ƒ } | t d <| t d <n | i p t ‚ | t d <d  S(   NR­   Rj  R–   R®   Ru   Rf   u   argsR   u   thisR&   RN  Rl  RL  Rý   R)   (   R,   R   R-   R˜   Rw   R	   t   CURRENT_ELEMENTRµ   RT   RK   R   R+  R   R   R}   t   binaryRE   (	   RA   t   propnameRL  RÂ   R	  RR   RS   t   fmtR)   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   init_eval_state›  s2    



 

c         C   s  t  |  t ƒ oj |  i } |  } | i i } | d  j	 p t ‚ | d  j	 p t ‚ | i d  j	 p
 t | ‚ | i }	 n d  } d  } |  }	 t i	 d | d  j	 o
 | i
 n d | f ƒ | d  j o t | i i } n | p d t j p t ‚ n t t ƒ }
 t ƒ  t d <t | | | | | ƒ zyI | p& | i |	 t d d t d | ƒ} n | i |	 t d | ƒ} WnÆ t j
 om } | o ‚  n | d  j	 o | i i p t ‚ t i d t d i t |	 d	 ƒ ƒ d
 t d ƒ } nO t j
 oB } | o ‚  n t d t d i | i d ƒ t d ƒ } n XWd  | p t d =n t i ƒ  t i |
 ƒ Xt i	 d t d ƒ | t d h t d d 6f S(   Ns   evaluate: %s.%st   ?R­   R–   R)   Rã   R   u$   Content unspecified, raw markup: {{{s   utf-8s   }}}Rý   u   //**Wiki Error**//: %si    s   dependencies: %sRN  (   RK   R   RA   R~   RH   R-   RE   RÀ   R
   R¿   Rw   R   RÂ   R   R   R+  R’  RÃ   R,   R*   R}   R   Rp  Rn   RZ   R   R‚  RI   t   clearR   (   t   thingRL  R*   R	  RA   RÂ   RM  R   R  t   wikitextt   old_eval_statet   resRp   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyRÃ   º  sZ    	# "!
c         C   s,   d t  j o t  d i |  | f ƒ n d  S(   NR–   (   R   R˜   (   Rw   R·   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyRv   ô  s    c           C   s&   d t  j o t  d i t ƒ n d  S(   NR–   (   R   R˜   R€  (    (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   makeUncacheable÷  s    c         C   s   t  |  d ƒ d  S(   NR°   (   Rv   (   Rw   (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   addExistsDepú  s    c         C   s?   t  d } t ƒ  t  d <t i |  | ƒ t  d } | t  d <| S(   NRl  (   R   R+  R}   RÃ   (   Rþ   Rý   t   old_refst   new_refs(    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   getReferencesý  s    


([   t	   threadingRl   t   syst	   itertoolsR    R   R   t   redbeans.formatsR   t   redbeans.creoleR   t   redbeans.markupR   R   Rf   R   R   R	   R
   t   modelR   R   R   R   R   t   flavorsR   R   R€  Rj   R   R   RG   R   R%   R?   RC   RJ   RM   RW   RQ   R,   Rr   Rs   Rt   R-   R{   Ry   t	   frozensetR‡   R‰   R•   Rœ   Rõ   t   DOTALLRž   Rª   R¬   R´   R¶   R¸   Rc   R+   RL   Rh   Rà   Rí   Rï   Rö   Rù   Rû   R   R  t   CLOSED_PAT_FORMATR  R  R  R~  R‚  R„  R‹  R}   R^  R  R   R’  RÃ   Rv   R™  Rš  R  (    (    (    s<   /afs/sipb.mit.edu/project/bazki/Checkout/lib/bazbase/wiki.pyt   <module>   sŒ   (									'			4							=+	 
		,			ÿ ä<	J		
	9			