
    3\hM                        	 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                     ed          d          Ze                    d dD                        e                    d dD                        e                    d dD                         G d d          Zedk    rd dlmZ  e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                       e Zd Z	 d ZdS )ParseMapc                     dS )Nx    )selfkeys     9/opt/python-3.11.14/usr/lib/python3.11/idlelib/pyparse.py__missing__zParseMap.__missing__r   s    s    N)__name__
__module____qualname__r   r   r   r   r   r   f   s(        	    r   r      r   c              #   R   K   | ]"}t          |          t          d           fV  #dS )(Nord.0cs     r   	<genexpr>r   x   3      //Ac!ffc#hh//////r   z({[c              #   R   K   | ]"}t          |          t          d           fV  #dS ))Nr   r   s     r   r   r   y   r   r   z)}]c              #   R   K   | ]"}t          |          t          |          fV  #d S Nr   r   s     r   r   r   z   s3      22!c!ffc!ff222222r   z"'\
#c                   b    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dS )Parserc                 "    || _         || _        d S r   )indentwidthtabwidth)r	   r"   r#   s      r   __init__zParser.__init__   s    & r   c                 "    || _         d| _        d S Nr   )codestudy_level)r	   ss     r   set_codezParser.set_code   s    	r   c                    	 | j         d }}t          |          }t          d          D ]}|                    dd|          }|dk     r nc|                    dd|          dz   }t	          |||          }|r3 ||                                          s|                                } n|}|Dt	          |          }|r1 ||                                          s|                                }|S |dz   }t	          ||          x}r6|                                \  }} ||          s|}t	          ||          x}6|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   sr   	 Itc
 D		1XX 		 		E

5!U++A1uu

4A&&*Aq%((A **1779955 ggiiEE; A  **1779955  ggiiJ !GD!$$$a 	6688DAq$$Q''  D!$$$a 	 
r   c                 @    	 |dk    r| j         |d          | _         d S d S r&   )r'   )r	   los     r   set_lozParser.set_lo   s.    	
 66	"##DIII 6r   c                    	 | j         dk    rd S d| _         | j        }|                    t                    }|                    dd          }|                    dd          }|                    dd          }|                    dd          }|                    dd          }t
          }dx}}dgx| _        }|j        }dt          |          }}||k     rn||         }	|dz   }|	dk    r|	dk    r|dz   }|dk    r ||           8|	d	k    r|dz   }D|	d
k    r|r|dz
  }R|	dk    s|	dk    r|	}
||dz
  |dz            |
dz  k    r|
dz  }
|}t          |
          dz
  }||z   }||k     ru||         }	|dz   }|	dk    r||dz
  ||z            |
k    r||z   }n_|	dk    r|dz   }|dk    r|dk    r ||           n<X|	dk    r||         dk    r|dz   }|dz   }u||k     u|dz
  |k    rt          }nt          }*|	dk    r|                    d|          }H||         dk    r|dz   }|dz   |k    rt          }|dz   }||k     n|t          k    r|t          k    r|dk    rt          }|| _        |d         |k    r ||           d S d S )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'   rU   levellnorN   	push_goodr8   nchquotefirstlnows                r   _study1zParser._study1   sI   	 q  F y~~e$$||J,,||FC((||D#&&||D#&&||E4(( &'S($	#d))1!eeaB!A SyyTzzAgA::IcNNNSyy	Syy &!AIESyyB#II!AaC=EAI--!AIEJJNaC!eeaB!ASyy AaC!G}--aCTzz!Ag66$zz )	#! Tzz7d??"%'CaC 3 !ee@ aH,, (;':SyyIIdA&& Aw$AgQ3!88#.L!Ak !eet /// 333		$L(
 R=CIcNNNNN  r   c                 8    |                                   | j        S r   )r^   rU   r	   s    r   get_continuation_typezParser.get_continuation_typeK  s      r   c                 
   	 | j         dk    rd S |                                  d| _         | j        | j        }}t	          |          dz
  }t	          |          }|rZ|}t          ||dz
           ||                   D ]}|                    dd|dz
            dz   } t          ||          r|dz
  }nn|Z|dk    r|}||c| _        | _	        d}g }|j
        }	|dfg}
||k     rt          |||          }|rV|                                }|dz
  }||k    r||         dv r|dz
  }||k    r
||         dv ||k    r||         }|}||k    rn||         }|dv r7 |	|           |

                    |t	          |          f           |}|dz   }|dv r1|r|d	= |}|dz   }|

                    |t	          |          f           |d
k    s|dk    rr|

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

                    |t	          |          f           f|dk    rg|

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

                    |t	          |          f           |dz   }||         dk    r|||         z   }|dz   }||k     || _        |r|d	         nd | _        t#          |
          | _        d S )NrE   r-   r,   r     	
