<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>

]M2                 @   s   d  d l  Z  d  d l m Z d  d l m Z e e  j e  j d  Z e e  j d  Z	 d d   e
 d  D Z d d   e
 d  D Z Gd	 d
   d
  Z e d k r d  d l Z e j d d d d S)    N)	iskeyword)PyParse_c             C   s"   g  |  ] } t  |  t k  q S )chr_ASCII_ID_CHARS).0xr   r   0/opt/alt/python35/lib64/python3.5/HyperParser.py
<listcomp>   s   	 r      c             C   s"   g  |  ] } t  |  t k  q Sr   )r   _ASCII_ID_FIRST_CHARS)r   r	   r   r   r
   r      s   	 c               @   s   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
 d d  Z e d d d h  Z	 e
 d d    Z d Z d d   Z d S)HyperParserc                s  |   _  | j   _ } t j | j | j  } d d   } | | j |   } | j s x | j D] } t	 | | d  } t
 |  d }	 d | }
 | j | j |	 |
  d  | j | j |	   } | d  k	 s | d k re Pqe W| j | p d  n_ | j d |  } | r%| d }	 n d	 }	 d | }
 | j | j |	 |
  d  | j d  | j d  d    _ |
   _ | j     _   f d d   t t   j   D   _   j |  d  S)Nc             S   s   t  t |    S)N)intfloat)indexr   r   r
   
index2line#   s    z(HyperParser.__init__.<locals>.index2line   z.0z%d.endz 
r   Zconsolez1.0   c                sB   g  |  ]8 } | d  k o;   j  | d   j  | d d k  q S)r   r   )
bracketing)r   i)selfr   r
   r   L   s   	z(HyperParser.__init__.<locals>.<listcomp>)editwintextr   ZParserZindentwidthZtabwidthr   Zcontext_use_ps1Znum_context_linesmaxreprZset_strgetZfind_good_parse_startZ_build_char_in_string_funcZset_loZtag_prevrangestrrawtextstopatindexZget_last_stmt_bracketingr   rangelenisopener	set_index)r   r   r   r   parserr   lnocontextZstartatZstartatindexr    Zbodrr   )r   r
   __init__   s:    		

	zHyperParser.__init__c             C   s  t  |  j  t  |  j j | |  j   } | d k  rG t d |   | |  _ d |  _ xP |  j t  |  j  d k  r |  j |  j d d |  j k  r |  j d 7_ q\ W|  j t  |  j  d k  r|  j |  j d d |  j k r|  j	 |  j d r|  j d 7_ d  S)Nr   z(Index %s precedes the analyzed statementr   )
r"   r   r   r   r    
ValueErrorindexinrawtextindexbracketr   r#   )r   r   r+   r   r   r
   r$   R   s    
		!!zHyperParser.set_indexc             C   s/   |  j  |  j o. |  j |  j |  j d d k S)Nr   "')r-   r.   )r#   r,   r   r   )r   r   r   r
   is_in_stringg   s    zHyperParser.is_in_stringc             C   s0   |  j  |  j p/ |  j |  j |  j d d k S)Nr   #r-   r.   )r0   r-   r.   )r#   r,   r   r   )r   r   r   r
   
is_in_codeo   s    zHyperParser.is_in_codez([{Fc             C   s  |  j  |  j d } |  j } x{ |  j | sc |  j |  j  | d | k sc |  j  | d | k r | d 8} | d k  r} d  St | |  j  | d  } q  W|  j d } x: | t |  j   k  r |  j  | d | k r | d 7} q W|  j j d |  j t |  j  |  j  | d f  } | t |  j   k sQ|  j  | d t |  j  k rg| r[d  S|  j } n; |  j j d |  j t |  j  |  j  | d d f  } | | f S)Nr   r   z%s-%dc)	r   r,   r#   r   minr"   r   r   r    )r   ZopenersZ	mustcloseZbracketinglevelZbeforeafterZbeforeindexZ
afterindexr   r   r
   get_surrounding_bracketsu   s0    	
+ 		)z$HyperParser.get_surrounding_bracketsTrueFalseNonec             C   s  t  } | } xL | | k rZ t | | d  d k  rZ | t | | d  rZ | d 8} q W| | k rMt | | d  d k rMx< | d | k r d | | d |  j   r | d 8} q W| d | k r d | | d |  j   r | d 8} | d | k r0d | | d |  j   r0| d 8} | | |  j   sqd Sn$ | | k  rqt t | |  sqd S| | k  rt | | |   r| | |  |  j k rd S| | S)Nr   r      ar   r   )_IS_ASCII_ID_CHARordisidentifier_IS_ASCII_ID_FIRST_CHARr   _ID_KEYWORDS)clsr   limitposZis_ascii_id_charr   r   r   r
   _eat_identifier   s.    &1.
.
zHyperParser._eat_identifierz 	
\c       
      C   sk  |  j    s t d   |  j } |  j } |  j } | | d } |  j } | } d } xx | | k r | | d |  j k r | d 8} q\ | r | | k r | | d d k r | d 8} d } q\ | | k r'| d k r'| | | d d d k r'| d 8} | | d } | | d d } q\ Pq\ W| s3P|  j | | |  } | rg| | } | } d } qY | | k rU| | d }	 x2 | d k r| | d d |	 k r| d 8} qW| | d | k rP| | d } | d 8} | | d } | } | | d	 k r
qV| | d
 k rQx. | d k rJ| | d d k rJ| d 8} qW| } PqY PqY W| | |  j  S)Nz>get_expression should only be calledif index is inside a code.r   Tr   .r0   r   Fz([z'"ZrRbBuU)r1   r*   r   r   r,   r+   _whitespace_charsrB   )
r   r   r   Z
brck_indexZ
brck_limitrA   Zlast_identifier_posZpostdot_phaseretlevelr   r   r
   get_expression   sb    				# 
	

	'
#zHyperParser.get_expressionN)__name__
__module____qualname__r)   r$   r/   r1   r4   	frozensetr>   classmethodrB   rD   rG   r   r   r   r
   r      s   7,:r   __main__z"idlelib.idle_test.test_hyperparser	verbosityr   )stringkeywordr   Zidlelibr   rK   ascii_lettersdigitsr   r   r!   r:   r=   r   rH   Zunittestmainr   r   r   r
   <module>   s    