Server : LiteSpeed
System : Linux server51.dnsbootclub.com 4.18.0-553.62.1.lve.el8.x86_64 #1 SMP Mon Jul 21 17:50:35 UTC 2025 x86_64
User : nandedex ( 1060)
PHP Version : 8.1.33
Disable Function : NONE
Directory :  /opt/cppython/lib/python3.8/idlelib/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]


Current File : //opt/cppython/lib/python3.8/idlelib/__pycache__/editor.cpython-38.opt-1.pyc
U

@��g��@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.k�r�dd/l4m5Z5e5d0d1d2d3�dd4l6m7Z7e7e2�dS)5�N)�*)�Font)�	Scrollbar)�simpledialog)�
messagebox)�idleConf)�configdialog)�grep)�help)�
help_about)�macosx)�MultiCallCreator)�pyparse)�query)�replace)�search)�wheel_event)�window�z (%s)�darwincCsbtj\}}}}}d||f}|d|f7}|dkrB|d|f7}n|dkr^|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 �-/opt/cppython/lib/python3.8/idlelib/editor.py�_sphinx_version%sr"c@sFeZdZddlmZddlmZmZddlm	Z	ddl
mZmZddl
mZddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZmZmZmZddl m!Z!ddl"m#Z#ddl$m%Z%e&�'�Z(dZ)dZ*dZ+d�dd�Z,d�dd�Z-dd�Z.dd�Z/dd�Z0dd�Z1d�dd �Z2d!d"d#d$d%d&d'gZ3d(d)�Z4d*d+�Z5d,d-�Z6d.d/�Z7d0d1�Z8dZ9d2d3�Z:d4gZ;d5d6�Z<d7d8�Z=d9d:�Z>d;d<�Z?d�d=d>�Z@d�d?d@�ZAd�dAdB�ZBd�dCdD�ZCdEdF�ZDdGdH�ZEdIdJ�ZFd�dKdL�ZGd�dMdN�ZHdOdP�ZIdQdR�ZJdSdT�ZKdUdV�ZLdWdX�ZMdYdZ�ZNd[d\�ZOd]d^�ZPd_d`�ZQdadb�ZRdcdd�ZSd�dedf�ZTd�dgdh�ZUd�didj�ZVdkdl�ZWdmdn�ZXdodp�ZYdqdr�ZZdsdt�Z[dudv�Z\dwdx�Z]dydz�Z^e_j`e_jad{Zbd|d}�Zcd~d�Zdd�d��Zed�d��Zfd�d��Zgd�d��Zhd�d��Zid�d��Zjd�d�d��Zkd�d��Zld�d��Zmd�d��Znd�d��Zod�d��Zpd�d��Zqd�d��Zrd�d��Zsd�d�d��Ztd�d��Zud�d�d��Zvd�d��Zwd�d��Zxd�d��Zyd�d��Zzd�d��Z{d�d��Z|d�d��Z}d�d��Z~d�d��Zd�d�iZ�d�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�d΄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)�Squeezer)�
ZoomHeightNTcCsH	ddlm}tjdk�rtj�tjdd�}tj	�
d�rvddtjdd�}tj�d	�r^d
}q�d}tj�||dd�}nVtj	dd�dkr�tj�tjdd
t
��}	tj�|	�r�|	}ntj	dkr�tj�tjd�}tj�|�}tj�|��r|t_tj	dk�rdtjt_ndtjdd�t_||_|�p*|j}||_t|�|_tj||jd�|_}
|�rl|j|_|j|j_ni|_i|j_tj�o�tj�tjd�|_d|_t|
�|_ }t!|dd�|_"}tj#ddddd�}
dddd|
d tj#ddd!dd�d"�}t$t%�|f|�|_&}|j&|j_'|�(�|�)�|j�*d#|j+�|j�,d$|j-�t.�/��rt|�,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|<|�r�||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|_�|�r�tj��|��r�tj�|��s�|��|��r�dd|_~|��|�}|�|�n|��|�dd|_~|���|�y�|���|���|j���de�}|�rP|��df�}|dk�r$dg}|dk�r>|���|dM}||_�t��|j��t�j�|_�t�j�|_�t�j�|_�|��dhdi�|��djdkdldm�|��dndo�|��dpdq�|��drdqdsdt�|��|�}|�,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��r�|��|�|_�|�,d|j�j��n|��d�d�d��|j��	r6|��|�|_�tj#ddd�d^d��	r&|���|�,d�|j��n|��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�wrapZhighlightthicknessrBZtabstylerHZWM_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>��z'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.runscriptr8r#�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
ZTextrFZfocused_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'�undo�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,Zautocomplete_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_eventr7Zzoom_height_event�allow_code_contextr/Ztoggle_code_context_event�update_menu_state�allow_line_numbersr0�toggle_line_numbers_event)�selfrq�filename�keyrrr8ZdochomeZpyverZbasepathZchmfilerur|r?rBZtext_optionsrFr��indentsZ	usespacesr�r�r��	is_py_srcr=rbZautocompleteZ
parenmatchZ
scriptbindingr�r r r!�__init__Hs�
��

