
    z%iO                     N   	 d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ d Zd Zd Zd	 Ze j"                  d
        Z G d d      Z G d de
      Z G d de      Z G d de
      Z G d de      Zd Zedk(  r d dlmZ  eddd       d dlmZ  ee       yy)    N)Font)idleConf)	Delegator)macosxc                 V    	 | j                  |      }|rt        t        |            S d S N)indexintfloat)textr	   
text_indexs      C/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/idlelib/sidebar.py
get_linenor      s*    AE"J%/3uZ !9T9    c                     	 t        | d      S )Nzend-1c)r   r   s    r   get_end_linenumberr      s    AdH%%r   c                 H    	 | j                  | d| dd      }|r|d   S dS )Nz
 linestartz lineenddisplaylinesr   )count)r   r	   ress      r   get_displaylinesr      s<    J
**wj)wh'#%C 3q6ar   c           
         	 | j                         }|dk(  r| j                         }n$|dk(  r| j                         }nt        d|       t	        t        | j                  j                  |d   | j                  d      | j                  d      g            }t	        t        | j                  j                  |d   | j                  d      | j                  d      g            }||fS )NpackgridzUnsupported geometry manager: padxborderpady)	winfo_manager	pack_info	grid_info
ValueErrorsummaptkgetintcget)widgetmanagerinfor   r   s        r   get_widget_paddingr+   !   s    E""$G&!	F	!9'CDD s699##VFH&  D
 s699##VFH&  D
 :r   c              #      K   | j                  t        j                         	 d  | j                  t        j                         y # | j                  t        j                         w xY ww)Nstate)	configurer%   NORMALDISABLEDr   s    r   temp_enable_text_widgetr2   ;   sD     NNN#*R[[)R[[)s   !A.A	 !A.	"A++A.c                   \    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zy)BaseSideBarc                     || _         |j                  | _        |j                  | _        d| _        | j                         | _        | j                          | j                          | j                          y NF)
