
    z%iM                     H   	 d dl Z  ed      \  ZZZZZ e j                  de j                  e j                  z        j                  Z e j                  de j                        j                  Z e j                  de j                  e j                  z        j                  Z e j                  de j                        j                  Z e j                  de j                        j                  Z e j                  de j                        j                  Z G d	 d
e      Zej+                   ed      d      Zej/                  d dD               ej/                  d dD               ej/                  d dD                G d d      Zedk(  rd dlmZ  edd       yy)    N   z
    ^
    [ \t]*
    (?: while
    |   else
    |   def
    |   return
    |   assert
    |   break
    |   class
    |   continue
    |   elif
    |   try
    |   except
    |   raise
    |   import
    |   yield
    )
    \b
z'
    [ \t]*
    (?: \# \S .* )?
    \n
aK  
    \""" [^"\\]* (?:
                     (?: \\. | "(?!"") )
                     [^"\\]*
                 )*
    (?: \""" )?

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

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

|   ' [^'\\\n]* (?: \\. [^'\\\n]* )* '?
zM
    [ \t]*
    [^\s#\\]    # if we match, m.end()-1 is the interesting char
z_
    \s*
    (?: return
    |   break
    |   continue
    |   raise
    |   pass
    )
    \b
z
    [^[\](){}#'"\\]+
c                       e Zd Z	 d Zy)ParseMapc                      y)Nx    )selfkeys     C/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/idlelib/pyparse.py__missing__zParseMap.__missing__r   s        N)__name__
__module____qualname__r   r   r   r   r   r   f   s    	r   r      r   c              #   H   K   | ]  }t        |      t        d       f  yw)(Nord.0cs     r   	<genexpr>r   x        /Ac!fc#h/    "z({[c              #   H   K   | ]  }t        |      t        d       f  yw))Nr   r   s     r   r   r   y   r   r   z)}]c              #   H   K   | ]  }t        |      t        |      f  y wNr   r   s     r   r   r   z   s     2!c!fc!f2r   z"'\
#c                   `    e 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y)Parserc                      || _         || _        y r   )indentwidthtabwidth)r	   r#   r$   s      r   __init__zParser.__init__   s    & r   c                      || _         d| _        y Nr   )codestudy_level)r	   ss     r   set_codezParser.set_code   s    	r   c                    	 | j                   d }}t        |      }t        d      D ]k  }|j                  dd|      }|dk  r nQ|j                  dd|      dz   }t	        |||      }|r( ||j                               s|j                         } n|}m |5t	        |      }|r& ||j                               s|j                         }|S |dz   }t	        ||      x}r,|j                         \  }} ||      s|}t	        ||      x}r,|S )Nr   z:
r   
   )r(   lenrangerfind_synchrestartspan)	r	   is_char_in_stringr(   poslimittriesimr*   s	            r   find_good_parse_startzParser.find_good_parse_start   s    	 IItc
 D	1X 		E

5!U+A1u

4A&*Aq%(A*17795ggiE		 ; A*17795ggiJ !GD!$$a$668DAq$Q' D!$$a$ 
r   c                 :    	 |dkD  r| j                   |d  | _         y y r'   )r(   )r	   los     r   set_lozParser.set_lo   s&    	
 6		"#DI r   c                 ^   	 | j                   dk\  ry d| _         | j                  }|j                  t              }|j	                  dd      }|j	                  dd      }|j	                  dd      }|j	                  dd      }|j	                  dd      }t
        }dx}}dgx| _        }|j                  }dt        |      }}||k  r2||   }	|dz   }|	dk(  r|	dk(  r|dz   }|dk(  r ||       .|	d	k(  r|dz   }9|	d
k(  r|r|dz
  }F|	dk(  s|	dk(  r|	}
||dz
  |dz    |
dz  k(  r|
dz  }
|}t        |
      dz
  }||z   }||k  r`||   }	|dz   }|	dk(  r||dz
  ||z    |
k(  r||z   }nQ|	dk(  r|dz   }|dk(  r|dk(  r ||       n4G|	dk(  r||   dk(  r|dz   }|dz   }_||k  r`|dz
  |k(  rt        }nt        }|	dk(  r|j                  d|      }||   dk(  r|dz   }|dz   |k(  rt        }|dz   }||k  r2|t        k7  r|t        k7  r|dkD  rt        }|| _        |d   |k7  r	 ||       y y )Nr.   xxxxxxxxxxxxxxxz
xr-   r   r   r   "'      \#)r)   r(   	translatetransreplaceC_NONE	goodlinesappendr/   C_STRING_FIRST_LINEC_STRING_NEXT_LINESfindC_BACKSLASH	C_BRACKETcontinuation)r	   r(   rV   levellnorO   	push_goodr9   nchquotefirstlnows                r   _study1zParser._study1   s   	 q  yy~~e$||J,||FC(||D#&||D#&||E4( &'S($$	#d)1!eaB!A SyTzAgA:cNSy	Sy!AIESyB#I!AaC=EAI-!AIEJNaC!eaB!ASy AaC!}-aCTz!Ag6$z )#! Tz7d?"%'CaC 3 !e@ aH, (;':SyIIdA& Aw$AgQ3!8#.L!Ak !et // 33	$L(
 R=CcN  r   c                 :    | j                          | j                  S r   )r_   rV   r	   s    r   get_continuation_typezParser.get_continuation_typeK  s       r   c                 $   	 | j                   dk\  ry | j                          d| _         | j                  | j                  }}t	        |      dz
  }t	        |      }|rK|}t        ||dz
     ||         D ]  }|j                  dd|dz
        dz   } t        ||      r|dz
  }nn|rK|dk(  r|}|c| _        | _	        d}g }|j                  }	|dfg}
||k  rt        |||      }|rF|j                         }|dz
  }||k\  r||   dv r|dz
  }||k\  r||   dv r||k\  r||   }|}||k\  rn?||   }|dv r, |	|       |
j                  |t	        |      f       |}|dz   }|dv r)|r|d	= |}|dz   }|
j                  |t	        |      f       |d
k(  s|dk(  rZ|
j                  |t	        |      dz   f       |}t        |||      j                         }|
j                  |t	        |      f       !|dk(  rS|
j                  |t	        |      dz   f       |j                  d||      dz   }|
j                  |t	        |      f       y|dz   }||   dk7  r|||   z   }|dz   }||k  r|| _        |r|d	   nd | _        t#        |
      | _        y )NrF   r.   r-   r     	
([{)]}rJ   rD   rE   rI   )r)   r_   r(   rO   r/   r0   r1   _junkre
stmt_startstmt_endrP   _chew_ordinaryreend_match_stringrerS   lastchlastopenbracketpostuplestmt_bracketing)r	   r(   rO   r9   pqnothingrn   stack
push_stack
bracketingr:   newpr[   s                 r   _study2zParser._study2O  s   	$ q  ))T^^i	NQI A 1Q31> 1JJtQ!,q01
 a aC  6 A)*A& \\
!fX
!e q!,Auuw1H1faG!3!A 1faG!36!!WF6aBU{1!!1c%j/2aCU{b	aC!!1c%j/2SyB#I !!1c%jl"34#D!Q/335!!1c%j/2Sy!!1c%jl"34IIdAq)A-!!1c%j/2 !AAw$d1g!A{ !eB /4%)$$Z0r   c                    	 | j                          | j                  }| j                  }t        |      }|j	                  dd|      dz   x}}|dz   }||k  rAt        ||      }|r|j                         dz
  }d}nA|j                  d|      dz   x}}||k  rA|x}}||   dv r|dz   }||   dv r| j                  }t        ||| j                  | j                              |z   S )Nr-   r   r.    	)ry   ro   r(   r/   r1   _itemrerl   rS   r#   
expandtabsr$   )r	   jr(   rZ   origir9   r:   extras           r   compute_bracket_indentzParser.compute_bracket_indent  s   	 	##yyIJJtQ*Q..aC!ea AEEGaK 		$*Q..A !e MAq'U"aC q'U"$$E4!9''67%??r   c                 R    	 | j                          | j                  }|d   |d   z
  S )NrJ   )r_   rO   )r	   rO   s     r   get_num_lines_in_stmtzParser.get_num_lines_in_stmt  s.    	
 	NN	}y},,r   c                    	 | j                          | j                  }| j                  }||   dv r|dz   }||   dv r|}|j                  d|      dz   }dx}}||k  r||   }|dv r|dz   }|dz   }ni|dv r|r|dz
  }|dz   }nX|dk(  s|dk(  rt	        |||      j                         }n2|d	k(  rn2|dk(  r"|d
k(  r|dk(  s
||dz
     dvr||dz      d
k7  rd}n|dz   }||k  r|r |dz   }t        j                  d|||       d u }|s|}||   dvr|dz   }||   dvrt        || j                  | j                  | j                              dz   S )Nr{   r.   r-   r   rf   rg   rD   rE   rI   =z=<>!z\s*\\re   )ry   r(   ri   rS   rm   rl   rematchr/   r}   r$   )r	   r(   r9   startposendposfoundrW   r[   s           r   compute_backslash_indentzParser.compute_backslash_indent  s   	
 	yyOO1g!A 1g 4*Q.&jaBU{	aCu!AIEaCsbCi#D!V488:s !c	Fd1Q3iv5!9#aC+ &j.  !AHHXtAf~6$>E Aq'(aC q'( 4*55%)]]4 5789 	9r   c                     	 | j                          | j                  | j                  }}|}| j                  }||k  r||   dv r|dz   }||k  r||   dv r||| S )Nr{   r.   )ry   ri   rj   r(   )r	   r9   rZ   r~   r(   s        r   get_base_indent_stringzParser.get_base_indent_string,  sl    	 	1yy!eQ5(AA !eQ5(Aayr   c                 B    	 | j                          | j                  dk(  S )N:)ry   rn   ra   s    r   is_block_openerzParser.is_block_opener8  s    F{{c!!r   c                 h    	 | j                          t        | j                  | j                        d uS r   )ry   _closerer(   ri   ra   s    r   is_block_closerzParser.is_block_closer=  s(    G		4??34??r   c                 <    	 | j                          | j                  S r   )ry   rq   ra   s    r   get_last_stmt_bracketingzParser.get_last_stmt_bracketingB  s    	 	###r   N)r   r   r   r%   r+   r;   r>   r_   rb   ry   r   r   r   r   r   r   r   r   r   r   r!   r!   }   sP    !
2h'DL!y1v@>-79r
"
@
$r   r!   __main__)mainzidlelib.idle_test.test_pyparserF   )	verbosity)r   r0   rN   rT   rQ   rR   rU   compileVERBOSE	MULTILINEsearchr2   r   rh   DOTALLrm   r|   r   rk   dictr   fromkeysrL   updater!   r   unittestr   r   r   r   <module>r      s   
 $)8!)i 2:: & ZZ",,' & !'' 	. "**  ZZ	 	  "**   ZZ"))!  #U! * "**  ZZ   2:: 	 ZZ	  	  2:: ZZ 
t " 	%*c* // / // / 2z2 2K$ K$\ z	)Q7 r   