��
���







�






��
��
�
��zEditorWindow.__init__cCs|��dS�N)r��r�rPr r r!r�`szEditorWindow.handle_winconfigcCs^|j}tt|jj|�d�|�d�g��}|��d|}t||�d�d��d�}|||_	dS)NZborderrIr<r\)r\�0)
rF�sum�map�tkZgetintZcgetZwinfo_widthr�measurerB)r�rFZ
inner_paddingZpixel_widthZzero_char_widthr r r!r�cs��zEditorWindow.set_widthcCs|j��\}}|j�|�dSrM)r�Zdefaultfilenamerq�new)r�rP�dirname�basenamer r r!r�pszEditorWindow.new_callbackcCs�|jd@dkr|jdkrdS|j�d�rd|j�ddd�rd|j�ddd�rdt|j�d��d�d	�}n8|j�dd�}tt	|��D]}||d
kr~q�q~t	|�}t|j�d��d�d	�}||kr�d}dt
|�d
}|jd	@dkr�|j�ddd�n�|j�d��s|j�dd�n@|j�|j�d�d|j�d���rB|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�.rU)� �	�insertzinsert linestart+�c�sel�1.0rb�	sel.firstZ	my_anchor�<�sel.last�>rN)�stateZkeysymrFr��comparerC�splitr��range�len�str�
tag_remove�mark_set�tag_add�see)r�rPZinsertpt�lineZlineat�dest�first�lastr r r!r�usF��
�
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)NrUZgrey75)rHZborderwidthZ
backgroundrZ	_padding1z    )rVr[zCol: ?r�zLn: ?)rVrWz<<set-line-and-column>>z<KeyRelease>z<ButtonRelease>)r+ru�
status_barr{rrl�	set_labelZRIGHTr�ZBOTTOM�XrFr��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�r[zCol: %sr�zLn: %s)rFr�ZINSERTr�r�r�)r�rPr�r[r r r!r�sz EditorWindow.set_line_and_column)�fileZ_File)�editZ_Edit)�formatZF_ormat)�runZ_Run)rdZ_Options)rZ_Window)r
Z_HelpcCs�|j}i|_}|jD]N\}}t|�\}}t||�d�d�}t||d|d�||<}|j|||d�qt��r�t|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=�rrr:zRecent Files)rr	r=r
)rtr��
menu_specs�prepstr�getattrrsZadd_cascaderZ
isCarbonTk�
fill_menus�recent_files_menuZinsert_cascader��END�base_helpmenu_length�reset_help_menu_entries)r�Zmbarr�r@rr	rr=r r r!r~�s,
���zEditorWindow.createmenubarcCsJ|jd}|�d�}|dkr d}||jkr<|�|jd|�t�|�dS)NrrbrcrU)r�r�r��deleterZadd_windows_to_menu)r�r=rbr r r!r��s


zEditorWindow.postwindowsmenucCs|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�s
zEditorWindow.update_menu_labelcCs|j|}|j||d�dS)z$Update state for menu item at index.�r�Nr)r�r=r�r�rr r r!r��s
zEditorWindow.update_menu_statecGsR|dkr<t|d�}t|�d�|�|�d�}d}|df}|jj|f|��dS)zHandle scrollbar.Zmovetorrb�@0,0ZscrollZunitsrN)�float�round�	getlinenorF�yview)r�rP�argsZfraction�linesr r r!r��s�zEditorWindow.handle_yviewc	Cs4|j}|�d|j�d|j���}z |�dd|�o<|�|dd�}Wntk
rXd}YnX|sx|�ddd	�|�d
|�|js�|�	�|j}||_
tjdd�dk}|r�|j
d
d�|jD]P}z|\}}	}
Wntk
r�Yq�YnX|
dkr�q�t||
��}|j||d�q�|�|j|j�|�r0|jj
dd�dS)N�@�,r�r�r�Fr�r�rbr�r:r;Zarrow)ZcursorrZibeamrN)rFr��x�yr��TclErrorr�r��rmenu�
make_rmenurPrrlZconfig�rmenu_specs�
ValueErrorr
ZentryconfigureZtk_popupZx_rootZy_root)r�rPrFZnewdexZin_selectionr%Ziswin�itemr�	eventnameZverify_stater�r r r!r��s>�


zEditorWindow.right_menu_event)�CloserKNcCsft|jdd�}|jD]F}|d|d}}|dk	rR|j|fdd�}|j||d�q|��q||_dS)Nrr
rUcSs|�|�dSr���event_generate�rFr*r r r!rY$sz(EditorWindow.make_rmenu.<locals>.command�rrY)rsrFr'�add_commandr�r%)r�r%r)rr*rYr r r!r&s

zEditorWindow.make_rmenucCs|��Sr�)�rmenu_check_copy�r�r r r!�rmenu_check_cut+szEditorWindow.rmenu_check_cutcCs8z|j�d�}Wntk
r&YdSX|r0dSdSdS)Nr�re�normal�rFr�r$)r�Zindxr r r!r1.s
zEditorWindow.rmenu_check_copycCs8z|jj�d|jd�Wntk
r.YdSXdSdS)Nztk::GetSelectionZ	CLIPBOARDrer4)rFr��callr$r2r r r!�rmenu_check_paste6s
zEditorWindow.rmenu_check_pastecCst�|j�dS)zHandle Help 'About IDLE' event.rN)rZAboutDialogrur�r r r!r�>szEditorWindow.about_dialogcCst�|jd�dS)z&Handle Options 'Configure IDLE' event.ZSettingsrN)rZConfigDialogrur�r r r!r�DszEditorWindow.config_dialogcCs"|jr|j}n|j}t�|�dS)zHandle Help 'IDLE Help' event.rN)rrrur
Z
show_idlehelp)r�rP�parentr r r!r�Js

zEditorWindow.help_dialogc
Csntjdd�dkr^zt�|j�Wqjtk
rZ}ztjdt|�|j	d�W5d}~XYqjXnt
�|j�dS)Nr:r;�Document Start Failure��title�messager8rN)rrlrh�	startfilerg�OSErrorrr�r�rF�
webbrowser�open)r�rP�whyr r r!r�Ts�zEditorWindow.python_docscCs|j�d�dS)Nz<<Cut>>rN�rFr-r�r r r!r�_szEditorWindow.cutcCs |j�d�sdS|j�d�dS)Nr�z<<Copy>>rN)rFZ
tag_rangesr-r�r r r!r�cszEditorWindow.copycCs|j�d�|j�d�dS)Nz	<<Paste>>r�rN)rFr-r�r�r r r!r�jszEditorWindow.pastecCs.|j�ddd�|j�dd�|j�d�dS)Nr�r�zend-1cr�rN)rFr�r�r�r�r r r!r�oszEditorWindow.select_allcCs |j�ddd�|j�d�dS)Nr�r�rbr�rN)rFr�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-1ccsB|jd@dkr>z�d��d���Wntk
r<YnXdS)NrGrr�r�)r�r$rO��
edge_indexZedges_tableZself_text_indexZself_text_mark_setr r!�move_at_edge�sz<EditorWindow.move_at_edge_if_selection.<locals>.move_at_edge)rFr�r�)r�rDrEr rCr!r�zs
z&EditorWindow.move_at_edge_if_selectioncCs|j�d�dS)Nz
<Meta-Delete>rNrBr�r r r!r��szEditorWindow.del_word_leftcCs|j�d�dS)Nz<Meta-d>rNrBr�r r r!r��szEditorWindow.del_word_rightcCst�|j�dSrM)r�findrFr�r r r!r��szEditorWindow.find_eventcCst�|j�dSrM)rZ
find_againrFr�r r r!r��szEditorWindow.find_again_eventcCst�|j�dSrM)rZfind_selectionrFr�r r r!r��sz!EditorWindow.find_selection_eventcCst�|j|j|j�dSrM)r	rFr�rqr�r r r!r��sz EditorWindow.find_in_files_eventcCst�|j�dSrM)rrFr�r r r!r��szEditorWindow.replace_eventcCsT|j}t�|dd�j}|dk	rP|�ddd�|�d|�d��|�d�|��dS)	Nz
Go To Linez/Enter a positive integer
('big' = end of file):r�r�rbr��.0rN)rFrZGoto�resultr�r�r�r)r�rPrF�linenor r r!r��s�
zEditorWindow.goto_line_eventcCspz|j�dd���}Wntk
r.d}YnXt�|jdd|�j}|dk	rl|jr`|j�|�n|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)rFr��stripr$rZ
ModuleNamerHrqr@r�r�)r�r@�	file_pathr r r!�open_module�s
�zEditorWindow.open_modulecCs|��dSrM)rLr�r r r!r��szEditorWindow.open_module_eventcCsJ|jj}|jjdkr|s,|��}|dkr,dSddlm}|�|j|�dS)NZPyShellEditorWindowrNr)�browser)	r�r��	__class__�__name__rL�idlelibrMZ
ModuleBrowserrr)r�rPr�rMr r r!r��s�z EditorWindow.open_module_browsercCsddlm}|�|j�dS)Nr)�pathbrowserrN)rPrQZPathBrowserrr)r�rPrQr r r!r��szEditorWindow.open_path_browsercCs&ddl}tjddg}|j|dd�dS)Nrz-cz,from turtledemo.__main__ import main; main()F)�shellrN)�
subprocessr�
executable�Popen)r�rPrS�cmdr r r!r��s�zEditorWindow.open_turtle_democCsN|dk	rJ|dkrJ|j�dd|�|j�ddd�|j�ddd�|��dS)Nrr�z%d.0r�r�rbz
insert +1l)rFr�r�r��center)r�rIr r r!�gotoline�s
zEditorWindow.gotolinecCs`|rtj�|�rdStj�tj�|��\}}tj�|�dkr@dS|j�dd�}|�d�o^d|kS)NT)z.pyz.pywr�z1.0 lineendz#!Zpython)	rhrirn�splitextr��normcaserFr��
startswith)r�r��base�extr�r r r!r��szEditorWindow.ispythonsourcecCs|jr|j�|�d|_dSr�)rqZunregister_maybe_terminater2r r r!�
close_hook�szEditorWindow.close_hookcCs
||_dSr�)r^)r�r^r r r!�set_close_hookszEditorWindow.set_close_hookcCs2|jr|j�|�|��|j�|�|��dSr�)rqZfilename_changed_editr�ruZupdate_windowlist_registryr�r2r r r!r�s
z!EditorWindow.filename_change_hookcCsV|jr
dS|�|jj�r"|��|_|jrR|j�|j�|j�|j�|j�|j�dSr�)	r�r�r�r�r%r��removefilterr�r�r2r r r!�
_addcolorizers
zEditorWindow._addcolorizercCs,|js
dS|j��|j�|j�d|_dSr�)r�Zremovecolorsr�r`r2r r r!�_rmcolorizers