editwin
text_frameparentr   is_showninit_widgetsmain_widgetbind_eventsupdate_fontupdate_colors)selfr7   s     r   __init__zBaseSideBar.__init__F   s]    ((LL	,,.r   c                     	 t         r   NotImplementedErrorr@   s    r   r;   zBaseSideBar.init_widgetsT   s    J!!r   c                     	 t         r   rC   rE   s    r   r>   zBaseSideBar.update_fontX   s    I!!r   c                     	 t         r   rC   rE   s    r   r?   zBaseSideBar.update_colors\   s    K!!r   c                     	 t         r   rC   rE   s    r   r   zBaseSideBar.grid`   s    :!!r   c                 L    | j                   s| j                          d| _         y y )NT)r:   r   rE   s    r   show_sidebarzBaseSideBar.show_sidebard   s    }}IIK DM r   c                 `    | j                   r"| j                  j                          d| _         y y r6   )r:   r<   grid_forgetrE   s    r   hide_sidebarzBaseSideBar.hide_sidebari   s'    ==((*!DM r   c                     	 t         r   rC   r@   argskwargss      r   yscroll_eventzBaseSideBar.yscroll_eventn   s    F!!r   c                 n    	  | j                   j                  j                  |   | j                  |i |S r   )r7   vbarsetrR   rO   s      r   redirect_yscroll_eventz"BaseSideBar.redirect_yscroll_eventr   s;    	 	t$!t!!42622r   c                 :    	 | j                   j                          yNbreak)r   	focus_setr@   events     r   redirect_focusin_eventz"BaseSideBar.redirect_focusin_eventz   s    F		r   c                     	 | j                   j                          | j                   j                  |d|j                         y)Nr   xyrY   )r   rZ   event_generatera   )r@   r\   
event_names      r   redirect_mousebutton_eventz&BaseSideBar.redirect_mousebutton_event   s5    J				  qEGG <r   c                 l    	 | j                   j                  dd|j                  |j                         y)N<MouseWheel>r   )r`   ra   deltarY   )r   rb   ra   rg   r[   s     r   redirect_mousewheel_eventz%BaseSideBar.redirect_mousewheel_event   s1    E		  #$u{{ 	! 	Dr   c                    	
  j                    j                  d<    j                  j                  d j                          j                  j                  d j
                          fd}dD ]A  }d| dd| dd	| d
fD ]  } |||        d| dd| dfD ]  } ||d| d        C d d d 	 fd

 fd} j                  j                  d|        fd} j                  j                  d|       
fd} j                  j                  d|       	
 fd	 fd} j                  j                  d|       	 fd} j                  j                  d|       y )Nyscrollcommandz	<FocusIn>rf   c                     t        j                  j                  |      }j                  j	                  | |       y )N)rc   )	functoolspartialrd   r<   bind)rc   target_event_namehandlerr@   s      r   bind_mouse_eventz1BaseSideBar.bind_events.<locals>.bind_mouse_event   s5    ''(G(G3DFG!!*g6r   )            z<Button->z<ButtonRelease-z<Bz-Motion>)ro   z<Double-Button-z<Triple-Button-c                 2   	 t        j                  d|        }t        |g      \  }}j                  j                  ddd       j                  j	                  d| d|dz    d       j                  j                  d||k(  r|n|dz    d       y )N@0,sel1.0endz.0   insert)r   r   sorted
tag_removetag_addmark_set)y_coordlinenoabr@   
start_lines       r   %drag_update_selection_and_insert_markzFBaseSideBar.bind_events.<locals>.drag_update_selection_and_insert_mark   s    H		S	?;F:v./DAqII  u5IIes"X!A#bz:IIx,2aK&VaZ!HKMr   c                     t        t        j                  j                  d| j                                     | j                   | j                         y )Nrx   )r
   r   r   r	   ra   )r\   r   last_yr@   r   s    r   b1_mousedown_handlerz5BaseSideBar.bind_events.<locals>.b1_mousedown_handler   s@     U499??S	?#CDEJWWF1%'':r   z
<Button-1>c                 ^    d d j                   j                  dd| j                         y )N<ButtonRelease-1>r   r_   )r   rb   ra   )r\   r   r@   r   s    r   b1_mouseup_handlerz3BaseSideBar.bind_events.<locals>.b1_mouseup_handler   s-    
 JFII$$%8A$Ir   r   c                 H    y | j                    | j                          y r   )ra   )r\   r   r   s    r   b1_drag_handlerz0BaseSideBar.bind_events.<locals>.b1_drag_handler   s     ~WWF1%'':r   z<B1-Motion>c                     	 } | j                   j                         d y | dk  r(j                  j                  d| z   d        |        n_| j                   j	                         kD  rBj                  j                  d| z   j                   j	                         z
  d        |        j                   j                  d      y )Nr   pixelsr|   2   )r<   after_cancelr   yview_scrollwinfo_heightafter)ra   auto_scrolling_after_idr   r   r@   text_auto_scrolls    r   r   z1BaseSideBar.bind_events.<locals>.text_auto_scroll   s    H Ay  --.EF*.'Q		&&rAvx85a8T%%2244		&&q1ut/?/?/L/L/N'N'/15a8  &&r+;< $r   c                 \    )| j                   j                  j                  d      y y )Nr   )ra   r<   r   )r\   r   r   r@   r   s    r   b1_leave_handlerz1BaseSideBar.bind_events.<locals>.b1_leave_handler   s5     '.$$**1.>? ( /r   z
<B1-Leave>c                 F    j                   j                         d y y r   )r<   r   )r\   r   r@   s    r   b1_enter_handlerz1BaseSideBar.bind_events.<locals>.b1_enter_handler  s+     '2  --.EF*.' 3r   z
<B1-Enter>)rV   r   r<   rn   r]   rh   )r@   rq   buttonrc   r   r   r   r   r   r   r   r   r   r   s   `        @@@@@r   r=   zBaseSideBar.bind_events   s   &*&A&A		"# 	k4+F+FG 	nd.L.LM	7
 # 	IF!)&3!0:!#F884! K
 !zJ	K "1:!0:! I
 !5=fXQ3GII	I" 
  #'	M	; 	l,@A	J 	13EF	; 	m_=	= 	=&	@ 	l,<=	/ 	l,<=r   N)__name__
