B YI~d>,� @s�ddlZddlmZddlZddlmZmZddlm Z ddddd d d d d dddh Z e� d�fdd�Z dd�Z Gdd�d�Ze��edkr�ddlmZedddd�dS)�N)�maxsize)�NSEW�SUNKEN)�idleConf�class�def�if�elif�else�while�for�try�except�finally�with�asyncz ^(\s*)(\w*)cCs|�|���S)N)�match�groups)�codeline�c�r�8/opt/alt/python37/lib64/python3.7/idlelib/codecontext.py�get_spaces_firstwordsrcCsFt|�\}}t|�}t|�|ks,||dkr0t}|tko:|}|||fS)N�#)r�len�INFINITY� BLOCKOPENERS)rZspacesZ firstword�indent�openerrrr� get_line_infos   rc@sreZdZdZdd�Zdd�Zedd��Zdd �Zdd d �Z ddd�Z dd�Z ddd�Z dd�Z dd�Zdd�Zd S)� CodeContext�dcCs||_|j|_|��dS)N)�editwin�text�_reset)�selfr"rrr�__init__.szCodeContext.__init__cCs$d|_d|_d|_d|_dg|_dS)N�)r������F)�context�cell00�t1� topvisible�info)r%rrrr$Cs zCodeContext._resetcCstjdddddd�|_dS)N� extensionsr Zmaxlines�int�)�type�default)rZ GetOption� context_depth)�clsrrr�reloadJszCodeContext.reloadcCs>|jdk r:y|j�|j�Wntjk r2YnXd|_dS)N)r,r#� after_cancel�tkinter�TclError)r%rrr�__del__Qs  zCodeContext.__del__Nc Cs~|jdk�r(|jj|jjf}d}d}xh|D]`}||jjkrB|��n|��}||j�|d�7}||j�|�d��7}||j�|�d��7}q*Wt j |jjddd||t dd�}|_|� �|� �|�d|j�|��|jddtd�t�t��d �}t j|jj|d d �|_|jjddtd�d } n:|j��d|_|j��d|_|j�|j�|��d } |jjdd| �d�d�dS)Nr�padx�borderr'�disabled)�height�widthZhighlightthicknessr;r<Zrelief�statez)�row�columnZsticky� linenumber� background)�bgZHideZShow�optionsz* Code Contextz Code Context)Zmenu�indexZlabel�break)r*r"r#Z text_frameZ grid_infoZ pack_infoZtkZgetintZcgetr8ZTextr� update_font�update_highlight_colorsZbind� jumptoline� timer_eventZgridrr� GetHighlight� CurrentThemeZFramer+Zdestroyr7r,r$Zupdate_menu_label) r%�eventZwidgetsr;r<Zwidgetr.r*�line_number_colorsZ menu_statusrrr�toggle_code_context_eventZsJ       z%CodeContext.toggle_code_context_eventr'rc Cs�g}t}x�t||dd�D]x}|j�|�d�|�d��}t|�\}} } ||kr|}| dkrb|d7}| r�||kr�||kr�|�||| | f�||krPqW|��||fS)Nr'r(z.0z.end)r r )r�ranger#�getr�append�reverse) r%�new_topvisibleZstopline� stopindent�lines� lastindentZlinenumrrr#rrrr� get_context�s zCodeContext.get_contextcCsJ|j�d�}|j|krdS|j|krX|�||j�\}}x�|jdd|krT|jd=q8Wn`|jddd}x,|jdd|kr�|jdd}|jd=qlW|�||jddd|�\}}|j�|�||_dd�|j|j d�D�}|dr�dnd}t|�||jd<d|jd <|j� d d �|j� d d � ||d���d |jd <dS)Nz@0,0r(r'rcSsg|] }|d�qS)�r)�.0�xrrr� �sz3CodeContext.update_code_context..r>Znormalr@z1.0�end� r=) r"Z getlinenor-rZr.�extendr4rr*�delete�insert�join)r%rVrXrYrWZcontext_stringsZ showfirstrrr�update_code_context�s0        zCodeContext.update_code_contextcCs�y|j�d�Wn�tjk r�t|j�}|dkr:d}n:tt|j�d���}td||j �d}|j||d}|j � |�d��|� �YnXdS)Nz sel.firstr'rcrz.0) r*rGr8r9rr.r0�float�maxr4r#Zyviewre)r%rOrXZnewtopZ contextline�offsetrrrrK�s zCodeContext.jumptolinecCs*|jdk r&|��|j�|j|j�|_dS)N)r*rer#Zafter�UPDATEINTERVALrLr,)r%rrrrL�s zCodeContext.timer_eventcCs(|jdk r$t�|jdd�}||jd<dS)N�mainZ EditorWindow�font)r*rZGetFontr#)r%rkrrrrI�s zCodeContext.update_fontcCsf|jdk r6t�t��d�}|d|jd<|d|jd<|jdk rbt�t��d�}|jj|dd�dS)Nr*rDZ foregroundrC)rE)r*rrMrNr+Zconfig)r%ZcolorsrPrrrrJ�s   z#CodeContext.update_highlight_colors)N)r'r)N)�__name__� __module__� __qualname__rir&r$� classmethodr6r:rQrZrerKrLrIrJrrrrr *s  8 ( r �__main__)rjz"idlelib.idle_test.test_codecontextr[F)� verbosity�exit)�re�sysrrr8Ztkinter.constantsrrZidlelib.configrr�compilerrr r6rlZunittestrjrrrr� s  [