zEditorWindow._rmcolorizercCsH|��|��t�|j�|jdk	r0|j��|jdk	rD|j��dS)zUpdate the color themeN)	rbrar#r&rFr�Zupdate_highlight_colorsr�Z
update_colorsr2r r r!r�s


zEditorWindow.ResetColorizer�_cCsp|�d|�|�|�}|r6||jkr6|�d|d|�d|�|�krR|�d|�n|�d|d�|�|�dS)N�ERRORz
 wordstart�
r�z+1c)r�r��
IDENTCHARSr�r�)r�rF�pos�charr r r!�colorize_syntax_error-s
z"EditorWindow.colorize_syntax_errorcCs2tjddddd�}|s"d|jd<ntj|jd<dS)	z&Update the cursor blink configuration.rAr#zcursor-blinkr^rDrr`N)rr}rFr_)r�Zcursorblinkr r r!r�8s�z EditorWindow.update_cursor_blinkcCsN|jdk	r|j��|jdk	r(|j��t�|jdd�}||jd<|��dS)z.Update the text widgets' font if it is changedNrAr#r\)r�Zupdate_fontr�rr�rrrFr�)r�Znew_fontr r r!�	ResetFontBs




zEditorWindow.ResetFontcCsxt��|j_}|��D]\}}|jj|f|��q|��D]6}t�|�}|r<|��D]\}}|jj|f|��qVq<dS)z/Remove the keybindings before they are changed.N)	r�GetCurrentKeySetr*�default_keydefs�itemsrFZevent_delete�get_standard_extension_names�GetExtensionBindings)r��keydefsrP�keylist�
extensionName�xkeydefsr r r!�RemoveKeybindingsSs
zEditorWindow.RemoveKeybindingsc
CsBt��|j_}|��|��D]}t�|�}|r |�|�q i}|jjD]B}i||d<|dD](}|rb|d||dt|d�d<qbqJ|j	D]�}|j	|}|�
t�}|dkr�q�|d7}td|�D]r}	|�
|	�dkr�|�|	d�}
|
r�|�|	d�}d}||k�r|||k�r|||}|r�t||�}
|j|	|
d�q�q�dS)	z-Update the keybindings after they are changedrrUNrY�acceleratorrr>)ru)rrkr*rlrrnro�menudefsrr�r�rr�rEZ	entrycget�get_acceleratorr)
r�rprrrsZ
menuEventDictr=r)ZmenubarItemrbr�ZaccelZitemNamerPr r r!�ApplyKeybindings_s<
$




