B
� fS2 � @ s� d Z ddlmZ ddlZddlmZ eejej d �Z eejd �Z
dd� ed�D �Zd d� ed�D �Z
G d
d� d�Zedkr�dd
lmZ eddd� dS )z�Provide advanced parsing abilities for ParenMatch and other extensions.
HyperParser uses PyParser. PyParser mostly gives information on the
proper indentation of code. HyperParser gives additional information on
the structure of code.
� )� iskeywordN)�pyparse�_c C s g | ]}t |�tk�qS � )�chr�_ASCII_ID_CHARS)�.0�xr r �8/opt/alt/python37/lib64/python3.7/idlelib/hyperparser.py�
s r � c C s g | ]}t |�tk�qS r )r �_ASCII_ID_FIRST_CHARS)r r r r r
r s c @ s\ e Zd Zdd� Zdd� Zdd� Zdd� Zddd�Zed
ddh�Z e
dd� �ZdZdd� Z
dS )�HyperParserc
sJ |� _ |j � _}t�|j|j�}dd� }||�|��}|js�xh|jD ]^}t || d�}t
|�d } d| }
|�|�| |
�d � |�
|�| ��}|dk s�|dkrFP qFW |�|p�d� nF|�d |�}|r�|d } nd
} d| }
|�|�| |
�d � |�d� |jdd� � _|
� _|�� � _� fdd
�tt� j��D �� _� �|� dS )z;To initialize, analyze the surroundings of the given index.c S s t t| ��S )N)�int�float)�indexr r r
�
index2line" s z(HyperParser.__init__..index2line� z.0z%d.endz
Nr Zconsolez1.0�����c s4 g | ],}|d ko.� j | d � j |d d k�qS )r r )�
bracketing)r �i)�selfr r
r K s z(HyperParser.__init__..)�editwin�textr ZParserZindentwidthZtabwidthr Zprompt_last_lineZnum_context_lines�max�reprZset_code�getZfind_good_parse_startZ_build_char_in_string_funcZset_loZ
tag_prevrange�code�rawtext�stopatindexZget_last_stmt_bracketingr �range�len�isopener� set_index)
r r r r �parserr Zlno�contextZstartatZstartatindexr Zbod�rr )r r
�__init__ s:
zHyperParser.__init__c C s� t | j�t | j�|| j�� }|dk r2td| ��|| _d| _x@| jt | j�d k r~| j| jd d | jk r~| jd7 _q@W | jt | j�d k r�| j| jd d | jkr�| j | jd s�| jd7 _dS )zgSet the index to which the functions relate.
The index must be in the same statement.
r z(Index %s precedes the analyzed statementr N)
r! r r r r �
ValueError�indexinrawtext�indexbracketr r" )r r r) r r r
r# Q s zHyperParser.set_indexc C s&