([{)]}rI   rC   rD   rH   )r(   r^   r'   rN   r.   r/   r0   _junkre
stmt_startstmt_endrO   _chew_ordinaryreend_match_stringrerR   lastchlastopenbracketpostuplestmt_bracketing)r	   r'   rN   r8   pqnothingrm   stack
push_stack
bracketingr9   newprZ   s                 r   _study2zParser._study2O  s   	$ q  F )T^i	NNQII 	 A 1Q31>> 1 1JJtQ!,,q0 a   aC  	 66 A)*A& \
!fX
!ee q!,,A uuww1H1ffaG!3!3!A 1ffaG!3!366!!WF66aBU{{
1!!1c%jj/222aCU{{ "b	aC!!1c%jj/222SyyB#II !!1c%jjl"3444#D!Q//3355!!1c%jj/222Syy!!1c%jjl"3444IIdAq))A-!!1c%jj/222 !AAw$d1g!A{ !eeB /4">%))$$Z00r   c                    	 |                                   | j        }| j        }t          |          }|                    dd|          dz   x}}|dz   }||k     rMt          ||          }|r|                                dz
  }d}nE|                    d|          dz   x}}||k     M|x}}||         dv r|dz   }||         dv | j        }t          |||         	                    | j
                            |z   S )Nr,   r   r-    	)rx   rn   r'   r.   r0   _itemrerk   rR   r"   
expandtabsr#   )r	   jr'   rY   origir8   r9   extras           r   compute_bracket_indentzParser.compute_bracket_indent  s"   	 	#yIIJJtQ**Q..aC!eea  A /EEGGaK 		$**Q..A !ee MAq'U""aC q'U""$E4!9''6677%??r   c                 \    	 |                                   | j        }|d         |d         z
  S )NrI   )r^   rN   )r	   rN   s     r   get_num_lines_in_stmtzParser.get_num_lines_in_stmt  s0    	
 	N	}y},,r   c                    	 |                                   | j        }| j        }||         dv r|dz   }||         dv |}|                    d|          dz   }dx}}||k     r||         }|dv r|dz   }|dz   }n~|dv r|r|dz
  }|dz   }nm|dk    s|dk    r$t	          |||                                          }n=|d	k    rn<|dk    r+|d
k    r%|dk    s||dz
           dvr||dz            d
k    rd}n|dz   }||k     |r$|dz   }t          j        d|||                   d u }|s|}||         dvr|dz   }||         dvt          || j        |         	                    | j
                            dz   S )Nrz   r-   r,   r   re   rf   rC   rD   rH   =z=<>!z\s*\\rd   )rx   r'   rh   rR   rl   rk   rematchr.   r|   r#   )r	   r'   r8   startposendposfoundrV   rZ   s           r   compute_backslash_indentzParser.compute_backslash_indent  s   	
 	yO1g!A 1g 4**Q.&jjaBU{{	aCu &!AIEaCsbCii#D!V4488::s !c		FFd1Q3iv55!9##aC+ &jj.  	? !AHXtAfH~66$>E 	 Aq'((aC q'(( 4)*55%)]4 4 5 5789 	9r   c                     	 |                                   | j        | j        }}|}| j        }||k     r||         dv r|dz   }||k     r
||         dv |||         S )Nrz   r-   )rx   rh   ri   r'   )r	   r8   rY   r}   r'   s        r   get_base_indent_stringzParser.get_base_indent_string,  sv    	 	1y!eeQ5((AA !eeQ5((AaCyr   c                 B    	 |                                   | j        dk    S )N:)rx   rm   r`   s    r   is_block_openerzParser.is_block_opener8  s    F{c!!r   c                 d    	 |                                   t          | j        | j                  d uS r   )rx   _closerer'   rh   r`   s    r   is_block_closerzParser.is_block_closer=  s+    G	4?334??r   c                 :    	 |                                   | j        S r   )rx   rp   r`   s    r   get_last_stmt_bracketingzParser.get_last_stmt_bracketingB  s    	 	##r   N)r   r   r   r$   r*   r:   r=   r^   ra   rx   r   r   r   r   r   r   r   r   r   r   r    r    }   s        ! ! !  
2 2 2h' ' 'D D DL! ! !y1 y1 y1v@ @ @>- - -79 79 79r
 
 
" " "
@ @ @
$ $ $ $ $r   r    __main__)mainzidlelib.idle_test.test_pyparserE   )	verbosity)r   r/   rM   rS   rP   rQ   rT   compileVERBOSE	MULTILINEsearchr1   r   rg   DOTALLrl   r{   r   rj   dictr   fromkeysrK   updater    r   unittestr   r   r   r   <module>r      sS   
			 $)588!)i 2: & Z",'   & !'' 	. "*  Z	  	  "*   Z")!   #! * "*  Z    2: 	 Z	 	  	  2: Z  
    t   " 	%%**c** ///// / / / ///// / / / 22z222 2 2 2K$ K$ K$ K$ K$ K$ K$ K$\ zD	)Q777777 r   