python (3.12.0)

(root)/
lib/
python3.12/
idlelib/
__pycache__/
editor.cpython-312.pyc

̑e
LddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlddlm
Z
ddlmZddlmZddlmZddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZddlmZddlmZddlmZddlmZddl m!Z!ddl"m#Z#ddlm$Z$dZ%dejLzZ'ejdk(Z(dZ)GddZ*dZ+ejXdZ-dZ.GddZ/d Z0d!d"d#d$Z1d%Z2d&Z3d'Z4e5d(k(r dd)l6m7Z7e7d*d+d,-dd.l8m9Z9e9e4yy)/N)*)Font)	Scrollbar)simpledialog)
messagebox)idleConf)configdialog)grep)help)
help_about)macosx)MultiCallCreator)pyparse)query)replace)search)wheel_event)
py_extensions)windowz (%s)darwinctj\}}}}}||}||z
}|dk(r
|d|z
}|S|dk7r||d|z
}|S)zYFormat sys.version_info to produce the Sphinx version string used to install the chm docs	candidatercfinalr)sysversion_info)majorminormicrolevelserialreleases      B/BuggyBox/python/3.12.0/bootstrap/lib/python3.12/idlelib/editor.py_sphinx_versionr%&sw),)9)9&E5%wG%GRx= N
'	eAhZx((NceZdZddlmZddlmZmZddlm	Z	ddl
mZmZddl
mZddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZmZmZmZddl m!Z!ddl"m#Z#e$jJZ&dZ'dZ(dZ)dZ*dwdZ+dxdZ,dZ-dZ.dZ/dZ0dxdZ1	gdZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9d gZ:d!Z;d"Z<d#Z=d$Z>dxd%Z?dxd&Z@dxd'ZAdxd(ZBd)ZCd*ZDd+ZEdxd,ZFdxd-ZGd.ZHd/ZId0ZJd1ZKd2ZLd3ZMd4ZNd5ZOd6ZPd7ZQd8ZRdxd9ZSdxd:ZTdxd;ZUd<ZVd=ZWd>ZXd?ZYd@ZZdAZ[dBZ\dCZ]e^je^jzdDzZadEZbdFZcdGZddHZedIZfdJZgdKZhdLZidxdMZjdNZkdOZldPZmdQZndRZodSZpdTZqdUZrdydVZsdWZtdydXZudYZvdZZwd[Zxd\Zyd]Zzd^Z{d_Z|d`Z}daZ~dbdciZddZdxdeZdzdfZdgZdxdhZdxdiZdjZdkZdlZdmZd{dnZdoZdpZdqZdrZdsZdtZduZdxdvZy)|EditorWindowr)
Percolator)ColorDelegatorcolor_config)
UndoDelegator)	IOBindingencoding)mainmenu)MultiStatusBar)AutoComplete)
AutoExpand)Calltip)CodeContext)LineNumbers)FormatParagraphFormatRegionIndentsRstrip)
ParenMatch)
ZoomHeightNTcD"ddlm}tjtj
j
tjdd}tjjdr`ddtjddzz}tj
jd	rd
}nd}tj
j
||dd}ntjdddk(rYddl
}	d
}
dtjd}	|	j|	j |}
tj
j'|
rD|
}nAtjdk(r.tj
j
tjd}tj
j)|}tj
j'|r;|t_tjdk(r<dtjzt_ndtjddzt_||_|xs|j,}||_t/||_t3j4||j0x|_}|r-|j8|_|j<|j6_ni|_i|j6_t@jBxr.tj
j
t@jBd|_"d
|_#tI|x|_%}
tM|
dx|_'}tAjPdddd}ddd d|d!tAjPddd"dd#}tStT|
fi|x|_+}|jV|j6_,|j[|j]|j6j_d$|j`|j6jcd%|jdtgjhrU|jcd%|jd|jcd&|jj|jcd'|jjn|jcd(|jj|jcd)tl|jcd*tl|jcd+tl|jcd,|jn|jcd-|jp|jcd.|jr|jcd/|jt|jcd0|jv|jcd1|jx|jcd2|jz|jcd3|j||jcd4|j~|jcd5|j|jcd6d7|jcd8|j|jcd9|j|jcd:|j|jcd;|j|jcd<|j|jcd=|j|jcd>|j|jcd?|j|jcd@|j|jcdA|j|jcdB|j|j|x|_M}|jcdC|j|jcdD|j|jcdE|j|jcdF|j|jcdG|j|jcdH|j|j|}|jcdI|j|jcdJ|j|jcdK|jd|jcdL|jdM|jcdN|j|jcdO|j|jcdP|j|r||j<|<|r||j|<|jcdQ|j|jcdR|j*j|jcdS|j|jcdT|j|jcdU|j|j|
jttdMV|
jdMdMW|
jdMdMW|j|dX<|jdMdtY|j|dZ<tAj|j,dd|d[<|jdMdMtY|j|jtAjPdd\d]d^}||_nd_|_o|j|_p|jtt@d`s|jVdat@_s|jdb|_u|j|x|_w}|jx|_y}|j||j|_{|j|_||j|j|j|x|_}|j|jdc|_|j	dcd|_d|_d|_|rtj
j|r]tj
j|s>|j|rEdd|_|j|}|j	|n|j|dd|_|j|j|j|j|jj!de}|rY|j#df}|dg}|dk\r|j%|dMz}||_t3j(|j*t,j.|_t0j2|_t0j4|_|j7dhdi|j7djdkdldm|j7dndo|j7dpdq|j7drdqdsdt|j9||j:}|jcdh|j<|jcdj|j>|jcdu|j@|jcdv|jC|jD|jcdw|jG|jH|jK|}|jcdx|jL|jcdr|jN||}|jcdy|jP|jcdz|jR|jcd{|jT|jcd||jW|jX|j[|x|_}|jcdn|j^|jcdp|j`|jcd}|jb|jcd~|je|jf|jhr@|jk||_|jcd|jjln|joddd|jpr_|js||_tAjPdddd^r|ju|jcd|jty|jodddy#t"$r1	|	j|	j$|}
n#t"$rYnwxYwYwxYw)Nr)
ScriptBindingDocz
index.htmllinuxzpython-docs-z%s.%s.%sz/var/www/html/python/z/var/www/html/python/index.htmlz/usr/share/doc/winzSoftware\Python\PythonCore\z\Help\Main Python Documentationrz0Resources/English.lproj/Documentation/index.htmlzfile://zhttps://docs.python.org/%d.%d/)menuzrecent-files.lstvbar)namemainr(widthinttypetextnone
wordprocessorheight)rFpadxwraphighlightthicknessrHtabstylerPWM_DELETE_WINDOW<<close-window>>z<Control-Button-1>z<2>z<3>z<MouseWheel>z
<Button-4>z
<Button-5>z<Configure>z<<cut>>z<<copy>>z	<<paste>>z<<center-insert>>z<<help>>z<<python-docs>>z<<about-idle>>z<<open-config-dialog>><<open-module>>z<<do-nothing>>cyNbreak)events r$<lambda>z'EditorWindow.__init__.<locals>.<lambda>sr&z<<select-all>>z<<remove-selection>>z<<find>>z<<find-again>>z<<find-in-files>>z<<find-selection>>z<<replace>>
<<goto-line>>z<<smart-backspace>>z<<newline-and-indent>>z<<smart-indent>>z<<indent-region>>z<<dedent-region>>z<<comment-region>>z<<uncomment-region>>z<<tabify-region>>z<<untabify-region>>z<<toggle-tabs>><<change-indentwidth>>z<Left>z<Right>z<<del-word-left>>z<<del-word-right>>z<<beginning-of-line>>z<<open-new-window>>z<<close-all-windows>>z<<open-class-browser>>z<<open-path-browser>>z<<open-turtle-demo>>)sidefillexpand)weightcommand)rowcolumnstickyyscrollcommandfontIndentz
use-spacesboolrblink_off_time
insertofftime)2ii@KLFTrendz<<autocomplete>>z	<Key-Tab>z<<try-open-completions>>z<KeyRelease-period>z<KeyRelease-slash>z<KeyRelease-backslash>z<<try-open-calltip>>z<KeyRelease-parenleft>z<<refresh-calltip>>z<KeyRelease-parenright>z<<paren-closed>>z<KeyRelease-bracketright>z<KeyRelease-braceright>z<<force-open-completions>>z<<expand-word>>z<<format-paragraph>>z<<flash-paren>>z<<check-module>>z<<run-module>>z<<run-custom>>z
<<do-rstrip>>z<<force-open-calltip>>z<<zoom-height>>z<<toggle-code-context>>optionsz*ode*ontextdisabledzline-numbers-defaultz<<toggle-line-numbers>>*ine*umbers)idlelib.runscriptr=r(help_urlospathjoinrbase_prefixplatformcountrisdirwinregwinver
QueryValueHKEY_CURRENT_USERFileNotFoundErrorHKEY_LOCAL_MACHINEisfilenormpathflistrootMenumenubarrListedTopleveltopvarstkinter_varsinversedict
instance_dictruserdirrecent_files_pathprompt_last_lineFrame
text_framerrE	GetOptionrTextrLfocused_widget
createmenubarapply_bindingsprotocolclosebindclose_eventr
isAquaTkright_menu_eventrhandle_winconfigcutcopypastecenter_insert_eventhelp_dialogpython_docsabout_dialog
config_dialogopen_module_event
select_allremove_selection
find_eventfind_again_eventfind_in_files_eventfind_selection_event
replace_eventgoto_line_eventsmart_backspace_eventnewline_and_indent_eventsmart_indent_eventr7fregionindent_region_eventdedent_region_eventcomment_region_eventuncomment_region_eventtabify_region_eventuntabify_region_eventr8toggle_tabs_eventchange_indentwidth_eventmove_at_edge_if_selection
del_word_leftdel_word_right
home_callbackdictnew_callbackclose_all_callbackopen_module_browseropen_path_browseropen_turtle_demoset_status_barpackLEFTBOTHrowconfigurecolumnconfigurehandle_yviewgridNSEWsetGetFont	focus_set	set_widthusetabstabwidthindentwidthset_notabs_indentwidthhasattrrmupdate_cursor_blinknum_context_linesr)perr,undoinsertfilterundo_block_startundo_block_stopset_saved_change_hooksaved_change_hookr-ioset_filename_change_hookfilename_change_hook	good_loadset_indentation_paramscolorcode_contextline_numbersexistsloadfileispythonsourceset_filenameResetColorizerupdate_recent_files_listload_extensionsmenudictgetindex
add_separator	wmenu_endregister_callbackpostwindowsmenur
askintegerraskyesno	showerror	event_addr1user_input_insert_tagsautocomplete_eventtry_open_completions_eventforce_open_completions_eventr2expand_word_eventr6format_paragraph_eventr:flash_paren_eventparen_closed_eventcheck_module_eventrun_module_eventrun_custom_eventr9	do_rstripr3ctiptry_open_calltip_eventrefresh_calltip_eventforce_open_calltip_eventr;zoom_height_eventallow_code_contextr4toggle_code_context_eventupdate_menu_stateallow_line_numbersr5toggle_line_numbers_event)selfrfilenamekeyrr=dochomepyverbasepathr~docfileKEYrrrErHtext_optionsrLrindents	usespacesrrr	is_py_srcrDrpautocomplete
parenmatch
scriptbindingr	s                               r$__init__zEditorWindow.__init__JsM
3  (ww||COOULIG||!!'*&c6F6Fr6J)JJ77==!89?G0H ggll8U+0,@Gbq!U*5cjj\:;$//0H0H#NG77>>'*%G)'',,sJLgg&&w/Gww~~g&(/%<<8+,58M8M,ML))I+.+;+;BQ+?*@%
!uzz	Dz..t$,,GG3 %

