o
     JAfM                     @   s  	 d dl Z ed\ZZZZZe de je j	B j
Ze de jjZe de je jB jZe de jjZe de jjZe de jjZG d	d
 d
eZeeddZedd dD  edd dD  edd dD  G dd dZedkrd dlmZ eddd dS dS )    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                   @   s   e Zd Z	 dd ZdS )ParseMapc                 C   s   dS )Nx    )selfkeyr   r   &/usr/lib/python3.10/idlelib/pyparse.py__missing__r   s   zParseMap.__missing__N)__name__
__module____qualname__r	   r   r   r   r   r   f   s    r      r   c                 c        | ]}t |t d fV  qdS )(Nord.0cr   r   r   	<genexpr>x       r   z({[c                 c   r   ))Nr   r   r   r   r   r   y   r   z)}]c                 c   s     | ]}t |t |fV  qd S Nr   r   r   r   r   r   z   r   z"'\
#c                   @   s|   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )Parserc                 C   s   || _ || _d S r   )indentwidthtabwidth)r   r   r   r   r   r   __init__   s   
zParser.__init__c                 C   s   || _ d| _d S Nr   )codestudy_level)r   sr   r   r   set_code   s   
zParser.set_codec           	      C   s   	 | j d }}t|}tdD ].}|dd|}|dk r n |dd|d }t|||}|r;|| s;| } n|}q|d u rTt|}|rR|| sR| }|S |d }t|| }rr| \}}||sk|}t|| }s_|S )Nr   z:
r   
   )r   lenrangerfind_synchrestartspan)	r   Zis_char_in_stringr   poslimitZtriesimr    r   r   r   find_good_parse_start   s2   	zParser.find_good_parse_startc                 C   s"   	 |dkr| j |d  | _ d S d S r   )r   )r   lor   r   r   set_lo   s   zParser.set_loc                 C   s  	 | j dkrd S d| _ | j}|t}|dd}|dd}|dd}|dd}|dd}t}d }}dg | _}|j}dt|}}||k r*|| }	|d }|	dkrYqG|	dkrj|d }|dkri|| qG|	d	krs|d }qG|	d
kr~|r}|d }qG|	dks|	dkr|	}
||d |d  |
d kr|
d }
|}t|
d }|| }||k r|| }	|d }|	dkrq||d ||  |
kr|| }n8|	dkr|d }|dkr|dkr|| n#q|	dkr|| dkr|d }|d }q||k s|d |krt	}nt
}qG|	dkr|d|}qG|| dkr"|d }|d |kr"t}|d }||k sL|t	kr;|t
kr;|dkr;t}|| _|d |krK|| d S d S )Nr#   ZxxxxxxxxxZ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   rE   levellnor>   Z	push_goodr,   nchquoteZfirstlnowr   r   r   _study1   s   


 

ZzParser._study1c                 C   s   |    | jS r   )rL   rE   r   r   r   r   get_continuation_typeK  s   zParser.get_continuation_typec                 C   s  	 | j dkrd S |   d| _ | j| j}}t|d }t|}|rJ|}t||d  || D ]}|dd|d d }q/t||rG|d }nn|s"|dkrP|}||| _| _	d}g }|j
}	|dfg}
||k r7t|||}|r| }|d }||kr|| dv r|d }||kr|| dv s||kr|| }|}||krn|| }|dv r|	| |

|t|f |}|d }qc|dv r|r|d	= |}|d }|

|t|f qc|d
ks|dkr|

|t|d f |}t||| }|

|t|f qc|dkr|

|t|d f |d||d }|

|t|f qc|d }|| dkr/|||  }|d }||k sh|| _|rA|d	 nd | _t|
| _d S )Nr5   r#   r"   r     	
([{)]}r9   r3   r4   r8   )r   rL   r   r>   r$   r%   r&   _junkre
stmt_startstmt_endr?   _chew_ordinaryreend_match_stringrerB   lastchlastopenbracketpostuplestmt_bracketing)r   r   r>   r,   pqZnothingrY   stackZ
push_stackZ
bracketingr-   ZnewprI   r   r   r   _study2O  s   





AzParser._study2c                 C   s   	 |    | j}| j}t|}|dd|d  }}|d }||k r@t||}|r2| d }d}n%|d|d  }}||k s"| }}|| dv rT|d }|| dv sJ| j}t||| 	| j
| S )Nr"   r   r#    	)r`   rZ   r   r$   r&   _itemrerW   rB   r   
expandtabsr   )r   jr   rH   Zorigir,   r-   extrar   r   r   compute_bracket_indent  s*   
zParser.compute_bracket_indentc                 C   s    	 |    | j}|d |d  S )Nr9   )rL   r>   )r   r>   r   r   r   get_num_lines_in_stmt  s   zParser.get_num_lines_in_stmtc                 C   s~  	 |    | j}| j}|| dv r|d }|| dv s|}|d|d }d }}||k r|| }|dv r>|d }|d }nH|dv rM|rH|d }|d }n9|dksU|dkr^t||| }n(|d	krcn'|dkr|d
kr|dksw||d  dvr||d  d
krd}n|d }||k s-|r|d }td||| d u }|s|}|| dvr|d }|| dvst|| j| 	| j
d S )Nra   r#   r"   r   rQ   rR   r3   r4   r8   =z=<>!z\s*\\rP   )r`   r   rT   rB   rX   rW   rematchr$   rc   r   )r   r   r,   startposendposfoundrF   rI   r   r   r   compute_backslash_indent  sV   

zParser.compute_backslash_indentc                 C   s^   	 |    | j| j}}|}| j}||k r)|| dv r)|d }||k r)|| dv s||| S )Nra   r#   )r`   rT   rU   r   )r   r,   rH   rd   r   r   r   r   get_base_indent_string,  s   zParser.get_base_indent_stringc                 C   s   	 |    | jdkS )N:)r`   rY   rM   r   r   r   is_block_opener8  s   
zParser.is_block_openerc                 C   s   	 |    t| j| jd uS r   )r`   _closerer   rT   rM   r   r   r   is_block_closer=  s   zParser.is_block_closerc                 C   s   	 |    | jS r   )r`   r\   rM   r   r   r   get_last_stmt_bracketingB  s   zParser.get_last_stmt_bracketingN)r
   r   r   r   r!   r.   r0   rL   rN   r`   rf   rh   ro   rp   rr   rt   ru   r   r   r   r   r   }   s     4	 {
9r   __main__)mainzidlelib.idle_test.test_pyparser5   )	verbosity)rj   r%   r=   rC   r@   rA   rD   compileVERBOSE	MULTILINEsearchr'   rk   rS   DOTALLrX   rb   rs   rV   dictr   fromkeysr;   updater   r
   Zunittestrw   r   r   r   r   <module>   s`    
	
		   Q