HEX
Server: Apache/2.4.63 (Unix)
System: Linux TOMS-220NAS 4.4.302+ #86009 SMP Wed Nov 26 18:19:17 CST 2025 x86_64
User: flavio87 (1026)
PHP: 8.3.27
Disabled: NONE
Upload Files
File: //proc/25634/root/lib64/python3.8/idlelib/__pycache__/editor.cpython-38.pyc
U

��>Nޓ��@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 �9/tmp/_install_python3/usr/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.htmlZlinuxz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>��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
ZTextrEZfocused_widget�
createmenubar�apply_bindingsZprotocol�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)�selfrp�filename�keyrqr8ZdochomeZpyverZbasepathZchmfilertr{r>rAZtext_optionsrEr��indentsZ	usespacesr�r�r��	is_py_srcr<raZautocompleteZ
parenmatchZ
scriptbindingr�r r r!�__init__Hs�
��

��
���







�






��
��
�
��zEditorWindow.__init__cCs|��dS�N)r��r�rOr r r!r�`szEditorWindow.handle_winconfigcCs^|j}tt|jj|�d�|�d�g��}|��d|}t||�d�d��d�}|||_	dS)NZborderrHr;r[)r[�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�Zdefaultfilenamerp�new)r�rO�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�.rT)� �	�insertzinsert linestart+�c�sel�1.0ra�	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�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)NrTZgrey75)rGZborderwidthZ
backgroundrZ	_padding1z    )rUrZzCol: ?r�zLn: ?)rUrVz<<set-line-and-column>>z<KeyRelease>z<ButtonRelease>)r+rt�
status_barrzrrk�	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�rZzCol: %sr�zLn: %s)rEr�ZINSERTr�r�r�)r�rOr�rZr r r!r��sz EditorWindow.set_line_and_column)�fileZ_File)�editZ_Edit)�formatZF_ormat)�runZ_Run)rcZ_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<�rrr9zRecent Files)rrr<r
)rsr��
menu_specs�prepstr�getattrrrZadd_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�}|dkr d}||jkr<|�|jd|�t�|�dS)NrrarbrT)r�r�r��deleterZadd_windows_to_menu)r�r<rar 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.Zmovetorra�@0,0ZscrollZunitsrM)�float�round�	getlinenorE�yview)r�rO�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�rar�r9r:Zarrow)ZcursorrZibeamrM)rEr��x�yr��TclErrorr�r��rmenu�
make_rmenurOrrkZconfig�rmenu_specs�
ValueErrorrZentryconfigureZtk_popupZx_rootZy_root)r�rOrEZnewdexZin_selectionr#Ziswin�itemr�	eventnameZverify_stater�r r r!r��s>�


zEditorWindow.right_menu_event)ZCloserJNcCsft|jdd�}|jD]F}|d|d}}|dk	rR|j|fdd�}|j||d�q|��q||_dS)NrrrTcSs|�|�dSr���event_generate�rEr(r r r!rX$sz(EditorWindow.make_rmenu.<locals>.command�rrX)rrrEr%�add_commandr�r#)r�r#r'rr(rXr 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�rd�normal�rEr�r")r�Zindxr r r!r..s
zEditorWindow.rmenu_check_copycCs8z|jj�d|jd�Wntk
r.YdSXdSdS)Nztk::GetSelectionZ	CLIPBOARDrdr1)rEr��callr"r/r r r!�rmenu_check_paste6s
zEditorWindow.rmenu_check_pastecCst�|j�dS)zHandle Help 'About IDLE' event.rM)rZAboutDialogrtr�r r r!r�>szEditorWindow.about_dialogcCst�|jd�dS)z&Handle Options 'Configure IDLE' event.ZSettingsrM)rZConfigDialogrtr�r r r!r�DszEditorWindow.config_dialogcCs"|jr|j}n|j}t�|�dS)zHandle Help 'IDLE Help' event.rM)rqrtr
Z
show_idlehelp)r�rO�parentr r r!r�Js

zEditorWindow.help_dialogc
Csntjdd�dkr^zt�|j�Wqjtk
rZ}ztjdt|�|j	d�W5d}~XYqjXnt
�|j�dS)Nr9r:�Document Start Failure��title�messager5rM)rrkrg�	startfilerf�OSErrorrr�r�rE�
webbrowser�open)r�rO�whyr r r!r�Ts�zEditorWindow.python_docscCs|j�d�dS)Nz<<Cut>>rM�rEr*r�r r r!r�_s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�js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�rar�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-1ccsB|jd@dkr>z�d��d���Wntk
r<YnXdS)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�rArBr r@r!r�zs
z&EditorWindow.move_at_edge_if_selectioncCs|j�d�dS)Nz
<Meta-Delete>rMr?r�r r r!r��szEditorWindow.del_word_leftcCs|j�d�dS)Nz<Meta-d>rMr?r�r r r!r��szEditorWindow.del_word_rightcCst�|j�dSrL)r�findrEr�r r r!r��szEditorWindow.find_eventcCst�|j�dSrL)rZ
find_againrEr�r r r!r��szEditorWindow.find_again_eventcCst�|j�dSrL)rZfind_selectionrEr�r r r!r��sz!EditorWindow.find_selection_eventcCst�|j|j|j�dSrL)r	rEr�rpr�r r r!r��sz EditorWindow.find_in_files_eventcCst�|j�dSrL)rrEr�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�rar��.0rM)rErZGoto�resultr�r�r�r�)r�rOrE�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)rEr��stripr"rZ
ModuleNamerErpr=r�r�)r�r?�	file_pathr r r!�open_module�s
�zEditorWindow.open_modulecCs|��dSrL)rIr�r r r!r��szEditorWindow.open_module_eventcCsJ|jj}|jjdkr|s,|��}|dkr,dSddlm}|�|j|�dS)NZPyShellEditorWindowrMr)�browser)	r�r��	__class__�__name__rI�idlelibrJZ
ModuleBrowserrq)r�rOr�rJr r r!r��s�z EditorWindow.open_module_browsercCsddlm}|�|j�dS)Nr)�pathbrowserrM)rMrNZPathBrowserrq)r�rOrNr r r!r��szEditorWindow.open_path_browsercCs&ddl}tjddg}|j|dd�dS)Nrz-cz,from turtledemo.__main__ import main; main()F)�shellrM)�
subprocessr�
executable�Popen)r�rOrP�cmdr r r!r��s�zEditorWindow.open_turtle_democCsN|dk	rJ|dkrJ|j�dd|�|j�ddd�|j�ddd�|��dS)Nrr�z%d.0r�r�raz
insert +1l)rEr�r�r��center)r�rFr 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)	rgrhrm�splitextr��normcaserEr��
startswith)r�r��base�extr�r r r!r��szEditorWindow.ispythonsourcecCs|jr|j�|�d|_dSr�)rpZunregister_maybe_terminater/r 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�)rpZfilename_changed_editr�rtZupdate_windowlist_registryr�r/r 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�r/r r r!�
_addcolorizers
zEditorWindow._addcolorizercCs,|js
dS|j��|j�|j�d|_dSr�)r�Zremovecolorsr�r]r/r r r!�_rmcolorizers

zEditorWindow._rmcolorizercCsH|��|��t�|j�|jdk	r0|j��|jdk	rD|j��dS)zUpdate the color themeN)	r_r^r#r&rEr�Zupdate_highlight_colorsr�Z
update_colorsr/r r r!r�s


zEditorWindow.ResetColorizer�_cCsp|�d|�|�|�}|r6||jkr6|�d|d|�d|�|�krR|�d|�n|�d|d�|�|�dS)NZERRORz
 wordstart�
r�z+1c)r�r��
IDENTCHARSr�r�)r�rE�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.r@r#zcursor-blinkr]rCrr_N)rr|rEr^)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 changedNr@r#r[)r�Zupdate_fontr�rr�rqrEr�)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�itemsrEZevent_delete�get_standard_extension_names�GetExtensionBindings)r��keydefsrO�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 changedrrTNrX�acceleratorrr=)rq)rrgr*rhr~rjrk�menudefsr
r�r�rr�rDZ	entrycget�get_acceleratorr)
r�rlrnroZ
menuEventDictr<r'ZmenubarItemrar�ZaccelZitemNamerOr r r!�ApplyKeybindings_s<
$




zEditorWindow.ApplyKeybindingscCs|jstjddddd�|_dS)zCUpdate the indentwidth if changed and not using tabs in this windowr@r\z
num-spacesrBrCN)r�rr|r�r/r 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
rTrr,N)
rZGetAllExtraHelpSourcesListr�r�rrrr��"_EditorWindow__extra_help_callbackr-)r�Z	help_listZhelpmenuZhelpmenu_length�entryrSr 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)ZwwwZhttpr9r:r6r7)rXrgrhrorrkr:r;rr�r�rEr<r=)�helpfiler>r/r r!�display_extra_help�s
�z>EditorWindow.__extra_help_callback.<locals>.display_extra_helpr )r�rwrxr r/r!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)�errorsrar�rbcsg|]}|�kr|�qSr r )�.0rh�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.r7Nr�)rrXr)rxrgrhr�r=�	readlines�abspath�remover��appendr��
writelinesr;rrqr�r�showwarningrErtrwr
rr�	enumerate�rstrip�#_EditorWindow__recent_file_callbackr-)r��new_fileZrf_listrHZrf_list_filerhZulcharsZrf_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_closurer/r r!�open_recent_file�sz=EditorWindow.__recent_file_callback.<locals>.open_recent_filer )r�r�r�r r/r!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_savedrtZwm_titleZwm_iconname)r�ZshortZlongr8Ziconr r r!r��szEditorWindow.saved_change_hookcCs
|j��Sr�)r�r�r/r r r!r��szEditorWindow.get_savedcCs|j�|�dSr�)r��	set_saved)r��flagr r r!r��szEditorWindow.set_savedcCs|j��dSr�)r��
reset_undor/r r r!r��szEditorWindow.reset_undocCs|jj}|rtj�|�SdS)Nr�)r�r�rgrhr�)r�r�r r r!r��szEditorWindow.short_titlecCs|jjp
dS)Nr=)r�r�r/r r r!r��szEditorWindow.long_titlecCs|��dSrL)rTr�r r r!r��sz EditorWindow.center_insert_eventr�cCsH|j}|��\}}|�|�}||}td||d�}|�t|��dS)NrTr;)rE�getwindowlinesr�maxrr)r��markrErt�botrFrGZnewtopr r r!rTs
zEditorWindow.centercCsN|j}|�d�}|�d�}||krF|��dkrFt|d�}||d}||fS)Nrz@0,65535rTrG)rErZwinfo_heightrB)r�rErtr�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+))rtZwm_geometry�re�match�listr�rB�groups)r�Zgeom�mr r r!�get_geometrys
zEditorWindow.get_geometrycCs|��dSrL)rr�r r r!r�szEditorWindow.close_eventcCsH|jrD|��s:|j��dkr&|j��|j��|j��|j��SdS)Nr1)r�r�rtr�Z	deiconify�lowerZlift�	maybesaver/r 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_extensionsrr�r�rErvr�rtZdestroyr[r/r r r!r�5s"



zEditorWindow._closecCsi|_|��dSr�)�
extensions�load_standard_extensionsr/r 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)rj�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
GetExtensionsr/r r r!rj[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: rr�-r`rTr�rbr�Z_event)�extfilesr��	importlib�
import_module�__package__�ImportError�	TypeErrorr�rrrkr�rrrr�r~rrEr�)	r�r?�fname�mod�clsrlr�ZveventZ
methodnamer r r!r�bs4






