
    ;e,                         	 d dl Z d dlmZ d dlmZmZmZ d dlm	Z	m
Z
 d dlmZ h dZ e j        d          fdZd	 Z G d
 d          Ze                                 edk    rd dlmZ  eddd           dS dS )    N)maxsize)FrameTextTclError)NSEWSUNKEN)idleConf>   ifdeffortryelifelsewithasyncclasswhileexceptfinallyz^(\s*)(\w*)c                 R    	 |                     |                                           S N)matchgroups)codelinecs     */usr/lib/python3.11/idlelib/codecontext.pyget_spaces_firstwordr      s#    D778##%%%    c                     	 t          |           \  }}t          |          }t          |           |k    s| |         dk    rt          }|t          v o|}|| |fS )N#)r   lenINFINITYBLOCKOPENERS)r   spaces	firstwordindentopeners        r   get_line_infor(      sg    
 -X66FI[[F
8}}(6"2c"9"9,&49F8V##r   c                   l    e Zd Z	 dZd Zd Zed             Zd ZddZ	dd
Z
d ZddZd Zd Zd ZdS )CodeContextd   c                 V    	 || _         |j        | _        |                                  d S r   )editwintext_reset)selfr-   s     r   __init__zCodeContext.__init__1   s*    	  L	r   c                 N    d | _         d | _        d | _        d| _        dg| _        d S )N   )r    F)contextcell00t1
topvisibleinfor0   s    r   r/   zCodeContext._resetF   s,    '(			r   c                 D    	 t          j        ddddd          | _        d S )N
extensionsr*   maxlinesint   )typedefault)r	   	GetOptioncontext_depth)clss    r   reloadzCodeContext.reloadM   s1    +$.|]/979; ; ;r   c                     	 | j         :	 | j                            | j                    n# t          $ r Y nw xY wd | _         d S d S r   )r8   r.   after_cancelr   r;   s    r   __del__zCodeContext.__del__T   s`    "7	&&tw////   DGGG s   * 
77Nc           
         	 | j         | j        j        | j        j        f}d}d}|D ]}|| j        j        u r|                                n|                                }||j                            |d                   z  }||j                            |                    d                    z  }||j                            |                    d                    z  }t          | j        j        ddd||t          d          x}| _         |                                  |                                  |                    d| j                   |                                  |                    ddt"                     t%          j        t%          j                    d	          }t+          | j        j        |d
                   | _        | j                            ddt"                     d}	nu| j                                          d | _         | j                                         d | _        | j                            | j                   |                                  d}	| j                            dd|	 d           dS )Nr   padxborderr3   disabled)heightwidthhighlightthicknessrK   rL   reliefstatez<ButtonRelease-1>)rowcolumnsticky
linenumber
backgroundbgHideShowoptionsz*ode*ontextz Code Context)menuindexlabelbreak)r6   r-   r.   
text_frame	grid_info	pack_infotkgetintcgetr   r   update_fontupdate_highlight_colorsbind
jumptolinetimer_eventgridr   r	   GetHighlightCurrentThemer   r7   destroyrH   r8   r/   update_menu_label)
r0   eventwidgetsrK   rL   widgetr:   r6   line_number_colorsmenu_statuss
             r   toggle_code_context_eventz%CodeContext.toggle_code_context_event]   s   	 < l')@@GDF! B B!T\%666 ((***#--//  	((f666	((V)<)<===&)**6;;x+@+@AAA%)'#$&z&K &K &K KGdl ((***LL,do>>>LLQqL666!)!6x7L7N7N7C"E "E 7+=l+KM M MDKK1T::: KKL  """DLK!!!DKI""47+++KKMMM K&&I]0;-J-J-J 	' 	L 	L 	Lwr   r3   r   c                 \   	 g }t           }t          ||dz
  d          D ]v}| j                            | d| d          }t	          |          \  }}	}
||k     r:|}|
dv r|dz  }|
r%||k     r||k    r|                    |||	|
f           ||k    r nw|                                 ||fS )Nr3   r4   .0z.end)r   r   )r"   ranger.   getr(   appendreverse)r0   new_topvisiblestopline
stopindentlines
lastindentlinenumr   r&   r.   r'   s              r   get_contextzCodeContext.get_context   s    	 
 ^XaZ<< 	 	Gy}}^^^5E5E5EFFH#0#:#: FD&