zEditorWindow.ApplyKeybindingscCs|jstjddddd�|_dS)zCUpdate the indentwidth if changed and not using tabs in this windowrAr]z
num-spacesrCrDN)r�rr}r�r2r r r!r��s
�z#EditorWindow.set_notabs_indentwidthcCs|t��}|jd}|�t�}||jkr8|�|jd|�|rn|��|D]$}|�|d�}|j	|d|d�qH||jd<dS)z3Update the additional help entries on the Help menur
rUrr/N)
rZGetAllExtraHelpSourcesListr�r�rrrr��"_EditorWindow__extra_help_callbackr0)r�Z	help_listZhelpmenuZhelpmenu_length�entryrVr r r!r�s


z$EditorWindow.reset_help_menu_entriescs|f�fdd�	}|S)zCCreate a callback with the helpfile value frozen at definition timec
s�|�d�stj�|�}tjdd�dkrrzt�|�Wq|tk
rn}ztj	dt
|��jd�W5d}~XYq|Xn
t�
|�dS)N)ZwwwZhttpr:r;r9r:)r[rhrirprrlr=r>rr�r�rFr?r@)�helpfilerAr2r r!�display_extra_help�s
�z>EditorWindow.__extra_help_callback.<locals>.display_extra_helpr )r�r{r|r r2r!Z__extra_help_callback�sz"EditorWindow.__extra_help_callbackc
s�g}|j}|r>tj�|�r>t|dddd��}|��}W5QRX|rptj�|�d}||krd|�|�|�d|�g�|D]*}d|ks�tj�|dd��sx��	|�qx�fd	d
�|D�}d}|dt
|��}|�rRz*t|dddd��}|�|�W5QRXWnVtk
�rP}z6t
|jd
d��s@d|j_tjdd|�d�|jd�W5d}~XYnX|jjD]Z}	|	j}
|
�dt�t|�D]8\}}|��}|	�|�}
|
j||d||
dd��qx�qZdS)z/Load and update the recent files list and menus�r�utf_8r)r)�errorsrer�rccsg|]}|�kr|�qSr r )�.0ri�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:Nr�)rrYr	)ryrhrir�r@�	readlines�abspath�remover��appendr��
writelinesr>r
rrr�r�showwarningrFrurxrrr�	enumerate�rstrip�#_EditorWindow__recent_file_callbackr0)r��new_fileZrf_listrKZrf_list_fileriZulcharsZrf_file�err�instancer=�i�	file_name�callbackr r�r!r��s\�
�
�
�z%EditorWindow.update_recent_files_listcs|f�fdd�	}|S)Ncs�jj|d�dS)N)ZeditFile)r�r@)Z
fn_closurer2r r!�open_recent_file�sz=EditorWindow.__recent_file_callback.<locals>.open_recent_filer )r�r�r�r r2r!Z__recent_file_callback�sz#EditorWindow.__recent_file_callbackcCs�|��}|��}|r*|r*|d|t}n|r4|}n|r>|}nd}|pL|pL|}|��sfd|}d|}|j�|�|j�|�dS)Nz - �untitledz*%s*z*%s)�short_title�
long_title�_py_version�	get_savedruZwm_titleZwm_iconname)r�Zshort�longr;Ziconr r r!r��szEditorWindow.saved_change_hookcCs
|j��Sr�)r�r�r2r r r!r��szEditorWindow.get_savedcCs|j�|�dSr�)r��	set_saved)r��flagr r r!r��szEditorWindow.set_savedcCs|j��dSr�)r��
reset_undor2r r r!r��szEditorWindow.reset_undocCs|jj}|rtj�|�SdS)Nr�)r�r�rhrir�)r�r�r r r!r��szEditorWindow.short_titlecCs|jjp
dS)Nr>)r�r�r2r r r!r��szEditorWindow.long_titlecCs|��dSrM)rWr�r r r!r��sz EditorWindow.center_insert_eventr�cCsH|j}|��\}}|�|�}||}td||d�}|�t|��dS)NrUr<)rF�getwindowlinesr�maxrr)r��markrFru�botrIrHZnewtopr r r!rWs
zEditorWindow.centercCsN|j}|�d�}|�d�}||krF|��dkrFt|d�}||d}||fS)Nrz@0,65535rUrH)rFrZwinfo_heightrC)r�rFrur�rHr r r!r�s

