<!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>
B
    YI~d>,                 @   s   d dl Z d dlmZ d dlZd dlmZmZ d dlm	Z	 ddddd	d
ddddddhZ
e dfddZdd ZG dd dZe  edkrd dlmZ edddd dS )    N)maxsize)NSEWSUNKEN)idleConfclassdefifelifelsewhilefortryexceptfinallywithasyncz^(\s*)(\w*)c             C   s   | |  S )N)matchgroups)codelinec r   8/opt/alt/python37/lib64/python3.7/idlelib/codecontext.pyget_spaces_firstword   s    r   c             C   sF   t | \}}t|}t| |ks,| | dkr0t}|tko:|}|| |fS )N#)r   lenINFINITYBLOCKOPENERS)r   ZspacesZ	firstwordindentopenerr   r   r   get_line_info   s    r   c               @   sr   e Zd ZdZdd Zdd Zedd Zdd	 ZdddZ	dddZ
dd ZdddZdd Zdd Zdd Zd
S )CodeContextd   c             C   s   || _ |j| _|   d S )N)editwintext_reset)selfr"   r   r   r   __init__.   s    zCodeContext.__init__c             C   s$   d | _ d | _d | _d| _dg| _d S )N   )r    F)contextcell00t1
topvisibleinfo)r%   r   r   r   r$   C   s
    zCodeContext._resetc             C   s   t jdddddd| _d S )N
extensionsr    Zmaxlinesint   )typedefault)r   Z	GetOptioncontext_depth)clsr   r   r   reloadJ   s    zCodeContext.reloadc             C   s>   | j d k	r:y| j| j  W n tjk
r2   Y nX d | _ d S )N)r,   r#   after_canceltkinterTclError)r%   r   r   r   __del__Q   s    
zCodeContext.__del__Nc       
   
   C   s~  | j d kr(| jj| jjf}d}d}xh|D ]`}|| jjkrB| n| }||j|d 7 }||j|d7 }||j|d7 }q*W t	j
| jjddd||tdd }| _ |   |   |d| j |   |jddtd tt d	}t	j| jj|d
 d| _| jjddtd d}	n:| j   d | _ | j  d | _| j| j |   d}	| jjdd|	 dd dS )Nr   padxborderr'   disabled)heightwidthZhighlightthicknessr;   r<   Zreliefstatez<ButtonRelease-1>)rowcolumnZsticky
linenumber
background)bgZHideZShowoptionsz* Code Contextz Code Context)ZmenuindexZlabelbreak)r*   r"   r#   Z
text_frameZ	grid_infoZ	pack_infoZtkZgetintZcgetr8   ZTextr   update_fontupdate_highlight_colorsZbind
jumptolinetimer_eventZgridr   r   GetHighlightCurrentThemeZFramer+   Zdestroyr7   r,   r$   Zupdate_menu_label)
r%   eventZwidgetsr;   r<   Zwidgetr.   r*   line_number_colorsZmenu_statusr   r   r   toggle_code_context_eventZ   sJ    





z%CodeContext.toggle_code_context_eventr'   r   c             C   s   g }t }xt||d dD ]x}| j| d| d}t|\}}	}
||k r|}|
dkrb|d7 }|
r||k r||kr||||	|
f ||krP qW |  ||fS )Nr'   r(   z.0z.end)r
   r	   )r   ranger#   getr   appendreverse)r%   new_topvisibleZstopline
stopindentlines
lastindentZlinenumr   r   r#   r   r   r   r   get_context   s    
zCodeContext.get_contextc             C   sJ  | j d}| j|krd S | j|k rX| || j\}}x| jd d |krT| jd= q8W n`| jd d d }x,| jd d |kr| jd d }| jd= qlW | || jd d d |\}}| j| || _dd | j| j d  D }|d rdnd}t|| | jd< d| jd	< | j	d
d | j
dd||d   d| jd	< d S )Nz@0,0r(   r'   r   c             S   s   g | ]}|d  qS )   r   ).0xr   r   r   
<listcomp>   s    z3CodeContext.update_code_context.<locals>.<listcomp>r>   Znormalr@   z1.0end
r=   )r"   Z	getlinenor-   rZ   r.   extendr4   r   r*   deleteinsertjoin)r%   rV   rX   rY   rW   Zcontext_stringsZ	showfirstr   r   r   update_code_context   s0    



zCodeContext.update_code_contextc             C   s   y| j d W n tjk
r   t| j}|dkr:d}n:tt| j d}td|| j	 d }| j||  d }| j
| d |   Y nX d S )Nz	sel.firstr'   rc   r   z.0)r*   rG   r8   r9   r   r.   r0   floatmaxr4   r#   Zyviewre   )r%   rO   rX   ZnewtopZcontextlineoffsetr   r   r   rK      s    
zCodeContext.jumptolinec             C   s*   | j d k	r&|   | j| j| j| _d S )N)r*   re   r#   ZafterUPDATEINTERVALrL   r,   )r%   r   r   r   rL      s    
zCodeContext.timer_eventc             C   s(   | j d k	r$t| jdd}|| j d< d S )NmainZEditorWindowfont)r*   r   ZGetFontr#   )r%   rk   r   r   r   rI      s    
zCodeContext.update_fontc             C   sf   | j d k	r6tt d}|d | j d< |d | j d< | jd k	rbtt d}| jj|d d d S )Nr*   rD   Z
foregroundrC   )rE   )r*   r   rM   rN   r+   Zconfig)r%   ZcolorsrP   r   r   r   rJ      s    


z#CodeContext.update_highlight_colors)N)r'   r   )N)__name__
__module____qualname__ri   r&   r$   classmethodr6   r:   rQ   rZ   re   rK   rL   rI   rJ   r   r   r   r   r    *   s   	
8
(
r    __main__)rj   z"idlelib.idle_test.test_codecontextr[   F)	verbosityexit)resysr   r   r8   Ztkinter.constantsr   r   Zidlelib.configr   r   compiler   r   r    r6   rl   Zunittestrj   r   r   r   r   <module>   s    [