""#
---!OJ Bg666Z;O;OLL'64!@AAA++Ej  r   c                    	 | j                             d          }| j        |k    rd S | j        |k     rU|                     || j                  \  }}| j        d         d         |k    r| j        d= | j        d         d         |k    n| j        d         d         dz   }| j        d         d         |k    r2| j        d         d         }| j        d= | j        d         d         |k    2|                     || j        d         d         dz   |          \  }}| j                            |           || _        d | j        | j         d          D             }|d         rdnd}t          |          |z
  | j        d<   d| j        d<   | j        	                    d	d
           | j        
                    d
d                    ||d                               d| j        d<   d S )Nz@0,0r4   r3   r   c                     g | ]
}|d          S )    ).0xs     r   
<listcomp>z3CodeContext.update_code_context.<locals>.<listcomp>   s    IIIA1Q4IIIr   rN   normalrR   z1.0end
rM   )r-   	getlinenor9   r   r:   extendrD   r!   r6   deleteinsertjoin)r0   r}   r   r   r   context_strings	showfirsts          r   update_code_contextzCodeContext.update_code_context   s   	 //77?n,,F?^++ $ 0 015!B !BE: )B-"j00IbM )B-"j00 2q)A-J )B-"n44!Yr]1-
IbM )B-"n44 !% 0 0152q1A!1C1;!= !=E: 		(IID4F3F3G3G)HIII(+2AA	!$_!5!5	!AX (WE5)))E499_YZZ-H#I#IJJJ *Wr   c                    	 	 | j                             d           d S # t          $ r t          | j                  }|dk    rd}net          t          | j                             d                              }t          d|| j        z
            dz
  }| j        ||z            d         }| j	        
                    | d           |                                  Y d S w xY w)Nz	sel.firstr3   r   r   rx   )r6   r^   r   r!   r:   r?   floatmaxrD   r.   yviewr   )r0   rq   r   newtopcontextlineoffsets         r   rj   zCodeContext.jumptoline   s    	
	'L{+++++ 	' 	' 	'	NNEzz "%(:(:8(D(D"E"EFFQ(: :;;a?6K#78;IOOvMMM***$$&&&&&&	's    B=C C c                     	 | j         @|                                  | j                            | j        | j                  | _        d S d S r   )r6   r   r.   afterUPDATEINTERVALrk   r8   r;   s    r   rk   zCodeContext.timer_event   sH    H<#$$&&&iood&94;KLLDGGG $#r   c                 b    | j         't          j        | j        dd          }|| j         d<   d S d S )NmainEditorWindowfont)r6   r	   GetFontr.   )r0   r   s     r   rg   zCodeContext.update_font   s:    <##DIv~FFD#'DL    $#r   c                 @   | j         Ft          j        t          j                    d          }|d         | j         d<   |d         | j         d<   | j        It          j        t          j                    d          }| j                            |d                    d S d S )Nr6   rW   
foregroundrV   rX   )r6   r	   rm   rn   r7   config)r0   colorsrt   s      r   rh   z#CodeContext.update_highlight_colors   s    <#*8+@+B+BINNF)/)=DL&)/)=DL&;"!)!6x7L7N7N7C"E "EK"4\"BCCCCC #"r   r   )r3   r   )__name__
__module____qualname__r   r1   r/   classmethodrF   rI   rv   r   r   rj   rk   rg   rh   r   r   r   r*   r*   -   s        2N  *) ) ) ; ; [;  6 6 6 6p! ! ! !<&+ &+ &+P' ' ' '*M M M( ( (
	D 	D 	D 	D 	Dr   r*   __main__)r   z"idlelib.idle_test.test_codecontextr   F)	verbosityexit)resysr   r"   tkinterr   r   r   tkinter.constantsr   r   idlelib.configr	   r#   compiler   r(   r*   rF   r   unittestr   r   r   r   <module>r      sF   
			 # # # # # # ) ) ) ) ) ) ) ) ) ) * * * * * * * * # # # # # #> > > &0RZ%?%? & & & &
$ $ $WD WD WD WD WD WD WD WDt       zD	-GGGGGG r   