zEditorWindow.getwindowlinescCs|j}tt|�|���Sr�)rFrCrr�)r�r�rFr r r!rszEditorWindow.getlinenocCs(|j��}t�d|�}ttt|����S)zReturn (width, height, x, y)z(\d+)x(\d+)\+(-?\d+)\+(-?\d+))ruZwm_geometry�re�match�listr�rC�groups)r�Zgeom�mr r r!�get_geometrys
zEditorWindow.get_geometrycCs|��dSrM)r�r�r r r!r�szEditorWindow.close_eventcCsH|jrD|��s:|j��dkr&|j��|j��|j��|j��SdS)Nr4)r�r�rur�Z	deiconify�lowerZlift�	maybesaver2r r r!r�#s


zEditorWindow.maybesavecCs<z"|��}t|�dkr|��|WStk
r6YnXdS)N�cancel)r�r��_close�AttributeError)r�Zreplyr r r!r�,szEditorWindow.closecCs�|jjr|j|jjd�t�|j�|��|j��d|_d|_|j	rX|j	��d|_	d|_
d|_|j��d|_|j
��|jr�|��dS)N)r�)r�r�r�rZunregister_callbackr��unload_extensionsr�r�r�rFrwr�ruZdestroyr^r2r r r!r�5s"



zEditorWindow._closecCsi|_|��dSr�)�
extensions�load_standard_extensionsr2r r r!r�IszEditorWindow.load_extensionscCs0t|j���D]}t|d�r|��qi|_dS)Nr�)r�r��valuesr�r�)r��insr r r!r�Ms