D&+%6%6DHH" "D%'DHH"!)!1!1"6bggll  "476!#',Sz1*$Zf==	D""6>7O&'+",,uF	2+D1*MMM	D"&)),djj9

($*:*:;??II($*:*:;
II*4+@+@AIIeT223
IIeD112		.+.		,,		,,		-!6!67		)TXX&		*dii(		+tzz*		%t'?'?@		*d../		#T%5%56		"D$5$56		*D,>,>?		#T%;%;<		"$9:		"DOO4		($*?*?@		*doo.		"D$9$9:		%t'?'?@		&(A(AB		-!3!34		/4#7#78		'(B(BC		*4+H+HI		$T%<%<=!%!2!24!88w		%w'B'BC		%w'B'BC		&(D(DE		('*H*HI		%w'B'BC		')F)FG,,t$		#W%>%>?		*G,L,LM		(D::1=>		)T;;A>?		%t'9'9:		&(;(;<		)4+=+=>&)Ed#"&

3II+T->->?II-tzz/L/LMII.0H0HIII-t/E/EFII,d.C.CDTQ7!,""1Q"/++Y		a$	/!%
''		6>JV		a$	/&&vx'3&B	$}
 ==##%x!12&*ii&@H#  ""2..3--//	D $ 5 5#33""4#9#9:~~d++"
##D$=$=>##E*
  ww~~h'

h0G;;x(%)DN $ 3 3H =I//	:)!% %%'}}  ***U#C{ax""$Ag DN$$T%9%9:'11"++
#--	
);713H+-E	G-/GH,.GH)+D24M	O
((t/J/JK		$l&E&EF		,99	;		.;;	=		#T__T%:%L%LM		(&&t,CC	E__T*
		#Z%A%AB		$j&C&CD%d+
		$m&F&FG		"M$B$BC		"M$B$BC		/4;;t#4#>#>?<<--	D		($*E*EF		')C)CD		*D,I,IJ		#T__T%:%L%LM"" $ 0 0 6DII/''AA
C
""9mZH"" $ 0 0 6D!!&."8vG..0II/1O1OP""9mZHU)"("3"3F4M4M47#9,	sG7AC%C%	ADC/ADDADD	ADDADDADDADDADc$|jyN)rrr\s  r$rzEditorWindow.handle_winconfiglsr&c	D|j}tt|jj|jd|jdg}|j
d|zz
}t||jdjd}||z|_	y)NborderrQrCrj)rj0)
rLsummaptkgetintcgetwinfo_widthrmeasurerH)rrL
inner_paddingpixel_widthzero_char_widths     r$rzEditorWindow.set_widthosyyC81D1561B1DEF
&&(1}+<<
DIIf-.66s;	 O3
r&ct|jj\}}|jj|yrY)rdefaultfilenamernew)rr\dirnamebasenames    r$rzEditorWindow.new_callback|s, GG335

