<!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>
3
2aR2                 @   s   d dl mZ d dl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G d	d
 d
Zedkrd dlmZ eddd dS )    )	iskeywordN)pyparse_c             C   s   g | ]}t |tkqS  )chr_ASCII_ID_CHARS).0xr   r   0/opt/alt/python36/lib64/python3.6/hyperparser.py
<listcomp>   s    r      c             C   s   g | ]}t |tkqS r   )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ZedddhZ	e
dd ZdZdd ZdS )HyperParserc                sJ  | _ |j  _}tj|j|j}dd }||j|}|jsxh|jD ]^}t	|| d}t
|d }	d| }
|j|j|	|
d  |j|j|	}|d k	s|dkrFP qFW |j|pd nF|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                s4   g | ],}|d ko. j | d  j |d  d kqS )r   r   )
bracketing)r   i)selfr   r
   r   K   s   z(HyperParser.__init__.<locals>.<listcomp>)editwintextr   ZParserZindentwidthZtabwidthr   Zcontext_use_ps1Znum_context_linesmaxreprZset_codegetZfind_good_parse_startZ_build_char_in_string_funcZset_loZtag_prevrangecoderawtextstopatindexZget_last_stmt_bracketingr   rangelenisopener	set_index)r   r   r   r   parserr   Z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 r2td| || _d| _x@| 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$   Q   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_stringf   s    zHyperParser.is_in_stringc             C   s(   | j | j  p&| j| j| j d  dkS )Nr   #r,   r-   )r/   r,   r-   )r#   r+   r   r   )r   r   r   r
   
is_in_coden   s    zHyperParser.is_in_code([{Fc             C   sN  | j | j d }| j}xb| j|  sN| j| j | d  |ksN| j | d |krx|d8 }|dk rbd S t|| j | d }qW | jd }x,|t| j k r| j | d |kr|d7 }qW | jjd| jt| j| j | d  f }|t| j ks| j | d t| jkr|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_bracketst   s0    
""z$HyperParser.get_surrounding_bracketsTrueFalseNonec             C   sb  t }|}x<||krDt||d  dk rD|t||d   rD|d8 }q
W ||ko`t||d  dkrx0|d |krd||d |  j r|d8 }qfW |d |krd||d |  j r|d8 }|d |krd||d |  j r|d8 }||| j s&dS n ||k r&tt||  s&dS ||k rZt||| rZ||| | jkrZdS || S )Nr   r      ar   r   )_IS_ASCII_ID_CHARordisidentifier_IS_ASCII_ID_FIRST_CHARr   _ID_KEYWORDS)clsstrlimitposZis_ascii_id_charr   r   r   r
   _eat_identifier   s.    
&$$

zHyperParser._eat_identifierz 	
\c       
      C   s  | j  std| j}| j}| j}|| d }| j}|}d}xx||krf||d  | jkrf|d8 }qB| r||kr||d  dkr|d8 }d}qB||kr|dkr|||d  d  dkr|d8 }|| d }||d  d }qBP qBW |sP | j|||}|r|| }|}d}q@||kr|| d }	x.|dkrV||d  d |	krV|d8 }q*W || d |krlP || d }|d8 }|| d }|}|| d	krn@|| d
krx*|dkr||d  dkr|d8 }qW |}P q@P q@W ||| j S )Nz?get_expression should only be called if index is inside a code.r   Tr   .r/   r   Fz([z'"ZrRbBuU)r0   r)   r   r   r+   r*   _whitespace_charsrC   )
r   r   r   Z
brck_indexZ
brck_limitrB   Zlast_identifier_posZpostdot_phaseretlevelr   r   r
   get_expression   sb    

"zHyperParser.get_expressionN)r1   F)__name__
__module____qualname__r(   r$   r.   r0   r4   	frozensetr>   classmethodrC   rE   rH   r   r   r   r
   r      s   7
,:r   __main__)mainz"idlelib.idle_test.test_hyperparserr   )	verbosity)keywordr   stringZidlelibr   rL   Zascii_lettersdigitsr   r   r!   r:   r=   r   rI   ZunittestrO   r   r   r   r
   <module>   s     