
    ;eY2                     (   	 d dl mZ d dlZd dlmZ  eej        ej        z   dz             Z eej        dz             Z	d  e
d          D             Zd  e
d          D             Z G d d	          Zed
k    rd dlmZ  edd           dS dS )    )	iskeywordN)pyparse_c                 :    g | ]}t          |          t          v S  )chr_ASCII_ID_CHARS.0xs     */usr/lib/python3.11/idlelib/hyperparser.py
<listcomp>r      s#    EEEQc!ff/EEE       c                 :    g | ]}t          |          t          v S r   )r   _ASCII_ID_FIRST_CHARSr
   s     r   r   r      s$    ;;;1c!ff%%;;;r   c                   h    e Zd Zd Zd Zd Zd ZddZ eh d          Z	e
d	             Zd
Zd ZdS )HyperParserc                     	 | _         |j        x _        }t          j        |j        |j                  }d } ||                    |                    }|j        s|j        D ]}t          ||z
  d          }t          |          dz   }	d|z  }
|                    |                    |	|
          dz              |                    |                    |	                    }||dk    r n|                    |pd           ni|                    d|          }|r	|d         }	nd}	d|z  }
|                    |                    |	|
          dz              |                    d           |j        d d	          _        |
 _        |                                 _         fd
t-          t/           j                            D              _                             |           d S )Nc                 :    t          t          |                     S )N)intfloat)indexs    r   
index2linez(HyperParser.__init__.<locals>.index2line"   s    uU||$$$r      z.0z%d.endz 
r   consolez1.0c                 r    g | ]3}|d k    o*j         |         d         j         |dz
           d         k    4S )r   r   )
bracketing)r   iselfs     r   r   z(HyperParser.__init__.<locals>.<listcomp>K   sX     ? ? ? 1 1!3A!61-a0"1 ? ? ?r   )editwintextr   Parserindentwidthtabwidthr   prompt_last_linenum_context_linesmaxreprset_codegetfind_good_parse_start_build_char_in_string_funcset_lotag_prevrangecoderawtextstopatindexget_last_stmt_bracketingr   rangelenisopener	set_index)r!   r"   r   r#   parserr   lnocontextstartatstartatindexr3   bodrs   `            r   __init__zHyperParser.__init__   s   E"<'	D 3W5EFF	% 	% 	%jE**++' 	"4  cGmQ//#G}}t3&n
 { C CE IJJJ22!<<\JJL L?gllE '3MM#(####""9e44A % t$"S.K OODHH\;??EFFFMM! {3B3' ' 99;;? ? ? ?"'DO(<(<"="=? ? ? 	ur   c                    	 t          | j                  t          | j                            || j                            z
  }|dk     rt          d|z            || _        d| _        | j        t          | j                  dz
  k     rx| j        | j        dz            d         | j        k     rT| xj        dz  c_        | j        t          | j                  dz
  k     r$| j        | j        dz            d         | j        k     T| j        t          | j                  dz
  k     rK| j        | j        dz            d         | j        k    r)| j	        | j        dz            s| xj        dz  c_        d S d S d S d S )Nr   z(Index %s precedes the analyzed statementr   )
r6   r2   r#   r,   r3   
ValueErrorindexinrawtextindexbracketr   r7   )r!   r   rC   s      r   r8   zHyperParser.set_indexQ   s   	 dl++dimmE43CDDEEFAG$% & & &, 3t#7#7#999t023A69LLL"  3t#7#7#999t023A69LLLDO 4 4Q 666OD-a/03t7JJJ}T.q01 K" 76JJJJr   c                 r    	 | j         | j                 o$| j        | j        | j                 d                  dv S )Nr   )"'r7   rD   r2   r   r!   s    r   is_in_stringzHyperParser.is_in_stringf   s?    @ d/0 T_T->?BC	r   c                 t    	 | j         | j                  p$| j        | j        | j                 d                  dvS )Nr   )#rF   rG   rH   rI   s    r   
is_in_codezHyperParser.is_in_coden   s@    CM$"344 'T_T->?BC&'	(r   ([{Fc                 X   	 | j         | j                 d         }| j        }| j        |         r7| j        | j         |         d                  |vs| j         |         d         |k    rr|dz  }|dk     rd S t	          || j         |         d                   }| j        |         ;| j        | j         |         d                  |v[| j         |         d         |k    r| j        dz   }|t          | j                   k     rK| j         |         d         |k    r4|dz  }|t          | j                   k     r| j         |         d         |k    4| j                            d| j        t          | j                  | j         |         d         z
  fz            }|t          | j                   k    s)| j         |         d         t          | j                  k    r|rd S | j        }nM| j                            d| j        t          | j                  | j         |         d         dz
  z
  fz            }||fS )Nr   r   z%s-%dc)	r   rD   r7   r2   minr6   r#   r   r3   )r!   openers	mustclosebracketinglevelbeforeafterbeforeindex