zEditorWindow.load_extensioncCsF|dkr|jj}|j}||_|��D]\}}|r$|j|f|��q$dSr�)r*rhrErlrir�)r�rlrErOrmr 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.
        NrT�!cSs|�|�dSr�r)r+r r r!rX�sz(EditorWindow.fill_menus.<locals>.command)rrrXrq�variable)rrrXrq)
r*rrrhr�rEr�r�r
rs�get_var_objZ
BooleanVarZadd_checkbuttonr-)r�rrrlr�rEZmnameZ	entrylistr<rvrr(ZcheckbuttonrrqrX�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�)rvr�rE)r�r?r�r�r r r!r��szEditorWindow.get_var_objcCs,|jr$|j�d|�p"d|j�|�kSdSdS)NZTODO�STRINGrT)r�rE�
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�)NNr2)r�r�r�r r r!�get_selection_indices�s
z"EditorWindow.get_selection_indicescCs|jdpt}t|�S)N�tabs)rE�TK_TABWIDTH_DEFAULTrB)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�)rEr�r�r3ZmasterZ	configure)r�ZnewtabwidthrEZpixelsr 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
CsP|j}|��\}}|r6|r6|�||�|�d|�dS|�dd�}|dkrp|�ddd�rd|�d�n|��dS|dd	kr�|�d�dS|j}t|�	|��}|d
ks�t
�|d|j|j}d
}	||jkrАq|dd�}|	d}	t|�	|��}||k�s|dd	krqq�|�
�|�d|	d�||k�rD|�dd
||�|��dS)Nr�rMr�r=r�r�z	insert-1crb� 	rrTz
insert-%dcr�)rEr�rr�r�r�Zbellr�r��
expandtabs�AssertionErrorr�ryr�r�r�)
r�rOrEr�r��charsr�ZhaveZwantZ
ncharsdeletedr r r!r��sB


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�rM)rEr�r�r��
index2liner�r�rr�r��get_line_indentr�r��reindent_tor�r�r�r�r�)
r�rOrEr�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��XdS|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�rn�|t
jk�r,|�	d|�nh|t
jk�rH|�|
���nL|t
j k�r�|
�!�dk�rp|�	d|�n|�|
�"��nd�s�t#d|f��W�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�rTrarMNrbzinsert - %d charsrDZconsoler�zbogus continuation type %r))rEr�r�r�r�rr�r�r�r�ryr�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_indentr�Zget_base_indent_stringZis_block_openerr�Zis_block_closerr�)r�rOrEr�r�r�r�r��indent�lnor!�contextZstartatZstartatindexZrawtextZbodryr�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�)rEr�r�rr�r�r�)r�rZrEr r r!r��szEditorWindow.reindent_tocCsPt|j|j���\}}|r@|r@t||j�\}}t||j�\}}nd}}||S�Nr)�IndentSearcherrEr�rr�)r�ZopenerZindentedr�ZindentsmallZindentlarger r r!r��szEditorWindow.guess_indentcCsN|jdkrdS|jjr&|j��d}n|j��d}|jdd|�d�d�dS)NZShowZHidercrez
 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)NNNN)N)N)N)N)N)N)N)N)N)N)N)N)r�)r�)N)NN)N)N)T)N)�rL�
__module__�__qualname__Zidlelib.percolatorr$Zidlelib.colorizerr%r&Zidlelib.undor'Zidlelib.iomenur(r)rMr*Zidlelib.statusbarr+Zidlelib.autocompleter,Zidlelib.autoexpandr-Zidlelib.calltipr.Zidlelib.codecontextr/Zidlelib.sidebarr0Zidlelib.formatr1r2r3r4Zidlelib.parenmatchr5Zidlelib.squeezerr6Zidlelib.zoomheightr7r�getfilesystemencodingZfilesystemencodingrfr�r�r�r�r�r�r�r�r�r	r}r�rr�r�r#r�r%r$r0r.r4r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rIr�r�r�r�rUr�r[r\r�r^r_r��stringZ
ascii_letters�digitsrbrer�rfrprtr�rrur�r�r�r�r�r�r�r�r�rTr�rr�r�r�rr�r�r�r�rjr�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


+
�
%�









		

$
.


		�
	
%


	,#v
	r#cCstt|��Sr�)rBr)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�rar��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|jr
dS|jd}|_t|�d}|j�|dd�r:dS|j�||d�S)Nr=rTrDz>=raz lineend+1c)r�r�r�rEr�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)NrT)r�r�r�)	r�rD�token�startrar��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)
rLr�r�r�r�r�r�r�r�rr r r r!r�s
�
r�cCs6|�d�}|dkr.|d|�||dd�}||fS)Nr`rrT)rC)�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>rKrRrSr=rz-[a-z]\bcSs|����Sr�)r��upper�r�r r r!rP\rQz!get_accelerator.<locals>.<lambda>z\b\w+\bcSst�|��|���Sr�)�keynamesr�r�rr r r!rP]rQzKey-ZCancelz
Ctrl-BreakzControl-zCtrl-r��+z><r�r�r�)r�rZ	isCocoaTkr��sub)rlr(rmrr r r!rsRs
rscCs4|j}|�ddd�|�ddd�|�ddd�dS)	NZtcl_wordBreakAfterza brr�Z
tcl_wordcharsz\wZtcl_nonwordcharsz\W)r�r3)rqr�r r r!�
fixwordbreakshsr
cCs~|}t|�tjdd�r&tjd}nd}t�|d�t||d�}|j}d|d<td�D] }|�dd|t	|�d�qXdS)	NrT)rqr��
rG�r�z  ra)
r
r�argvrZsetupAppr#rEr�r�r�)r5rqr�rrEr�r r r!�_editor_windowqsr�__main__)r@zidlelib.idle_test.test_editorr;F)�	verbosity�exit)r)8�
importlib.abcr��importlib.utilrgrkr�r�rr�r�r<ZtkinterZtkinter.fontrZtkinter.ttkrrrZidlelib.configrrMrr	r
rrZidlelib.multicallr
rrrrZidlelib.treerrr�Zpython_versionr�rr"r#r��compiler�r�r�r
rrsr
rrLZunittestr@Zidlelib.idle_test.htestrr r r r!�<module>sx
Z

4