__module____qualname__rA   r;   r>   r?   r   rJ   rM   rR   rV   r]   rd   rh   r=    r   r   r4   r4   D   sG    /""""!
"
"3
|>r   r4   c                   $    e Zd Z	 d ZddZddZy)EndLineDelegatorc                 <    t        j                  |        || _        y r   )r   rA   changed_callback)r@   r   s     r   rA   zEndLineDelegator.__init__  s    4  0r   Nc                     | j                   j                  |||       | j                  t        | j                                y r   )delegater}   r   r   )r@   r	   charstagss       r   r}   zEndLineDelegator.insert  s0    UE400?@r   c                     | j                   j                  ||       | j                  t        | j                                y r   )r   deleter   r   )r@   index1index2s      r   r   zEndLineDelegator.delete  s.    VV,0?@r   r   r   r   r   rA   r}   r   r   r   r   r   r   
  s    1AAr   r   c                   D     e Zd Z	  fdZd Zd Zd Zd Zd Zd Z	 xZ
S )LineNumbersc                     t         |   |       t        | j                        }| j                  j
                  j                  || j                  j                         y )Nr   )superrA   r   update_sidebar_textr7   perinsertfilterafterundo)r@   r7   end_line_delegator	__class__s      r   rA   zLineNumbers.__init__  sQ    !-d.F.FG 	**+=151B1B 	+ 	Dr   c           	         t        | j                        \  }}t        j                  | j                  dt        j
                  d|dd      | _        | j                  j                  t        j                         d| _	        t        | j                  d         | _        t        | j                        5  | j                  j                  ddd	       d d d        | j                  j                  d
d
       | j                  j                  d	t        j                         t!        | j                        }| j#                  |       | j                  S # 1 sw Y   xY w)Nr|   rr   r   )widthwrapr   r   borderwidthhighlightthicknessr-   r   r}   1
linenumberF)	takefocusexportselection)justify)r+   r   r%   Textr9   NONEsidebar_textconfigr1   prev_endtype_sidebar_width_typer2   r}   
tag_configRIGHTr   r   )r@   _padxr   r{   s       r   r;   zLineNumbers.init_widgets'  s   (3tGGDKKqrww)*01aI 	  r{{ 3#'(9(9'(B#C $T%6%67 	B$$XsLA	B  5% H$$\288$D +  %   	B 	Bs   5EEc                 \    | j                   j                  ddt        j                         y )Nr|   r   rowcolumnsticky)r   r   r%   NSEWrE   s    r   r   zLineNumbers.grid:  s!    1Qrww?r   c                 d    t        j                  | j                  dd      }|| j                  d<   y )NmainEditorWindowfont)r   GetFontr   r   )r@   r   s     r   r>   zLineNumbers.update_font=  s*    		6>B$(&!r   c                     	 t        j                  t        j                         d      }|d   }|d   }| j                  j	                  |||||       y )Nr   
foreground
background)fgbgselectforegroundselectbackgroundinactiveselectbackground)r   GetHighlightCurrentThemer   r   )r@   colorsr   r   s       r   r?   zLineNumbers.update_colorsA  sZ    K&&x'<'<'>ML)
L)
  j'*%/ 	! 	
r   c                    	 || j                   k(  ry t        t        |            t        t        | j                               z
  }|rDt        t	        | j
                  d               }||z   }| j                  |      | j
                  d<   t        | j
                        5  || j                   kD  rldj                  t        j                  dgt        t        t        | j                   dz   |dz                           }| j
                  j                  d|d       n"| j
                  j                  |dz    dd       d d d        || _         y # 1 sw Y   || _         y xY w)Nr   
 r|   zend -1cr   z.0 -1c)r   lenstrr
   r   r   r   r2   join	itertoolschainr$   ranger}   r   )r@   r{   width_difference	cur_width	new_widthnew_texts         r   r   zLineNumbers.update_sidebar_textL  s2   	9
 $--s3x=3s4==/A+BBE$"3"3G"<=>I!$44I)-)A)A))LDg&$T%6%67 	FT]]"99Y__DU4==1#4cAg>?&  !!((7X|L!!((CE7&)99E	F 	F s    BEEc                 @    | j                   j                  |d          y)Nr   rY   )r   yview_movetorO   s      r   rR   zLineNumbers.yscroll_eventg  s    &&tAw/r   )r   r   r   rA   r;   r   r>   r?   r   rR   __classcell__r   s   @r   r   r     s+    2D!&@)	
6r   r   c                   "    e Zd Zd ZddZddZy) WrappedLineHeightChangeDelegatorc                 >    	 t        j                  |        || _        y r   )r   rA   callback)r@   r   s     r   rA   z)WrappedLineHeightChangeDelegator.__init__m  s    	
 	4  r   Nc                     d|v}|rt        | |      }| j                  j                  |||       |rt        | |      }|k(  ry | j                          y )Nr   )r   r   r}   r   )r@   r	   r   r   is_single_linebefore_displaylinesafter_displayliness          r   r}   z'WrappedLineHeightChangeDelegator.insertv  sW    U*"24"?UE40!1$!>!%88r   c                     ||dz   }t        | |      t        | |      k(  }|rt        | |      }| j                  j                  ||       |rt        | |      }|k(  ry | j	                          y )Nz+1c)r   r   r   r   r   )r@   r   r   r   r   r   s         r   r   z'WrappedLineHeightChangeDelegator.delete  sq    >e^F#D&1Zf5MM"24"@VV,!1$!?!%88r   r   r   r   r   r   r   r   l  s    !r   r   c                   Z     e Zd Z	  fdZd Z fdZd Zd Zd Zd Z	d Z
d	 Zd
 Z xZS )ShellSidebarc                     d | _         i | _        t        |   |       t	        | j
                        }| j                  j                  j                  }|j                  | j                  ure|j                  | j                  j                  j                  ur9|j                  }|j                  | j                  j                  j                  ur9| j                  j                  j                  ||       d| _        y )Nr   T)canvasline_promptsr   rA   r   change_callbackr7   r   topr   r   bottomr   r:   )r@   r7   change_delegatordr   s       r   rA   zShellSidebar.__init__  s    ! -T-A-AB 	 LL  ::TYY&**DLL$4$4$;$;;JJ **DLL$4$4$;$;;**+;1*Er   c                     t        j                  | j                  dddd      | _        | j	                          | j                          | j                  S )N   r   F)r   r   r   r   )r%   Canvasr9   r  update_sidebarr   rE   s    r   r;   zShellSidebar.init_widgets  sC    ii2,-!*/1 			{{r   c                     t         |           | j                  j                  t	        j
                         rdnd| j                         y )Nz
<Button-2>z
<Button-3>)r   r=   r<   rn   r   isAquaTkcontext_menu_event)r@   r   s    r   r=   zShellSidebar.bind_events  s9    "OO-L<##	
r   c                 `    t        j                   j                  d      }t         j                  j                  dd            } fd}|j                  d |d      |rdnd	
       |j                  d |d      |rdnd	
       |j                  |j                  |j                         y)Nr   )tearoffry   rz   c                       fdS )Nc                  :    j                   j                         S r   )r   rb   	eventnamer@   s   r   <lambda>z@ShellSidebar.context_menu_event.<locals>.mkcmd.<locals>.<lambda>  s    49933I> r   r   r  s   `r   mkcmdz.ShellSidebar.context_menu_event.<locals>.mkcmd  s	    >>r   Copyz<<copy>>normaldisabled)labelcommandr.   zCopy with promptsz<<copy-with-prompts>>rY   )
r%   Menur<   boolr   tag_nextrangeadd_commandtk_popupx_rooty_root)r@   r\   rmenuhas_selectionr  s   `    r   r  zShellSidebar.context_menu_event  s    ((!4TYY44UEBC	?"'
"3,9z 	 	K 	 3"'(?"@,9z 	 	K 	u||U\\2r   c                 `    | j                   j                  ddt        j                  dd       y )Nr|   r   rr   )r   r   r   r   r   )r  r   r%   r   rE   s    r   r   zShellSidebar.grid  s#    QqqqIr   c                 >    | j                   r| j                          y y r   )r:   r  rE   s    r   r  zShellSidebar.change_callback  s    ==! r   c           	      h   | j                   }|j                  }| j                  }i x}| _        |j	                  t
        j                         |j                  d      }|j                  dd      d   dk7  r|j                  | d      }|j                  |      x}|d   } || d      }d|v rdnd	|v rd
nd }	|	rM|j                  d|t
        j                  |	| j                  | j                  d          t        ||      }
|	||
<   |j                  | d      }|j                  |      x}y y )Nz@0,0.r|   0z+1line linestartz linestart -1cconsolez>>>stdinz...rr   r   )anchorr   r   fillz+1line)r   	tag_namesr  r  r   r%   ALLr	   split	dlineinfocreate_textNWr   r   r   )r@   r   text_tagnamesr  r  r	   lineinfora   prev_newline_tagnamespromptr   s              r   r  zShellSidebar.update_sidebar  s:   yy+--t(bff

6";;sAq!S(JJ%(89:E>>%00x=A$1UG>2J$K!"&;; $99 
 ""1aF(,		A # H#D%0'-V$JJ%/0E  >>%00x=r   c                 &    	 | j                          yrX   )r  rO   s      r   rR   zShellSidebar.yscroll_event  s    	 	r   c                    	 t        j                  | j                  dd      }t        | j                  |      t	        fddD              }| j
                  j                  |dz  dz          || _        | j                          y )	Nr   r   )r   c              3   @   K   | ]  }j                  |        y wr   )measure).0chartk_fonts     r   	<genexpr>z+ShellSidebar.update_font.<locals>.<genexpr>  s     F4.Fs   )rv   r)  rs   rt   )r   )	r   r   r   r   maxr  r/   r   r  )r@   r   
char_widthr?  s      @r   r>   zShellSidebar.update_font  so    I		6>Btyyt,F:FF
JNQ$67	r   c                 $   	 t        j                  t        j                         d      }t        j                  t        j                         d      }|d   }|d   }||f| _        | j                  j                  |       | j                          y )Nr   r+  r   r   )r   )r   r   r   r   r  r/   r  )r@   linenumbers_colorsprompt_colorsr   r   s        r   r?   zShellSidebar.update_colors  s}    K%2283H3H3JLY --h.C.C.EyQ"<0
'5
!:.4r   )r   r   r   rA   r;   r=   r  r   r  r  rR   r>   r?   r   r   s   @r   r   r     s9    :$
J"14r   r   c           
         ddl m} t        j                  |       }t        j                  |      }|j                  t        j                  t        j                  d       |j                  dd       |j                  dd       t        j                  |dd      }t        j                  |d	d
t        j                  |      }|j                  ddt        j                          ||      }t        j                   |      |_        t%        |      }|j'                          |j)                  ddj+                  d t-        dd      D                     y )Nr   )Dummy_editwinT)sider.  expandr|   )weightr   r   P      )r   heightr   r   r   rz   r   c              3   &   K   | ]	  }d |z    yw)r   Nr   )r=  is     r   r@  z._linenumbers_drag_scrolling.<locals>.<genexpr>  s      >1Q >s   e   )idlelib.idle_test.test_sidebarrG  r%   ToplevelFramer   LEFTBOTHrowconfigurecolumnconfigurer   r   r   r   r   r   	ScrollbarrT   r   rJ   r}   r   r   )r9   rG  toplevelr8   r   r   r7   linenumberss           r   _linenumbers_drag_scrollingr[    s    <{{6"H(#JOOrwwtO<Aa(q+Hfn=D77:RtLDII!AbggI.D!G<<
+GLg&KKKtyy >a >>?r   __main__)r   zidlelib.idle_test.test_sidebarrr   F)	verbosityexit)run)
contextlibrl   r   tkinterr%   tkinter.fontr   idlelib.configr   idlelib.delegatorr   idlelibr   r   r   r   r+   contextmanagerr2   r4   r   r   r   r   r[  r   unittestr   idlelib.idle_test.htestr_  r   r   r   <module>ri     s         # ' :&
 4 * *C> C>LAy A$M+ M`&y &Rm; m`@, z	)QUC+#$ r   