wr&c|jdzdk7r|jdk(ry|jjdrq|jj	dddrT|jj	dddr7t|jjdj
dd	}nI|jjdd}tt|D]}||d
vsnt|}t|jjdj
dd	}||k(rd}dt|zd
z}|jd	zdk(r|jjdddnQ|jjds|jjddn|jj	|jjdd|jjdr|jjddn|jjdd|jj|}|jjd}|jj	|d|r||}}|jjddd|jjd|||jjd||jjdy)NrHomeiomark<=zinsert lineendinsert linestart.r`) 	insertzinsert linestart+csel1.0rp	sel.first	my_anchor<sel.last>rZ)statekeysymrLrcomparerIsplitrrangelenstr
tag_removemark_settag_addsee)rr\insertptlinelineatdestfirstlasts        r$rzEditorWindow.home_callbacksPKK!O!ellf&<99??8$99Xt-=>99/x@499??84::3?BCH99==!35EFD!#d),
#>3
#TTYY__X.44S9!<=vH"3x=04KKMaII  u599??;/		"";999$$TYY__[%A3%)YY__X%>@II&&{K@II&&{J?IIOOD)E99??;/Dyy  s40!%dII  u5IIeUD1		8T*		

hr&c|j|j|_t|jddd}tj
dk(r"|jj
ddt|jj
dd	t|jj
d
dt|jjtt|jtt|jjd
|j|jjd
dd|jj|jy)Nr`grey75)rPborderwidth
backgroundr	_padding1z    )rargzCol: ?rVzLn: ?)rarbz<<set-line-and-column>>z<KeyRelease>z<ButtonRelease>)r0r
status_barrrr{	set_labelRIGHTrBOTTOMXrLrset_line_and_columnr
after_idle)rseps  r$rzEditorWindow.set_status_bars--dhh7DHHQA(K<<8#
OO%%k6%F!!(H5!A!!&'!>&q1f1%		0$2J2JK		5*,=	?		T556r&c|jjtjd\}}|jjdd|z|jjdd|zy)Nr>rgzCol: %srVzLn: %s)rLrINSERTrMr`ra)rr\rVrgs    r$rez EditorWindow.set_line_and_columnsTyyv.44S9f!!(I,>?!!&(T/:r&))file_File)edit_Edit)formatF_ormat)run_Run)rr_Options)r_Window)r_Helpct|j}ix|_}|jD]K\}}t|\}}t	||dd}t||d|x||<}|j
|||Mtjr&t|ddx|d<}|j
d	|
|jt|jd|_
|jdjd
dd|j|jdjt|_|jy)aPopulate the menu bar widget for the editor window.

        Each option on the menubar is itself a cascade-type Menu widget
        with the menubar as the parent.  The names, labels, and menu
        shortcuts for the menubar items are stored in menu_specs.  Each
        submenu is subsequently populated in fill_menus(), except for
        'Recent Files' which is added to the File menu here.

        Instance variables:
        menubar: Menu widget containing first level menu items.
        menudict: Dictionary of {menuname: Menu instance} items.  The keys
            represent the valid menu items for this window and may be a
            subset of all the menudefs available.
        recent_files_menu: Menu widget contained within the 'file' menudict.
        _menu_postcommandNr)rFtearoffpostcommand)labelrD	underlineapple)rFrwapplicationIDLE)ryrDrwrjr@zRecent Files)ryrzrDr)rr
menu_specsprepstrgetattrradd_cascader

