Uname: Linux web3.us.cloudlogin.co 5.10.226-xeon-hst #2 SMP Fri Sep 13 12:28:44 UTC 2024 x86_64
Software: Apache
PHP version: 8.1.31 [ PHP INFO ] PHP os: Linux
Server Ip: 162.210.96.117
Your Ip: 18.118.120.15
User: edustar (269686) | Group: tty (888)
Safe Mode: OFF
Disable Function:
NONE

name : editor.cpython-310.pyc
o

_bT�@s�ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlTddlm
Z
ddlmZddlmZddlmZddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZddlmZddlmZddlmZddlmZddl m!Z!ddlm"Z"dZ#de�$�Z%ejdkZ&dd�Z'Gdd�d�Z(dd�Z)e�*d�Z+dd�Z,Gd d!�d!�Z-d"d#�Z.d$d%d&d'�Z/d(d)�Z0d*d+�Z1d,d-�Z2e3d.kr�dd/l4m5Z5e5d0d1d2d3�dd4l6m7Z7e7e2�dSdS)5�N)�*)�Font)�	Scrollbar)�simpledialog)�
messagebox)�idleConf)�configdialog)�grep)�help)�
help_about)�macosx)�MultiCallCreator)�pyparse)�query)�replace)�search)�wheel_event)�window�z (%s)�darwincCsdtj\}}}}}d||f}|d|f7}|dkr"|d|f7}|S|dkr0|d|d|f7}|S)zYFormat sys.version_info to produce the Sphinx version string used to install the chm docsz%s%sz%s�	candidatezrc%s�finalr)�sys�version_info)�major�minor�micro�level�serial�release�r �7/usr/local/python-3.10/lib/python3.10/idlelib/editor.py�_sphinx_version%s�r"c@s4eZdZddlmZddlmZmZddlm	Z	ddl
mZmZddl
mZddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZmZmZmZddl m!Z!ddl"m#Z#e$�%�Z&dZ'dZ(dZ)dZ*d�dd�Z+d�dd�Z,dd�Z-dd�Z.dd�Z/dd�Z0d�dd�Z1gd �Z2d!d"�Z3d#d$�Z4d%d&�Z5d'd(�Z6d)d*�Z7dZ8d+d,�Z9d-gZ:d.d/�Z;d0d1�Z<d2d3�Z=d4d5�Z>d�d6d7�Z?d�d8d9�Z@d�d:d;�ZAd�d<d=�ZBd>d?�ZCd@dA�ZDdBdC�ZEd�dDdE�ZFd�dFdG�ZGdHdI�ZHdJdK�ZIdLdM�ZJdNdO�ZKdPdQ�ZLdRdS�ZMdTdU�ZNdVdW�ZOdXdY�ZPdZd[�ZQd\d]�ZRd�d^d_�ZSd�d`da�ZTd�dbdc�ZUddde�ZVdfdg�ZWdhdi�ZXdjdk�ZYdldm�ZZdndo�Z[dpdq�Z\drds�Z]e^j_e^j`dtZadudv�Zbdwdx�Zcdydz�Zdd{d|�Zed}d~�Zfdd��Zgd�d��Zhd�d��Zid�d�d��Zjd�d��Zkd�d��Zld�d��Zmd�d��Znd�d��Zod�d��Zpd�d��Zqd�d��Zrd�d�d��Zsd�d��Ztd�d�d��Zud�d��Zvd�d��Zwd�d��Zxd�d��Zyd�d��Zzd�d��Z{d�d��Z|d�d��Z}d�d��Z~d�d�iZd�d��Z�d�d�d��Z�d�d�d��Z�d�d��Z�d�d�d��Z�d�d�d��Z�d�d��Z�d�d��Z�d�dÄZ�d�dńZ�d�d�dDŽZ�d�dɄZ�d�d˄Z�d�d̈́Z�d�dτZ�d�dфZ�d�dӄZ�d�dՄZ�d�d�dׄZ�dS)��EditorWindowr)�
Percolator)�ColorDelegator�color_config)�
UndoDelegator)�	IOBinding�encoding)�mainmenu)�MultiStatusBar)�AutoComplete)�
AutoExpand)�Calltip)�CodeContext)�LineNumbers)�FormatParagraph�FormatRegion�Indents�Rstrip)�
ParenMatch)�
ZoomHeightNTcCsF	ddlm}tjdur�tj�tjdd�}tj	�
d�r:ddtjdd�}tj�d	�r.d
}qed}tj�||dd�}n+tj	dd�dkrXtj�tjdd
t
��}	tj�|	�rW|	}n
tj	dkretj�tjd�}tj�|�}tj�|�r�|t_tj	dkrdtjt_n
dtjdd�t_||_|p�|j}||_t|�|_tj||jd�|_}
|r�|j|_|j|j_ni|_i|j_tjo�tj�tjd�|_d|_t|
�|_ }t!|dd�|_"}tj#ddddd�}
dddd|
d tj#ddd!dd�d"�}t$t%�|fi|��|_&}|j&|j_'|�(�|�)�|j�*d#|j+�|j�,d$|j-�t.�/��r6|�,d$|j-�|�,d%|j0�|�,d&|j0�n|�,d'|j0�|�,d(t1�|�,d)t1�|�,d*t1�|�,d+|j2�|�,d,|j3�|�,d-|j4�|�,d.|j5�|�,d/|j6�|�,d0|j7�|�,d1|j8�|�,d2|j9�|�,d3|j:�|�,d4|j;�|�,d5d6d7��|�,d8|j<�|�,d9|j=�|�,d:|j>�|�,d;|j?�|�,d<|j@�|�,d=|jA�|�,d>|jB�|�,d?|jC�|�,d@|jD�|�,dA|jE�|�,dB|jF�|�G|�|_H}|�,dC|jI�|�,dD|jJ�|�,dE|jK�|�,dF|jL�|�,dG|jM�|�,dH|jN�|�O|�}|�,dI|jP�|�,dJ|jQ�|�,dK|�Rd��|�,dL|�RdM��|�,dN|jS�|�,dO|jT�|�,dP|jU�|�r�||j|<|�rf||jV|<|�,dQ|jW�|�,dR|jjX�|�,dS|jY�|�,dT|jZ�|�,dU|j[�|�\�|j]t^t_dMdV�|j`dMdMdW�|jadMdMdW�|jb|dX<|jcdMdtddY�|je|dZ<t�f|jdd�|d[<|jcdMdMtddY�|�g�|�h�tj#dd\d]d^d�}||_id_|_j|jj|_k|�l�tmtd`��s�|j&dat_n|�o�db|_p|�q|�|_r}|�s�|_t}|�u|�|jv|_v|jw|_w|�x|jy�|�z|�|_{}|�||j}�dc|_~|�dc�d|_�d|_�d|_�|�ritj��|��ratj�|��sa|��|��r`dd|_~|��|�}|�|�n|��|�dd|_~|���|�y�|���|���|j���de�}|�r�|��df�}|du�r�dg}|dk�r�|���|dM}||_�t��|j��t�j�|_�t�j�|_�t�j�|_�|��dhdi�|��djdkdldm�|��dndo�|��dpdq�|��drdqdsdt�|��||j��}|�,dh|j��|�,dj|j��|�,du|j��|�,dv|��|�j��|�,dw|��|�j��|��|�}|�,dx|j��|�,dr|j��||�}|�,dy|j��|�,dz|j��|�,d{|j��|�,d||��|�j��|��|�|_�}|�,dn|j��|�,dp|j��|�,d}|j��|�,d~|��|�j��|j��rr|��|�|_�|�,d|j�j��n|��d�d�d��|j��r�|��|�|_�tj#ddd�d^d��r�|���|�,d�|j��dS|��d�d�d��dS)�Nr)�
ScriptBindingZDocz
index.html�linuxzpython-docs-z%s.%s.%s�z/var/www/html/python/z/var/www/html/python/index.htmlz/usr/share/doc/�winzPython%s.chmrz0Resources/English.lproj/Documentation/index.htmlzfile://zhttps://docs.python.org/%d.%d/�)�menuzrecent-files.lst��vbar)�name�mainr#�width�int��type�text�ZnoneZ
wordprocessor�height)r?�padx�wrapZhighlightthicknessrAZtabstylerGZWM_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>>cSsdS�N�breakr ��eventr r r!�<lambda>�sz'EditorWindow.__init__.<locals>.<lambda>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>>)�side�fill�expand)Zweight�command)�row�columnZstickyZyscrollcommand�font�Indentz
use-spaces�boolr�blink_off_time�
insertofftime)�2i�i@KLFTr�end���z<<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*ontext�disabledzline-numbers-defaultz<<toggle-line-numbers>>�*ine*umbers)�Zidlelib.runscriptr7r#�help_url�os�path�joinr�base_prefix�platform�countr�isdirr"�isfile�normpath�flist�root�Menu�menubarrZListedToplevel�top�vars�tkinter_varsZinversedict�
instance_dictrZuserdir�recent_files_path�prompt_last_line�Frame�
text_framerr>�	GetOptionr
ZTextrEZfocused_widget�
createmenubar�apply_bindings�protocol�close�bind�close_eventrZisAquaTk�right_menu_eventr�handle_winconfig�cut�copy�paste�center_insert_event�help_dialog�python_docs�about_dialog�
config_dialog�open_module_event�
select_all�remove_selection�
find_event�find_again_event�find_in_files_event�find_selection_event�
replace_event�goto_line_event�smart_backspace_event�newline_and_indent_event�smart_indent_eventr2�fregion�indent_region_eventZdedent_region_eventZcomment_region_eventZuncomment_region_eventZtabify_region_eventZuntabify_region_eventr3Ztoggle_tabs_eventZchange_indentwidth_event�move_at_edge_if_selection�
del_word_left�del_word_right�
home_callback�dict�new_callbackZclose_all_callback�open_module_browser�open_path_browser�open_turtle_demo�set_status_bar�packZLEFTZBOTHZrowconfigureZcolumnconfigure�handle_yviewZgridZNSEW�set�GetFontZ	focus_set�	set_width�usetabs�tabwidth�indentwidth�set_notabs_indentwidth�hasattrr]�update_cursor_blink�num_context_linesr$�perr'�undoZinsertfilter�undo_block_start�undo_block_stopZset_saved_change_hook�saved_change_hookr(�ioZset_filename_change_hook�filename_change_hookZ	good_load�set_indentation_params�color�code_context�line_numbers�exists�loadfile�ispythonsourceZset_filename�ResetColorizer�update_recent_files_list�load_extensions�menudict�get�index�
add_separator�	wmenu_endZregister_callback�postwindowsmenurZ
askintegerrZaskyesno�	showerror�	event_addr,�user_input_insert_tagsZautocomplete_eventZtry_open_completions_eventZforce_open_completions_eventr-Zexpand_word_eventr1Zformat_paragraph_eventr5Zflash_paren_eventZparen_closed_eventZcheck_module_eventZrun_module_eventZrun_custom_eventr4Z	do_rstripr.�ctipZtry_open_calltip_eventZrefresh_calltip_eventZforce_open_calltip_eventr6Zzoom_height_event�allow_code_contextr/Ztoggle_code_context_event�update_menu_state�allow_line_numbersr0�toggle_line_numbers_event)�selfro�filename�keyrpr7ZdochomeZpyverZbasepathZchmfilersrzr>rAZtext_optionsrEr��indentsZ	usespacesr�r�r��	is_py_srcr<r`ZautocompleteZ
parenmatchZ
scriptbindingr�r r r!�__init__Hs�

���

�
��

���







�



�



����
�
��zEditorWindow.__init__cCs|��dS�N)r��r�rOr r r!r�`�zEditorWindow.handle_winconfigcCs^|j}tt|jj|�d�|�d�g��}|��d|}t||�d�d��d�}|||_	dS)NZborderrHr;rZ)rZ�0)
rE�sum�map�tkZgetintZcgetZwinfo_widthr�measurerA)r�rEZ
inner_paddingZpixel_widthZzero_char_widthr r r!r�cs��zEditorWindow.set_widthcCs|j��\}}|j�|�dSrL)r�Zdefaultfilenamero�new)r�rO�dirname�basenamer r r!r�pszEditorWindow.new_callbackcCs�|jd@dkr|jdkrdS|j�d�r2|j�ddd�r2|j�ddd�r2t|j�d��d�d	�}n|j�dd�}tt	|��D]
}||d
vrIqNq?t	|�}t|j�d��d�d	�}||krad}dt
|�d
}|jd	@dkry|j�ddd�nV|j�d�s�|j�dd�n|j�|j�d�d|j�d��r�|j�dd�n|j�dd�|j�|�}|j�d�}|j�|d|�r�||}}|j�ddd�|j�
d||�|j�d|�|j�d�dS)N�rZHomeZiomark�<=zinsert lineend�insert linestart�.rS)� �	�insertzinsert linestart+�c�sel�1.0r`�	sel.firstZ	my_anchor�<�sel.last�>rM)�stateZkeysymrEr��comparerB�splitr��range�len�str�
tag_remove�mark_set�tag_add�see)r�rOZinsertpt�lineZlineat�dest�first�lastr r r!r�usH���
�
zEditorWindow.home_callbackcCs�|�|j�|_t|jdddd�}tjdkr|jjddtd�|jjdd	td�|jjd
dtd�|jjt	t
d�|jt	t
d�|j�d
|j
�|j�d
dd�|j�|j
�dS)NrSZgrey75)rGZborderwidthZ
backgroundrZ	_padding1z    )rTrYzCol: ?r�zLn: ?)rTrUz<<set-line-and-column>>z<KeyRelease>z<ButtonRelease>)r+rs�
status_barryrrj�	set_labelZRIGHTr�ZBOTTOM�XrEr��set_line_and_columnr�Z
after_idle)r��sepr r r!r��s
�zEditorWindow.set_status_barcCs>|j�t��d�\}}|j�dd|�|j�dd|�dS)Nr�rYzCol: %sr�zLn: %s)rEr�ZINSERTr�r�r�)r�rOr�rYr r r!r��sz EditorWindow.set_line_and_column))�fileZ_File)�editZ_Edit)�formatZF_ormat)�runZ_Run)rbZ_Options)rZ_Window)r
Z_HelpcCs�|j}i|_}|jD]'\}}t|�\}}t||�d�d�}t||d|d�||<}|j|||d�qt��rIt|ddd�|d<}|jd|d	�|�	�t|jdd
�|_
|jdjdd
d|j
d�|jd�t
�|_|��dS)NZ_menu_postcommandr)r?�tearoff�postcommand)�labelr<�	underlineZapple)r?rZapplicationZIDLE)rr<�rrr9zRecent Files)rrr<r
)rrr��
menu_specs�prepstr�getattrrqZadd_cascaderZ
isCarbonTk�
fill_menus�recent_files_menuZinsert_cascader��END�base_helpmenu_length�reset_help_menu_entries)r�Zmbarr�r?rrrr<r r r!r|�s,
���zEditorWindow.createmenubarcCsJ|jd}|�d�}|durd}||jkr|�|jd|�t�|�dS)Nrr`rarS)r�r�r��deleterZadd_windows_to_menu)r�r<r`r r r!r��s


zEditorWindow.postwindowsmenucC�|j|}|j||d�dS)z$Update label for menu item at index.)rN�r��entryconfig)r�r<r�r�menuitemr r r!�update_menu_label��
zEditorWindow.update_menu_labelcCr)z$Update state for menu item at index.�r�Nr)r�r<r�r�rr r r!r��rzEditorWindow.update_menu_statecGsT|dkrt|d�}t|�d�|�|�d�}d}|df}|jj|g|�R�dS)zHandle scrollbar.Zmovetorr`�@0,0ZscrollZunitsrM)�float�round�	getlinenorE�yview)r�rO�argsZfraction�linesr r r!r��s�zEditorWindow.handle_yviewc	Cs*|j}|�d|j�d|j���}z|�dd|�o|�|dd�}Wnty+d}Ynw|s;|�ddd	�|�d
|�|jsB|�	�|j}||_
tjdd�dk}|rY|j
d
d�|jD]%}z|\}}	}
Wn	tynYq\w|
durtq\t||
��}|j||d�q\|�|j|j�|r�|jj
dd�dS)N�@�,r�r�r�Fr�r�r`r�r9r:Zarrow)ZcursorrZibeamrM)rEr��x�yr��TclErrorr�r��rmenu�
make_rmenurOrrjZconfig�rmenu_specs�
ValueErrorrZentryconfigureZtk_popupZx_rootZy_root)r�rOrEZnewdexZin_selectionr&Ziswin�itemr�	eventnameZverify_stater�r r r!r��sB��
�zEditorWindow.right_menu_event)�CloserJNcCsft|jdd�}|jD]#}|d|d}}|dur)|j|fdd�}|j||d�q
|��q
||_dS)Nrr	rScS�|�|�dSr���event_generate�rEr+r r r!rW$�z(EditorWindow.make_rmenu.<locals>.command�rrW)rqrEr(�add_commandr�r&)r�r&r*rr+rWr r r!r's


zEditorWindow.make_rmenucCs|��Sr�)�rmenu_check_copy�r�r r r!�rmenu_check_cut+szEditorWindow.rmenu_check_cutcCs2z|j�d�}Wn
tyYdSw|rdSdS)Nr�rc�normal�rEr�r%)r�Zindxr r r!r4.s�zEditorWindow.rmenu_check_copycCs0z
|jj�d|jd�WdStyYdSw)Nztk::GetSelectionZ	CLIPBOARDrcr7)rEr��callr%r5r r r!�rmenu_check_paste6s��zEditorWindow.rmenu_check_pastecC�t�|j�dS)zHandle Help 'About IDLE' event.rM)rZAboutDialogrsr�r r r!r�>szEditorWindow.about_dialogcCst�|jd�dS)z&Handle Options 'Configure IDLE' event.ZSettingsrM)rZConfigDialogrsr�r r r!r�DszEditorWindow.config_dialogcCs"|jr|j}n|j}t�|�dS)zHandle Help 'IDLE Help' event.rM)rprsr
Z
show_idlehelp)r�rO�parentr r r!r�Js

zEditorWindow.help_dialogc
Csrtjdd�dkr1z	t�|j�WdSty0}ztjdt|�|j	d�WYd}~dSd}~wwt
�|j�dS)Nr9r:�Document Start Failure��title�messager<rM)rrjrf�	startfilere�OSErrorrr�r�rE�
webbrowser�open)r�rO�whyr r r!r�Ts�
���zEditorWindow.python_docscC�|j�d�dS)Nz<<Cut>>rM�rEr/r�r r r!r�_�zEditorWindow.cutcCs |j�d�sdS|j�d�dS)Nr�z<<Copy>>rM)rEZ
tag_rangesr/r�r r r!r�cszEditorWindow.copycCs|j�d�|j�d�dS)Nz	<<Paste>>r�rM)rEr/r�r�r r r!r�j�zEditorWindow.pastecCs.|j�ddd�|j�dd�|j�d�dS)Nr�r�zend-1cr�rM)rEr�r�r�r�r r r!r�oszEditorWindow.select_allcCs |j�ddd�|j�d�dS)Nr�r�r`r�rM)rEr�r�r�r r r!r�uszEditorWindow.remove_selectioncs*|jj�|jj�d�����fdd�}|S)z�Cursor 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-1ccsD|jd@dkr z�d��d���WdStyYdSwdS)NrFrr�r�)r�r%rN��
edge_indexZedges_tableZself_text_indexZself_text_mark_setr r!�move_at_edge�s��z<EditorWindow.move_at_edge_if_selection.<locals>.move_at_edge)rEr�r�)r�rKrLr rJr!r�zs
z&EditorWindow.move_at_edge_if_selectioncCrF)Nz
<Meta-Delete>rMrGr�r r r!r��rHzEditorWindow.del_word_leftcCrF)Nz<Meta-d>rMrGr�r r r!r��rHzEditorWindow.del_word_rightcCr;rL)r�findrEr�r r r!r��rHzEditorWindow.find_eventcCr;rL)rZ
find_againrEr�r r r!r��rHzEditorWindow.find_again_eventcCr;rL)rZfind_selectionrEr�r r r!r��rHz!EditorWindow.find_selection_eventcCst�|j|j|j�dSrL)r	rEr�ror�r r r!r��sz EditorWindow.find_in_files_eventcCst�|j�dSrL)rrEr�r r r!r��rHzEditorWindow.replace_eventcCsT|j}t�|dd�j}|dur(|�ddd�|�d|�d��|�d�|��dS)	Nz
Go To Linez/Enter a positive integer
('big' = end of file):r�r�r`r��.0rM)rErZGoto�resultr�r�r�r�)r�rOrE�linenor r r!r��s��
zEditorWindow.goto_line_eventcCspz|j�dd���}Wntyd}Ynwt�|jdd|�j}|dur6|jr0|j�|�|S|j	�
|�|S)z�Get 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.
        r�r�r=zOpen ModulezAEnter the name of a Python module
to search on sys.path and open:N)rEr��stripr%rZ
ModuleNamerOrorDr�r�)r�r?�	file_pathr r r!�open_module�s$����zEditorWindow.open_modulecC�|��dSrL)rSr�r r r!r���zEditorWindow.open_module_eventcCsJ|jj}|jjdkr|s|��}|durdSddlm}|�|j|�dS)NZPyShellEditorWindowrMr)�browser)	r�r��	__class__�__name__rS�idlelibrVZ
ModuleBrowserrp)r�rOr�rVr r r!r��s�z EditorWindow.open_module_browsercCsddlm}|�|j�dS)Nr)�pathbrowserrM)rYrZZPathBrowserrp)r�rOrZr r r!r��rIzEditorWindow.open_path_browsercCs&ddl}tjddg}|j|dd�dS)Nrz-cz,from turtledemo.__main__ import main; main()F)�shellrM)�
subprocessr�
executable�Popen)r�rOr\�cmdr r r!r��s�zEditorWindow.open_turtle_democCsV|dur'|dkr)|j�dd|�|j�ddd�|j�ddd�|��dSdSdS)Nrr�z%d.0r�r�r`z
insert +1l)rEr�r�r��center)r�rPr r r!�gotoline�s�zEditorWindow.gotolinecCs`|rtj�|�r
dStj�tj�|��\}}tj�|�dvr dS|j�dd�}|�d�o/d|vS)NT)z.pyz.pywr�z1.0 lineendz#!Zpython)	rfrgrl�splitextr��normcaserEr��
startswith)r�r��base�extr�r r r!r��szEditorWindow.ispythonsourcecCs |jr|j�|�d|_dSdSr�)roZunregister_maybe_terminater5r r r!�
close_hook�s
�zEditorWindow.close_hookcCs
||_dSr�)rg)r�rgr r r!�set_close_hook�
zEditorWindow.set_close_hookcCs2|jr	|j�|�|��|j�|�|��dSr�)roZfilename_changed_editr�rsZupdate_windowlist_registryr�r5r r r!r�s
z!EditorWindow.filename_change_hookcCsD|jrdS|�|jj�r|��|_|jr |jj|j|jd�dSdS)N)�filterZafter)r�r�r�r�r%r�Zinsertfilterafterr�r5r r r!�
_addcolorizers
�zEditorWindow._addcolorizercCs,|jsdS|j��|j�|j�d|_dSr�)r�Zremovecolorsr�Zremovefilterr5r r r!�_rmcolorizers


zEditorWindow._rmcolorizercCsL|��|��t�|j�|jdur|j��|jdur$|j��dSdS)zUpdate the color themeN)	rlrkr#r&rEr�Zupdate_highlight_colorsr�Z
update_colorsr5r r r!r�s


�zEditorWindow.ResetColorizer�_cCsp|�d|�|�|�}|r||jvr|�d|d|�d|�|�kr)|�d|�n|�d|d�|�|�dS)N�ERRORz
 wordstart�
r�z+1c)r�r��
IDENTCHARSr�r�)r�rE�pos�charr r r!�colorize_syntax_error+s
z"EditorWindow.colorize_syntax_errorcCs4tjddddd�}|sd|jd<dStj|jd<dS)	z&Update the cursor blink configuration.r@r#zcursor-blinkr\rCrr^N)rr{rEr])r�Zcursorblinkr r r!r�6s�z EditorWindow.update_cursor_blinkcCsN|jdur
|j��|jdur|j��t�|jdd�}||jd<|��dS)z.Update the text widgets' font if it is changedNr@r#rZ)r�Zupdate_fontr�rr�rprEr�)r�Znew_fontr r r!�	ResetFont@s




zEditorWindow.ResetFontcCs|t��|j_}|��D]\}}|jj|g|�R�q|��D]}t�|�}|r;|��D]\}}|jj|g|�R�q,qdS)z/Remove the keybindings before they are changed.N)	r�GetCurrentKeySetr*�default_keydefs�itemsrEZevent_delete�get_standard_extension_names�GetExtensionBindings)r��keydefsrO�keylist�
extensionName�xkeydefsr r r!�RemoveKeybindingsQs
��zEditorWindow.RemoveKeybindingsc
Cs>t��|j_}|��|��D]}t�|�}|r|�|�qi}|jjD]!}i||d<|dD]}|rE|d||dt|d�d<q1q%|j	D]R}|j	|}|�
t�}|dur[qJ|d7}td|�D]7}	|�
|	�dkr�|�|	d�}
|
r�|�|	d�}d}||vr�|||vr�|||}|r�t||�}
|j|	|
d�qdqJdS)	z-Update the keybindings after they are changedrrSNrW�acceleratorrr=)r)rrur*rvr}rxry�menudefsrr�r�rr�rDZ	entrycget�get_acceleratorr)
r�rzr|r}Z
menuEventDictr<r*ZmenubarItemr`r�ZaccelZitemNamerOr r r!�ApplyKeybindings]sH