afterindexs           r   get_surrounding_bracketsz$HyperParser.get_surrounding_bracketst   sF   		 /$*;<Q?"=( 	Ol4?62156gEEof%a(?::aKFzzt!/4?63J13MNNO =( 	Ol4?62156gEEof%a(?::
 !A%s4?++++oe$Q'?::QJE s4?++++oe$Q'?:: ioohs4<001H1KKL'M N NS))))?5!!$s4<'8'888 t)JJ D,T\""DOE$:1$=a$?@B BC CJ J&&r   >   NoneTrueFalsec                    	 t           }|}||k    rt          ||dz
                     dk     rc|t          ||dz
                              rE|dz  }||k    r:t          ||dz
                     dk     r|t          ||dz
                              E||k    rt          ||dz
                     dk    r|dz
  |k    rRd||dz
  |         z                                   r0|dz  }|dz
  |k    r"d||dz
  |         z                                   0|dz
  |k    r'd||dz
  |         z                                   r|dz  }|dz
  |k    r'd||dz
  |         z                                   r|dz  }|||                                         sdS n(||k     r"t          t          ||                            sdS ||k     r*t	          |||                   r|||         | j        vrdS ||z
  S )Nr   r      a   r   )_IS_ASCII_ID_CHARordisidentifier_IS_ASCII_ID_FIRST_CHARr   _ID_KEYWORDS)clsstrlimitposis_ascii_id_charr    s         r   _eat_identifierzHyperParser._eat_identifier   s-   	
 -  %iiCAJ#%% SQZ1 & FA	 %iiCAJ#%% SQZ1 & u99SQZC//a%5..cCAc	N&:%H%H%J%J.Q a%5..cCAc	N&:%H%H%J%J.1u~~3QU3Y#7"E"E"G"G~Q1u~~3QU3Y#7"E"E"G"G~Q qu:**,, qWW +3s1v;;7 q s77#ae*%% AcE
#"2221Qwr   z 	
\c                    	 |                                  st          d          | j        }| j        }| j        }||         d         }| j        }|}d}	 	 ||k    r||dz
           | j        v r|dz  }nl|s||k    r||dz
           dk    r|dz  }d}nM||k    rF|dk    r@|||dz
           d                  dk    r%|dz  }||         d         }||dz            d         }nn|sn|                     |||          }|r
||z
  }|}d}n||k    r||         d         }	|dk    r5||dz
           d         |	k    r |dz  }|dk    r||dz
           d         |	k     ||         d         |k    rni||         d         }|dz  }||         d         }|}||         d	v rn9||         d
v r-|dk    r%||dz
           dv r|dz  }|dk    r||dz
           dv |}nn}||| j                 S )Nz?get_expression should only be called if index is inside a code.r   Tr   .rL   r_   Fz([z'"rRbBuU)rM   rB   r2   r   rD   rC   _whitespace_charsrj   )
r!   r2   r   
brck_index
brck_limitrh   last_identifier_pospostdot_phaseretlevels
             r   get_expressionzHyperParser.get_expression   s   	    	; : ; ; ; ,_
&

+A.
!!A	z>>gc!en8N&N&N1HCC' J&&73q5>S+@+@1HC$(MM Z''JNNjA6q9:cAA!OJ!+J!7!:J$Z\215CC '* !  &&w
C@@C $Ci&)# % 
"" #:.q1 1nnJqL)A!)Du)L)L!OJ !1nnJqL)A!)Du)L)Lj)!,
:: ,Q/a
'
3A6
&)#3<4''  s|u,,!Agg'#'*:h*F*F1HC "Agg'#'*:h*F*F.1+ CA	F *4+>>??r   N)rN   F)__name__
__module____qualname__r@   r8   rJ   rM   rX   	frozensetrd   classmethodrj   rn   ru   r   r   r   r   r      s        5 5 5n# # #*  ( ( ((' (' (' ('X 966677L6 6 [6r "U@ U@ U@ U@ U@r   r   __main__)mainz"idlelib.idle_test.test_hyperparserr_   )	verbosity)keywordr   stringidlelibr   ry   ascii_lettersdigitsr	   r   r5   r`   rc   r   rv   unittestr|   r   r   r   <module>r      s,                )F06=@3FGG!	&"6"<==  FE%%**EEE  <;c

;;; Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@z zD	-;;;;;; r   