isCarbonTk
fill_menusrecent_files_menuinsert_cascaderENDbase_helpmenu_lengthreset_help_menu_entries)rmbarrrFryrzrxrDs        r$rzEditorWindow.createmenubars= ||#%%
??	JKD%&u~Iu!$4&0A(BDIK$(D!5@%B
BHTNT5tyI	J-1$W:;.=
=H]#d65!%dllA!>

f,,Qn78262H2H	-	J%)MM&$9$?$?$D!$$&r&c|jd}|jd}|d}||jkDr|j|jdz|t	j
|y)zSCallback to register window.

        Only called when Window menu exists.
        rrpNrqr`)rrrdeleteradd_windows_to_menu)rrDrps   r$rzEditorWindow.postwindowsmenus[
}}X&jj;CKKq(#.""4(r&cH|j|}|j||y)z$Update label for menu item at index.)ryNrentryconfig)rrDrrymenuitems     r$update_menu_labelzEditorWindow.update_menu_label#==&U%0r&cH|j|}|j||y)z$Update state for menu item at index.rJNr)rrDrrJrs     r$rzEditorWindow.update_menu_staterr&c|dk(rCt|d}t|jd|z|jdz
}d}|df}|jj|g|y)zHandle scrollbar.movetorrp@0,0scrollunitsrZ)floatround	getlinenorLyview)rr\argsfractionliness     r$rzEditorWindow.handle_yviewsiHT!W~H4>>%08;<^^F+,EE7#D		%%r&c|j}|jd|jd|j}	|j	dd|xr|j	|dd}|s%|j
ddd	|jd
||js|j|j}||_
tjdddk(}|r|jd
|jD]0}	|\}}	}
|

t!||
}|j#||2|j%|j&|j(|r|jjdy#t
$rd}YwxYw#t$rYwxYw)N@,rEr<rHFrCrDrprAr@rAarrow)cursorribeamrZ)rLrxyrLTclErrorrQrRrmenu
make_rmenur\rr{configrmenu_specs
ValueErrorrentryconfiguretk_popupx_rooty_root)rr\rLnewdexin_selectionriswinitemry	eventnameverify_staterJs            r$rzEditorWindow.right_menu_event(syyyay%''34	! LLdFCC<<zB
OOE5%0MM(F+zzOO


Ra E)KKwK'$$		5D
15.y,#/GD,/1E  e 4		5	u||U\\2IIG,7	! L	! 

s#(E%1E7%E43E47	FF)CloserVNct|jd}|jD]B}|d|d}}|$|j|fd}|j||3|j	D||_y)Nrr~r`c&|j|yr$event_generaterLrs  r$rez(EditorWindow.make_rmenu.<locals>.commandUs''	2r&ryre)rrLradd_commandrr)rrrryrres      r$rzEditorWindow.make_rmenuPstTYY*$$	&D#AwQ9E !%i3!!w!?##%	&
r&c"|jSr$)rmenu_check_copyrs r$rmenu_check_cutzEditorWindow.rmenu_check_cut\s$$&&r&cd	|jjd}|rdSdS#t$rYywxYw)NrEnormalrsrLrr)rindxs  r$rzEditorWindow.rmenu_check_copy_s<	499??;/D $833		s#	//c	|jjjd|jdy#t$rYywxYw)Nztk::GetSelection	CLIPBOARDrrs)rLr+callrrs r$rmenu_check_pastezEditorWindow.rmenu_check_pastegs?	IILL0$))[I		s14	AAcBtj|jy)zHandle Help 'About IDLE' event.rZ)rAboutDialogrr%s  r$rzEditorWindow.about_dialogos	txx(r&cDtj|jdy)z&Handle Options 'Configure IDLE' event.SettingsrZ)r	ConfigDialogrr%s  r$rzEditorWindow.config_dialogus	!!$((:6r&cx|jr
|j}n|j}tj|y)zHandle Help 'IDLE Help' event.rZ)rrr
show_idlehelp)rr\parents   r$rzEditorWindow.help_dialog{s.99YYFXXF6"r&c2tjdddk(r!	tj|jytj|jy#t
$r5}t
jdt||jYd}~yd}~wwxYw)Nr@rADocument Start FailuretitlemessagerrZ)rr{rw	startfilervOSErrorrrrPrL
webbrowseropen)rr\whys   r$rzEditorWindow.python_docss~<<u$
8T]]+
OODMM*
8$$+CHTYY88
8sA	B!+BBc:|jjdy)Nz<<Cut>>rZrLrr%s  r$rzEditorWindow.cuts		  +r&cr|jjdsy|jjdy)NrCz<<Copy>>rZ)rL
tag_rangesrr%s  r$rzEditorWindow.copys,yy##E*		  ,r&cp|jjd|jjdy)Nz	<<Paste>>rArZ)rLrrTr%s  r$rzEditorWindow.pastes'		  -		

hr&c|jjddd|jjdd|jjdy)NrCrDzend-1crArZ)rLrSrRrTr%s  r$rzEditorWindow.select_alls?		%1		8U+		

hr&ct|jjddd|jjdy)NrCrDrprArZ)rLrQrTr%s  r$rzEditorWindow.remove_selections+		UE51		

hr&cz|jj|jjdfd}|S)zCursor move begins at start or end of selection

        When a left/right cursor key is pressed create and return to Tkinter a
        function which causes a cursor move from the associated edge of the
        selection.

        )zsel.first+1czsel.last-1cct|jdzdk(r	ddyy#t$rYywxYw)NrMrrErA)rJr)r\
edge_indexedges_tableself_text_indexself_text_mark_sets r$move_at_edgez<EditorWindow.move_at_edge_if_selection.<locals>.move_at_edgesHaA%#K0&xZ1HI& s+	77)rLrrR)rrrrrrs ` @@@r$rz&EditorWindow.move_at_edge_if_selections4))//!YY//5	r&c:|jjdy)Nz
<Meta-Delete>rZrr%s  r$rzEditorWindow.del_word_lefts		  1r&c:|jjdy)Nz<Meta-d>rZrr%s  r$rzEditorWindow.del_word_rights		  ,r&cBtj|jyrY)rfindrLr%s  r$rzEditorWindow.find_eventsDIIr&cBtj|jyrY)r
find_againrLr%s  r$rzEditorWindow.find_again_events$))$r&cBtj|jyrY)rfind_selectionrLr%s  r$rz!EditorWindow.find_selection_eventsdii(r&cntj|j|j|jyrY)r
rLrrr%s  r$rz EditorWindow.find_in_files_events!		$))TWWdjj1r&cBtj|jyrY)rrLr%s  r$rzEditorWindow.replace_events		"r&c|j}tj|ddj}|I|j	ddd|jd|d|j
d|jy)	Nz
Go To Linez/Enter a positive integer
('big' = end of file):rCrDrprA.0rZ)rLrGotoresultrQrRrTre)rr\rLlinenos    r$rzEditorWindow.goto_line_eventstyyl)&		
OOE5%0MM(vhbM2HHX$$&r&cb	|jjddj}t	j
|jdd|j}|D|jr|jj||S|jj||S#t$rd}YwxYw)zGet module name from user and open it.

        Return module path or None for calls by open_module_browser
        when latter is not invoked in named editor window.
        rErHrBzOpen ModulezAEnter the name of a Python module
to search on sys.path and open:)rLrstriprr
ModuleNamerrrrr)rrF	file_paths   r$open_modulezEditorWindow.open_modules	99==j9??AD$$		=2	f		
 zz

	*  +	D	s*B  B.-B.c$|jyrY)rr%s  r$rzEditorWindow.open_module_eventsr&c|jj}|jjdk(r|s|j	}|yddlm}|j|j|y)NPyShellEditorWindowrZr)browser)	rr	__class____name__ridlelibr