� ��



���zEditorWindow.ApplyKeybindingscCs"|jstjddddd�|_dSdS)zCUpdate the indentwidth if changed and not using tabs in this windowr@r[z
num-spacesrBrCN)r�rr{r�r5r r r!r��s

��z#EditorWindow.set_notabs_indentwidthcCs|t��}|jd}|�t�}||jkr|�|jd|�|r7|��|D]}|�|d�}|j	|d|d�q$||jd<dS)z3Update the additional help entries on the Help menur
rSrr2N)
rZGetAllExtraHelpSourcesListr�r�rrrr��"_EditorWindow__extra_help_callbackr3)r�Z	help_listZhelpmenuZhelpmenu_length�entryr_r r r!r�s


z$EditorWindow.reset_help_menu_entriesc�|f�fdd�	}|S)zCCreate a callback with the helpfile value frozen at definition timec
s�|�d�stj�|�}tjdd�dkr;zt�|�WdSty:}ztj	dt
|��jd�WYd}~dSd}~wwt�
|�dS)N)Zwww�httpr9r:r=r>)rdrfrgrnrrjrArBrr�r�rErCrD)�helpfilerEr5r r!�display_extra_help�s

���z>EditorWindow.__extra_help_callback.<locals>.display_extra_helpr )r�r�r�r r5r!Z__extra_help_callback�sz"EditorWindow.__extra_help_callbackc
s�g}|j}|r)tj�|�r)t|dddd��}|��}Wd�n1s$wY|rBtj�|�d}||vr<|�|�|�d|�g�|D]}d|vsVtj�|dd	��s[��	|�qF�fd
d�|D�}d}|dt
|��}|r�zt|d
ddd��
}|�|�Wd�n1s�wYWn*ty�}zt
|jdd�s�d|j_tjdd|�d�|jd�WYd}~nd}~ww|jjD]+}	|	j}
|
�dt�t|�D]\}}|��}|	�|�}
|
j||d||
dd�q�q�dS)z/Load and update the recent files list and menus�r�utf_8r)r)�errorsNror�racsg|]}|�vr|�qSr r )�.0rg�Z	bad_pathsr r!�
<listcomp>�sz9EditorWindow.update_recent_files_list.<locals>.<listcomp>Z1234567890ABCDEFGHIJK�w�recentfiles_messageFTzIDLE Warningz)Cannot save Recent Files list to disk.
  z
