ó
t®¸Qc           @   sš  d  d l  Z  d  d l Z e d ƒ \ Z Z Z Z Z e  j d e  j	 e  j
 Bƒ j Z e  j d e  j	 ƒ j Z e  j d e  j	 e  j Bƒ j Z e  j d e  j	 ƒ j Z e  j d e  j	 ƒ j Z e  j d e  j	 ƒ j Z d	 g d
 Z x d D] Z d e e e ƒ <qå Wx d D] Z d e e e ƒ <qWx d D] Z e e e e ƒ <q'Wd j e ƒ Z [ y e e d ƒ ƒ Z Wn e k
 r‚d Z n Xd d d „  ƒ  YZ d S(   iÿÿÿÿNi   sä   
    ^
    [ \t]*
    (?: while
    |   else
    |   def
    |   return
    |   assert
    |   break
    |   class
    |   continue
    |   elif
    |   try
    |   except
    |   raise
    |   import
    |   yield
    )
    \b
s'   
    [ \t]*
    (?: \# \S .* )?
    \n
sK  
    \""" [^"\\]* (?:
                     (?: \\. | "(?!"") )
                     [^"\\]*
                 )*
    (?: \""" )?

|   " [^"\\\n]* (?: \\. [^"\\\n]* )* "?

|   ''' [^'\\]* (?:
                   (?: \\. | '(?!'') )
                   [^'\\]*
                )*
    (?: ''' )?

|   ' [^'\\\n]* (?: \\. [^'\\\n]* )* '?
sM   
    [ \t]*
    [^\s#\\]    # if we match, m.end()-1 is the interesting char
s_   
    \s*
    (?: return
    |   break
    |   continue
    |   raise
    |   pass
    )
    \b
s   
    [^[\](){}#'"\\]+
t   xi   s   ({[t   (s   )}]t   )s   "'\
#t    t   Parserc           B   s¡   e  Z d  „  Z d „  Z d e 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 RS(   c         C   s   | |  _  | |  _ d  S(   N(   t   indentwidtht   tabwidth(   t   selfR   R   (    (    s%   /sys/lib/python2.7/idlelib/PyParse.pyt   __init__r   s    	c         C   s‹   t  | ƒ t k ru | } g  } | j } x9 t t | ƒ D]( } | | d k  rX t | ƒ p[ d ƒ q7 Wd j | ƒ } n  | |  _ d |  _ d  S(   Ni   R    R   i    (	   t   typet   UnicodeTypet   appendt   mapt   ordt   chrt   joint   strt   study_level(   R   R   t	   uniphooeyt   pusht   raw(    (    s%   /sys/lib/python2.7/idlelib/PyParse.pyt   set_strv   s    	&	c   
      C   sT  |  j  d  } } | s d  St | ƒ } x“ t d ƒ D]… } | j d d | ƒ } | d k  r^ Pn  | j d d | ƒ d } | | | | ƒ } | r² | | j ƒ  ƒ r² | j ƒ  } Pn  | } q3 W| d  k r | | ƒ } | rü | | j ƒ  ƒ rü | j ƒ  } n  | S| d } xC | | | ƒ } | rL| j ƒ  \ }	 } | |	 ƒ sM|	 } qMqPq| S(   Ni   s   :
i    s   
i   (   R   t   Nonet   lent   ranget   rfindt   startt   span(
   R   t   is_char_in_stringt   _synchreR   t   post   limitt   triest   it   mt   s(    (    s%   /sys/lib/python2.7/idlelib/PyParse.pyt   find_good_parse_start“   s8    
	
c         C   s#   | d k r |  j  | |  _  n  d  S(   Ni    (   R   (   R   t   lo(    (    s%   /sys/lib/python2.7/idlelib/PyParse.pyt   set_loÇ   s    c         C   s£  |  j  d k r d  Sd |  _  |  j } | j t ƒ } | j d d ƒ } | j d d ƒ } | j d d ƒ } | j d d ƒ } | j d d ƒ } t } d } } d g |  _ } | j } d t | ƒ } } x| | k  rK| | }	 | d } |	 d k rÿ qÍ n  |	 d k r4| d } | d k rÍ | | ƒ qÍ qÍ n  |	 d	 k rP| d } qÍ n  |	 d
 k ru| rÍ | d } qÍ qÍ n  |	 d k s|	 d k rä|	 }
 | | d | d !|
 d k r¿|
 d }
 n  | } t |
 ƒ d } | | } xü | | k  r¾| | }	 | d } |	 d k rqân  | | d | | !|
 k r=| | } Pn  |	 d k r‚| d } | d k râ| d k rx| | ƒ n  Pqâqân  |	 d k râ| | d k r«| d } n  | d } qâqâqâW| d | k rØt	 } qÍ t
 } qÍ n  |	 d k r| j d | ƒ } qÍ n  | | d k r>| d } | d | k r>t } q>n  | d } qÍ W| t	 k ry| t
 k ry| d k ryt } n  | |  _ | d | k rŸ| | ƒ n  d  S(   Ni   t   xxxxxxxxR    t   xxxxt   xxs   
xs   
i    R   R   t   "t   'i   i   s   \t   #iÿÿÿÿ(   R   R   t	   translatet   _trant   replacet   C_NONEt	   goodlinesR   R   t   C_STRING_FIRST_LINEt   C_STRING_NEXT_LINESt   findt   C_BACKSLASHt	   C_BRACKETt   continuation(   R   R   R7   t   levelt   lnoR1   t	   push_goodR!   t   nt   cht   quotet   firstlnot   w(    (    s%   /sys/lib/python2.7/idlelib/PyParse.pyt   _study1Ð   sš    		
	










	
		c         C   s   |  j  ƒ  |  j S(   N(   R@   R7   (   R   (    (    s%   /sys/lib/python2.7/idlelib/PyParse.pyt   get_continuation_typeP  s    
c         C   sˆ  |  j  d k r d  S|  j ƒ  d |  _  |  j |  j } } t | ƒ d } t | ƒ } xp | rÇ | } x@ t | | d | | ƒ D]# } | j d d | d ƒ d } q€ Wt | | ƒ rÃ | d } qX PqX W| d k rÝ | } n  | | |  _ |  _	 d } g  } | j
 }	 | d f g }
 x?| | k  rUt | | | ƒ } | r°| j ƒ  } | d } x* | | k r}| | d k r}| d } qTW| | k r—| | } n  | } | | k r°Pq°n  | | } | d k rÿ|	 | ƒ |
 j
 | t | ƒ f ƒ | } | d } qn  | d k rJ| r| d	 =n  | } | d } |
 j
 | t | ƒ f ƒ qn  | d
 k sb| d k r¼|
 j
 | t | ƒ d f ƒ | } t | | | ƒ j ƒ  } |
 j
 | t | ƒ f ƒ qn  | d k r|
 j
 | t | ƒ d f ƒ | j d | | ƒ d } |
 j
 | t | ƒ f ƒ qn  | d } | | d k rH| | | } n  | d } qW| |  _ | ru| d	 |  _ n  t |
 ƒ |  _ d  S(   Ni   i   s   
i    R   s    	
s   ([{s   )]}iÿÿÿÿR*   R+   R,   (   R   R@   R   R1   R   R   R   t   _junkret
   stmt_startt   stmt_endR   t   _chew_ordinaryret   endt   _match_stringreR4   t   lastcht   lastopenbracketpost   tuplet   stmt_bracketing(   R   R   R1   R!   t   pt   qt   nothingRH   t   stackt
   push_stackt
   bracketingR"   t   newpR<   (    (    s%   /sys/lib/python2.7/idlelib/PyParse.pyt   _study2e  s„    
		"!		






	c         C   s   |  j  ƒ  |  j } |  j } t | ƒ } | j d d | ƒ d } } | d } x | | k  rª t | | ƒ } | r | j ƒ  d } d } PqR | j d | ƒ d } } qR W| } } x | | d k rÕ | d } q¸ W|  j } t | | | !j	 |  j
 ƒ ƒ | S(   Ns   
i    i   s    	(   RS   RI   R   R   R   t   _itemreRF   R4   R   t
   expandtabsR   (   R   t   jR   R;   t   origiR!   R"   t   extra(    (    s%   /sys/lib/python2.7/idlelib/PyParse.pyt   compute_bracket_indentÒ  s$    
		

	c         C   s#   |  j  ƒ  |  j } | d | d S(   Niÿÿÿÿiþÿÿÿ(   R@   R1   (   R   R1   (    (    s%   /sys/lib/python2.7/idlelib/PyParse.pyt   get_num_lines_in_stmtñ  s    
	c         C   sø  |  j  ƒ  |  j } |  j } x | | d k r< | d } q W| } | j d | ƒ d } d } } x| | k  rq| | } | d k rŸ | d } | d } qf | d k rË | r¾ | d } n  | d } qf | d k sã | d k rþ t | | | ƒ j ƒ  } qf | d	 k rPqf | d k rd| d
 k rd| d k sF| | d d k rd| | d d
 k rdd } Pqf | d } qf W| r¤| d } t j d | | | !ƒ d  k } n  | sÔ| } x! | | d k rÐ| d } q³Wn  t	 | |  j | !j
 |  j ƒ ƒ d S(   Ns    	i   s   
i    s   ([{s   )]}R*   R+   R,   t   =s   =<>!s   \s*\\s    	
(   RS   R   RC   R4   RG   RF   t   ret   matchR   R   RU   R   (   R   R   R!   t   startpost   endpost   foundR8   R<   (    (    s%   /sys/lib/python2.7/idlelib/PyParse.pyt   compute_backslash_indentú  sH    
		


 
"c         C   sd   |  j  ƒ  |  j |  j } } | } |  j } x* | | k  rX | | d k rX | d } q/ W| | | !S(   Ns    	i   (   RS   RC   RD   R   (   R   R!   R;   RV   R   (    (    s%   /sys/lib/python2.7/idlelib/PyParse.pyt   get_base_indent_string/  s    
	c         C   s   |  j  ƒ  |  j d k S(   Nt   :(   RS   RH   (   R   (    (    s%   /sys/lib/python2.7/idlelib/PyParse.pyt   is_block_opener:  s    
c         C   s#   |  j  ƒ  t |  j |  j ƒ d  k	 S(   N(   RS   t   _closereR   RC   R   (   R   (    (    s%   /sys/lib/python2.7/idlelib/PyParse.pyt   is_block_closer@  s    
c         C   s   |  j  ƒ  |  j S(   N(   RS   RI   (   R   (    (    s%   /sys/lib/python2.7/idlelib/PyParse.pyt   get_last_open_bracket_posG  s    
c         C   s   |  j  ƒ  |  j S(   N(   RS   RK   (   R   (    (    s%   /sys/lib/python2.7/idlelib/PyParse.pyt   get_last_stmt_bracketingP  s    
N(   t   __name__t
   __module__R   R   R   R   R$   R&   R@   RA   RS   RY   RZ   Ra   Rb   Rd   Rf   RI   Rg   RK   Rh   (    (    (    s%   /sys/lib/python2.7/idlelib/PyParse.pyR   p   s$   		3			€		m				5				(    (   R\   t   sysR   R0   R5   R2   R3   R6   t   compilet   VERBOSEt	   MULTILINEt   searchR   R]   RB   t   DOTALLRG   RT   Re   RE   R.   R<   R   R   R	   t   unicodeR
   t	   NameErrorR   R   (    (    (    s%   /sys/lib/python2.7/idlelib/PyParse.pyt   <module>   s8   	