ModuleBrowserr)rr\rrs    r$rz EditorWindow.open_module_browsersX77##''+@@'')H#dii2r&cFddlm}|j|jy)Nr)pathbrowserrZ)rrPathBrowserr)rr\rs   r$rzEditorWindow.open_path_browsers'		*r&cXddl}tjddg}|j|dy)Nrz-cz,from turtledemo.__main__ import main; main()F)shellrZ)
subprocessr
executablePopen)rr\rcmds    r$rzEditorWindow.open_turtle_demos1~~=?	E*r&c|p|dkDrj|jjdd|z|jjddd|jjddd|j	yyy)NrrAz%d.0rCrDrpz
insert +1l)rLrRrQrScenter)rrs  r$gotolinezEditorWindow.gotolinesc&1*IIx&9II  u5IIeX|<KKM	#-r&cv|rtjj|rytjjtjj	|\}}tjj|tvry|jjdd}|jdxrd|vS)NTrDz1.0 lineendz#!python)
rwrxr}splitextr7normcaserrLr
startswith)rrbaseextrVs     r$rzEditorWindow.ispythonsource%s277==2GG$$RWW%5%5h%?@	c
77C M1yy}}UM2t$9T)99r&cb|jr#|jj|d|_yyr$)runregister_maybe_terminaters r$
close_hookzEditorWindow.close_hook.s'::JJ11$7DJr&c||_yr$)r)rrs  r$set_close_hookzEditorWindow.set_close_hook3s	$r&c|jr|jj||j|jj	||jyr$)rfilename_changed_editrrupdate_windowlist_registryrrs r$rz!EditorWindow.filename_change_hook6sE::JJ,,T2 ++D1r&c|jry|j|jjr|j	|_|jr2|j
j
|j|jyy)N)filterafter)rrrrr*rinsertfilterafterrrs r$
_addcolorizerzEditorWindow._addcolorizer=s_::tww//0,,.DJ::HH&&djj		&Jr&c|jsy|jj|jj|jd|_yr$)rremovecolorsrremovefilterrs r$_rmcolorizerzEditorWindow._rmcolorizerFs9zz

!djj)
r&c|j|jtj|j|j
|j
j
|j|jjyy)zUpdate the color themeN)	r-r)r(r+rLrupdate_highlight_colorsr
update_colorsrs r$rzEditorWindow.ResetColorizerMso	
!!$)),(557(++-)r&_c0|jd||j|}|r$||jvr|jd|dz|d|j|k(r|jd|n|jd|dz|j	|y)NERRORz
 wordstart
rAz+1c)rSr
IDENTCHARSrRrT)rrLposchars    r$colorize_syntax_errorz"EditorWindow.colorize_syntax_error\s{Wc"xx}DDOO+LL#"4c:488C= MM(C(MM(C%K0
r&ctjdddd}|sd|jd<ytj|jd<y)	z&Update the cursor blink configuration.rGr(zcursor-blinkrlrJrrnN)rrrLrm)rcursorblinks  r$rz EditorWindow.update_cursor_blinkgsC((VE)*DIIo&*2)@)@DIIo&r&c|j|jj|j|jjtj|j
dd}||jd<|jy)z.Update the text widgets' font if it is changedNrGr(rj)rupdate_fontrrrrrLr)rnew_fonts  r$	ResetFontzEditorWindow.ResetFontqsr())+())+##DIIv~F$		&r&c|tjx|j_}|j	D]"\}}|j
j|g|$|jD]O}tj|}|s|j	D]"\}}|j
j|g|$Qy)zgRemove the virtual, configurable keybindings.

        Leaves the default Tk Text keybindings.
        N)	rGetCurrentKeySetr/default_keydefsitemsrLevent_deleteget_standard_extension_namesGetExtensionBindings)rkeydefsr\keylist
extensionNamexkeydefss      r$RemoveKeybindingszEditorWindow.RemoveKeybindingss3;2K2K2MM

%%mmo	4NE7"DII""5373	4!>>@	<M44]CH&.nn&6<NE7*DII**5;7;<	<r&c
tjx|j_}|j	|jD]+}tj|}|s|j	|-i}|jjD]4}i||d<|dD]"}|s|d||dt|dd<$6|jD]}|j|}|jt}|*|dz
}td|D]u}	|j|	dk(s|j|	d}
|
s-|j|	d}d}||vr|||vr|||}|sWt||}
|j!|	|
wy)	zeApply the virtual, configurable keybindings.

        Alse update hotkeys to current keyset.
        rr`NreacceleratorryrB)rL)rr@r/rArrDrEmenudefsrrrrrNrK	entrycgetget_acceleratorr)
rrFrHrI
menuEventDictrDrmenubarItemrpraccelitemNamer\s
             r$ApplyKeybindingszEditorWindow.ApplyKeybindingss3;2K2K2MM

%!>>@	.M44]CH##H-	.
MM**	JD%'M$q'"Q
JBFq'M$q'*747+;A+>?
J	J
 ==	GK==-D**S/C{1HCq#
G99U#y0 NN5-@E#'>>%#A "&-7'=+EE(5k(B8(L $3GU$CE ,,U,F
G	Gr&cZ|jstjdddd|_yy)zCUpdate the indentwidth if changed and not using tabs in this windowrGrkz
num-spacesrIrJN)rrrrrs r$rz#EditorWindow.set_notabs_indentwidths,||'11&(<7< >Dr&cttj}|jd}|jt}||j
kDr|j
|j
dz||rA|j|D],}|j|d}|j|d|.||jd<y)z4Update the additional help entries on the Help menu.rr`rrN)
rGetAllExtraHelpSourcesListrrrrrr_extra_help_callbackr)r	help_listhelpmenuhelpmenu_lengthentryrs      r$rz$EditorWindow.reset_help_menu_entriess779	==("..-T666OOT66:_M""$"
B//a9$$58S$A
B!)

fr&c|ffd	}|S)z9Return a callback that loads resource (file or web page).cl|jdstjj|}tj
dddk(r	tj|ytj|y#t$r5}tjdt|jYd}~yd}~wwxYw)N)wwwhttpr@rArr)rrwrxrrr{rrrrrPrLrr)helpfilerrs  r$display_extra_helpz=EditorWindow._extra_help_callback.<locals>.display_extra_helps&&777++H5||BQ5(<LL*
)	<((/G #C<<<s	A55	B3>+B..B3r[)rresourcerbs`  r$rXz!EditorWindow._extra_help_callbacks(0
	*"!r&cg}|j}|rFtjj|r't	|dd5}|j}ddd|rItjj
|dz}||vr|j||jd|g}|D]:}d|vs#tjj|ddr*|j|<|Dcgc]	}||vs|}}d	}|dt|}|r*	t	|d
dd5}|j|ddd|j&j(D]u}
|
j*}|j-dt.t1|D]C\}}
|
j3}
|
j5|
}|j7||dz|
z|dEwy#1swYuxYwcc}w#1swYxYw#t$rY}	t|jdds7d
|j_t!j"dd|	d|j$Yd}	~	
d}	~	wwxYw)z/Load and update the recent files list and menusutf_8r)r.errorsNr4rrq1234567890ABCDEFGHIJKwrecentfiles_messageFTzIDLE Warningz)Cannot save Recent Files list to disk.
  z
