ó
œt•Pc           @   s6   d  d l  Z  d  d l m Z d e f d „  ƒ  YZ d S(   iÿÿÿÿN(   t   _t   parserc           B   sM   e  Z d d  „ Z d „  Z d „  Z d d „ Z d „  Z d „  Z d „  Z	 RS(	   c         C   s(   | |  _  | |  _ | |  _ d  |  _ d  S(   N(   t
   _tokenizert	   _elementst   _methodst   Nonet   current(   t   selft	   tokenizert   elementst   methods(    (    s4   /sys/lib/python2.7/site-packages/mercurial/parser.pyt   __init__   s    			c         C   s7   |  j  } y |  j j ƒ  |  _  Wn t k
 r2 n X| S(   s   advance the tokenizer(   R   t   _itert   nextt   StopIteration(   R   t   t(    (    s4   /sys/lib/python2.7/site-packages/mercurial/parser.pyt   _advance   s    	c         C   sN   |  j  d | k r@ t j t d ƒ |  j  d |  j  d ƒ ‚ n  |  j ƒ  d S(   s0   make sure the tokenizer matches an end conditioni    s   unexpected token: %si   N(   R   t   errort
   ParseErrorR    R   (   R   t   mt   pos(    (    s4   /sys/lib/python2.7/site-packages/mercurial/parser.pyt   _match#   s    i    c   
   	   C   s{  |  j  ƒ  \ } } } |  j | d } | sK t j t d ƒ | | ƒ ‚ n  t | ƒ d k rp | d | f } n– t | ƒ d k rÀ | d |  j d k rÀ |  j | d | ƒ | d d  f } nF | d |  j	 | d ƒ f } t | ƒ d k r|  j | d | ƒ n  xn| |  j |  j d d k  rv|  j  ƒ  \ } } } |  j | } t | ƒ d k r‘|  j |  j d d r‘| d } | d | f } q	t | ƒ d k  s®| d rÍt j t d ƒ | | ƒ ‚ n  | d }	 t |	 ƒ d k r*|	 d |  j d k r*|  j |	 d | ƒ |	 d | d  f } q	|	 d | |  j	 |	 d ƒ f } t |	 ƒ d k r	|  j |	 d | ƒ q	q	W| S(   Ni   s   not a prefix: %si    i   i   i   s   not an infix: %s(
   R   R   R   R   R    t   lenR   R   R   t   _parse(
   R   t   bindt   tokent   valueR   t   prefixt   exprt   et   suffixt   infix(    (    s4   /sys/lib/python2.7/site-packages/mercurial/parser.pyR   )   s8    )!+

) c         C   sD   |  j  | ƒ |  _ |  j ƒ  |  j ƒ  } |  j \ } } } | | f S(   s$   generate a parse tree from a message(   R   R   R   R   R   (   R   t   messaget   resR   R   R   (    (    s4   /sys/lib/python2.7/site-packages/mercurial/parser.pyt   parseN   s
    
c         C   sH   t  | t ƒ s | S|  j | d g  | d D] } |  j | ƒ ^ q, Œ  S(   s4   recursively evaluate a parse tree using node methodsi    i   (   t
   isinstancet   tupleR   t   eval(   R   t   treeR   (    (    s4   /sys/lib/python2.7/site-packages/mercurial/parser.pyR%   U   s    c         C   s)   |  j  | ƒ } |  j r% |  j | ƒ S| S(   s?   parse a message into a parse tree and evaluate if methods given(   R"   R   R%   (   R   R    R   (    (    s4   /sys/lib/python2.7/site-packages/mercurial/parser.pyt   __call__Z   s    	N(
   t   __name__t
   __module__R   R   R   R   R   R"   R%   R'   (    (    (    s4   /sys/lib/python2.7/site-packages/mercurial/parser.pyR      s   		%		(   R   t   i18nR    t   objectR   (    (    (    s4   /sys/lib/python2.7/site-packages/mercurial/parser.pyt   <module>   s   