zEditorWindow.unload_extensionscCsD|��D]6}z|�|�Wqtdt|��t��YqXqdS)NzFailed to load extension)rn�load_extension�print�repr�	traceback�	print_exc)r�r@r r r!r�Ssz%EditorWindow.load_standard_extensionscCstjdd�S)NT)Zeditor_only)rZ
GetExtensionsr2r r r!rn[sz)EditorWindow.get_standard_extension_namesZZzDummyZzzdummyc		Cs:|j�||�}z>ztjd|td�}Wn"ttfk
rHt�|�}YnXWn tk
rltd|��YnXt||�}t	�
|�}t|d�r�|�|j
|�||�}||j|<|�r6|�|�|D]t}|�dd�}|dd�dkr�|dd�}q�|d	d�d
k�r|dd	�}q�|d}t||�r�|j�|t||��q�dS)Nr�)�packagez
Failed to import extension: rv�-rcrUr�rcr�Z_event)�extfilesr��	importlib�
import_module�__package__�ImportError�	TypeErrorr�r
rror�rrvr�rrrFr�)	r�r@Zfname�mod�clsrpr�ZveventZ
methodnamer r r!r�bs4






zEditorWindow.load_extensioncCsF|dkr|jj}|j}||_|��D]\}}|r$|j|f|��q$dSr�)r*rlrFrprmr�)r�rprFrPrqr r r!r~szEditorWindow.apply_bindingsc	Cs�|dkr|jj}|dkr |jj}|j}|j}|D]�\}}|�|�}|sHq0|D]�}|s^|��qL|\}	}
|	dd�dk}|r�|	dd�}	t|	�\}}	t||
�}
||
fdd�}|r�|�	|
t
�}|j|	|||
|d�qL|j|	|||
d�qLq0dS)zAdd appropriate entries to the menus and submenus

        Menus that are absent or None in self.menudict are ignored.
        NrU�!cSs|�|�dSr�r,r.r r r!rY�sz(EditorWindow.fill_menus.<locals>.command)rr	rYru�variable)rr	rYru)
r*rvrlr�rFr�r�rrw�get_var_objZ
BooleanVarZadd_checkbuttonr0)r�rvrpr�rFZmnameZ	entrylistr=rzrr*Zcheckbuttonr	rurY�varr r r!r�s>


��zEditorWindow.fill_menuscCs&|�|�}|r|��}|St|��dSr�)r�r��	NameError)r�r@r��valuer r r!�getvar�s

