
Qc           @   s  d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 Z	 d  d l
 Z
 d  d l Z i d d? d@ f d 6d	 d dA f d 6d d dB f d 6d d dC f d 6dD d 6d dE d f d 6d dF d f d 6dG d 6Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d    Z d!   Z d"   Z d#   Z d$   Z d%   Z d&   Z  d'   Z! d(   Z" d)   Z# i d*   d 6d+   d 6d,   d 6e d 6e d 6e d 6Z$ i e d- 6e  d. 6e! d/ 6e d0 6e" d1 6e# d2 6e d3 6Z% d4 d5 g Z& e j' Z' d6   Z( e) d7  Z* d8 e+ f d9     YZ, i e, d: 6Z- d; e+ f d<     YZ. d d=  Z/ d d>  Z0 d S(H   i(   t   _Ni   t   groupi   t   )t   funct   (i   t   listt   ,i   t   |i   t   %i    t   symbolt   stringt   endc   
      c   sj  |  \ } } } | } x@| | k  rW| | } | j    r= n| d k rZ | d  | f Vn| d k s | d k r| | | d !d k r| d k r | d 7} | | } t } n t } | d 7} | } x| | k  ri| | } | r| d k r| d 7} q n  | | k r\| s:d	 | | | !j d d
  | f VPn  d	 | | | !j d  | f VPn  | d 7} q Wt j t d  |   n | j	   s| d k r| } | d 7} x@ | | k  r| | } | j	   p| d k sPn  | d 7} qW| | | !}	 d |	 | f V| d 8} n2 | d k r2| d 7} Pn t j t d  |   | d 7} q Wd d  | f Vd  S(   Ns   (,)%|s   "'t   ri   s   r's   r"i   s   \R
   s   \\s   string-escapes   unterminated stringR    R	   t   }s   syntax errorR   (   s   r's   r"(
   t   isspacet   Nonet   Falset   Truet   replacet   decodet   errort
   ParseErrorR    t   isalnum(
   t   datat   programt   startR   t   post   cR   t   st   dt   sym(    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt	   tokenizer   s^    


	


!


c   
      C   sG  g  } d t  |   } } t j t t  } x | | k  r&|  j d |  } | d k  rs | j d |  | f  Pn  | d k r |  | d d k r | j d |  | | d !d f  | d } q. n  | | k r | j d |  | | !f  n  |  | d | g } | j |  \ } } | j |  q. Wg  | D] }	 t |	 |  ^ q.S(   Ni    t   {R
   i   s   \(   t   lent   parserR   t   elementst   findt   appendt   parset
   compileexp(
   t   tmplt   contextt   parsedR   t   stopt   pt   nt   pdt   parserest   e(    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt   compiletemplateO   s$     "
c         C   sD   |  d } | t  k r' t  | |  |  St j t d  |   d  S(   Ni    s   unknown method '%s'(   t   methodsR   R   R    (   t   expR)   t   t(    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyR'   g   s    
c         C   s1   |  d d k r |  d St  j t d    d  S(   Ni    R	   i   s   expected a symbol(   R   R   R    (   R3   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt	   getsymbolo   s    c         C   s:   |  s
 g  S|  d d k r3 t  |  d  |  d g S|  g S(   Ni    R   i   i   (   t   getlist(   t   x(    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyR6   t   s
    c         C   sB   t  |   } | | j k r7 t j t d  |   n  | j | S(   Ns   unknown function '%s'(   R5   t   _filtersR   R   R    (   R3   R)   t   f(    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt	   getfilter{   s    c         C   s[   |  d d k r! t  |  d |  S|  d d k rB | j |  d  St j t d    d  S(   Ni    R
   i   R	   s   expected template specifier(   R1   t   _loadR   R   R    (   R3   R)   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt   gettemplate   s
    c         C   s   | S(   N(    (   R)   t   mappingR   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt	   runstring   s    c         C   s   | j  |  } | d  k r3 |  j j  | d  } n  t j | d  rO | |   St | t j  r{ t |  } | | | <| S| S(   Nt    t   __call__(	   t   getR   t	   _defaultst   utilt   safehasattrt
   isinstancet   typest   GeneratorTypeR   (   R)   R=   t   keyt   v(    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt	   runsymbol   s    

c         C   s?   t  |  d |  \ } } t |  d |  } t | | | f f S(   Ni   i   (   R'   R:   t	   runfilter(   R3   R)   R   R   t   filt(    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt   buildfilter   s    c         C   s   | \ } } } y | | |  | |   SWn^ t  t t f k
 r t | t  r^ | d } n | } t j t d  | j | f   n Xd  S(   Ni   s8   template filter '%s' is not compatible with keyword '%s'(	   t
   ValueErrort   AttributeErrort	   TypeErrorRE   t   tupleRC   t   AbortR    t	   func_name(   R)   R=   R   R   RL   t   dt(    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyRK      s    c         C   s?   t  |  d |  \ } } t |  d |  } t | | | f f S(   Ni   i   (   R'   R<   t   runmap(   R3   R)   R   R   t   ctmpl(    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt   buildmap   s    c         c   s,   x% | D] \ } } | |  | |  Vq Wd  S(   N(    (   R)   R=   t   templateR   R   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt   runtemplate   s    c         c   s   | \ } } } | |  | |  } t  j | d  r? |   } n  | j   } xV | D]N } t | t  r | j |  | j d  | d <t |  | |  VqR | VqR Wd  S(   NR@   t   nodet   originalnode(   RC   RD   t   copyRE   t   dictt   updateRA   RY   (   R)   R=   R   R   RV   R   t   lmt   i(    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyRU      s    c         C   s   t  |  d  } g  t |  d  D] } t | |  ^ q! } | t k r\ t | } | | f S| t j k r t j | } | | f S| | j k r t |  d k r t j t	 d  |   n  | j | } t
 | d d | d d | f f Sd  S(   Ni   i   s   filter %s expects one argumenti    (   R5   R6   R'   t   funcst   templatefiltersR8   R!   R   R   R    RK   (   R3   R)   R-   R7   t   argsR9   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt	   buildfunc   s    ,


c         c   s   t  |  d k r* t j t d    n  | d d |  | | d d  } t j | d  sv t j t d    n  | d d |  | | d d  } | j |  Vd  S(   Ni   s   get() expects two argumentsi    i   RA   s&   get() expects a dict as first argument(   R!   R   R   R    RC   RD   RA   (   R)   R=   Rc   t   dictargRH   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyRA      s    ""c         c   s  d t  |  k o d k n s: t j t d    n  | d d |  | | d d  } t j | d  r | j } g  |   D] } | |  ^ q } n  d } t  |  d k r | d d |  | | d d  } n  t } x' | D] } | r t } n | V| Vq Wd  S(   Ni   i   s!   join expects one or two argumentsi    R@   t    (	   R!   R   R   R    RC   RD   t   joinfmtR   R   (   R)   R=   Rc   t   joinsett   jfR7   t   joinert   first(    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt   join   s    ""	%%	c         c   s   t  |  d k r* t j t d    n  t | d d |  | | d d   } t | d d |  | | d d   } t | d d |  | | d d   } t t |  | t | |     } t j | | |  Vd  S(   Ni   s   sub expects three argumentsi    i   i   (	   R!   R   R   R    t	   stringifyRY   R1   t   ret   sub(   R)   R=   Rc   t   patt   rplt   src(    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyRo      s    (((c         c   s  d t  |  k o d k n s: t j t d    n  t | d d |  | | d d   } | r t | d d |  | | d d   } t |  | t | |    VnW t  |  d k rt | d d |  | | d d   } t |  | t | |    Vn  d  S(   Ni   i   s!   if expects two or three argumentsi    i   (   R!   R   R   R    Rm   RY   R1   (   R)   R=   Rc   t   testR4   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt   if_  s    "(((c         c   s6  d t  |  k o d k n s: t j t d    n  t | d d |  | | d d   } t | d d |  | | d d   } | | k r t | d d |  | | d d   } t |  | t | |    VnW t  |  d k r2t | d d |  | | d d   } t |  | t | |    Vn  d  S(   Ni   i   s$   ifeq expects three or four argumentsi    i   i   (   R!   R   R   R    Rm   RY   R1   (   R)   R=   Rc   Rs   t   matchR4   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt   ifeq  s    "((((c         c   sp   t  |  d k r* t j t d    n  t | d d |  | | d d   } t |  | t | |    Vd  S(   Ni   s   label expects two argumentsi   i    (   R!   R   R   R    Rm   RY   R1   (   R)   R=   Rc   R4   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt   label  s    (c         C   s   t  |  d k r* t j t d    n  t | d d |  | | d d   } t | d d |  | | d d   } t j | d | d d g S(   Ni   s   rstdoc expects two argumentsi    i   t   stylet   keept   verbose(   R!   R   R   R    Rm   t   minirstt   format(   R)   R=   Rc   t   textRx   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt   rstdoc&  s
    ((c         C   s   t  |  d f S(   Ni   (   R>   (   R0   R   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt   <lambda>1  s    c         C   s   t  |  d f S(   Ni   (   RJ   (   R0   R   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyR   2  s    c         C   s   t  |  d |  S(   Ni   (   R'   (   R0   R   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyR   3  s    RA   t   ifRv   Rl   Rw   R~   Ro   t	   templatess   ../templatesc         c   s   t  |  t  r |  Vn t j |  d  sF |  d k	 r t |   Vq n x |  D]w } t  | t  rj | VqM t j | d  s | d k	 r t |  Vq qM | d k	 rM x t |  D] } | Vq WqM qM Wd S(   s=   yield a single stream from a possibly nested set of iteratorst   __iter__N(   RE   t   strRC   RD   R   t   _flatten(   t   thingR`   t   j(    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyR   I  s    c         C   sb   | rU t  |   d k  s, |  d |  d k rA t t d    n  |  d d !j d  S|  j d  S(   sZ   parse a string using simple c-like syntax.
    string must be in quotes if quoted is True.i   i    is   unmatched quotesi   t   string_escape(   R!   t   SyntaxErrorR    R   (   R   t   quoted(    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt   parsestring[  s
    &t   enginec           B   s/   e  Z d  Z i  i  d  Z d   Z d   Z RS(   s  template expansion engine.

    template expansion works like this. a map file contains key=value
    pairs. if value is quoted, it is treated as string. otherwise, it
    is treated as name of template file.

    templater is asked to expand a key in map. it looks up key, and
    looks for strings like this: {foo}. it expands {foo} by looking up
    foo in map, and substituting it. expansion is recursive: it stops
    when there is no more {foo} to replace.

    expansion also allows formatting and filtering.

    format uses key to expand each item in list. syntax is
    {key%format}.

    filter uses function to transform value. syntax is
    {key|filter1|filter2|...}.c         C   s(   | |  _  | |  _ | |  _ i  |  _ d  S(   N(   t   _loaderR8   RB   t   _cache(   t   selft   loadert   filterst   defaults(    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt   __init__y  s    			c         C   s<   | |  j  k r1 t |  j |  |   |  j  | <n  |  j  | S(   s!   load, parse, and cache a template(   R   R1   R   (   R   R4   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyR;     s    "c         C   s   t  t |  | |  j |    S(   s   Perform expansion. t is name of map element to expand.
        mapping contains added elements for use during expansion. Is a
        generator.(   R   RY   R;   (   R   R4   R=   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt   process  s    (   t   __name__t
   __module__t   __doc__R   R;   R   (    (    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyR   e  s   	t   defaultt	   templaterc           B   s;   e  Z i  i  i  d  d d  Z d   Z d   Z d   Z RS(   i   i   c      	   C   s  | p	 d |  _  | j   |  _ i  |  _ | r? t j j |  pB d |  _ t j	 j   |  _	 |  j	 j
 |  | |  _ | | |  _ |  _ i  |  _ | s d St j j |  s t j t d  |   n  t j   } | j |  x| d j   D]\ } }	 |	 s(t t d  | j d |    n  |	 d d k ry t |	  |  j | <Wqt k
 r}
 t d | j d |  |
 j d f   qXq d	 |	 f }	 d
 |	 d k r|	 d j d
 d  }	 n  |	 d t j j |  j |	 d  f |  j | <q Wd S(   s   set up template engine.
        mapfile is name of file to read map definitions from.
        filters is dict of functions. each transforms a value into another.
        defaults is dict of default map definitions.RX   R?   Ns   style not found: %ss   %s: missing valuei    s   '"s   %s: %sR   t   :i   (   t   mapfileR\   t   cachet   mapt   ost   patht   dirnamet   baseRb   R   R^   R   t   minchunkt   maxchunkt   ecachet   existsRC   RR   R    t   configt   readt   itemsR   t   sourceR   Rc   t   splitRl   (   R   R   R   R   R   R   R   t   confRH   t   valt   inst(    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyR     s8    	!		%*c         C   s   | |  j  k p | |  j k S(   N(   R   R   (   R   RH   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt   __contains__  s    c         C   s   | |  j  k r y% t j |  j | d  |  j  | <Wq t k
 ri } t j t d  | j d   q t k
 r } t | j d t d  |  j | d | j d f   q Xn  |  j  | S(   s@   Get the template for the given template name. Use a local cache.i   s   "%s" not in template mapi    s   template file %s: %s(	   R   RC   t   readfileR   t   KeyErrorRR   R    Rc   t   IOError(   R   R4   R   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt   load  s    %#)c         K   s   | |  j  k r  |  j  | d p# d } | |  j k r^ t | |  j |  j |  j  |  j | <n  |  j | } | j | |  } |  j r t j	 | d |  j d |  j
 } n  | S(   Ni    R   t   mint   max(   R   R   t   enginesR   R   R   R   R   RC   t   increasingchunksR   (   R   R4   R=   t   ttypet   proct   stream(    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyR@     s    &	(   R   R   R   R   R   R@   (    (    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyR     s
   	&		c         C   s   g  } t  j   r t j } n t } x t D] } | j d  rI | } n0 | j d  } t j j	 t j j
 |  |  } |  r t j j	 | |   } n  |  r t j j |  r t j j |  St j j |  r+ | j t j j |   q+ q+ W| S(   sZ   return location of template file or directory (if no name).
    returns None if not found.t   /(   RC   t
   mainfrozent   syst
   executablet   __file__R   t
   startswithR   R   Rl   R   R   t   normpatht   isdirR%   (   t   namet	   normpathst   moduleR9   R,   t   fl(    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt   templatepath  s     	! c         C   s   | d k r t   } n t | t  r3 | g } n  t |  t  rN |  g }  n  x |  D] } | sg qU n  t j j | d  d | g } | j d  xP | D]H } x? | D]7 } t j j | |  } t j j |  r | | f Sq Wq WqU Wt	 d |   d S(   s   Return path to mapfile for a given style.

    Searches mapfile in the following locations:
    1. templatepath/style/map
    2. templatepath/map-style
    3. templatepath/map
    R   s   map-s   No hgweb templates found in %rN(
   R   R   RE   R   R   R   Rl   R%   t   isfilet   RuntimeError(   t   stylest   pathsRx   t	   locationsR   t   locationR   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt   stylemap  s"    	(   s   groupi   R   (   s   funci   R   (   s   listi   (   R   i   (   R   i   (   i    NN(   s   symbol(   s   string(   i    NN(1   t   i18nR    R   R   Rn   RC   R   Rb   R"   R   RF   R{   R   R#   R   R1   R'   R5   R6   R:   R<   R>   RJ   RM   RK   RW   RY   RU   Rd   RA   Rl   Ro   Rt   Rv   Rw   R~   R2   Ra   R   Rm   R   R   R   t   objectR   R   R   R   R   (    (    (    s7   /sys/lib/python2.7/site-packages/mercurial/templater.pyt   <module>   sv   $<
	4																						





		
&E