
    .hh,                         S SK r S SKJr  S SKJrJrJr  S SKJ	r	J
r
  S SKJr  1 Skr\ R                  " S5      4S jrS	 r " S
 S5      r\R%                  5         \S:X  a  S SKJr  \" SSSS9  gg)    N)maxsize)FrameTextTclError)NSEWSUNKEN)idleConf>   ifdeffortryelifelsewithasyncclasswhileexceptfinallyz^(\s*)(\w*)c                 @    UR                  U 5      R                  5       $ N)matchgroups)codelinecs     </opt/python-3.13.8/usr/lib/python3.13/idlelib/codecontext.pyget_spaces_firstwordr      s    778##%%    c                     [        U 5      u  p[        U5      n[        U 5      U:X  d  X   S:X  a  [        nU[        ;   =(       a    UnX0U4$ )N#)r   lenINFINITYBLOCKOPENERS)r   spaces	firstwordindentopeners        r   get_line_infor(      sO     -X6F[F
8}("2c"9,&49FV##r   c                   p    \ rS rSrSrS rS r\S 5       rS r	SS jr
SS	 jrS
 rSS jrS rS rS rSrg)CodeContext-   d   c                 R    Xl         UR                  U l        U R                  5         g r   )editwintext_reset)selfr.   s     r   __init__CodeContext.__init__1   s    " LL	r   c                 L    S U l         S U l        S U l        SU l        S/U l        g )N   )r    F)contextcell00t1
topvisibleinfor1   s    r   r0   CodeContext._resetF   s(    '(	r   c                 >    [         R                  " SSSSSS9U l        g )N
extensionsr*   maxlinesint   )typedefault)r	   	GetOptioncontext_depth)clss    r   reloadCodeContext.reloadM   s#     %..|]/979;r   c                     U R                   b.   U R                  R                  U R                   5        S U l         g g ! [         a     Nf = fr   )r:   r/   after_cancelr   r=   s    r   __del__CodeContext.__del__T   sI    77		&&tww/ DG   s   %= 
A
	A
Nc                     U R                   Gc  U R                  R                  U R                  R                  4nSnSnU H  nXPR                  R                  L a  UR	                  5       OUR                  5       nX5R                  R                  US   5      -  nX5R                  R                  UR                  S5      5      -  nXER                  R                  UR                  S5      5      -  nM     [        U R                  R                  SSSX4[        SS9=opl         U R                  5         U R                  5         UR                  SU R                  5        U R                  5         UR!                  SS["        S9  [$        R&                  " [$        R(                  " 5       S	5      n[+        U R                  R                  US
   S9U l        U R,                  R!                  SS["        S9  Sn	OyU R                   R/                  5         S U l         U R,                  R/                  5         S U l        U R                  R1                  U R2                  5        U R5                  5         Sn	U R                  R7                  SSU	 S3S9  g)Nr   padxborderr5   disabled)heightwidthhighlightthicknessrP   rQ   reliefstatez<ButtonRelease-1>)rowcolumnsticky
linenumber
backgroundbgHideShowoptionsz*ode*ontextz Code Context)menuindexlabelbreak)r8   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   r9   destroyrL   r:   r0   update_menu_label)
r1   eventwidgetsrP   rQ   widgetr<   r8   line_number_colorsmenu_statuss
             r   toggle_code_context_event%CodeContext.toggle_code_context_event]   s%    << ll'')@)@@GDF!!\\%6%66 ((*#--/  		((f66		((V)<==))**6;;x+@AA " &*''#$z&K KGl ((*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                 B   / n[         n[        XS-
  S5       Hr  nU R                  R                  U S3U S35      n[	        U5      u  pn
X:  d  M:  UnU
S;   a  US-  nU
(       a  Xa:  a  X:  a  UR                  XhX45        XS::  d  Mr    O   UR                  5         XE4$ )Nr5   r6   .0z.end)r   r   )r"   ranger/   getr(   appendreverse)r1   new_topvisiblestopline
stopindentlines
lastindentlinenumr   r&   r/   r'   s              r   get_contextCodeContext.get_context   s     
 ^aZ<Gyy}}y^y5EFH#0#: F&"#
--!OJg66;OLL'4!@A+ = 	  r   c                    U R                   R                  S5      nU R                  U:X  a  g U R                  U:  aZ  U R                  UU R                  5      u  p#U R                  S   S   U:  a%  U R                  S	 U R                  S   S   U:  a  M%  OU R                  S   S   S-   nU R                  S   S   U:  a7  U R                  S   S   nU R                  S	 U R                  S   S   U:  a  M7  U R                  UU R                  S   S   S-   U5      u  p#U R                  R                  U5        Xl        U R                  U R                  * S   Vs/ s H  oUS   PM	     nnUS   (       a  SOSn[        U5      U-
  U R                  S'   SU R                  S'   U R                  R                  S	S
5        U R                  R                  S
SR                  XgS  5      5        SU R                  S'   g s  snf )Nz@0,0r6   r5   r      rS   normalrW   z1.0end
rR   )r.   	getlinenor;   r   r<   extendrG   r!   r8   deleteinsertjoin)r1   r   r   r   r   xcontext_strings	showfirsts           r   update_code_context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I)HAQ4)HI(+A	!$_!5	!AX (WE5)E499_Z-H#IJ *W Js   G?c                     U R                   R                  S5        g ! [         a    [        U R                  5      nUS:X  a  SnO\[        [        U R                   R                  S5      5      5      n[        SX R                  -
  5      S-
  nU R                  XT-      S   nU R                  R                  U S35        U R                  5          g f = f)Nz	sel.firstr5   r   r   r~   )r8   rc   r   r!   r<   rB   floatmaxrG   r/   yviewr   )r1   rv   r   newtopcontextlineoffsets         r   ro   CodeContext.jumptoline   s    	'LL{+ 	'		NEz "%(:(:8(D"EFQ(:(: :;a?6#78;IIOOvhbM*$$&	's    B2CCc                     U R                   bF  U R                  5         U R                  R                  U R                  U R
                  5      U l        g g r   )r8   r   r/   afterUPDATEINTERVALrp   r:   r=   s    r   rp   CodeContext.timer_event   s?    <<#$$&iiood&9&94;K;KLDG $r   c                     U R                   b1  [        R                  " U R                  SS5      nXR                   S'   g g )NmainEditorWindowfont)r8   r	   GetFontr/   )r1   r   s     r   rl   CodeContext.update_font   s5    <<###DIIv~FD#'LL  $r   c                 b   U R                   bN  [        R                  " [        R                  " 5       S5      nUS   U R                   S'   US   U R                   S'   U R                  bG  [        R                  " [        R                  " 5       S5      nU R                  R                  US   S9  g g )Nr8   r\   
foregroundr[   r]   )r8   r	   rr   rs   r9   config)r1   colorsry   s      r   rm   #CodeContext.update_highlight_colors   s    <<#**8+@+@+BINF)/)=DLL&)/)=DLL&;;"!)!6!6x7L7L7N7C"EKK"4\"BC #r   )r9   r8   r.   r<   r:   r/   r;   r   )r5   r   )__name__
__module____qualname____firstlineno__r   r2   r0   classmethodrI   rM   r{   r   r   ro   rp   rl   rm   __static_attributes__ r   r   r*   r*   -   sQ    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*   rI   r   unittestr   r   r   r   <module>r      st    
 # ) ) * #> &(ZZ%? &
$WD WDt     z	-G r   