zEditorWindow.getvarcCs(|�||�}|r|�|�nt|��dSr�)r�r�r�)r�r@r��vartyper�r r r!�setvar�szEditorWindow.setvarcCs,|j�|�}|s(|r(||j�|j|<}|Sr�)rwr�rF)r�r@r�r�r r r!r��szEditorWindow.get_var_objcCs,|jr$|j�d|�p"d|j�|�kSdSdS)NZTODO�STRINGrU)r�rF�
tag_prevrangeZ	tag_names)r�Z
text_indexr r r!�is_char_in_string�s
�zEditorWindow.is_char_in_stringcCs>z"|j�d�}|j�d�}||fWStk
r8YdSXdS)Nr�r�)NNr5)r�r�r�r r r!�get_selection_indices�s
z"EditorWindow.get_selection_indicescCs|jdpt}t|�S)N�tabs)rF�TK_TABWIDTH_DEFAULTrC)r��currentr r r!�get_tk_tabwidth�szEditorWindow.get_tk_tabwidthc	CsB|j}|��|kr>|j�dd|dd|jd|�}|j|d�dS)Nr\r�z
-displayof�n)r�)rFr�r�r6ZmasterZ	configure)r�ZnewtabwidthrFZpixelsr r r!�set_tk_tabwidth�s�zEditorWindow.set_tk_tabwidthcCsP|r@|r@|��}d|kr$dkr.nn||_|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
Cs>|j}|��\}}|r6|r6|�||�|�d|�dS|�dd�}|dkrp|�ddd�rd|�d�n|��dS|dd	kr�|�d�dS|j}t|�	|��}|d
|j
|j
}d}	||jkr�q�|dd�}|	d
}	t|�	|��}||ks�|dd	kr�q�q�|��|�d|	d�||k�r2|�
dd
||�|��dS)Nr�rNr�r>r�r�z	insert-1crc� 	rUrz
insert-%dcr�)rFr�rr�r�r�Zbellr�r��
expandtabsr�rzr�r�r�)
r�rPrFr�r��charsr�ZhaveZwantZ
ncharsdeletedr r r!r��s@