Select OK to continue.r>r�)rrWr)rwrfrgr�rD�	readlines�abspath�remover��appendr��
writelinesrBrrpr�r�showwarningrErsrvrrr�	enumerate�rstrip�#_EditorWindow__recent_file_callbackr3)r��new_fileZrf_listrRZrf_list_filergZulcharsZrf_file�err�instancer<�i�	file_name�callbackr r�r!r��sl�
�

��������	
���z%EditorWindow.update_recent_files_listcr�)Ncs�jj|d�dS)N)ZeditFile)r�rD)Z
fn_closurer5r r!�open_recent_file�sz=EditorWindow.__recent_file_callback.<locals>.open_recent_filer )r�r�r�r r5r!Z__recent_file_callback�sz#EditorWindow.__recent_file_callbackcCs�|��}|��}|r|r|d|t}n|r|}n|r|}nd}|p&|p&|}|��s3d|}d|}|j�|�|j�|�dS)Nz - �untitledz*%s*z*%s)�short_title�
long_title�_py_version�	get_savedrsZwm_titleZwm_iconname)r�Zshort�longr?Ziconr r r!r��szEditorWindow.saved_change_hookcCs
|j��Sr�)r�r�r5r r r!r��rizEditorWindow.get_savedcCs|j�|�dSr�)r��	set_saved)r��flagr r r!r��szEditorWindow.set_savedcCs|j��dSr�)r��
reset_undor5r r r!r��r1zEditorWindow.reset_undocCs|jj}|rtj�|�SdS)Nr�)r�r�rfrgr�)r�r�r r r!r��szEditorWindow.short_titlecCs|jjpdS)Nr=)r�r�r5r r r!r��r�zEditorWindow.long_titlecCrTrL)r`r�r r r!r��rUz EditorWindow.center_insert_eventr�cCsH|j}|��\}}|�|�}||}td||d�}|�t|��dS)NrSr;)rE�getwindowlinesr�maxrr)r��markrErs�botrPrGZnewtopr r r!r`s
zEditorWindow.centercCsN|j}|�d�}|�d�}||kr#|��dkr#t|d�}||d}||fS)Nrz@0,65535rSrG)rErZwinfo_heightrB)r�rErsr�rGr r r!r�	s

