python (3.11.7)

(root)/
lib/
python3.11/
idlelib/
__pycache__/
sidebar.cpython-311.opt-1.pyc

erO|dZddlZddlZddlZddlZddlmZddlm	Z	ddl
mZddlm
Z
dZdZd	Zd
ZejdZGdd
ZGddeZGddeZGddeZGddeZdZedkr'ddlmZedddddlmZeedSdS)zLine numbering implementation for IDLE as an extension.
Includes BaseSideBar which can be extended for other sidebar based extensions
N)Font)idleConf)	Delegator)macosxcl||}|rtt|ndS)z7Return the line number of an index in a Tk text widget.N)indexintfloat)textr
text_indexs   C/BuggyBox/python/3.11.7/bootstrap/lib/python3.11/idlelib/sidebar.py
get_linenors3E""J%/93uZ  !!!T9c"t|dS)z7Return the number of the last line in a Tk text widget.zend-1c)rrs r
get_end_linenumberrsdH%%%rcT||d|dd}|r|dndS)z@Display height, in lines, of a logical line in a Tk text widget.z
 linestartz lineenddisplaylinesr)count)rrress   r
get_displaylinesrsD
**)))'''#%%C3q66arc
|}|dkr|}n-|dkr|}ntd|t	t|jj|d|d|dg}t	t|jj|d|d|dg}||fS)z;Get the total padding of a Tk widget, including its border.packgridzUnsupported geometry manager: padxborderpady)	
winfo_manager	pack_info	grid_info
ValueErrorsummaptkgetintcget)widgetmanagerinforrs     r
get_widget_paddingr*!s""$$G&!!	F		!!C'CCDDDs69#VFH&D
s69#VFH&D
:rc#K|tj	dV|tjdS#|tjwxYw)Nstate)	configurer$NORMALDISABLEDrs r
temp_enable_text_widgetr1;sbNNN###*
R[)))))R[))))sA

"A,c`eZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdS)BaseSideBarz%A base class for sidebars using Text.c||_|j|_|j|_d|_||_|||	dSNF)
editwin
text_frameparentris_showninit_widgetsmain_widgetbind_eventsupdate_font
update_colors)selfr6s  r
__init__zBaseSideBar.__init__Fss(L	
,,..rct)z<Initialize the sidebar's widgets, returning the main widget.NotImplementedErrorr?s r
r:zBaseSideBar.init_widgetsT!!rct);Update the sidebar text font, usually after config changes.rBrDs r
r=zBaseSideBar.update_fontXrErct)=Update the sidebar text colors, usually after config changes.rBrDs r
r>zBaseSideBar.update_colors\rErct)z,Layout the widget, always using grid layout.rBrDs r
rzBaseSideBar.grid`rErcN|js|d|_dSdS)NT)r9rrDs r
show_sidebarzBaseSideBar.show_sidebards.}	!IIKKK DMMM	!	!rcX|jr"|jd|_dSdSr5)r9r;grid_forgetrDs r
hide_sidebarzBaseSideBar.hide_sidebaris6=	"((***!DMMM	"	"rct)z8Hook for vertical scrolling for sub-classes to override.rBr?argskwargss   r

yscroll_eventzBaseSideBar.yscroll_eventnrErcD|jjj||j|i|S)mRedirect vertical scrolling to the main editor text widget.

        The scroll bar is also updated.
        )r6vbarsetrTrQs   r
redirect_yscroll_eventz"BaseSideBar.redirect_yscroll_eventrs1
	t$$!t!426222rc8|jdS)z8Redirect focus-in events to the main editor text widget.break)r	focus_setr?events  r
redirect_focusin_eventz"BaseSideBar.redirect_focusin_eventzs	wrc||j|j|d|jdS)z<Redirect mouse button events to the main editor text widget.rxyr[)rr\event_generaterc)r?r^
event_names   r
redirect_mousebutton_eventz&BaseSideBar.redirect_mousebutton_events:		  qEG <<<wrcV|jdd|j|jdS)z7Redirect mouse wheel events to the editwin text widget.<MouseWheel>r)rbrcdeltar[)rrdrcrir]s  r
redirect_mousewheel_eventz%BaseSideBar.redirect_mousewheel_events6	  #$u{	!	D	D	Dwrc	

jjd<jdjjdjfd}dD]C}d|dd|dd	|d
fD]}|||d|dd
|dfD]}||d|dDddd	fd

fd}jd|fd}jd|
fd}jd|	

fd
	
fd}jd|	fd}jd|dS)Nyscrollcommandz	<FocusIn>rhcttjj|}j||dS)N)re)	functoolspartialrfr;bind)retarget_event_namehandlerr?s   r
bind_mouse_eventz1BaseSideBar.bind_events.<locals>.bind_mouse_eventsD'(G3DFFFG!!*g66666r)z<Button->z<ButtonRelease-z<Bz-Motion>)rqz<Double-Button-z<Triple-Button-c4tjd|}t|g\}}jdddjd|d|dzdjd||kr|n|dzddS)	z6Helper function for drag and selection event handlers.@0,sel1.0endz.0insertN)rrsorted
tag_removetag_addmark_set)y_coordlinenoabr?
start_lines    r
%drag_update_selection_and_insert_markzFBaseSideBar.bind_events.<locals>.drag_update_selection_and_insert_marks	???;;F:v.//DAqI  u555IeXXX!A#zzz:::Ix,2aKK&&VaZKKK
M
M
M
M
Mrcttjd|j|j|jdS)Nrz)r	r
rrrc)r^rlast_yr?rs r
b1_mousedown_handlerz5BaseSideBar.bind_events.<locals>.b1_mousedown_handlersPU49?????#C#CDDEEJWF11%':::::rz
<Button-1>cTddjdd|jdS)N<ButtonRelease-1>rra)rrdrc)r^rr?rs r
b1_mouseup_handlerz3BaseSideBar.bind_events.<locals>.b1_mouseup_handlers5
JFI$$%8A$IIIIIrrc>dS|j|jdSN)rc)r^rrs r
b1_drag_handlerz0BaseSideBar.bind_events.<locals>.b1_drag_handlers-~WF11%':::::rz<B1-Motion>c}|jddS|dkr*jd|zd|n`|jkrCjd|zjz
d|jddS)z6Mimic Text auto-scrolling when dragging outside of it.Nrpixelsr~2)r;after_cancelryview_scrollwinfo_heightafter)rcauto_scrolling_after_idrrr?text_auto_scrolls r
rz1BaseSideBar.bind_events.<locals>.text_auto_scrollsAy --.EFFF*.'Q	&&rAvx88855a8888T%224444	&&q1ut/?/L/L/N/N'N'/11155a888 &&r+;<<
$##rcT$|jjddSdS)Nr)rcr;r)r^rrr?rs r
b1_leave_handlerz1BaseSideBar.bind_events.<locals>.b1_leave_handlers<'.$**1.>??(''/.rz
<B1-Leave>cHjddSdSr)r;r)r^rr?s r
b1_enter_handlerz1BaseSideBar.bind_events.<locals>.b1_enter_handlers7'2 --.EFFF*.'''32rz
<B1-Enter>)rYrr;rpr_rj)r?rsbuttonrerrrrrrrrrrs`        @@@@@r
r<zBaseSideBar.bind_eventss&*&A	"#	
k4+FGGG	
nd.LMMM	7	7	7	7	7
#
	I
	IF3&333::::4F444!
K
K
! zJJJJJ ;:::::::!
I
I
! 3Gf3G3G3GIIIII
I
#'	M	M	M	M	M	M	;	;	;	;	;	;	;	;	
l,@AAA	J	J	J	J	J	J	J	
13EFFF	;	;	;	;	;	;	
m_===	=	=	=	=	=	=	=	=	=&	@	@	@	@	@	@	@	@	
l,<===	/	/	/	/	/	/	
l,<=====rN)__name__
__module____qualname____doc__r@r:r=r>rrLrOrTrYr_rfrjr<rr
r3r3Ds//""""""""""""!!!
"""
"""333
|>|>|>|>|>rr3c(eZdZdZdZddZddZdS)EndLineDelegatorz}Generate callbacks with the current end line number.

    The provided callback is called after every insert and delete.
    c<tj|||_dSr)rr@changed_callback)r?rs  r
r@zEndLineDelegator.__init__s!4    0rNc|j||||t|jdSr)delegaterrr)r?rcharstagss    r
rzEndLineDelegator.insertsA
UE40000??@@@@@rc|j|||t|jdSr)rdeleterr)r?index1index2s   r
rzEndLineDelegator.deletes?
VV,,,0??@@@@@rr)rrrrr@rrrrr
rr
s_111AAAAAAAAAArrcFeZdZdZfdZdZdZdZdZdZ	dZ
xZS)	LineNumbersz(Line numbers support for editor windows.ct|t|j}|jj||jjdS)Nr)superr@rupdate_sidebar_textr6perinsertfilterafterundo)r?r6end_line_delegator	__class__s   r
r@zLineNumbers.__init__sj
!!!-d.FGG	
**+=151B	+	D	D	D	D	Drc	t|j\}}tj|jdtjd|dd|_|jtjd|_	t|jd|_t|j5|j
ddd	dddn#1swxYwY|jd
d
|jd	tjt!|j}|||jS)
Nr~rtr)widthwraprrborderwidthhighlightthicknessr,rr1
linenumberF)	takefocusexportselection)justify)r*rr$Textr8NONEsidebar_textconfigr0prev_endtype_sidebar_width_typer1r
tag_configRIGHTrr)r?_padxrr}s    r
r:zLineNumbers.init_widgets'sz(33tGDKqrw)*01aIII	
  r{ 333
#'(9'(B#C#C 
$T%6
7
7	B	B$$XsLAAA	B	B	B	B	B	B	B	B	B	B	B	B	B	B	B  5% HHH$$\28$DDD ++  %%%  s&CCCcT|jddtjdS)Nr~rrowcolumnsticky)rrr$NSEWrDs r
rzLineNumbers.grid:s(1Qrw?????rcPtj|jdd}||jd<dS)NmainEditorWindowfont)rGetFontrr)r?rs  r
r=zLineNumbers.update_font=s+	6>BB$(&!!!rctjtjd}|d}|d}|j|||||dS)rIr
foreground
background)fgbgselectforegroundselectbackgroundinactiveselectbackgroundN)rGetHighlightCurrentThemerr)r?colorsrrs    r
r>zLineNumbers.update_colorsAsh&x'<'>'>MML)
L)
  j'*%/	!	
	
	
	
	
rc||jkrdStt|tt|jz
}|rItt	|jd}||z}|||jd<t|j5||jkrrdtj
dgttt|jdz|dz}|j
d|dn!|j|dzdddddn#1swxYwY||_dS)	z
        Perform the following action:
        Each line sidebar_text contains the linenumber for that line
        Synchronize with editwin.text so that both sidebar_text and
        editwin.text contain the same number of linesNr
r~zend -1crz.0 -1c)rlenstrr	r
rrr1join	itertoolschainr#rangerr)r?r}width_difference	cur_width	new_widthnew_texts      r
rzLineNumbers.update_sidebar_textLs$-Fs3xx==3s4=/A/A+B+BB	ME$"3G"<==>>I!$44I)-)A)A))L)LDg&
$T%6
7
7	F	FT]""99Y_DU4=1#4cAg>>??&&!((X|LLLL!((CE)9)9)99EEE	F	F	F	F	F	F	F	F	F	F	F	F	F	F	F


s+BEEEcF|j|ddS)Nrr[)ryview_movetorQs   r
rTzLineNumbers.yscroll_eventgs"&&tAw///wr)rrrrr@r:rr=r>rrT
__classcell__rs@r
rrs22DDDDD!!!&@@@)))	
	
	
6rrc$eZdZdZddZddZdS) WrappedLineHeightChangeDelegatorc<tj|||_dS)z
        callback - Callable, will be called when an insert, delete or replace
                   action on the text widget may require updating the shell
                   sidebar.
        N)rr@callback)r?rs  r
r@z)WrappedLineHeightChangeDelegator.__init__ms 	4    


rNcd|v}|rt||}|j||||rt||}||krdS|dS)Nr)rrrr)r?rrris_single_linebefore_displaylinesafter_displayliness       r
rz'WrappedLineHeightChangeDelegator.insertvsyU*	@"24"?"?
UE4000	!1$!>!>!%888

rc||dz}t||t||k}|rt||}|j|||rt||}||krdS|dS)Nz+1c)rrrrr)r?rrrrrs      r
rz'WrappedLineHeightChangeDelegator.deletes>e^F#D&11Zf5M5MM	A"24"@"@
VV,,,	!1$!?!?!%888

rr)rrrr@rrrrr
rrlsK!!!rrc\eZdZdZfdZdZfdZdZdZdZ	dZ
d	Zd
ZdZ
xZS)ShellSidebarz0Sidebar for the PyShell window, for prompts etc.cd|_i|_t|t	|j}|jjj}|j	|j
ur7|j	|jjjur|j	}|j	|jjju|jj||d|_
dS)NrT)canvasline_promptsrr@rchange_callbackr6rtoprrbottomrr9)r?r6change_delegatordrs    r
r@zShellSidebar.__init__s
!!!
-T-ABB	
L :TY&&*DL$4$;;;J*DL$4$;;;**+;1*EEE


rctj|jdddd|_|||jS)NrF)rrrr)r$Canvasr8rupdate_sidebarrrDs r
r:zShellSidebar.init_widgetssQi2,-!*/111	
		{rct|jt	jrdnd|jdS)Nz
<Button-2>z
<Button-3>)rr<r;rprisAquaTkcontext_menu_event)r?rs r
r<zShellSidebar.bind_eventssX
"O--?LL<#	
	
	
	
	
rcltjjd}tjdd}fd}|d|d|rdnd	
|d|d|rdnd	
||j|j	d
S)Nr)tearoffr{r|cfdS)Nc8jSr)rrd	eventnamer?sr
<lambda>z@ShellSidebar.context_menu_event.<locals>.mkcmd.<locals>.<lambda>s4933I>>rrrs`r
mkcmdz.ShellSidebar.context_menu_event.<locals>.mkcmds>>>>>>rCopyz<<copy>>normaldisabled)labelcommandr-zCopy with promptsz<<copy-with-prompts>>r[)
r$Menur;boolr
tag_nextrangeadd_commandtk_popupx_rooty_root)r?r^rmenu
has_selectionrs`    r
rzShellSidebar.context_menu_events(!444TY44UEBBCC
	?	?	?	?	?
"'%
"3"3,9 Iz		K	K	K	 3"'%(?"@"@,9 Iz		K	K	K	u|U\222wrcX|jddtjdddS)Nr~rrt)rrrrr)rrr$rrDs r
rzShellSidebar.grids+QqqqIIIIIrc@|jr|dSdSr)r9rrDs r
rzShellSidebar.change_callbacks.=	"!!!!!	"	"rc	|j}|j}|j}ix}|_|t
j|d}|ddddkr||d}|	|x}|d}||d}d|vrdnd	|vrd
nd}	|	rJ|
d|t
j|	|j|j
d
t||}
|	||
<||d}|	|x}dSdS)Nz@0,0.r~0z+1line linestartz linestart -1cconsolez>>>stdinz...rtr)anchorrrfillz+1line)r	tag_namesrrrr$ALLrsplit	dlineinfocreate_textNWrrr)r?r
text_tagnamesrrrlineinforcprev_newline_tagnamespromptrs           r
rzShellSidebar.update_sidebars{y
+--t(

bf

6"";;sAq!S((JJ%999::E>>%000x=A$1MU2J2J2J$K$K!"&;;; $999


.""1aF(,	A#HHH#D%00'-V$JJ%///00E >>%000x=====rc.|dS)rVr[)rrQs   r
rTzShellSidebar.yscroll_events
	
wrctj|jdd}t|j|t	fddD}|j|dzdz||_|d	S)
rGrr)rc3BK|]}|VdSr)measure).0chartk_fonts  r
	<genexpr>z+ShellSidebar.update_font.<locals>.<genexpr>s/FF4..FFFFFFr)rxr,rurv)rN)	rrrrmaxrr.rr)r?r
char_widthrBs   @r
r=zShellSidebar.update_fonts	6>BBtyt,,,FFFF:FFFFF
JNQ$6777	rc.tjtjd}tjtjd}|d}|d}||f|_|j||dS)rIrr.rr)rN)rrrrrr.r)r?linenumbers_colors
prompt_colorsrrs     r
r>zShellSidebar.update_colorss%283H3J3JLYY -h.C.E.EyQQ
"<0
'5
!:.444r)rrrrr@r:r<rrrrrTr=r>rrs@r
rrs::$




JJJ"""1114rrc
ddlm}tj|}tj|}|tjtjd|dd|	ddtj|dd}tj|d	d
tj
|}|ddtj||}tj||_t%|}||d
ddt-ddDdS)Nr)
Dummy_editwinT)sider1expandr~)weightrrP)rheightrrrr|rc3 K|]	}d|zV
dS)rNr)r@is  r
rCz,_sidebar_number_scrolling.<locals>.<genexpr>s& > >1Q > > > > > >re)idlelib.idle_test.test_sidebarrJr$ToplevelFramerLEFTBOTHrowconfigurecolumnconfigurerrrrrr	ScrollbarrWrrLrrr)r8rJrr7rrr6linenumberss        r
_sidebar_number_scrollingr]sD<<<<<<
+f

C#JOOrwtO<<<Aa(((q+++C88D
7:RtLLLDII!AbgI...mD!!G<
++GLg&&KKKtyy > >a

 > > >>>?????r__main__)rzidlelib.idle_test.test_sidebarrtF)	verbosityexit)run)r
contextlibrnrtkinterr$tkinter.fontridlelib.configridlelib.delegatorridlelibrrrrr*contextmanagerr1r3rrrrr]runittestridlelib.idle_test.htestrarrr
<module>rksR######'''''':::&&&
   4***C>C>C>C>C>C>C>C>LAAAAAyAAA$MMMMM+MMM`&&&&&y&&&Rmmmmm;mmm`@@@,zD	)QUCCCC++++++C!"""""r