B YI~dS2�@s�ddlmZddlZddlmZeejejd�Zeejd�Z dd�e d�D�Z dd�e d�D�Z Gd d �d �Z ed kr�dd lmZed dd�dS)�)� iskeywordN)�pyparse�_cCsg|]}t|�tk�qS�)�chr�_ASCII_ID_CHARS)�.0�xrr�8/opt/alt/python37/lib64/python3.7/idlelib/hyperparser.py� sr �cCsg|]}t|�tk�qSr)r�_ASCII_ID_FIRST_CHARS)rr rrr r sc@s\eZdZdd�Zdd�Zdd�Zdd�Zdd d �Zed ddh�Z e dd��Z dZ dd�Z dS)� HyperParserc sJ|�_|j�_}t�|j|j�}dd�}||�|��}|js�xh|jD]^}t ||d�}t |�d} d|} |� |� | | �d�|� |�| ��} | dk s�|dkrFPqFW|�| p�d�nF|�d|�} | r�| d} nd } d|} |� |� | | �d�|�d�|jdd ��_| �_|���_�fd d �tt�j��D��_��|�dS) NcSs tt|��S)N)�int�float)�indexrrr � index2line"sz(HyperParser.__init__..index2line�z.0z%d.endz rZconsolez1.0�����cs4g|],}|dko.�j|d�j|ddk�qS)rr)� bracketing)r�i)�selfrr r Ksz(HyperParser.__init__..)�editwin�textrZParserZ indentwidthZtabwidthrZprompt_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) rrrr�parserrZlno�contextZstartatZ startatindexrZbod�rr)rr �__init__s:         zHyperParser.__init__cCs�t|j�t|j�||j��}|dkr2td|��||_d|_x@|jt|j�dkr~|j|jdd|jkr~|jd7_q@W|jt|j�dkr�|j|jdd|jkr�|j |jds�|jd7_dS)Nrz(Index %s precedes the analyzed statementr) r!rrrr� ValueError�indexinrawtext� indexbracketrr")rrr)rrr r#QszHyperParser.set_indexcCs&|j|jo$|j|j|jddkS)Nr)�"�')r"r*rr)rrrr � is_in_stringfs zHyperParser.is_in_stringcCs(|j|j p&|j|j|jddkS)Nr)�#r+r,)r"r*rr)rrrr � is_in_codenszHyperParser.is_in_code�([{FcCsL|j|jd}|j}x`|j|rL|j|j|d|ksL|j|d|krv|d8}|dkr`dSt||j|d�}qW|jd}x,|t|j�kr�|j|d|kr�|d7}q�W|j�d|jt|j�|j|df�}|t|j�k�s|j|dt|j�k�r|�rdS|j}n.|j�d|jt|j�|j|ddf�}||fS)Nrrz%s-%dc) rr*r"r�minr!rrr)rZopenersZ mustcloseZbracketinglevelZbeforeZafterZ beforeindexZ afterindexrrr �get_surrounding_bracketsts0    ""z$HyperParser.get_surrounding_brackets�True�False�NonecCsdt}|}x<||krDt||d�dkrD|t||d�rD|d8}q W||k�rt||d�dk�rx0|d|kr�d||d|���r�|d8}qhW|d|kr�d||d|���r�|d8}|d|kr�d||d|���r�|d8}|||����s(dSn ||k�r(tt||��s(dS||k�r\t|||���r\|||�|jk�r\dS||S)Nrr ��a�r)�_IS_ASCII_ID_CHAR�ord� isidentifier�_IS_ASCII_ID_FIRST_CHARr� _ID_KEYWORDS)�cls�str�limit�posZis_ascii_id_charrrrr �_eat_identifier�s.   & $$  zHyperParser._eat_identifierz \c Cs�|��std��|j}|j}|j}||d}|j}|}d}�x�x�||krf||d|jkrf|d8}qB|s�||kr�||ddkr�|d8}d}qB||kr�|dkr�|||dddkr�|d8}||d}||dd}qBPqBW|s�P|�|||�}|�r||}|}d}q@||k�r�||d} x.|dk�rT||dd| k�rT|d8}�q(W||d|k�rjP||d}|d8}||d}|}||d k�r�n@||d k�r�x*|dk�r�||dd k�r�|d8}�q�W|}Pq@Pq@W|||j�S) Nz?get_expression should only be called if index is inside a code.rTr�.r.r8Fz([z'"ZrRbBuU)r/r(rrr*r)�_whitespace_charsrB) rrrZ brck_indexZ brck_limitrAZlast_identifier_posZ postdot_phase�ret�levelrrr �get_expression�sb     "  zHyperParser.get_expressionN)r0F)�__name__� __module__� __qualname__r'r#r-r/r2� frozensetr=� classmethodrBrDrGrrrr rs7 , :r�__main__)�mainz"idlelib.idle_test.test_hyperparserr8)� verbosity)�keywordr�stringZidlelibrrKZ ascii_letters�digitsrr r r9r<rrHZunittestrNrrrr �s