zEditorWindow.getwindowlinescCs|j}tt|�|���Sr�)rErBrr�)r�r�rEr r r!rszEditorWindow.getlinenocCs(|j��}t�d|�}ttt|����S)zReturn (width, height, x, y)z(\d+)x(\d+)\+(-?\d+)\+(-?\d+))rsZwm_geometry�re�match�listr�rB�groups)r�Zgeom�mr r r!�get_geometrys
zEditorWindow.get_geometrycCrTrL)rr�r r r!r�rUzEditorWindow.close_eventcCsH|jr"|��s|j��dkr|j��|j��|j��|j��SdS)Nr7)r�r�rsr�Z	deiconify�lowerZlift�	maybesaver5r r r!r�!s



�zEditorWindow.maybesavecCs8z|��}t|�dkr|��|WStyYdSw)N�cancel)r�r��_close�AttributeError)r�Zreplyr r r!r*s�zEditorWindow.closecCs�|jjr|j|jjd�t�|j�|��|j��d|_d|_|j	r,|j	��d|_	d|_
d|_|j��d|_|j
��|jrH|��dSdS)N)r�)r�r�r�rZunregister_callbackr��unload_extensionsrr�r�rErur�rsZdestroyrgr5r r r!r�3s$



�zEditorWindow._closecCsi|_|��dSr�)�
extensions�load_standard_extensionsr5r r r!r�GszEditorWindow.load_extensionscCs0t|j���D]}t|d�r|��qi|_dS)Nr)r�r��valuesr�r)r��insr r r!r�Ks