z"EditorWindow.smart_backspace_eventc
Cs�|j}|��\}}|��z�|r\|r\t|�t|�krD|j�|�W��S|�||�|�d|�|�	dd�}t
||j�\}}|t|�kr�|�
||j�n>|jr�d}n&t|�|j��}|j}	d|	||	}|�d|�|�d�W�dS|��XdS)Nr�r�r�r�rN)rFr�r�r��
index2liner�r�rr�r��get_line_indentr�r��reindent_tor�r�r�r�r�)
r�rPrFr�r��prefix�rawZ	effectiveZpadr�r r r!r�(s,
zEditorWindow.smart_indent_eventc	Cs�|j}|��\}}|���z�|r>|r>|�||�|�d|�|�dd�}dt|�}}||krv||dkrv|d7}qX||kr�|�	dd�W��DdS|d|�}d}|r�|d	dkr�||j
kr�|dd	�}|d7}q�|r�|�d
|d�|�d�dk�r|�d�q�|�	dd�t|�d��}	t
�|j|j�}
|j
�s�|jD]`}t|	|d�}t|�d}
|�|
d�}|
�|�|
�|�|
��}|dk	�s�|dk�r<�q��q<|
�|�p�d�n@|�dd�}|�r�|d}
nd
}
|�|
d�}|
�|�|
�d�|
��}|t
jk�r�|t
jk�rnn|t
jk�r,|�	d|�nT|t
jk�rH|�|
���n8|t
j k�r�|
�!�dk�rp|�	d|�n|�|
�"��nW�PdS|
�#�}|�	d|�|
�$��r�|�%|�n|�r�|
�&��r�|�'|�W�dS|�d�|��XdS)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�rUrerNNrczinsert - %d charsrGZconsoler�)(rFr�r�r�r�rr�r�r�r�rzr�r�rZParserr�r�r�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�rPrFr�r�r�r�r��indent�lnor#�contextZstartatZstartatindexZrawtextZbodr}r�r r r!r�Ks�	




�






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_funccCs2|jr&t||j�\}}d|d|Sd|SdS)Nr�r�)r��divmodr�)r�r�ZntabsZnspacesr r r!�_make_blanks�szEditorWindow._make_blankscCsJ|j}|��|�ddd�r(|�dd�|r>|�d|�|��|��dS)Nr�z!=r�)rFr�r�rr�r�r�)r�r[rFr r r!r��szEditorWindow.reindent_tocCsPt|j|j���\}}|r@|r@t||j�\}}t||j�\}}nd}}||S�Nr)�IndentSearcherrFr�rr�)r��openerZindentedr�ZindentsmallZindentlarger r r!r��szEditorWindow.guess_indentcCsN|jdkrdS|jjr&|j��d}n|j��d}|jdd|�d�d�dS)NZShowZHiderdrfz
 Line Numbers)r=r�r)r�Zis_shownZhide_sidebarZshow_sidebarr)r�rPZ
menu_labelr r r!r��s


�z&EditorWindow.toggle_line_numbers_event)NNNN)N)N)N)N)N)N)N)N)N)N)N)N)r�)r�)N)NN)N)N)T)N)�rO�
__module__�__qualname__Zidlelib.percolatorr$Zidlelib.colorizerr%r&Zidlelib.undor'Zidlelib.iomenur(r)rPr*Zidlelib.statusbarr+Zidlelib.autocompleter,Zidlelib.autoexpandr-Zidlelib.calltipr.Zidlelib.codecontextr/Zidlelib.sidebarr0Zidlelib.formatr1r2r3r4Zidlelib.parenmatchr5Zidlelib.squeezerr6Zidlelib.zoomheightr7r�getfilesystemencodingZfilesystemencodingrgr�r�r�r�r�r�r�r�rrr~r�rr�r�r%r�r'r&r3r1r7r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rLr�r�r�r�rXr�r^r_r�rarbr��string�
ascii_letters�digitsrfrir�rjrtrxr�rryr�r�r�r�r�r�r�r�r�rWr�rr�r�r�r�r�r�r�r�rnr�r�rrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r r r r!r#1s


+
�
%�









		

$
.


		�
	
%


	,#v
	r#cCstt|��Sr�)rCr)r�r r r!r�sr�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�rbr��groupr�)r�r�r�r r r!r�s
r�c@s8eZdZdd�Zdd�Zejejdfdd�Zdd	�Z	d
S)r�cCs(||_||_d|_|_d|_|_dSr�)rFr�r��finished�blkopenline�indentedline)r�rFr�r r r!r�szIndentSearcher.__init__cCsL|jr
dS|jd}|_t|�d}|j�|dd�r:dS|j�||d�S)Nr>rUrGz>=rbz lineend+1c)r�r�r�rFr�r�)r�r�r�r r r!�readlineszIndentSearcher.readline)�class�def�for�if�try�whilec		Cs>|jrn2||kr ||kr ||_n||kr:|jr:||_d|_dS)NrU)r�r�r�)	r�rE�token�startrbr��INDENT�NAMEZOPENERSr r r!�
tokeneater%szIndentSearcher.tokeneaterc	Cshtj}|jt_zDz$t�|j�}|D]}|j|�q"Wntjtfk
rNYnXW5|t_X|j|j	fSr�)
�tokenize�tabsizer��generate_tokensr�r��
TokenError�SyntaxErrorr�r�)r�Zsave_tabsize�tokensr�r r r!r1s
zIndentSearcher.runN)
rOr�r�r�r�rr�r�r�rr r r r!r�s
�
r�cCs6|�d�}|dkr.|d|�||dd�}||fS)NrcrrU)rF)�sr�r r r!rCs
r�[�]�/)ZbracketleftZbracketrightZslashcCs�|�|�}|rt��r"|dkr"dS|d}t�ddd�|�}t�ddd�|�}t�d	d|�}t�d
d|�}t�dd
|�}t�dd|�}t�dd|�}t�dd|�}t�dd|�}|S)N>rLrSrTr>rz-[a-z]\bcSs|����Sr�)r��upper�r�r r r!rQ\rRz!get_accelerator.<locals>.<lambda>z\b\w+\bcSst�|��|���Sr�)�keynamesr�r�rr r r!rQ]rRzKey-ZCancelz
Ctrl-BreakzControl-zCtrl-r��+z><r�r�r�)r�rZ	isCocoaTkr��sub)rpr*rqrr r r!rwRs
rwcCs4|j}|�ddd�|�ddd�|�ddd�dS)	NZtcl_wordBreakAfterza brr�Z
tcl_wordcharsz\wZtcl_nonwordcharsz\W)r�r6)rrr�r r r!�
fixwordbreakshsrcCs~|}t|�tjdd�r&tjd}nd}t�|d�t||d�}|j}d|d<td�D] }|�dd|t	|�d�qXdS)	NrU)rrr��
rH�r�z  re)
rr�argvrZsetupAppr#rFr�r�r�)r8rrr�rrFr�r r r!�_editor_windowqsr�__main__)rAzidlelib.idle_test.test_editorr<F)�	verbosity�exit)r)8�
importlib.abcr��importlib.utilrhrlr�r�rrr�r?�tkinterZtkinter.fontrZtkinter.ttkrrrZidlelib.configrrPrr	r
rrZidlelib.multicallr
rrrrZidlelib.treerrr�Zpython_versionr�rr"r#r��compiler�r�r�rrrwrrrOZunittestrAZidlelib.idle_test.htestrr r r r!�<module>sx
Z

4
�	


F1le Man4ger