Select OK to continue.rr?)ryrerz)rrwrxrr	readlinesabspathremoverAappendrO
writelinesrrrrjrshowwarningrLrrrrr	enumeraterstrip#_EditorWindow__recent_file_callbackr)rnew_filerf_listrrf_list_file	bad_pathsrxulcharsrf_fileerrinstancerDi	file_namecallbacks               r$rz%EditorWindow.update_recent_files_lists;**		2i&y:
3=I&002
3wwx047H7"x(NN1h'		'Dt|277>>$q*#=  &	'%,EDt9/D4EE)!CL)
*)S#*9>0AH&&w/0..	.H--DKK3 )' 2
.9%,,.	#::9E  wqzC'7)'C)1+,!.
.	.=
3
3F
00
*tyy*?G48DII1**!%%(E*9!9 $yy	*
*sHG'	G1G
G G+G GGG  	I)AH==Ic|ffd	}|S)Nc>jj|y)N)editFile)rr)
fn_closurers r$open_recent_filez=EditorWindow.__recent_file_callback.<locals>.open_recent_filesGGLL*L-r&r[)rr}rs`  r$__recent_file_callbackz#EditorWindow.__recent_file_callbacks(1	.r&c8|j}|j}|r|r|dz|ztz}n|r|}n|r|}nd}|xs|xs|}|js
d|z}d|z}|jj||jj
|y)Nz - untitledz*%s*z*%s)short_title
long_title_py_version	get_savedrwm_titlewm_iconname)rshortlongricons     r$rzEditorWindow.saved_change_hooks  " TEMD(;6E
E
EE%%~~UNE4<D% T"r&c6|jjSr$)rrrs r$rzEditorWindow.get_saved%syy""$$r&c:|jj|yr$)r	set_saved)rflags  r$rzEditorWindow.set_saved(s		D!r&c8|jjyr$)r
reset_undors r$rzEditorWindow.reset_undo+s		r&ct|jj}|rtjj	|SdS)Nr)rrrwrxr7)rrs  r$rzEditorWindow.short_title.s-77##-5rww)E:Er&c6|jjxsdS)NrB)rrrs r$rzEditorWindow.long_title2sww%2%r&c$|jyrY)rr%s  r$rz EditorWindow.center_insert_event5s
r&c|j}|j\}}|j|}||z
}td||dzz
}|j	t|y)Nr`rC)rLgetwindowlinesrmaxrr)rmarkrLrbotrrPnewtops        r$rzEditorWindow.center9sYyy&&(S%sQ*+

5=!r&c|j}|jd}|jd}||k(r)|jdk(rt|d}||zdz
}||fS)Nrz@0,65535r`rP)rLrwinfo_heightrI)rrLrrrPs     r$rzEditorWindow.getwindowlinesAscyynnV$nnZ(#:$++-2h(F,"CCxr&c`|j}tt|j|Sr$)rLrIrr)rrrLs   r$rzEditorWindow.getlinenoKs$yy5D)*++r&c|jj}tjd|}t	tt|jS)zReturn (width, height, x, y)z(\d+)x(\d+)\+(-?\d+)\+(-?\d+))rwm_geometryrematchlistr*rIgroups)rgeomms   r$get_geometryzEditorWindow.get_geometryOs=xx##%HH5t<CQXXZ())r&c$|jyrY)rr%s  r$rzEditorWindow.close_eventUs

r&cF|jr|jsk|jjdk7r|jj	|jj|jj
|jjSy)Nr)rrrrJ	deiconifylowerlift	maybesavers r$rzEditorWindow.maybesaveYsi77>>#88>>#X-HH&&( 

77$$&&
r&c	|j}t|dk7r|j|S#t$rYywxYw)Ncancel)rrP_closeAttributeError)rreplys  r$rzEditorWindow.closebs?	NN$E5zX%
L		s/2	>>cP|jjr&|j|jjtj|j
|j
|jjd|_d|_|jr!|jjd|_	d|_
d|_|jjd|_|jj|jr|jyy)N)rt)rrrrunregister_callbackrunload_extensionsrrrrLrrrdestroyrrs r$rzEditorWindow._closeks77))4773C3C)D""4#7#78 

	::JJDJ	 ??OOr&c2i|_|jyr$)
extensionsload_standard_extensionsrs r$rzEditorWindow.load_extensionss%%'r&ct|jjD]}t|ds|j	!i|_y)Nr)rrvaluesrr)rinss  r$rzEditorWindow.unload_extensionss?..01	CsG$			r&c|jD]}	|j|y#tdt|t	j
YExYw)NzFailed to load extension)rDload_extensionprintrepr	traceback	print_exc)rrFs  r$rz%EditorWindow.load_standard_extensionssO557	&D
&##D)	&
&0$t*=##%s	)+Ac.tjdS)NT)editor_only)r
GetExtensionsrs r$rDz)EditorWindow.get_standard_extension_namess%%$77r&ZzDummyzzdummyc|jj||}		tjd|zt}t||}tj|}t|dr|j|j|||}||j|<|r|j||D]x}|j!dd}|dddk(r|dd}|dddk(r|d	dd
k(r|dd	}|d	dd
k(r|dz}t||sS|j"j%|t||zyy#t
tf$rtj|}YwxYw#t
$rtd|wxYw)Nr>)packagez
Failed to import extension: rM-r1r`rGrqrI_event)extfilesr	importlib
import_module__package__ImportError	TypeErrorrrrrErrrMrrrrLr)	rrFfnamemodclsrFrvevent
methodnames	         r$rzEditorWindow.load_extensions

!!$-	
5--cEk;Oc4 //53
#OOCLL'2$i #(!
E#^^C5
 !n+!+ABJ!!n+ o,!+CRJ!o,'(2
3
+IINN673
+CD
E +
5--e4
5	2D9	s#D//$EEEEE1c||jj}|j}||_|j	D]\}}|s	|j
|g|y)z"Add events with keys to self.text.N)r/rArLrFrBr)rrFrLr\rGs     r$rzEditorWindow.apply_bindingssU?mm33Gyy%mmo	0NE7u/w/	0r&c	||jj}||jj}|j}|j}|D]\}}|j|}|s|D]}||j
|\}	}
|	dddk(}|r|	dd}	t|	\}}	t||
}
||
fd}|r-|j|
t}|j|	|||
|y|j|	|||
y)zFill in dropdown menus used by this window.

        Items whose name begins with '!' become checkbuttons.
        Other names indicate commands.  None becomes a separator.
        Nr`!c&|j|yr$rrs  r$rez(EditorWindow.fill_menus.<locals>.commands++I6r&)ryrzrerLvariable)ryrzrerL)