�
zEditorWindow.unload_extensionscCs@|��D]}z|�|�Wqtdt|��t��YqdS)NzFailed to load extension)rx�load_extension�print�repr�	traceback�	print_exc)r�r?r r r!r�Qs�z%EditorWindow.load_standard_extensionscCstjdd�S)NT)Zeditor_only)rZ
GetExtensionsr5r r r!rxYr�z)EditorWindow.get_standard_extension_namesZZzDummyZzzdummyc		CsN|j�||�}zztjd|td�}Wnttfy#t�|�}YnwWn
ty2td|��wt||�}t	�
|�}t|d�rI|�|j
|�||�}||j|<|r�|�|�|D]I}|�dd�}|dd�dkry|dd�}|dd�dksk|d	d�d
kr�|dd	�}|d	d�d
ks�|d}t||�r�|j�|t||��q[dSdS)Nr�)�packagez
Failed to import extension: r��-rmrSr�rar�Z_event)�extfilesr��	importlib�
import_module�__package__�ImportError�	TypeErrorr�rrryr�r
r�r�r}rrEr�)	r�r?Zfname�mod�clsrzr�ZveventZ
methodnamer r r!r�`sD��
�




��
��zEditorWindow.load_extensioncCsH|dur|jj}|j}||_|��D]\}}|r!|j|g|�R�qdSr�)r*rvrErzrwr�)r�rzrErOr{r r r!r}|s��zEditorWindow.apply_bindingsc	Cs�|dur|jj}|dur|jj}|j}|j}|D]Z\}}|�|�}|s$q|D]K}|s/|��q&|\}	}
|	dd�dk}|rC|	dd�}	t|	�\}}	t||
�}
||
fdd�}|rh|�	|
t
�}|j|	|||
|d�q&|j|	|||
d�q&qdS)zAdd appropriate entries to the menus and submenus

        Menus that are absent or None in self.menudict are ignored.
        NrS�!cSr-r�r.r0r r r!rW�r1z(EditorWindow.fill_menus.<locals>.command)rrrWr�variable)rrrWr)
r*r�rvr�rEr�r�rr��get_var_objZ
BooleanVarZadd_checkbuttonr3)r�r�rzr�rEZmnameZ	entrylistr<r�rr+ZcheckbuttonrrrW�varr r r!r
�s@


����zEditorWindow.fill_menuscCs"|�|�}|r
|��}|St|��r�)r�r��	NameError)r�r?r��valuer r r!�getvar�s

zEditorWindow.getvarcCs&|�||�}|r|�|�dSt|��r�)r�r�r�)r�r?r��vartyper�r r r!�setvar�szEditorWindow.setvarcCs,|j�|�}|s|r||j�|j|<}|Sr�)rur�rE)r�r?r�r�r r r!r��szEditorWindow.get_var_objcCs(|jr|j�d|�pd|j�|�vSdS)NZTODO�STRINGrS)r�rE�
tag_prevrangeZ	tag_names)r�Z
text_indexr r r!�is_char_in_string�s
�zEditorWindow.is_char_in_stringcCs8z|j�d�}|j�d�}||fWStyYdSw)Nr�r��NNr8)r�r�r�r r r!�get_selection_indices�s
�z"EditorWindow.get_selection_indicescCs|jdpt}t|�S)N�tabs)rE�TK_TABWIDTH_DEFAULTrB)r��currentr r r!�get_tk_tabwidth�szEditorWindow.get_tk_tabwidthc	CsF|j}|��|kr!|j�dd|dd|jd|�}|j|d�dSdS)NrZr�z
-displayof�n)r�)rEr�r�r9ZmasterZ	configure)r�ZnewtabwidthrEZpixelsr r r!�set_tk_tabwidth�s��zEditorWindow.set_tk_tabwidthcCsP|r |r |��}d|krdkrnn||_|j|jkr d|_|�|j�dS)Nr;rF)�guess_indentr�r�r�r�)r�r�Zguessr�r r r!r��sz#EditorWindow.set_indentation_paramsc
CsD|j}|��\}}|r|r|�||�|�d|�dS|�dd�}|dkr9|�ddd�r3|�d�dS|��dS|dd	vrF|�d�dS|j}t|�	|��}|d
ksVJ�|d|j
|j
}d
}		|dd�}|	d}	t|�	|��}||ks~|dd	vrq�qc|��|�d|	d�||kr�|�dd
|||j
�|��dS)Nr�rMr�r=r�r�z	insert-1cra� 	rrSz
insert-%dcr�)rEr�rr�r�r�Zbellr�r��
expandtabsr�r�r�r�r�)
r�rOrEr�r��charsr�ZhaveZwantZ
ncharsdeletedr r r!r��sH
�
��z"EditorWindow.smart_backspace_eventc
Cs|j}|��\}}|��zm|r1|r1t|�t|�kr%|j�|�W|��S|�||�|�d|�|�	dd�}t
||j�\}}|t|�krN|�
||j�n!|jrTd}nt|�|j��}|j}	d|	||	}|�d||j�|�d�W|��dS|��w)Nr�r�r�r�rM)rEr�r��
index2liner�r�r�rr�r��get_line_indentr�r��reindent_tor�r�r�r�r�r�)
r�rOrEr�r��prefix�rawZ	effectiveZpadr�r r r!r�%s.
�
zEditorWindow.smart_indent_eventc	CsL|j}|��\}}|���z�|r|r|�||�|�d|�|�dd�}dt|�}}||krD||dvrD|d7}||krD||dvs6||kr\|�dd|j�W|�	d�|�
�dS|d|�}d}|r~|d	dvr~|dd	�}|d7}|r~|d	dvsl|r�|�d
|d�|�d�dvr�|�d�|�d�dvs�|�dd|j�t|�d��}	t
�|j|j�}
|js�|jD],}t|	|d�}t|�d}
|�|
d�}|
�|�|
�|�|
��}|dus�|dkr�q�q�|
�|p�d�n|�dd�}|r�|d}
nd
}
|�|
d�}|
�|�|
�d�|
��}|t
jk�rl|t
jk�rnC|t
jk�r,|�d||j�n4|t
jk�r:|�|
� ��n&|t
j!k�rY|
�"�dk�rQ|�d||j��q`|�|
�#��nJd|f��W|�	d�|�
�dS|
�$�}|�d||j�|
�%��r�|�&|�n
|�r�|
�'��r�|�(|�W|�	d�|�
�dS|�	d�|�
�w)a�Insert 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.
        r�r�rr�rSrorMNrazinsert - %d charsrNZconsoler�zbogus continuation type %r))rEr�r�rr�r�r�r�r�r�r�r�r�rZParserr�r�rxr�r�r�Zset_codeZfind_good_parse_start�_build_char_in_string_funcZset_lor�Zget_continuation_typeZC_NONEZC_STRING_FIRST_LINEZC_STRING_NEXT_LINESZ	C_BRACKETr�Zcompute_bracket_indentZC_BACKSLASHZget_num_lines_in_stmtZcompute_backslash_indentZget_base_indent_stringZis_block_openerr�Zis_block_closerr�)r�rOrEr�r�r�r�r��indent�lnor$�contextZstartatZstartatindexZrawtextZbodr�r�r r r!r�Hs�	��
