ó
†Å•Zc           @   s  d  d l  Z  d  d l Z d  d l Z d  d l Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ	 d „  Z
 d e f d „  ƒ  YZ d „  Z d e f d „  ƒ  YZ d d „ Z d a d „  Z d „  Z d „  Z d „  Z d S(   iÿÿÿÿNt   ChangeCollectorc           B   s&   e  Z d  „  Z d d „ Z d „  Z RS(   c         C   s   | |  _  g  |  _ d  S(   N(   t   textt   changes(   t   selfR   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyt   __init__	   s    	c         C   s<   | d  k r |  j | | !} n  |  j j | | | f ƒ d  S(   N(   t   NoneR   R   t   append(   R   t   startt   endt   new_text(    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyt
   add_change   s    c         C   sÅ   |  j  s d  S|  j  j d d „  ƒ g  } d } xA |  j  D]6 } | \ } } } | j |  j | | !| ƒ | } q9 W| t |  j ƒ k  rŸ | j |  j | ƒ n  d j | ƒ } | |  j k rÁ | Sd  S(   Nt   keyc         S   s   |  d  S(   Ni   (    (   t   x(    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyt   <lambda>   t    i    R   (   R   R   t   sortR   R   t   lent   join(   R   t   piecest   last_changedt   changeR   R   R   t   result(    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyt   get_changed   s    	
N(   t   __name__t
   __module__R   R   R
   R   (    (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyR       s   	t   SourceLinesAdapterc           B   sM   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   sY   Adapts source to Lines interface

    Note: The creation of this class is expensive.
    c         C   s    | |  _  d  |  _ |  j ƒ  d  S(   N(   t   codeR   t   startst   _initialize_line_starts(   R   t   source_code(    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyR   *   s    		c         C   sŽ   g  |  _  |  j  j d ƒ y@ d } x3 t rW |  j j d | ƒ d } |  j  j | ƒ q% WWn t k
 rl n X|  j  j t |  j ƒ d ƒ d  S(   Ni    s   
i   (   R   R   t   TrueR   t   indext
   ValueErrorR   (   R   t   i(    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyR   /   s    		c         C   s$   |  j  |  j | d |  j | d !S(   Ni   (   R   R   (   R   t   lineno(    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyt   get_line;   s    c         C   s   t  |  j ƒ d S(   Ni   (   R   R   (   R   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyt   length?   s    c         C   s   t  j  |  j | ƒ S(   N(   t   bisectR   (   R   t   offset(    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyt   get_line_numberB   s    c         C   s   |  j  | d S(   Ni   (   R   (   R   R"   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyt   get_line_startE   s    c         C   s   |  j  | d S(   Ni   (   R   (   R   R"   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyt   get_line_endH   s    (
   R   R   t   __doc__R   R   R#   R$   R'   R(   R)   (    (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyR   $   s   						t   ArrayLinesAdapterc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   | |  _  d  S(   N(   t   lines(   R   R,   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyR   N   s    c         C   s   |  j  | d S(   Ni   (   R,   (   R   t   line_number(    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyR#   Q   s    c         C   s   t  |  j ƒ S(   N(   R   R,   (   R   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyR$   T   s    (   R   R   R   R#   R$   (    (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyR+   L   s   		t   LinesToReadlinec           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   R,   t   current(   R   R,   R   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyR   Z   s    	c         C   sF   |  j  |  j j ƒ  k rB |  j  d 7_  |  j j |  j  d ƒ d Sd S(   Ni   s   
R   (   R/   R,   R$   R#   (   R   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyt   readline^   s    c         C   s
   |  j  ƒ  S(   N(   R0   (   R   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyt   __call__d   s    (   R   R   R   R0   R1   (    (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyR.   X   s   		t   _CustomGeneratorc           B   s2   e  Z d  „  Z d „  Z e j d ƒ Z d „  Z RS(   c         C   s(   | |  _  d |  _ d |  _ t |  _ d  S(   NR   i    (   R,   t	   in_stringt
   open_countt   Falset   continuation(   R   R,   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyR   j   s    			c         C   sü   |  j  j ƒ  } g  } d } xÚ | | k r÷ x3 | | k r_ |  j  j | ƒ j ƒ  r_ | d 7} q- W| | k r | } x_ t rÓ |  j  j | ƒ } |  j | ƒ |  j p² |  j p² |  j sÂ | | k rÆ Pn  | d 7} qu W| j	 | | f ƒ | d 7} q q W| S(   Ni   (
   R,   R$   R#   t   stripR   t   _analyze_lineR6   R4   R3   R   (   R   t   sizeR   R!   R   t   line(    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyR1   p   s$    (	s,   (\\*)((\'\'\'|"""|\'|")|#|\[|\]|\{|\}|\(|\))c         C   s1  d  } xî |  j j | ƒ D]Ú } | j d ƒ } | j d ƒ } t | ƒ d d k rY q n  | d k r˜ |  j sz | |  _ q˜ |  j | k r˜ d |  _ q˜ n  |  j r§ q n  | d k r· Pn  | d	 k rÕ |  j d 7_ q | d
 k r |  j d 8_ q q W| r$| d k r$| j d ƒ r$t |  _	 n	 t
 |  _	 d  S(   Ni   i   s   '''s   """t   't   "R   t   #s   ([{s   )]}s   \(   s   '''s   """R;   R<   (   R   t   _main_tokenst   finditert   groupR   R3   R4   t   endswithR   R6   R5   (   R   R:   t   tokent   matcht   prefix(    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyR8   ‡   s,    		!(   R   R   R   R1   t   ret   compileR>   R8   (    (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyR2   h   s   		c         C   s   t  |  ƒ ƒ  S(   N(   R2   (   R,   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyt   custom_generator¢   s    t   LogicalLineFinderc           B   s\   e  Z d  „  Z d „  Z d d	 d „ Z d d	 d „ Z d „  Z d „  Z d „  Z	 d „  Z
 RS(
   c         C   s   | |  _  d  S(   N(   R,   (   R   R,   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyR   ¨   s    c         C   s¶   t  |  j j | ƒ ƒ } d } x‘ t r± t |  j | | ƒ } y |  j | | ƒ SWq! t k
 r­ } | d 7} | d k r | ‚ n  | j | d } t  |  j j | ƒ ƒ } q! Xq! Wd  S(   Ni    i   i   (   t   count_line_indentsR,   R#   R   t   get_block_startt   _block_logical_linet   IndentationErrorR"   (   R   R-   t   indentst   triest   block_startt   eR"   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyt   logical_line_in«   s    	
	i   c         c   s,   x% |  j  | | ƒ D] \ } } | Vq Wd  S(   N(   t   generate_regions(   R   t
   start_linet   end_lineR   R   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyt   generate_starts¹   s    c   	      c   s¸   d } t  |  j | ƒ } y… x~ |  j | ƒ D]m \ } } | | d } |  j | ƒ } | d  k	 rp | | k rp Pn  | | d } | | k r+ | | f Vq+ q+ WWn t j k
 r³ n Xd  S(   Ni   (   R.   R,   t   _logical_linest   _first_non_blankR   t   tokenizet
   TokenError(	   R   RS   RT   RO   R0   R   R   t
   real_startt   real_end(    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyRR   ½   s    c         C   s‹   t  |  j | ƒ } | | d } |  j | | ƒ } |  j | d | d ƒ } | d d  k ro |  j j ƒ  } n | d | d } | | f S(   Ni   i    (   R.   R,   t   _calculate_logicalRW   R   R$   (   R   RO   R-   R0   t   shiftedt   regionR   R   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyRK   Í   s    c         C   s’   d } yD x= |  j  | ƒ D], \ } } | | k r; | | f S| d } q WWn; t j k
 r‡ } | j d d } | t | | d ƒ f SX| d  f S(   Ni   i    (   RV   RX   RY   t   argst   maxR   (   R   R0   R-   t   last_endR   R   RP   R/   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyR\   Ø   s    
c         c   s]   d } xP t  j | ƒ D]? } | d d } | d t j k r | | f V| d } q q Wd  S(   Ni   i   i    (   RX   t   generate_tokensRB   t   NEWLINE(   R   R0   Ra   t   current_tokenR/   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyRV   ä   s    c         C   sb   | } xU | |  j  j ƒ  k  r] |  j  j | ƒ j ƒ  } | rP | j d ƒ rP | S| d 7} q	 W| S(   NR=   i   (   R,   R$   R#   R7   t
   startswith(   R   R-   R/   R:   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyRW   ì   s    N(   R   R   R   RQ   R   RU   RR   RK   R\   RV   RW   (    (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyRH   ¦   s   					c         C   s   t  |  ƒ j ƒ  S(   N(   RH   RR   (   R,   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyt   tokenizer_generatorö   s    t   CachingLogicalLineFinderc           B   s_   e  Z e d  „ Z d Z e d „  ƒ Z d Z e d „  ƒ Z	 d „  Z
 d „  Z d d d „ Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   R,   t	   _generate(   R   R,   t   generate(    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyR   ü   s    	c         C   s#   |  j  d  k r |  j ƒ  n  |  j  S(   N(   t   _startsR   t   _init_logicals(   R   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyR     s    c         C   s#   |  j  d  k r |  j ƒ  n  |  j  S(   N(   t   _endsR   Rk   (   R   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyt   ends
  s    c         C   st   |  j  j ƒ  d } d g | |  _ d g | |  _ x: |  j |  j  ƒ D]& \ } } t |  j | <t |  j | <qF Wd S(   s.   Should initialize _starts and _ends attributesi   N(   R,   R$   R   Rj   Rl   Rh   R   (   R   R9   R   R   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyRk     s    c         C   s   | } x( | d k r0 |  j  | r0 | d 8} q	 W| d k rt y |  j  j t | ƒ } Wqt t k
 rp | | f SXn  | |  j j t | ƒ f S(   Ni    i   (   R   R   R   R    Rm   (   R   R-   R   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyRQ     s    i   c         c   sQ   | d  k r |  j j ƒ  } n  x, t | | ƒ D] } |  j | r. | Vq. q. Wd  S(   N(   R   R,   R$   t   rangeR   (   R   RS   RT   R   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyRU   $  s
    N(   R   R   RG   R   R   Rj   t   propertyR   Rl   Rm   Rk   RQ   RU   (    (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyRg   ú   s   			iP   c   
      C   sn  t  ƒ  } x^t | d d ƒ D]J} | j |  j | ƒ ƒ } | d
 k	 r t |  j | ƒ ƒ | k r | j j ƒ  } | d k r‹ | j d ƒ sš | j d ƒ rbd } xª t | t	 | d |  j
 ƒ  d ƒ ƒ D]‚ } xi |  j | ƒ D]X }	 |	 d k ró Pn  |	 d k r| d 7} n  |	 d	 k rÝ | d 8} | d k  r5Pq5qÝ qÝ W| d k  rÇ PqÇ qÇ W| d k  rbq qbn  | Sq Wd S(   s   Approximate block starti    iÿÿÿÿi   t   ift   fori   R=   s   [(s   )]N(   t   get_block_start_patternsRn   t   searchR#   R   RI   t   stringt   lstripRe   t   minR$   (
   R,   R"   t   maximum_indentst   patternR!   RC   t   stripedt   bracst   jt   c(    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyRJ   ,  s0    	*-
	c          C   s(   t  s$ d }  t j |  t j ƒ a  n  t  S(   NsS   ^\s*(((def|class|if|elif|except|for|while|with)\s)|((try|else|finally|except)\s*:))(   t   _block_start_patternRE   RF   t   M(   Rx   (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyRr   L  s    c         C   sQ   d } xD |  D]< } | d k r, | d 7} q | d k rE | d 7} q | Sq Wd S(   Ni    t    i   s   	i   (    (   R:   RM   t   char(    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyRI   U  s    c          C   sK   d }  d |  } d |  } d j  | | j d d ƒ | | j d d ƒ g ƒ S(   Ns   (\b[uU]?[rR]?)?s"   %s"""(\\.|"(?!"")|\\\n|[^"\\])*"""s   %s"(\\.|\\\n|[^"\\])*"t   |R<   R;   (   R   t   replace(   R   t   longstrt   shortstr(    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyt   get_string_patterna  s
    

c           C   s   d S(   Ns   #[^\n]*(    (    (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyt   get_comment_patterni  s    (   R%   RE   RB   RX   t   objectR    R   R+   R.   R2   RG   RH   Rf   Rg   RJ   R   R}   Rr   RI   R…   R†   (    (    (    s4   lib/python2.7/site-packages/rope/base/codeanalyze.pyt   <module>   s$   (:	P	2				