r/rMrArrLrrrrOget_var_obj
BooleanVaradd_checkbuttonr)rrMrFrrLmname	entrylistrDr\ryrcheckbuttonrzrLrevars                r$rzEditorWindow.fill_menuss+}}--H?mm33G==yy (	BE9<<&D"
B=&&(',$E9#(!9#3K" %ab	'.u~$Iu"1'9"EK%)Y7""..y*E,,5I$+%(-*((u	185@)B%
B		Br&cb|j|}|r|j}|St|r$)rr	NameError)rrFrvalues    r$getvarzEditorWindow.getvars/t$GGIELD/!r&cd|j||}|r|j|yt|r$)rrr)rrFrvartypers     r$setvarzEditorWindow.setvars,tW-GGEND/!r&c|jj|}|s#|r!||jx|j|<}|S)z:Return a tkinter variable instance for the event.
        )rrrL)rrrrs    r$rzEditorWindow.get_var_objsB##I.w181CCDi(3
r&c|jr;|jjd|xsd|jj|vSy)NTODOSTRINGr`)rrL
tag_prevrange	tag_names)r
text_indexs  r$is_char_in_stringzEditorWindow.is_char_in_stringsE::99**6:>?tyy22:>>
?r&c	|jjd}|jjd}||fS#t$rYywxYw)NrErHNNr)rrYrZs   r$get_selection_indicesz"EditorWindow.get_selection_indicessG	IIOOK0E99??:.D$;		s9<	AAcF|jdxst}t|S)Ntabs)rLTK_TABWIDTH_DEFAULTrI)rcurrents  r$get_tk_tabwidthzEditorWindow.get_tk_tabwidths ))F#:':7|r&c	|j}|j|k7rC|jjdd|dd|jd|z}|j|yy)Nrjr/z
-displayofn)r)rLrr+rmaster	configure)rnewtabwidthrLpixelss    r$set_tk_tabwidthzEditorWindow.set_tk_tabwidth"s^yy![0WW\\&)T&\"."%"35F
NNN'1r&c|rG|rE|j}d|cxkrdkr
nn||_|j|jk7rd|_|j	|jy)NrCrF)guess_indentrrrr)rrguessr|s    r$rz#EditorWindow.set_indentation_params-sS!!#AA{{#$ 4==0$T]]+r&c|j}|j\}}|r'|r%|j|||jd|y|j	dd}|dk(r6|jdddr|jdy|j
y|dd	vr|jdy|j}t|j|}|d
kDsJ|dz
|jz|jz}d
}		|dd}|	dz}	t|j|}||ks|dd	vrn2|j|jd|	zd||kr#|jdd
||z
z|j|jy)NrArZr=rBrIrDz	insert-1crq 	rr`z
insert-%dcr?)rLrrrRrrLbellrrO
expandtabsrrrArr)
rr\rLrYrZcharsrhavewant
ncharsdeleteds
          r$rz"EditorWindow.smart_backspace_event6syy002tTKKt$MM(E*+X6B;||Hc51K(		"IU"KK$==5##H-.axd...$2B2BB
#2JE)A-Mu''12Dt|uRy5	
L=0(;$;KK#"533
5r&c$|j}|j\}}|j	|rh|rft|t|k7r+|jj||j
S|j|||jd||jdd}t||j\}}|t|k(r|j||jzng|jrd}n;t|j!|j}|j}	d|	||	zz
z}|j#d||j$|j'd	|j
y#|j
wxYw)NrAr=r@r?rZ)rLrr
index2linerrrrrRrget_line_indentrrOreindent_torrr
rArrT)
rr\rLrYrZprefixraw	effectivepadrs
          r$rzEditorWindow.smart_indent_eventasRyy002t	#e$