U��
�

��


�

�



�
z%EditorWindow.newline_and_indent_eventcCs||jfdd�}|S)NcSs||d|�S)Nz+%dcr )�offsetZ_startindexZ_icisr r r!�inner�sz6EditorWindow._build_char_in_string_func.<locals>.inner)r�)r�Z
startindexr�r r r!r��s
�z'EditorWindow._build_char_in_string_funccCs.|jrt||j�\}}d|d|Sd|S)Nr�r�)r��divmodr�)r�r�ZntabsZnspacesr r r!�_make_blanks�szEditorWindow._make_blankscCsN|j}|��|�ddd�r|�dd�|r!|�d|�|�|j�|��dS)Nr�z!=r�)rEr�r�rr�r�r�r�)r�rYrEr r r!r��s�zEditorWindow.reindent_tocCsVt|j|j���\}}|r#|r#t||j�\}}t||j�\}}||Sd}}||S�Nr)�IndentSearcherrEr�rr�)r�ZopenerZindentedr�ZindentsmallZindentlarger r r!r��s�zEditorWindow.guess_indentcCsN|jdurdS|jjr|j��d}n|j��d}|jdd|�d�d�dS)NZShowZHiderbrdz
 Line Numbers)r<r�r)r�Zis_shownZhide_sidebarZshow_sidebarr)r�rOZ
