
    z%i,                         	 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j%                          edk(  rd dlmZ  eddd       yy)    N)maxsize)FrameTextTclError)NSEWSUNKEN)idleConf>   ifdeffortryelifelsewithasyncclasswhileexceptfinallyz^(\s*)(\w*)c                 B    	 |j                  |       j                         S N)matchgroups)codelinecs     G/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/idlelib/codecontext.pyget_spaces_firstwordr      s    D778##%%    c                     	 t        |       \  }}t        |      }t        |       |k(  s| |   dk(  rt        }|t        v xr |}|| |fS )N#)r   lenINFINITYBLOCKOPENERS)r   spaces	firstwordindentopeners        r   get_line_infor(      sZ    
 -X6FI[F
8}(6"2c"9,&49F8V##r   c                   d    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y)CodeContextd   c                 V    	 || _         |j                  | _        | j                          y r   )editwintext_reset)selfr-   s     r   __init__zCodeContext.__init__1   s$    	  LL	r   c                 L    d | _         d | _        d | _        d| _        dg| _        y )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      | _        y )N
extensionsr*   maxlinesint   )typedefault)r	   	GetOptioncontext_depth)clss    r   reloadzCodeContext.reloadM   s$    +$..|]/979;r   c                     	 | j                   .	 | j                  j                  | j                          d | _         y y # t        $ r Y w xY wr   )r8   r.   after_cancelr   r;   s    r   __del__zCodeContext.__del__T   sL    "77		&&tww/ DG   s   %= 	A	A	Nc           
      @   	 | j                   | j                  j                  | j                  j                  f}d}d}|D ]  }|| j                  j                  u r|j	                         n|j                         }||j                  j                  |d         z  }||j                  j                  |j                  d            z  }||j                  j                  |j                  d            z  } t        | j                  j                  ddd||t        d      x}| _         | j                          | j                          |j                  d| j                         | j                          |j!                  ddt"               t%        j&                  t%        j(                         d	      }t+        | j                  j                  |d
         | _        | j,                  j!                  ddt"               d}	ny| j                   j/                          d | _         | j,                  j/                          d | _        | j                  j1                  | j2                         | j5                          d}	| j                  j7                  dd|	 d       y)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=   	 << ll'')@)@@GDF! B!T\\%6%66 ((*#--/  		((f66		((V)<==&))**6;;x+@AAB &*''#$&z&K KGdl ((*LL,doo>LLQqL6!)!6!6x7L7L7N7C"E 7 7+=l+KMDKKK1T: KLL  "DLKK!DKII""477+KKM K&&I]0;}M-J 	' 	Lr   c                 :   	 g }t         }t        ||dz
  d      D ]l  }| j                  j                  | d| d      }t	        |      \  }}	}
||k  s:|}|
dv r|dz  }|
r||k  r||k\  r|j                  |||	|
f       ||k  sl n |j                          ||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yy}}y^y5EFH#0#: FD&
"#
--!OJg66Z;OLL'64!@A+	 	j  r   c                    	 | j                   j                  d      }| j                  |k(  ry | j                  |k  rX| j                  || j                        \  }}| j                  d   d   |k\  r| j                  d= | j                  d   d   |k\  r#n| j                  d   d   dz   }| j                  d   d   |k\  r5| j                  d   d   }| j                  d= | j                  d   d   |k\  r5| j                  || j                  d   d   dz   |      \  }}| j                  j                  |       || _        | j                  | j                   d  D cg c]  }|d   	 }}|d   rdnd}t        |      |z
  | j                  d<   d| j                  d<   | j                  j                  d	d
       | j                  j                  d
dj                  ||d               d| j                  d<   y c c}w )Nz@0,0r4   r3   r      rN   normalrR   z1.0end
rM   )r-   	getlinenor9   r   r:   extendrD   r!   r6   deleteinsertjoin)r0   r}   r   r   r   xcontext_strings	showfirsts           r   update_code_contextzCodeContext.update_code_context   s   	 //7??n,??^+ $ 0 015!BE: ))B-"j0IIbM ))B-"j0 2q)A-J ))B-"n4!YYr]1-
IIbM ))B-"n4 !% 0 0152q1A!1C1;!=E: 			()-D4F4F3F3G)HIA1Q4II(+A	!$_!5	!AX (WE5)E499_YZ-H#IJ *W Js   G5c                    	 	 | j                   j                  d       y # t        $ r t        | j                        }|dk(  rd}n^t        t        | j                   j                  d                  }t        d|| j                  z
        dz
  }| j                  ||z      d   }| j                  j                  | d       | j                          Y y 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    	
	'LL{+ 	'		NEz "%(:(:8(D"EFQ(:(: :;a?6K#78;IIOOvhbM*$$&	's    B2CCc                     	 | j                   F| j                          | j                  j                  | j                  | j
                        | _        y y r   )r6   r   r.   afterUPDATEINTERVALrk   r8   r;   s    r   rk   zCodeContext.timer_event   sB    H<<#$$&iiood&9&94;K;KLDG $r   c                 ~    | j                   1t        j                  | j                  dd      }|| j                   d<   y y )NmainEditorWindowfont)r6   r	   GetFontr.   )r0   r   s     r   rg   zCodeContext.update_font   s7    <<###DIIv~FD#'DLL  $r   c                 \   | j                   Lt        j                  t        j                         d      }|d   | j                   d<   |d   | j                   d<   | j                  Ht        j                  t        j                         d      }| j                  j                  |d          y y )Nr6   rW   
foregroundrV   rX   )r6   r	   rm   rn   r7   config)r0   colorsrt   s      r   rh   z#CodeContext.update_highlight_colors   s    <<#**8+@+@+BINF)/)=DLL&)/)=DLL&;;"!)!6!6x7L7L7N7C"EKK"4\"BC #r   r   )r3   r   )__name__
__module____qualname__r   r1   r/   classmethodrF   rI   rv   r   r   rj   rk   rg   rh    r   r   r*   r*   -   sT    2N*) ; ;6p!<&+P'*M(
	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      s{    
 # ) ) * #> &0RZZ%? &
$WD WDt     z	-G r   