4(88<<;;EB(
  "'E4(

h.XX0(;F,VT]]CNCc&k!  T-=-=!=><<C #F$5$5dmm$D EI((AY]!23CHc4+F+FGHHX  "D  "s5E=7C4E==Fc	|j}|j\}}|j	|r&|r$|j|||j	d||jdd}dt
|}}||kr||dvr|dz
}||kr||dvr||k(r@|jdd|j	|jd|jy|d|}d}|r|d	dvr|dd	}|dz
}|r|d	dvr|r|jd
|zd|jddvr%|jd|jddvr%|jdd|jt|jd}	tj|j|j }
|j"s|j$D]k}t'|	|z
d}t)|dz}
|j|
d}|
j+||
j-|j/|
}||dk(skn|
j1xsdnP|j3dd}|r|d}
nd
}
|j|
d}|
j+||
j1d|
j5}|tj6k7r	|tj8k(rn|tj:k(r|jd||jn|tj<k(r |j?|
jAnn|tjBk(rQ|
jEdkDr|jd||jn*|j?|
jGn
Jd|	|jd|jy|
jI}|jd||j|
jKr|jM|n#|r!|
jOr|jQ|	|jd|jy#|jd|jwxYw)aInsert a newline and indentation after Enter keypress event.

        Properly position the cursor on the new line based on information
        from the current line.  This takes into account if the current line
        is a shell prompt, is empty, has selected text, contains a block
        opener, contains a block closer, is a continuation line, or
        is inside a string.
        rAr=rrr`r4rZNrqzinsert - %d charsrconsolerDzbogus continuation type ))rLrrrrRrrOrArrTrrrrParserrrrrrrset_codefind_good_parse_start_build_char_in_string_funcset_lorget_continuation_typeC_NONEC_STRING_FIRST_LINEC_STRING_NEXT_LINES	C_BRACKETrcompute_bracket_indentC_BACKSLASHget_num_lines_in_stmtcompute_backslash_indentget_base_indent_stringis_block_openerris_block_closerr)rr\rLrYrZrVr|rindentlnorcontextstartatstartatindexrawtextbodrrBs                  r$rz%EditorWindow.newline_and_indent_events(yy002te	#E4(

h.88.9Dc$iqAa%DGu,Qa%DGu,Av. 779j
HHX  "k"1XFA48u,CRyQ48u,/!3X>((8$-H%((8$-
KK$(C(CDTZZ12Ct//?A((#55G!#-3G#'=4#7L"hh|X>GJJw'11 ;;LIKC'Q,"&&y(;#$Q4L#(L((<:

7#'')AGNN"333'555KK&$2M2MN'+++
$$Q%=%=%?@'---..014Hf$($?$?A(()C)C)EF> 8>>
HHX  "--/FKK&$*E*EF  "''.A--/**51HHX  "
HHX  "s4A$Q"Q#Q?AQC#Q2E3QA2Q#Rc&||jfd}|S)Nc||d|zzS)Nz+%dcr[)offset_startindex_iciss   r$innerz6EditorWindow._build_char_in_string_func.<locals>.innersv677r&)r)r
startindexr7s   r$rz'EditorWindow._build_char_in_string_funcs&0..	8r&cl|jr$t||j\}}d|zd|zzSd|zS)Nr@r?)rdivmodr)rrntabsnspacess    r$_make_blankszEditorWindow._make_blankss9<<#At}}5NE7%<#-//7Nr&c|j}|j|jdddr|jdd|r,|j	d|j||j|jy)Nr=z!=rA)rLrrLrrAr=rr)rrgrLs   r$rzEditorWindow.reindent_tosjyy<<*D(;KK*H5KK$"3"3F";33
5r&ct|jj\}}|r9|r7t||j\}}t||j\}}||z
Sdx}}||z
SNr)IndentSearcherrLrprr)ropenerindentedrindentsmallindentlarges      r$rzEditorWindow.guess_indent%sq)$))488:h.vt}}EC.xGC[(()*)K+[((r&c|jy|jjr|jjd}n|jjd}|j	dd|dy)NShowHiderrrtz
 Line Numbers)rDrry)ris_shownhide_sidebarshow_sidebarr)rr\
menu_labels   r$rz&EditorWindow.toggle_line_numbers_event.sp$%%**,J**,JI](2|=%A		Cr&)NNNNr$)rAr)T)r
__module____qualname__idlelib.percolatorr)idlelib.colorizerr*r+idlelib.undor,idlelib.iomenur-r.rr/idlelib.statusbarr0idlelib.autocompleter1idlelib.autoexpandr2idlelib.calltipr3idlelib.codecontextr4idlelib.sidebarr5idlelib.formatr6r7r8r9idlelib.parenmatchr:idlelib.zoomheightr;rgetfilesystemencodingfilesystemencodingrvrrrr"rrrrrrerrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr!rr)r-rstring
ascii_lettersdigitsr5r8rr>rJrTrrrXrrsrrrrrrrrrrrrrrrrrrrDrrrrrrrrrrrrrrrrr=rrrr[r&r$r(r(3s->*2 01-'/+MM--2224H!`ID	4
)V7 ;&J#'J)1
1
	
E!J	,K

'4	

(0	
:
%K.%%

5;J	A"
<&GP>)"
",.\ 
#$%"F&",*'((&8	9
HE80$BL""$(,)V!#Fq#p )Cr&r(c*tt|Sr$)rIr)rs r$rr<suU|r&z[ \t]*ctj|}|jt|j	j|fS)zReturn a line's indentation as (# chars, effective # of spaces).

    The effective # of spaces is the length after properly "expanding"
    the tabs into spaces, as done by str.expandtabs(tabwidth).
    )_line_indent_rerrprOgroupr
)rVrrs   r$rrAs;	d#A557C	,,X6777r&cXeZdZdZdZdZejejdfdZ	dZ
y)rAz4Manage initial indent guess, returned by run method.cJ||_dx|_|_dx|_|_yr@)rLr|finishedblkopenlineindentedline)rrLs  r$r"zIndentSearcher.__init__Ns'	!""/334,r&c|jry|jdzx}|_t|dz}|jj	|ddry|jj||dzS)NrBr`rz>=rpz lineend+1c)rgr|rrLrLr)rr|rs   r$readlinezIndentSearcher.readlineSs`==VVaZDFAw~99T4/yy}}T4-#788r&)classdefforifrtrywhilewithc	|jry||k(r||vr||_y||k(r|jr||_d|_yyy)Nr`)rgrhri)	rrKtokenstartrprVINDENTNAMEOPENERSs	         r$
tokeneaterzIndentSearcher.tokeneater\sI
==
T\ew.#D
V^ 0 0 $DDM!1^r&c	tj|j}|D]}|j|	|j|jfS#tjt
f$rY3wxYw)ztReturn 2 lines containing block opener and and indent.

        Either the indent line or both may be None.
        )tokenizegenerate_tokensrkry
TokenErrorSyntaxErrorrhri)rtokensrts   r$rpzIndentSearcher.runisp
	--dmm<F
('
(
!2!222##[1		s5AA,+A,N)rrMrN__doc__r"rkr{rvrwryrpr[r&r$rArAKs.:4
9#// 

-3r&rAcR|jd}|dk\r|d|||dzdz}||fS)zExtract the underscore from a string.

    For example, prepstr("Co_py") returns (2, "Copy").

    Args:
        s: String with underscore.

    Returns:
        Tuple of (position of underscore, string without underscore).
    r1rNr`)r)sr|s  r$rrzs:	
sAAv
bqEAacdGOa4Kr&[]/)bracketleftbracketrightslashc
|j|}|rtjr|dvry|d}tjdd|}tjdd|}tjdd|}tjd	d
|}tjdd|}tjd
d|}tjdd|}tjdd|}tjdd|}|S)akReturn a formatted string for the keybinding of an event.

    Convert the first keybinding for a given event to a form that
    can be displayed as an accelerator on the menu.

    Args:
        keydefs: Dictionary of valid events to keybindings.
        eventname: Event to retrieve keybinding for.

    Returns:
        Formatted string of the keybinding.
    >r^rWr_rBrz-[a-z]\bc>|jjSr$)rdupperrs r$r]z!get_accelerator.<locals>.<lambda>saggioo&7r&z\b\w+\bcftj|j|jSr$)keynamesrrdrs r$r]z!get_accelerator.<locals>.<lambda>sX\\!'')QWWY%Gr&zKey-Cancelz
Ctrl-BreakzControl-zCtrl-r+z><r?rGrI)rr
	isCocoaTkrsub)rFrrGrs    r$rOrOskk)$G
))+	>616
A
{7;A
zGKA
vr1A
xq)A
z7A&A
sCA
tS!A
sBA
sBAHr&c|j}|jddd|jddd|jdddy)	Ntcl_wordBreakAfterza brr
tcl_wordcharsz\wtcl_nonwordcharsz\W)r+r)rr+s  r$
fixwordbreaksrs?
BGG %+GGE?E*GGE%u-r&c@|}t|tjddrtjd}nd}tj|dt||}|j}d|d<tdD]&}|jdd|zt|zdz(y)	Nr`)rr
rPrAz  r4)
rrargvr
setupAppr(rLrNrArP)rrrrlrLr|s      r$_editor_windowrsD$
xx|88A;
OOD$TH5D99DDN
2Y6Hd1fs1vo456r&__main__)rGzidlelib.idle_test.test_editorrCF)	verbosityexit)rp):
importlib.abcrimportlib.utilrwr{rr^rr{rrtkintertkinter.fontrtkinter.ttkrrridlelib.configrrr	r
rrr
idlelib.multicallrrrrridlelib.treeridlelib.utilrrrpython_versionrrr%r(rcompilercrrArrrOrrrunittestrGidlelib.idle_test.htestrpr[r&r$<module>rs		

! # .$&///11		!
FCFCR0"**Y'8*3*3^$

(
V.
6$z	(AEB+r&