menu_labelr r r!r��s



�z&EditorWindow.toggle_line_numbers_event)NNNNr�)r�r�)T)�rX�
__module__�__qualname__Zidlelib.percolatorr$Zidlelib.colorizerr%r&Zidlelib.undor'Zidlelib.iomenur(r)rYr*Zidlelib.statusbarr+Zidlelib.autocompleter,Zidlelib.autoexpandr-Zidlelib.calltipr.Zidlelib.codecontextr/Zidlelib.sidebarr0Zidlelib.formatr1r2r3r4Zidlelib.parenmatchr5Zidlelib.zoomheightr6r�getfilesystemencodingZfilesystemencodingrer�r�r�r�r�r�r�r�r�r�r
r|r�rr�r�r&r�r(r'r6r4r:r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rSr�r�r�r�rar�rgrhr�rkrlr��string�
ascii_letters�digitsrprsr�rtr~r�r�rr�r�r�r�r�r�r�r�r�r�r`r�rr�r�r�rr�r�r�r�rxr�r�r}r
r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r r r r!r#1s�


+

%�









			

$
.


		�

	%


	+#x
	r#cCstt|��Sr�)rBr)r�r r r!r�r�r�z[ \t]*cCs$t�|�}|��t|���|��fS)z�Return 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_rer�r`r��groupr�)r�r�r�r r r!r�s
r�c@s8eZdZdd�Zdd�Zejejdfdd�Zdd	�Z	d
S)r�cCs(||_||_d|_|_d|_|_dSr�)rEr�r��finished�blkopenline�indentedline)r�rEr�r r r!r�szIndentSearcher.__init__cCsL|jrdS|jd}|_t|�d}|j�|dd�rdS|j�||d�S)Nr=rSrNz>=r`z lineend+1c)r�r�r�rEr�r�)r�r�r�r r r!�readlineszIndentSearcher.readline)�class�def�for�if�try�whilec		CsJ|jrdS||kr||vr||_dS||kr!|jr#||_d|_dSdSdS)NrS)r�r�r�)	r�rD�token�startr`r��INDENT�NAMEZOPENERSr r r!�
tokeneater%s

�zIndentSearcher.tokeneaterc	Csltj}|jt_z$zt�|j�}|D]}|j|�qWntjtfy&YnwW|t_n|t_w|j|j	fSr�)
�tokenize�tabsizer��generate_tokensrr�
TokenError�SyntaxErrorr�r�)r�Zsave_tabsize�tokensrr r r!r1s���zIndentSearcher.runN)
rXr�r�r�rrr	r
rrr r r r!r�s

�r�cCs6|�d�}|dkr|d|�||dd�}||fS)NrmrrS)rM)�sr�r r r!rCs
r�[�]�/)ZbracketleftZbracketrightZslashcCs�|�|�}|rt��r|dvrdS|d}t�ddd�|�}t�ddd�|�}t�d	d|�}t�d
d|�}t�dd
|�}t�dd|�}t�dd|�}t�dd|�}t�dd|�}|S)N>rKrQrRr=rz-[a-z]\bcSs|����Sr�)r��upper�r�r r r!rP\sz!get_accelerator.<locals>.<lambda>z\b\w+\bcSst�|��|���Sr�)�keynamesr�r�rr r r!rP]szKey-ZCancelz
Ctrl-BreakzControl-zCtrl-r��+z><r�r�r�)r�rZ	isCocoaTkr��sub)rzr+r{rr r r!r�Rs
r�cCs4|j}|�ddd�|�ddd�|�ddd�dS)	NZtcl_wordBreakAfterza brr�Z
tcl_wordcharsz\wZtcl_nonwordcharsz\W)r�r9)rpr�r r r!�
fixwordbreakshsrcCs~|}t|�tjdd�rtjd}nd}t�|d�t||d�}|j}d|d<td�D]}|�dd|t	|�d�q,dS)	NrS)rpr��
rG�r�z  ro)
rr�argvrZsetupAppr#rEr�r�r�)r<rpr�rrEr�r r r!�_editor_windowqs�r�__main__)r@zidlelib.idle_test.test_editorr;F)�	verbosity�exit)r)8Z
importlib.abcr��importlib.utilrfrjr�r�rrr�rC�tkinterZtkinter.fontrZtkinter.ttkrrrZidlelib.configrrYrr	r
rrZidlelib.multicallr
rrrrZidlelib.treerrr�Zpython_versionr�rr"r#r��compiler�r�r�rrr�rrrXZunittestr@Zidlelib.idle_test.htestrr r r r!�<module>s|
Z

4
�	�
© 2025 GrazzMean