Current File : //usr/local/apps/python3/lib/python3.11/idlelib/__pycache__/editor.cpython-311.pyc
�

�KeQ��X�ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlTddlm
Z
ddlmZddlmZddlmZddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZddlmZddlmZddlmZddlmZddl m!Z!ddl"m#Z#ddlm$Z$dZ%dej&��zZ'ejdkZ(d�Z)Gd�d��Z*d�Z+ej,d��Z-d�Z.Gd�d��Z/d �Z0d!d"d#d$�Z1d%�Z2d&�Z3d'�Z4e5d(kr'dd)l6m7Z7e7d*d+d,�-��dd.l8m9Z9e9e4��dSdS)/�N)�*)�Font)�	Scrollbar)�simpledialog)�
messagebox)�idleConf)�configdialog)�grep)�help)�
help_about)�macosx)�MultiCallCreator)�pyparse)�query)�replace)�search)�wheel_event)�
py_extensions)�window�z (%s)�darwinc��tj\}}}}}|�|��}||�z
}|dkr	|d|��z
}n|dkr||d�|��z
}|S)zYFormat sys.version_info to produce the Sphinx version string used to install the chm docs�	candidate�rc�finalr)�sys�version_info)�major�minor�micro�level�serial�releases      �8/usr/local/apps/python3/lib/python3.11/idlelib/editor.py�_sphinx_versionr%&st��),�)9�&�E�5�%�����u�u�%�G��u�u��G�������V�V�%�%���	�'�	�	��U�1�X�X�v�v�.�.���N�c��eZdZddlmZddlmZmZddlm	Z	ddl
mZmZddl
mZddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZmZmZmZddl m!Z!ddl"m#Z#e$j%��Z&dZ'dZ(dZ)dZ*dxd�Z+dyd�Z,d�Z-d�Z.d�Z/d�Z0dyd�Z1gd�Z2d�Z3d�Z4d�Z5d�Z6d�Z7dZ8d�Z9d gZ:d!�Z;d"�Z<d#�Z=d$�Z>dyd%�Z?dyd&�Z@dyd'�ZAdyd(�ZBd)�ZCd*�ZDd+�ZEdyd,�ZFdyd-�ZGd.�ZHd/�ZId0�ZJd1�ZKd2�ZLd3�ZMd4�ZNd5�ZOd6�ZPd7�ZQd8�ZRdyd9�ZSdyd:�ZTdyd;�ZUd<�ZVd=�ZWd>�ZXd?�ZYd@�ZZdA�Z[dB�Z\dC�Z]e^j_e^j`zdDzZadE�ZbdF�ZcdG�ZddH�ZedI�ZfdJ�ZgdK�ZhdL�ZidydM�ZjdN�ZkdO�ZldP�ZmdQ�ZndR�ZodS�ZpdT�ZqdU�ZrdzdW�ZsdX�ZtdzdY�ZudZ�Zvd[�Zwd\�Zxd]�Zyd^�Zzd_�Z{d`�Z|da�Z}db�Z~dcddiZde�Z�dydf�Z�d{dg�Z�dh�Z�dydi�Z�dydj�Z�dk�Z�dl�Z�dm�Z�dn�Z�d|do�Z�dp�Z�dq�Z�dr�Z�ds�Z�dt�Z�du�Z�dv�Z�dydw�Z�dS)}�EditorWindowr)�
Percolator)�ColorDelegator�color_config)�
UndoDelegator)�	IOBinding�encoding)�mainmenu)�MultiStatusBar)�AutoComplete)�
AutoExpand)�Calltip)�CodeContext)�LineNumbers)�FormatParagraph�FormatRegion�Indents�Rstrip)�
ParenMatch)�
ZoomHeightNTc��!�ddlm}tj��%tj�tjdd��}tj	�
d��rbddtjdd�zz}tj�d	��rd
}�n	d}tj�||dd��}n�tj	dd�dkr�ddl
}	d
}
dtj�d�}	|	�|	j|��}
n=#t"$r0	|	�|	j|��}
n#t"$rYnwxYwYnwxYwtj�|
��r|
}n:tj	dkr*tj�tjd��}tj�|��}tj�|��r6|t_tj	dkrdtjzt_n!dtjdd�zt_||_|p|j}||_t/|��|_t3j||j���x|_}|r|j|_|j|j_ni|_i|j_t@j!o)tj�t@j!d��|_"d
|_#tI|��x|_%}
tM|
d���x|_'}tAj(dddd���}ddd d|d!tAj(ddd"d���d#�}tStT��|
fi|��x|_+}|j+|j_,|�-��|�.��|j�/d$|j0��|j�1d%|j2��tgj4��rR|�1d%|j2��|�1d&|j5��|�1d'|j5��n|�1d(|j5��|�1d)tl��|�1d*tl��|�1d+tl��|�1d,|j7��|�1d-|j8��|�1d.|j9��|�1d/|j:��|�1d0|j;��|�1d1|j<��|�1d2|j=��|�1d3|j>��|�1d4|j?��|�1d5|j@��|�1d6d7���|�1d8|jA��|�1d9|jB��|�1d:|jC��|�1d;|jD��|�1d<|jE��|�1d=|jF��|�1d>|jG��|�1d?|jH��|�1d@|jI��|�1dA|jJ��|�1dB|jK��|�L|��x|_M}|�1dC|jN��|�1dD|jO��|�1dE|jP��|�1dF|jQ��|�1dG|jR��|�1dH|jS��|�T|��}|�1dI|jU��|�1dJ|jV��|�1dK|�Wd����|�1dL|�WdM����|�1dN|jX��|�1dO|jY��|�1dP|jZ��|r�||j|<|r
||j[|<|�1dQ|j\��|�1dR|jj]��|�1dS|j^��|�1dT|j_��|�1dU|j`��|�a��|
�bt�t�dM�V��|
�edMdM�W��|
�fdMdM�W��|jg|dX<|�hdMdt��Y��|jj|dZ<tAjk|jdd��|d[<|�hdMdMt��Y��|�l��|�m��tAj(dd\d]d^���}||_nd_|_o|jo|_p|�q��t�t@d`��s|j+dat@_s|�t��db|_u|�v|��x|_w}|�x��x|_y}|�z|��|j{|_{|j||_||�}|j~��|�|��x|_�}|��|j���dc|_�|��dc��d|_�d|_�d|_�|r�tj��|��rftj�|��sG|��|��r1dd|_�|��|��}|��|��n|��|��dd|_�|����|�~��|����|����|j���de��}|rX|��df��}|�dg}|dkr|����|dMz}||_�t3j�|j����t,j�|_��t0j�|_��t0j�|_�|��dhdi��|��djdkdldm��|��dndo��|��dpdq��|��drdqdsdt��|��||j���}|�1dh|j���|�1dj|j���|�1du|j���|�1dv|��|��j���|�1dw|��|��j���|��|��}|�1dx|j���|�1dr|j���||��}|�1dy|j���|�1dz|j���|�1d{|j���|�1d||��|��j���|��|��x|_�}|�1dn|j���|�1dp|j���|�1d}|j���|�1d~|��|��j���|j�r;|��|��|_�|�1d|j�j���n|��d�d�d���|j�rc|��|��|_�tAj(ddd�d^���r|����|�1d�|j���dS|��d�d�d���dS)�Nr)�
ScriptBinding�Docz
index.html�linuxzpython-docs-z%s.%s.%s�z/var/www/html/python/z/var/www/html/python/index.htmlz/usr/share/doc/�win�zSoftware\Python\PythonCore\z\Help\Main Python Documentationrz0Resources/English.lproj/Documentation/index.htmlzfile://zhttps://docs.python.org/%d.%d/�)�menuzrecent-files.lst�vbar)�name�mainr(�width�int��type�text��none�
wordprocessor�height)rF�padx�wrap�highlightthicknessrH�tabstylerP�WM_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>>c��dS�N�break�)�events r$�<lambda>z'EditorWindow.__init__.<locals>.<lambda>�s��'�r&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)�weight�command)�row�column�sticky�yscrollcommand�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)��idlelib.runscriptr=r(�help_url�os�path�joinr�base_prefix�platform�countr�isdir�winreg�winver�
QueryValue�HKEY_CURRENT_USER�FileNotFoundError�HKEY_LOCAL_MACHINE�isfile�normpath�flist�root�Menu�menubarr�ListedToplevel�top�vars�tkinter_vars�inversedict�
instance_dictr�userdir�recent_files_path�prompt_last_line�Frame�
text_framerrE�	GetOptionr�TextrL�focused_widget�
createmenubar�apply_bindings�protocol�close�bind�close_eventr
�isAquaTk�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_eventr7�fregion�indent_region_event�dedent_region_event�comment_region_event�uncomment_region_event�tabify_region_event�untabify_region_eventr8�toggle_tabs_event�change_indentwidth_event�move_at_edge_if_selection�
del_word_left�del_word_right�
home_callback�dict�new_callback�close_all_callback�open_module_browser�open_path_browser�open_turtle_demo�set_status_bar�pack�LEFT�BOTH�rowconfigure�columnconfigure�handle_yview�grid�NSEW�set�GetFont�	focus_set�	set_width�usetabs�tabwidth�indentwidth�set_notabs_indentwidth�hasattrrm�update_cursor_blink�num_context_linesr)�perr,�undo�insertfilter�undo_block_start�undo_block_stop�set_saved_change_hook�saved_change_hookr-�io�set_filename_change_hook�filename_change_hook�	good_load�set_indentation_params�color�code_context�line_numbers�exists�loadfile�ispythonsource�set_filename�ResetColorizer�update_recent_files_list�load_extensions�menudict�get�index�
add_separator�	wmenu_end�register_callback�postwindowsmenur�
askintegerr�askyesno�	showerror�	event_addr1�user_input_insert_tags�autocomplete_event�try_open_completions_event�force_open_completions_eventr2�expand_word_eventr6�format_paragraph_eventr:�flash_paren_event�paren_closed_event�check_module_event�run_module_event�run_custom_eventr9�	do_rstripr3�ctip�try_open_calltip_event�refresh_calltip_event�force_open_calltip_eventr;�zoom_height_event�allow_code_contextr4�toggle_code_context_event�update_menu_state�allow_line_numbersr5�toggle_line_numbers_event)�selfr��filename�keyr�r=�dochome�pyver�basepathr~�docfile�KEYr�r�rErH�text_optionsrLr��indents�	usespacesr�r�r��	is_py_srcrDrp�autocomplete�
parenmatch�
scriptbindingr	s                               r$�__init__zEditorWindow.__init__Is���3�3�3�3�3�3�� �(��w�|�|�C�O�U�L�I�I�G��|�!�!�'�*�*�
L�&��c�6F�r��r�6J�)J�J���7�=�=�!8�9�9�@�?�G�G�0�H� �g�l�l�8�U�+0�,�@�@�G�G���b�q�b�!�U�*�*��
�
�
���;�c�j�;�;�;���$�/�/��0H�#�N�N�G�G��(�����"(�"3�"3�F�4M�47�#9�#9����,������������	�����7�>�>�'�*�*�&�%�G�����)�)��'�,�,�s��J�L�L���g�&�&�w�/�/�G��w�~�~�g�&�&�
A�(/��%��<�8�+�+�,5��8M�,M�L�)��)I�+.�+;�B�Q�B�+?�*@��%���
��!�u�z����	��D�z�z����.�t�$�,�G�G�G�G���3��	(� %�
�D��&+�%6�D�H�"�"� "�D��%'�D�H�"�!)�!1�"6�b�g�l�l�� �"4�76�76���!#���',�S�z�z�1���*�$�Z�f�=�=�=�=��	�D��"�6�>�7��O�O�O�����&'��+�"�,����u�F�F�F�	�	��2�+�D�1�1�*�M�M��M�M�M��	�D�"&�)��������������������,�d�j�9�9�9���
�
�(�$�*:�;�;�;��?���
	3��I�I�(�$�*:�;�;�;�
�I�I�*�4�+@�A�A�A��I�I�e�T�2�3�3�3�3�
�I�I�e�D�1�2�2�2��	�	�.�+�.�.�.��	�	�,��,�,�,��	�	�,��,�,�,��	�	�-��!6�7�7�7��	�	�)�T�X�&�&�&��	�	�*�d�i�(�(�(��	�	�+�t�z�*�*�*��	�	�%�t�'?�@�@�@��	�	�*�d�.�/�/�/��	�	�#�T�%5�6�6�6��	�	�"�D�$5�6�6�6��	�	�*�D�,>�?�?�?��	�	�#�T�%;�<�<�<��	�	�"�$9�$9�:�:�:��	�	�"�D�O�4�4�4��	�	�(�$�*?�@�@�@��	�	�*�d�o�.�.�.��	�	�"�D�$9�:�:�:��	�	�%�t�'?�@�@�@��	�	�&��(A�B�B�B��	�	�-��!3�4�4�4��	�	�/�4�#7�8�8�8��	�	�'��(B�C�C�C��	�	�*�4�+H�I�I�I��	�	�$�T�%<�=�=�=�!%�!2�!2�4�!8�!8�8���w��	�	�%�w�'B�C�C�C��	�	�%�w�'B�C�C�C��	�	�&��(D�E�E�E��	�	�(�'�*H�I�I�I��	�	�%�w�'B�C�C�C��	�	�'��)F�G�G�G��,�,�t�$�$���	�	�#�W�%>�?�?�?��	�	�*�G�,L�M�M�M��	�	�(�D�:�:�1�=�=�>�>�>��	�	�)�T�;�;�A�>�>�?�?�?��	�	�%�t�'9�:�:�:��	�	�&��(;�<�<�<��	�	�)�4�+=�>�>�>��	E�&)�E��d�#��
'�"&��
�3���I�I�+�T�->�?�?�?��I�I�-�t�z�/L�M�M�M��I�I�.��0H�I�I�I��I�I�-�t�/E�F�F�F��I�I�,�d�.C�D�D�D����������T��Q��7�7�7�����!��,�,�,��"�"�1�Q�"�/�/�/��+��Y���	�	�a��$�	�/�/�/�!%���
���'��	�6�>�J�J��V���	�	�a��$�	�/�/�/��������������&�v�x�'3�&�B�B�B�	�$�}�����
� �=����#�#�%�%�%��x�!1�2�2�	A�&*�i��&@�H�#�� � �"�"�"�"2�������.�.�.���3��-�-�/�/�/��	�D�������� $� 5���#�3����"�"�4�#9�:�:�:��~�~�d�+�+�+���"�
�#�#�D�$=�>�>�>�����#�#�E�*�*�*���
� ��� ����	&��w�~�~�h�'�'�
&���
�
�h�0G�0G�
&��;�;�x�(�(�;�%)�D�N� $� 3� 3�H� =� =�I��/�/�	�:�:�:������)�)�)�!%������������ � � ��%�%�'�'�'��������}� � ��*�*���	;��*�*�U�#�#�C��{����a�x�x��"�"�$�$�$��A�g�� �D�N��$�T�%9�:�:�:�'�1���"�+��
�#�-���	
���)�;�7�7�7����1�3H�+�-E�	G�	G�	G����-�/G�H�H�H����,�.G�H�H�H����)�+D�2�4M�	O�	O�	O�
�(�(��t�/J�K�K���	�	�$�l�&E�F�F�F��	�	�,��9�	;�	;�	;��	�	�.��;�	=�	=�	=��	�	�#�T�_�_�T�%:�%:�%L�M�M�M��	�	�(��&�&�t�,�,�C�	E�	E�	E��_�_�T�*�*�
��	�	�#�Z�%A�B�B�B��	�	�$�j�&C�D�D�D�%�
�d�+�+�
��	�	�$�m�&F�G�G�G��	�	�"�M�$B�C�C�C��	�	�"�M�$B�C�C�C��	�	�/�4�;�;�t�#4�#4�#>�?�?�?��<�<��-�-�-��	�D��	�	�(�$�*E�F�F�F��	�	�'��)C�D�D�D��	�	�*�D�,I�J�J�J��	�	�#�T�_�_�T�%:�%:�%L�M�M�M��"�	I� $� 0� 0�� 6� 6�D���I�I�/��'�A�
C�
C�
C�
C�
�"�"�9�m�Z�H�H�H��"�	I� $� 0� 0�� 6� 6�D���!�&�.�"8�v�G�G�G�
1��.�.�0�0�0��I�I�/��1O�P�P�P�P�P��"�"�9�m�Z�H�H�H�H�Hs6�/D�
E�D2�1E�2
D?�<E�>D?�?E�Ec�.�|���dS�N)r��rr\s  r$r�zEditorWindow.handle_winconfigks���������r&c	�h�|j}tt|jj|�d��|�d��g����}|���d|zz
}t||�d������d��}||z|_	dS)N�borderrQrCrj)rj�0)
rL�sum�map�tk�getint�cget�winfo_widthr�measurerH)rrL�
inner_padding�pixel_width�zero_char_widths     r$r�zEditorWindow.set_widthns����y���C�������8�1D�1D�15���6�1B�1B�1D�E�E�F�F�
��&�&�(�(�1�}�+<�<��
��D�I�I�f�-�-�.�.�.�6�6�s�;�;�	� �O�3��
�
�
r&c�r�|j���\}}|j�|��dSrY)r��defaultfilenamer��new)rr\�dirname�basenames    r$r�zEditorWindow.new_callback{s3�� �G�3�3�5�5�����
���w�����wr&c��|jdzdkr
|jdkrdS|j�d��ry|j�ddd��r]|j�ddd��rAt|j�d���d��d	��}nU|j�dd��}tt|����D]}||d
vrn�t|��}t|j�d���d��d	��}||krd}dt|��zd
z}|jd	zdkr|j�ddd���nE|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�r�Home�iomark�<=zinsert lineend�insert linestart�.r`)� �	�insertzinsert linestart+�c�sel�1.0rp�	sel.first�	my_anchor�<�sel.last�>rZ)�state�keysymrLr��comparerI�splitr��range�len�str�
tag_remove�mark_set�tag_add�see)rr\�insertpt�line�lineat�dest�first�lasts        r$r�zEditorWindow.home_callback�s����K�!�O��!�!�e�l�f�&<�&<��4��9�?�?�8�$�$�	#��9���X�t�-=�>�>�	#��9���/��x�@�@�	#��4�9�?�?�8�4�4�:�:�3�?�?��B�C�C�H�H��9�=�=�!3�5E�F�F�D�!�#�d�)�)�,�,�
#�
#����>��3�3��E�4��T�����T�Y�_�_�X�.�.�4�4�S�9�9�!�<�=�=���v����H�"�3�x�=�=�0��4���K��M�a����I� � ���u�5�5�5�5��9�?�?�;�/�/�
@��	�"�"�;��9�9�9�9��9�$�$�T�Y�_�_�[�%A�%A�3�%)�Y�_�_�X�%>�%>�@�@�@��I�&�&�{�K�@�@�@�@��I�&�&�{�J�?�?�?��I�O�O�D�)�)�E��9�?�?�;�/�/�D��y� � ��s�4�0�0�
(�!�%�d���I� � ���u�5�5�5��I���e�U�D�1�1�1��	���8�T�*�*�*��	�
�
�h�����wr&c��|�|j��|_t|jddd���}tjdkr"|j�ddt���|j�dd	t���|j�d
dt���|j�tt���|�tt���|j�d
|j
��|j�d
dd��|j�|j
��dS)Nr`�grey75)rP�borderwidth�
backgroundr�	_padding1z    )rargzCol: ?rVzLn: ?)rarbz<<set-line-and-column>>z<KeyRelease>z<ButtonRelease>)r0r��
status_barr�rr{�	set_label�RIGHTr��BOTTOM�XrLr��set_line_and_columnr��
after_idle)r�seps  r$r�zEditorWindow.set_status_bar�s$���-�-�d�h�7�7����D�H�Q�A�(�K�K�K���<�8�#�#�
�O�%�%�k�6��%�F�F�F���!�!�(�H�5�!�A�A�A���!�!�&�'��!�>�>�>�����&�q��1�1�1����f�1��%�%�%��	���0�$�2J�K�K�K��	���5�*�,=�	?�	?�	?��	���T�5�6�6�6�6�6r&c���|j�t���d��\}}|j�dd|z��|j�dd|z��dS)Nr>rgzCol: %srVzLn: %s)rLr��INSERTrMr`ra)rr\rVrgs    r$rez EditorWindow.set_line_and_column�sf���y���v�.�.�4�4�S�9�9���f���!�!�(�I��,>�?�?�?���!�!�&�(�T�/�:�:�:�:�:r&))�file�_File)�edit�_Edit)�format�F_ormat)�run�_Run)rr�_Options)r�_Window)r�_Helpc��|j}ix|_}|jD][\}}t|��\}}t	||�d�d��}t||d|���x||<}|�|||����\tj��r.t|dd���x|d<}|�d|�	��|�	��t|jd�
��|_
|jd�dd
d|j
���|jd�t��|_|���dS)N�_menu_postcommandr)rF�tearoff�postcommand)�labelrD�	underline�apple)rFrw�application�IDLE)ryrD�rwrjr@zRecent Files)ryrzrDr)r�r��
menu_specs�prepstr�getattrr��add_cascader
�
isCarbonTk�
fill_menus�recent_files_menu�insert_cascader��END�base_helpmenu_length�reset_help_menu_entries)r�mbarr�rFryrzrxrDs        r$r�zEditorWindow.createmenubar�s����|��#%�%��
���?�	J�	J�K�D�%�&�u�~�~��I�u�!�$�4�(B�(B�(B�D�I�I�K�$(��D�!�5@�%B�%B�%B�
B�H�T�N�T����5�t�y��I�I�I�I�����	6�-1�$�W�:;�.=�.=�.=�
=�H�]�#�d����6���5�5�5�������!%�d�l�A�!>�!>�!>����
�f��,�,�Q�n�78�26�2H�	-�	J�	J�	J�%)�M�&�$9�$?�$?��$D�$D��!��$�$�&�&�&�&�&r&c���|jd}|�d��}|�d}||jkr|�|jdz|��t	j|��dS)Nrrprqr`)r�r�r��deleter�add_windows_to_menu)rrDrps   r$r�zEditorWindow.postwindowsmenu�sh���}�X�&���j�j������;��C�������K�K���q�(�#�.�.�.��"�4�(�(�(�(�(r&c�N�|j|}|�||���dS)z$Update label for menu item at index.)ryN�r��entryconfig)rrDr�ry�menuitems     r$�update_menu_labelzEditorWindow.update_menu_label��-���=��&�����U�%��0�0�0�0�0r&c�N�|j|}|�||���dS)z$Update state for menu item at index.�rJNr�)rrDr�rJr�s     r$rzEditorWindow.update_menu_state�r�r&c���|dkrVt|d��}t|�d��|z��|�d��z
}d}|df}|jj|g|�R�dS)zHandle scrollbar.�movetorrp�@0,0�scroll�unitsrZ)�float�round�	getlinenorL�yview)rr\�args�fraction�liness     r$r�zEditorWindow.handle_yview�s~���H����T�!�W�~�~�H��4�>�>�%�0�0�8�;�<�<��^�^�F�+�+�,�E��E��7�#�D���	���%��%�%�%�%��wr&c��|j}|�d|j�d|j����}	|�dd|��o|�|dd��}n#t
$rd}YnwxYw|s-|�ddd	��|�d
|��|js|�	��|j}||_
tjdd�dk}|r|�
d
���|jD]L}	|\}}	}
n#t$rY�wxYw|
��t!||
����}|�||����M|�|j|j��|r|j�
d���dS)N�@�,rEr<rHFrCrDrprAr@rA�arrow)�cursorr��ibeamrZ)rLr��x�yrL�TclErrorrQrR�rmenu�
make_rmenur\rr{�config�rmenu_specs�
ValueErrorr��entryconfigure�tk_popup�x_root�y_root)rr\rL�newdex�in_selectionr��iswin�itemry�	eventname�verify_staterJs            r$r�zEditorWindow.right_menu_events����y�����3���3�3�%�'�3�3�4�4��	!� �L�L��d�F�C�C�C��<�<���z�B�B�
�L���	!�	!�	!� �L�L�L�	!�����	,��O�O�E�5�%�0�0�0��M�M�(�F�+�+�+��z�	��O�O�����
����
���R�a�R� �E�)���	(��K�K�w�K�'�'�'��$�		5�		5�D�
�15�.��y�,�,���
�
�
���
�����#��/�G�D�,�/�/�1�1�E�� � ��e� �4�4�4�4�
���u�|�U�\�2�2�2��	-��I���G��,�,�,��ws#�.A�A,�+A,�D�
D�D)�CloserVNc���t|jd���}|jD]K}|d|d}}|�#|j|fd�}|�||����7|����L||_dS)Nrr~r`c�0�|�|��dSr$��event_generate�rLr�s  r$rez(EditorWindow.make_rmenu.<locals>.command/s���'�'�	�2�2�2�2�2r&�ryre)r�rLr��add_commandr�r�)rr�r�ryr�res      r$r�zEditorWindow.make_rmenu*s����T�Y��*�*�*���$�	&�	&�D�#�A�w��Q��9�E�� �!%��i�3�3�3�3��!�!��w�!�?�?�?�?��#�#�%�%�%�%���
�
�
r&c�*�|���Sr$)�rmenu_check_copy�rs r$�rmenu_check_cutzEditorWindow.rmenu_check_cut6s���$�$�&�&�&r&c�f�	|j�d��}|rdndS#t$rYdSwxYw)NrE�normalrs�rLr�r�)r�indxs  r$r�zEditorWindow.rmenu_check_copy9sO��	4��9�?�?�;�/�/�D� $�3�8�8��3���	�	�	��:�:�	���s�"�
0�0c�v�	|jj�d|jd��dS#t$rYdSwxYw)Nztk::GetSelection�	CLIPBOARDr�rs)rLr+�callr�r�s r$�rmenu_check_pastezEditorWindow.rmenu_check_pasteAsQ��	��I�L���0�$�)�[�I�I�I��8���	�	�	��:�:�	���s�&*�
8�8c�8�tj|j��dS)zHandle Help 'About IDLE' event.rZ)r�AboutDialogr�r%s  r$r�zEditorWindow.about_dialogIs��	��t�x�(�(�(��wr&c�:�tj|jd��dS)z&Handle Options 'Configure IDLE' event.�SettingsrZ)r	�ConfigDialogr�r%s  r$r�zEditorWindow.config_dialogOs��	�!�$�(�:�6�6�6��wr&c�Z�|jr|j}n|j}tj|��dS)zHandle Help 'IDLE Help' event.rZ)r�r�r�
show_idlehelp)rr\�parents   r$r�zEditorWindow.help_dialogUs4���9�	��Y�F�F��X�F���6�"�"�"��wr&c��tjdd�dkr[	tj|j��nY#t
$r3}t
jdt|��|j	���Yd}~n!d}~wwxYwtj|j��dS)Nr@rA�Document Start Failure��title�messager�rZ)rr{rw�	startfilerv�OSErrorrr�rPrL�
webbrowser�open)rr\�whys   r$r�zEditorWindow.python_docs_s����<�����u�$�$�
8���T�]�+�+�+�+���
8�
8�
8��$�+C���H�H�T�Y�8�8�8�8�8�8�8�8�8�����
8����
�O�D�M�*�*�*��ws�4�
A1�)A,�,A1c�:�|j�d��dS)Nz<<Cut>>rZ�rLr�r%s  r$r�zEditorWindow.cutjs���	� � ��+�+�+��wr&c�r�|j�d��sdS|j�d��dS)NrCz<<Copy>>rZ)rL�
tag_rangesr�r%s  r$r�zEditorWindow.copyns:���y�#�#�E�*�*�	��4��	� � ��,�,�,��wr&c�n�|j�d��|j�d��dS)Nz	<<Paste>>rArZ)rLr�rTr%s  r$r�zEditorWindow.pasteus1���	� � ��-�-�-��	�
�
�h�����wr&c��|j�ddd��|j�dd��|j�d��dS)NrCrDzend-1crArZ)rLrSrRrTr%s  r$r�zEditorWindow.select_allzsM���	���%���1�1�1��	���8�U�+�+�+��	�
�
�h�����wr&c�r�|j�ddd��|j�d��dS)NrCrDrprArZ)rLrQrTr%s  r$r�zEditorWindow.remove_selection�s5���	���U�E�5�1�1�1��	�
�
�h�����wr&c�R�����|jj�|jj�d�����fd�}|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-1cc���|jdzdkr1	�d���d����dS#t$rYdSwxYwdS)NrMrrErA)rJr�)r\�
edge_index�edges_table�self_text_index�self_text_mark_sets ����r$�move_at_edgez<EditorWindow.move_at_edge_if_selection.<locals>.move_at_edge�sq�����a��A�%�%��#�O�K�0�0�0�&�&�x��Z�1H�I�I�I�I�I�������D�D�����	&�%s�0�
>�>)rLr�rR)rr�r�r�r�r�s ` @@@r$r�z&EditorWindow.move_at_edge_if_selection�sQ�������)�/��!�Y�/��5��	�	�	�	�	�	�	�	��r&c�:�|j�d��dS)Nz
<Meta-Delete>rZr�r%s  r$r�zEditorWindow.del_word_left�s���	� � ��1�1�1��wr&c�:�|j�d��dS)Nz<Meta-d>rZr�r%s  r$r�zEditorWindow.del_word_right�s���	� � ��,�,�,��wr&c�8�tj|j��dSrY)r�findrLr%s  r$r�zEditorWindow.find_event�s����D�I�����wr&c�8�tj|j��dSrY)r�
find_againrLr%s  r$r�zEditorWindow.find_again_event�s����$�)�$�$�$��wr&c�8�tj|j��dSrY)r�find_selectionrLr%s  r$r�z!EditorWindow.find_selection_event�s����d�i�(�(�(��wr&c�P�tj|j|j|j��dSrY)r
rLr�r�r%s  r$r�z EditorWindow.find_in_files_event�s!���	�$�)�T�W�d�j�1�1�1��wr&c�8�tj|j��dSrY)rrLr%s  r$r�zEditorWindow.replace_event�s�����	�"�"�"��wr&c��|j}tj|dd��j}|�Y|�ddd��|�d|�d���|�d��|���dS)	Nz
Go To Linez/Enter a positive integer
('big' = end of file):rCrDrprA�.0rZ)rLr�Goto�resultrQrRrTre)rr\rL�linenos    r$r�zEditorWindow.goto_line_event�s����y�����l�)����		�
���O�O�E�5�%�0�0�0��M�M�(�v�M�M�M�2�2�2��H�H�X�����$�$�&�&�&��wr&c�F�	|j�dd�����}n#t$rd}YnwxYwt	j|jdd|��j}|�<|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.
        rErHrBzOpen ModulezAEnter the name of a Python module
to search on sys.path and open:)rLr��stripr�r�
ModuleNamer�r�r�r�r�)rrF�	file_paths   r$�open_modulezEditorWindow.open_module�s���	��9�=�=��j�9�9�?�?�A�A�D�D���	�	�	��D�D�D�	�����$��	�=�2��	���		�
� ��z�
,��
���	�*�*�*�*��� � ��+�+�+��s�-0�?�?c�.�|���dSrY)rr%s  r$r�zEditorWindow.open_module_event�s���������wr&c��|jj}|jjdkr|s|���}|�dSddlm}|�|j|��dS)N�PyShellEditorWindowrZr)�browser)	r�r�	__class__�__name__r�idlelibr�
ModuleBrowserr�)rr\rrs    r$r�z EditorWindow.open_module_browser�sq���7�#����'�+@�@�@��A��'�'�)�)�H����w�#�#�#�#�#�#����d�i��2�2�2��wr&c�F�ddlm}|�|j��dS)Nr)�pathbrowserrZ)rr�PathBrowserr�)rr\rs   r$r�zEditorWindow.open_path_browser�s/��'�'�'�'�'�'�����	�*�*�*��wr&c�Z�ddl}tjddg}|�|d���dS)Nrz-cz,from turtledemo.__main__ import main; main()F)�shellrZ)�
subprocessr�
executable�Popen)rr\r�cmds    r$r�zEditorWindow.open_turtle_demo�s@�������~��=�?��	����E��*�*�*��wr&c���|�r|dkrn|j�dd|z��|j�ddd��|j�ddd��|���dSdSdS)NrrAz%d.0rCrDrpz
insert +1l)rLrRrQrS�center)rr�s  r$�gotolinezEditorWindow.gotoline�s}����&�1�*�*��I���x��&��9�9�9��I� � ���u�5�5�5��I���e�X�|�<�<�<��K�K�M�M�M�M�M�	��*�*r&c�~�|rtj�|��rdStj�tj�|����\}}tj�|��tvrdS|j�dd��}|�	d��od|vS)NTrDz1.0 lineendz#!�python)
rwrxr}�splitextr7�normcaserrLr��
startswith)rr�base�extrVs     r$r�zEditorWindow.ispythonsource�s����	�2�7�=�=��2�2�	��4��G�$�$�R�W�%5�%5�h�%?�%?�@�@�	��c�
�7���C� � �M�1�1��4��y�}�}�U�M�2�2�����t�$�$�9��T�)9�9r&c�Z�|jr#|j�|��d|_dSdSr$)r��unregister_maybe_terminater�s r$�
close_hookzEditorWindow.close_hooks7���:�	��J�1�1�$�7�7�7��D�J�J�J�	�	r&c��||_dSr$)r)rrs  r$�set_close_hookzEditorWindow.set_close_hook
s
��$����r&c���|jr|j�|��|���|j�|��|���dSr$)r��filename_changed_editr�r��update_windowlist_registryr�r�s r$r�z!EditorWindow.filename_change_hooksb���:�	3��J�,�,�T�2�2�2���� � � ���+�+�D�1�1�1��������r&c���|jrdS|�|jj��r|���|_|jr(|j�|j|j���dSdS)N)�filter�after)r�r�r�rr*r��insertfilterafterr�r�s r$�
_addcolorizerzEditorWindow._addcolorizers{���:�	��F����t�w�/�0�0�	/��,�,�.�.�D�J��:�	K��H�&�&�d�j��	�&�J�J�J�J�J�	K�	Kr&c��|jsdS|j���|j�|j��d|_dSr$)r��removecolorsr��removefilterr�s r$�_rmcolorizerzEditorWindow._rmcolorizer sH���z�	��F��
���!�!�!�����d�j�)�)�)���
�
�
r&c��|���|���t�|j��|j�|j���|j�|j���dSdS)zUpdate the color themeN)	r-r)r(r+rLr��update_highlight_colorsr��
update_colorsr�s r$r�zEditorWindow.ResetColorizer's���	
�������������!�!�$�)�,�,�,���(���5�5�7�7�7���(���+�+�-�-�-�-�-�)�(r&�_c�b�|�d|��|�|��}|r#||jvr|�d|dz|��d|�|��kr|�d|��n|�d|dz��|�|��dS)N�ERRORz
 wordstart�
rAz+1c)rSr��
IDENTCHARSrRrT)rrL�pos�chars    r$�colorize_syntax_errorz"EditorWindow.colorize_syntax_error6s������W�c�"�"�"��x�x��}�}���	;�D�D�O�+�+��L�L��#��"4�c�:�:�:��4�8�8�C�=�=� � ��M�M�(�C�(�(�(�(��M�M�(�C�%�K�0�0�0�����
�
�
�
�
r&c�z�tjdddd���}|sd|jd<dStj|jd<dS)	z&Update the cursor blink configuration.rGr(zcursor-blinkrlrJrrnN)rr�rLrm)r�cursorblinks  r$r�z EditorWindow.update_cursor_blinkAsW���(����V�E�E�E���	A�)*�D�I�o�&�&�&�*2�)@�D�I�o�&�&�&r&c��|j�|j���|j�|j���tj|jdd��}||jd<|���dS)z.Update the text widgets' font if it is changedNrGr(rj)r��update_fontr�rr�r�rLr�)r�new_fonts  r$�	ResetFontzEditorWindow.ResetFontKsz����(���)�)�+�+�+���(���)�)�+�+�+��#�D�I�v�~�F�F��$��	�&���������r&c�R�tj��x|j_}|���D]\}}|jj|g|�R��|���D]E}tj|��}|r-|���D]\}}|jj|g|�R���FdS)z/Remove the keybindings before they are changed.N)	r�GetCurrentKeySetr/�default_keydefs�itemsrL�event_delete�get_standard_extension_names�GetExtensionBindings)r�keydefsr\�keylist�
extensionName�xkeydefss      r$�RemoveKeybindingszEditorWindow.RemoveKeybindings\s���3;�2K�2M�2M�M��
�%��%�m�m�o�o�	4�	4�N�E�7�"�D�I�"�5�3�7�3�3�3�3�3�!�>�>�@�@�	<�	<�M��4�]�C�C�H��
<�&.�n�n�&6�&6�<�<�N�E�7�*�D�I�*�5�;�7�;�;�;�;�;��		<�	<r&c�V�tj��x|j_}|���|���D]-}tj|��}|r|�|���.i}|jjD]J}i||d<|dD]4}|r0|d||dt|d��d<�5�K|j	D]�}|j	|}|�
t��}|��,|dz
}td|��D]�}	|�
|	��dkru|�|	d��}
|
r]|�|	d��}d}||vr|||vr|||}|r't||��}
|�|	|
�������dS)	z-Update the keybindings after they are changedrr`Nre�acceleratorryrB)rL)rr@r/rAr�rDrE�menudefsr�r�r�r�rNrK�	entrycget�get_acceleratorr�)
rrFrHrI�
menuEventDictrDr��menubarItemrpr��accel�itemNamer\s
             r$�ApplyKeybindingszEditorWindow.ApplyKeybindingshs���3;�2K�2M�2M�M��
�%��������!�>�>�@�@�	.�	.�M��4�]�C�C�H��
.��#�#�H�-�-�-���
��M�*�	J�	J�D�%'�M�$�q�'�"��Q��
J�
J���J�BF�q�'�M�$�q�'�*�7�4��7�+;�+;�A�+>�?��
J� �=�	G�	G�K��=��-�D��*�*�S�/�/�C��{���1�H�C��q�#���
G�
G���9�9�U�#�#�y�0�0� �N�N�5�-�@�@�E��G�#'�>�>�%��#A�#A�� "��&�-�7�7�'�=��+E�E�E�(5�k�(B�8�(L�� �G�$3�G�U�$C�$C�E� �,�,�U��,�F�F�F��
G�	G�	Gr&c�R�|jstjdddd���|_dSdS)zCUpdate the indentwidth if changed and not using tabs in this windowrGrkz
num-spacesrIrJN)r�rr�r�r�s r$r�z#EditorWindow.set_notabs_indentwidth�sA���|�	>�'�1�&�(�<�7<� >� >� >�D����	>�	>r&c��tj��}|jd}|�t��}||jkr|�|jdz|��|rQ|���|D]:}|�|d��}|�	|d|����;||jd<dS)z3Update the additional help entries on the Help menurr`rr�N)
r�GetAllExtraHelpSourcesListr�r�r�r�r�r��"_EditorWindow__extra_help_callbackr�)r�	help_list�helpmenu�helpmenu_length�entryrs      r$r�z$EditorWindow.reset_help_menu_entries�s����7�9�9�	��=��(��"�.�.��-�-���T�6�6�6��O�O�T�6��:�_�M�M�M��	B��"�"�$�$�$�"�
B�
B���0�0��q��:�:���$�$�5��8�S�$�A�A�A�A� (��
�f���r&c���|f�fd�	}|S)zCCreate a callback with the helpfile value frozen at definition timec�x��|�d��stj�|��}tjdd�dkrX	tj|��dS#t$r4}tj	dt|���j���Yd}~dSd}~wwxYwtj
|��dS)N)�www�httpr@rAr�r�)rrwrxr�rr{r�r�rr�rPrLr�r�)�helpfiler�rs  �r$�display_extra_helpz>EditorWindow.__extra_help_callback.<locals>.display_extra_help�s�����&�&��7�7�
6��7�+�+�H�5�5���|�B�Q�B��5�(�(�<��L��*�*�*�*�*���<�<�<��(�/G� #�C�����<�<�<�<�<�<�<�<�<�<�����<�������)�)�)�)�)s�A%�%
B#�/)B�B#r[)rrarbs`  r$�__extra_help_callbackz"EditorWindow.__extra_help_callback�s,���(0�
	*�
	*�
	*�
	*�
	*�
	*�"�!r&c���g}|j}|r^tj�|��r?t	|ddd���5}|���}ddd��n#1swxYwY|rQtj�|��dz}||vr|�|��|�d|��g�|D]B}d|vs'tj�|dd	���s��	|���C�fd
�|D��}d}|dt|���}|r�	t	|ddd���5}|�|��ddd��n#1swxYwYnY#t$rL}t|jd
d��s,d|j_t!jdd|�d�|j���Yd}~nd}~wwxYw|jjD]�}	|	j}
|
�dt.��t1|��D]R\}}|���}|	�|��}
|
�||dz|z|
d����S��dS)z/Load and update the recent files list and menus�r�utf_8r)r.�errorsNr4r�rqc���g|]}|�v�|��	Sr[r[)�.0rx�	bad_pathss  �r$�
<listcomp>z9EditorWindow.update_recent_files_list.<locals>.<listcomp>�s#���E�E�E�D�t�9�/D�/D�4�/D�/D�/Dr&�1234567890ABCDEFGHIJK�w�recentfiles_messageFTzIDLE Warningz)Cannot save Recent Files list to disk.
  z
Select OK to continue.r�r?)ryrerz)r�rwrxr�r��	readlines�abspath�removerA�appendrO�
writelinesr�r�r�ror�showwarningrLr�r�r�r�r��	enumerate�rstrip�#_EditorWindow__recent_file_callbackr�)r�new_file�rf_listr�rf_list_filerx�ulchars�rf_file�err�instancerD�i�	file_name�callbackrks              @r$r�z%EditorWindow.update_recent_files_list�sN������*�	��	3�����	�2�2�	3��i��&�y�:�:�:�
3�=I�&�0�0�2�2��
3�
3�
3�
3�
3�
3�
3�
3�
3�
3�
3����
3�
3�
3�
3��	(��w���x�0�0�4�7�H��7�"�"����x�(�(�(��N�N�1�h�'�'�'��	��	'�	'�D��t�|�|�2�7�>�>�$�q��t�*�#=�#=�|�� � ��&�&�&��E�E�E�E�G�E�E�E��)���!�C��L�L�.�)���	*�
*��)�S�#*�9�>�>�>�0�AH��&�&�w�/�/�/�0�0�0�0�0�0�0�0�0�0�0����0�0�0�0����
*�
*�
*��t�y�*?��G�G�*�48�D�I�1��*��!9�%(�!9�!9�!9� $�y�	*�*�*�*����������
*������.�	.�	.�H��-�D��K�K��3���� )�'� 2� 2�
.�
.���9�%�,�,�.�.�	�#�:�:�9�E�E��� � �w�q�z�C�'7�)�'C�)1�+,�!�.�.�.�.�
.�	.�	.sN�A � A$�'A$�/E0�E$�E0�$E(�(E0�+E(�,E0�0
G�:AG�Gc���|f�fd�	}|S)Nc�>���j�|���dS)N)�editFile)r�r�)�
fn_closurers �r$�open_recent_filez=EditorWindow.__recent_file_callback.<locals>.open_recent_file�s����G�L�L�*�L�-�-�-�-�-r&r[)rr�r�s`  r$�__recent_file_callbackz#EditorWindow.__recent_file_callback�s*���(1�	.�	.�	.�	.�	.�	.��r&c�H�|���}|���}|r|r|dz|ztz}n|r|}n|r|}nd}|p|p|}|���s
d|z}d|z}|j�|��|j�|��dS)Nz - �untitledz*%s*z*%s)�short_title�
long_title�_py_version�	get_savedr��wm_title�wm_iconname)r�short�longr��icons     r$r�zEditorWindow.saved_change_hook�s���� � �"�"����� � ���	�T�	��E�M�D�(�;�6�E�E�
�	��E�E�
�	��E�E��E��%��%����~�~���	 ��U�N�E��4�<�D�����%� � � �����T�"�"�"�"�"r&c�4�|j���Sr$)r�r�r�s r$r�zEditorWindow.get_saved�s���y�"�"�$�$�$r&c�:�|j�|��dSr$)r��	set_saved)r�flags  r$r�zEditorWindow.set_saved�s���	���D�!�!�!�!�!r&c�8�|j���dSr$)r��
reset_undor�s r$r�zEditorWindow.reset_undo�s���	�������r&c�`�|jj}|rtj�|��ndS)Nr�)r�rrwrxr7)rrs  r$r�zEditorWindow.short_titles,���7�#��-5�E�r�w����)�)�)�:�Er&c��|jjpdS)NrB)r�rr�s r$r�zEditorWindow.long_titles���w��%�2�%r&c�.�|���dSrY)rr%s  r$r�z EditorWindow.center_insert_events�����
�
�
��wr&rAc���|j}|���\}}|�|��}||z
}td||dzz
��}|�t|����dS)Nr`rC)rL�getwindowlinesr��maxr�r�)r�markrLr��botr�rP�newtops        r$rzEditorWindow.centersn���y���&�&�(�(���S�����%�%���s����Q�����*�+�+���
�
�5��=�=�!�!�!�!�!r&c���|j}|�d��}|�d��}||kr5|���dkrt|d��}||zdz
}||fS)Nr�z@0,65535r`rP)rLr��winfo_heightrI)rrLr�r�rPs     r$r�zEditorWindow.getwindowlinessr���y���n�n�V�$�$���n�n�Z�(�(���#�:�:�$�+�+�-�-��2�2���h��(�(�F���,��"�C��C�x�r&c�n�|j}tt|�|������Sr$)rLrIr�r�)rr�rLs   r$r�zEditorWindow.getlinenos+���y���5����D�)�)�*�*�+�+�+r&c���|j���}tjd|��}t	tt|�������S)zReturn (width, height, x, y)z(\d+)x(\d+)\+(-?\d+)\+(-?\d+))r��wm_geometry�re�match�listr*rI�groups)r�geom�ms   r$�get_geometryzEditorWindow.get_geometry"sG���x�#�#�%�%���H�5�t�<�<���C��Q�X�X�Z�Z�(�(�)�)�)r&c�.�|���dSrY)r�r%s  r$r�zEditorWindow.close_event(s���
�
�����wr&c�>�|jr�|���sh|j���dkr|j���|j���|j���|j���SdS)Nr�)r�r�r�rJ�	deiconify�lower�lift�	maybesaver�s r$r�zEditorWindow.maybesave,s����7�	'��>�>�#�#�
 ��8�>�>�#�#�X�-�-��H�&�&�(�(�(����� � � ���
�
�����7�$�$�&�&�&�
	'�	'r&c��	|���}t|��dkr|���|S#t$rYdSwxYw)N�cancel)r�rP�_close�AttributeError)r�replys  r$r�zEditorWindow.close5s[��	��N�N�$�$�E��5�z�z�X�%�%����
�
�
��L���	�	�	��D�D�	���s�<?�
A
�A
c��|jjr |�|jj���tj|j��|���|j���d|_d|_|j	r |j	���d|_	d|_
d|_|j���d|_|j
���|jr|���dSdS)N)ry)r�rr�r�unregister_callbackr��unload_extensionsr�r�r�rLr�r�r��destroyrr�s r$r�zEditorWindow._close>s����7��	E��)�)�4�7�3C�)�D�D�D��"�4�#7�8�8�8���� � � ���
�
���������	��:�	��J�������D�J���	� ���������������������?�	��O�O������	�	r&c�<�i|_|���dSr$)�
extensions�load_standard_extensionsr�s r$r�zEditorWindow.load_extensionsRs!������%�%�'�'�'�'�'r&c��t|j�����D]&}t|d��r|����'i|_dS)Nr�)r�r��valuesr�r�)r�inss  r$r�zEditorWindow.unload_extensionsVsR�����.�.�0�0�1�1�	�	�C��s�G�$�$�
��	�	���������r&c���|���D]O}	|�|���#tdt|����t	j��Y�MxYwdS)NzFailed to load extension)rD�load_extension�print�repr�	traceback�	print_exc)rrFs  r$r�z%EditorWindow.load_standard_extensions\sx���5�5�7�7�	&�	&�D�
&��#�#�D�)�)�)�)��
&��0�$�t�*�*�=�=�=��#�%�%�%�%�%����	&�	&s	�.�2A"c�,�tjd���S)NT)�editor_only)r�
GetExtensionsr�s r$rDz)EditorWindow.get_standard_extension_namesds���%�$�7�7�7�7r&�ZzDummy�zzdummyc�X�|j�||��}		tjd|zt���}n+#t
tf$rtj|��}YnwxYwn#t
$rtd|���wxYwt||��}tj
|��}t|d��r|�|j
|��||��}||j|<|r�|�|��|D]�}|�dd��}|dd�dkr|dd�}|dd�dk�|d	d�d
kr|dd	�}|d	d�d
k�|dz}t||��r)|j�|t||������dSdS)Nr>)�packagez
Failed to import extension: rM�-r1r`rGrqrI�_event)�extfilesr��	importlib�
import_module�__package__�ImportError�	TypeErrorr�r�rrEr�r�rMr�r�rrLr�)	rrF�fname�mod�clsrFr��vevent�
methodnames	         r$r�zEditorWindow.load_extensionks���
�!�!�$��-�-��	�
5��-�c�E�k�;�O�O�O������+�
5�
5�
5��-�e�4�4����
5�������	�	�	��2�D�9�9�9��	�����c�4� � ���/��5�5���3�
�#�#�	3��O�O�C�L�'�2�2�2��c�$�i�i�� #������
	E�����(�(�(�!�
E�
E��#�^�^�C��5�5�
� ��!��n��+�+�!+�A�B�B��J�!��!��n��+�+� ����o��,�,�!+�C�R�C��J�!����o��,�,�'�(�2�
��3�
�+�+�E��I�N�N�6�7�3�
�+C�+C�D�D�D��
	E�
	E�
E�
Es&�=�A)�%A%�"A)�$A%�%A)�)Bc��|�|jj}|j}||_|���D]\}}|r|j|g|�R��dSr$)r/rArLrFrBr�)rrFrLr\rGs     r$r�zEditorWindow.apply_bindings�sg���?��m�3�G��y�����%�m�m�o�o�	0�	0�N�E�7��
0����u�/�w�/�/�/�/��	0�	0r&c	��|�|jj}|�|jj}|j}|j}|D]�\}}|�|��}|s�|D]�}|s|����|\}	}
|	dd�dk}|r
|	dd�}	t|	��\}}	t||
��}
||
fd�}|r6|�	|
t��}|�|	|||
|�����|�|	|||
�������dS)zAdd appropriate entries to the menus and submenus

        Menus that are absent or None in self.menudict are ignored.
        Nr`�!c�0�|�|��dSr$r�r�s  r$rez(EditorWindow.fill_menus.<locals>.command�s���+�+�I�6�6�6�6�6r&)ryrzrerL�variable)ryrzrerL)
r/rMrAr�rLr�r�r�rO�get_var_obj�
BooleanVar�add_checkbuttonr�)rrMrFr�rL�mname�	entrylistrDr\ryr��checkbuttonrzrLre�vars                r$r�zEditorWindow.fill_menus�s���
���}�-�H��?��m�3�G��=���y�� (�	B�	B��E�9��<�<��&�&�D��
��"�
B�
B���B��&�&�(�(�(�(�',�$�E�9�#(��!��9��#3�K�"�*� %�a�b�b�	��'.�u�~�~�$�I�u�"1�'�9�"E�"E�K�%)�Y�7�7�7�7�"�B�"�.�.�y�*�E�E���,�,�5�I�$+��%(�-�*�*�*�*��(�(�u�	�18�5@�)�B�B�B�B�%
B�		B�	Br&c�z�|�|��}|r|���}|St|���r$)r�r��	NameError)rrFr��values    r$�getvarzEditorWindow.getvar�s;�����t�$�$���	"��G�G�I�I�E��L��D�/�/�!r&c�~�|�||��}|r|�|��dSt|���r$)r�r�r�)rrFr��vartyper�s     r$�setvarzEditorWindow.setvar�s>�����t�W�-�-���	"��G�G�E�N�N�N�N�N��D�/�/�!r&c�v�|j�|��}|s|r||j��x|j|<}|Sr$)r�r�rL)rrFr�r�s    r$r�zEditorWindow.get_var_obj�sJ����#�#�D�)�)���	?�w�	?�,3�G�D�I�,>�,>�>�D��d�#�c��
r&c��|jr7|j�d|��pd|j�|��vSdS)N�TODO�STRINGr`)r�rL�
tag_prevrange�	tag_names)r�
text_indexs  r$�is_char_in_stringzEditorWindow.is_char_in_string�sL���:�	��9�*�*�6�:�>�>�?��t�y�2�2�:�>�>�>�
?��1r&c��	|j�d��}|j�d��}||fS#t$rYdSwxYw)NrErH�NNr�)rrYrZs   r$�get_selection_indicesz"EditorWindow.get_selection_indices�sY��	��I�O�O�K�0�0�E��9�?�?�:�.�.�D��$�;����	�	�	��:�:�	���s�7:�
A�Ac�H�|jdpt}t|��S)N�tabs)rL�TK_TABWIDTH_DEFAULTrI)r�currents  r$�get_tk_tabwidthzEditorWindow.get_tk_tabwidth�s ���)�F�#�:�':���7�|�|�r&c	���|j}|���|krE|j�dd|dd|jd|z��}|�|���dSdS)Nrjr/z
-displayof�n)r�)rLrr+r��master�	configure)r�newtabwidthrL�pixelss    r$�set_tk_tabwidthzEditorWindow.set_tk_tabwidth�sr���y�����!�!�[�0�0��W�\�\�&�)�T�&�\�".���"%��"3�5�5�F�
�N�N��N�'�'�'�'�'�1�0r&c���|rD|rB|���}d|cxkrdkr
nn||_|j|jkrd|_|�|j��dS)NrCrF)�guess_indentr�r�r�r)rr�guessr�s    r$r�z#EditorWindow.set_indentation_params�sv���	%��	%��!�!�#�#�A��A�{�{�{�{��{�{�{�{�{�#$�� ���4�=�0�0�$������T�]�+�+�+�+�+r&c��|j}|���\}}|r0|r.|�||��|�d|��dS|�dd��}|dkrC|�ddd��r|�d��n|���dS|dd	vr|�d��dS|j}t|�	|����}|d
ksJ�|dz
|j
z|j
z}d
}		|dd�}|	dz}	t|�	|����}||ks
|dd	vrn�C|���|�d
|	zd��||kr"|�dd||z
z|j
��|���dS)NrArZr=rBrIrDz	insert-1crq� 	rr`Tz
insert-%dcr?)rLr�r�rRr�rL�bellr�rO�
expandtabsr�r�rAr�r�)
rr\rLrYrZ�charsr��have�want�
ncharsdeleteds
          r$r�z"EditorWindow.smart_backspace_events����y���0�0�2�2���t��	�T�	��K�K��t�$�$�$��M�M�(�E�*�*�*��7����+�X�6�6���B�;�;��|�|�H�c�5�1�1�
����K�(�(�(�(��	�	�����7��"�I�U�"�"��K�K��$�$�$��7��=���5�#�#�H�-�-�.�.���a�x�x�x�x����d�.�.�$�2B�B���
�	��#�2�#�J�E�)�A�-�M��u�'�'��1�1�2�2�D��t�|�|�u�R�y��5�5��	�	
���������L�=�0�(�;�;�;��$�;�;��K�K��#����"5��3�
5�
5�
5��������wr&c�j�|j}|���\}}|���	|r||rzt|��t|��kr.|j�|��|���S|�||��|�d|��|�	dd��}t||j��\}}|t|��kr|�
||jz��n_|jrd}n9t|�|j����}|j}	d|	||	zz
z}|�d||j��|�d��	|���dS#|���wxYw)NrAr=r@r?rZ)rLr�r��
index2liner�r�r�r�rRr��get_line_indentr�rO�reindent_tor�r�rrAr�rT)
rr\rLrYrZ�prefix�raw�	effective�padrs
          r$r�zEditorWindow.smart_indent_event0s����y���0�0�2�2���t�������	#��
/��
/��e�$�$�
�4�(8�(8�8�8��<�;�;�E�B�B�(
� � �"�"�"�"�'���E�4�(�(�(��
�
�h��.�.�.��X�X�0�(�;�;�F�,�V�T�]�C�C�N�C���c�&�k�k�!�!�� � ��T�-=�!=�>�>�>�>��<�4��C�C� #�F�$5�$5�d�m�$D�$D� E� E�I��(�A���Y��]�!2�3�C����H�c�4�+F�G�G�G��H�H�X������ � �"�"�"�"�"��D� � �"�"�"�"���s�=F�C?F�F2c�4
�|j}|���\}}|���	|r.|r,|�||��|�d|��|�dd��}dt
|��}}||kr||dvr|dz
}||kr
||dv�||krH|�dd|j��	|�	d��|�
��dS|d|�}d}|r%|d	dvr|dd	�}|dz
}|r
|d	dv�|r|�d
|zd��|�d��dvr,|�d��|�d��dv�,|�dd|j��t|�d����}	tj|j|j��}
|js�|jD]�}t'|	|z
d��}t)|��dz}
|�|
d��}|
�|��|
�|�|
����}|�|dkrn��|
�|pd��nc|�dd��}|r	|d}
nd
}
|�|
d��}|
�|��|
�d��|
���}|tjk�r|tjkrn�|tjkr|�d||j��n�|tjkr(|�|
� ����nz|tj!kr]|
�"��dkr|�d||j��n5|�|
�#����n
Jd|�����	|�	d��|�
��dS|
�$��}|�d||j��|
�%��r|�&|��n+|r)|
�'��r|�(|��	|�	d��|�
��dS#|�	d��|�
��wxYw)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.
        rAr=rrr`r4rZNrqzinsert - %d charsr��consolerDzbogus continuation type ))rLr�r�r�rRr�rOrAr�rTr�rr�r�Parserr�r�r�r�r�r��set_code�find_good_parse_start�_build_char_in_string_func�set_lor��get_continuation_type�C_NONE�C_STRING_FIRST_LINE�C_STRING_NEXT_LINES�	C_BRACKETr�compute_bracket_indent�C_BACKSLASH�get_num_lines_in_stmt�compute_backslash_indent�get_base_indent_string�is_block_openerr��is_block_closerr�)rr\rLrYrZrVr�r�indent�lnor��context�startat�startatindex�rawtext�bodrerBs                  r$r�z%EditorWindow.newline_and_indent_eventSs~���y���0�0�2�2���t�������e	#��
/��
/����E�4�(�(�(��
�
�h��.�.�.��8�8�.��9�9�D��c�$�i�i�q�A��a�%�%�D��G�u�,�,��Q����a�%�%�D��G�u�,�,��A�v�v����.�� �7�9�9�9��j
�H�H�X����� � �"�"�"�"�"�k�"�1�"�X�F��A��
�4��8�u�,�,��C�R�C�y���Q����
�4��8�u�,�,��
?����/�!�3�X�>�>�>��(�(�8�$�$��-�-����H�%�%�%��(�(�8�$�$��-�-�
�K�K��$��(C�D�D�D��T�Z�Z��1�1�2�2�C���t�/���?�?�A��(�
�#�5���G�!�#��-��3�3�G�#'��=�=�4�#7�L�"�h�h�|�X�>�>�G��J�J�w�'�'�'��1�1� �;�;�L�I�I�K�K�C���'�Q�,�,���+7�������"�"�"�"��&�&�y�(�;�;���)�#$�Q�4�L�L�#(�L��(�(�<��:�:���
�
�7�#�#�#���������'�'�)�)�A��G�N�"�"���3�3�3���'�5�5�5��K�K��&�$�2M�N�N�N�N��'�+�+�+�
�$�$�Q�%=�%=�%?�%?�@�@�@�@��'�-�-�-��.�.�0�0�1�4�4����H�f�$(�$?�A�A�A�A��(�(��)C�)C�)E�)E�F�F�F�F�A�A�a�a�A�A�A�A��
�H�H�X����� � �"�"�"�"�"��-�-�/�/�F��K�K��&�$�*E�F�F�F�� � �"�"�
2��'�'��.�.�.�.��
2�A�-�-�/�/�
2��*�*�5�1�1�1���H�H�X����� � �"�"�"�"�"��
�H�H�X����� � �"�"�"�"���s�BS,�>LS,�;BS,�,+Tc��||jfd�}|S)Nc�$�||d|zz��S)Nz+%dcr[)�offset�_startindex�_iciss   r$�innerz6EditorWindow._build_char_in_string_func.<locals>.inner�s���5��v���6�7�7�7r&)r�)r�
startindexr:s   r$r z'EditorWindow._build_char_in_string_func�s&��&0��.�	8�	8�	8�	8��r&c�`�|jr#t||j��\}}d|zd|zzSd|zS)Nr@r?)r��divmodr�)rr�ntabs�nspacess    r$�_make_blankszEditorWindow._make_blanks�s=���<�	�#�A�t�}�5�5�N�E�7��%�<�#��-�/�/���7�Nr&c� �|j}|���|�ddd��r|�dd��|r/|�d|�|��|j��|���dS)Nr=z!=rA)rLr�rLr�rAr@r�r�)rrgrLs   r$rzEditorWindow.reindent_to�s����y���������<�<�*�D�(�;�;�	6��K�K�*�H�5�5�5��	5��K�K��$�"3�"3�F�";�";��3�
5�
5�
5��������r&c���t|j|j�����\}}|r3|r1t	||j��\}}t	||j��\}}ndx}}||z
S�Nr)�IndentSearcherrLr�rpr)r�opener�indentedr�indentsmall�indentlarges      r$r	zEditorWindow.guess_indent�sx��)�$�)�T�]�C�C�G�G�I�I�����	*�h�	*�.�v�t�}�E�E��C��.�x���G�G��C���()�)�K�+��[�(�(r&c���|j�dS|jjr|j���d}n|j���d}|�dd|�d����dS)N�Show�Hiderrrtz
 Line Numbers)rDr�ry)r��is_shown�hide_sidebar�show_sidebarr�)rr\�
menu_labels   r$rz&EditorWindow.toggle_line_numbers_event�s�����$��F���%�	 ���*�*�,�,�,��J�J���*�*�,�,�,��J����I�]�(2�%A�%A�%A�	�	C�	C�	C�	C�	Cr&)NNNNr$)rAr�)T)�r�
__module__�__qualname__�idlelib.percolatorr)�idlelib.colorizerr*r+�idlelib.undor,�idlelib.iomenur-r.rr/�idlelib.statusbarr0�idlelib.autocompleter1�idlelib.autoexpandr2�idlelib.calltipr3�idlelib.codecontextr4�idlelib.sidebarr5�idlelib.formatr6r7r8r9�idlelib.parenmatchr:�idlelib.zoomheightr;r�getfilesystemencoding�filesystemencodingrvrrr�r"r�r�r�r�r�rerr�r�r�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr�r�r�r�rr�rr!r�r)r-r��string�
ascii_letters�digitsr5r8r�r>rJrTr�r�rXr�rxr�r�r�r�r�r�r�rr�r�r�r�r�r�r�r�r�r�rDr�r�r�r�r�r�r�r�r�rrr�r�r�r�r r@rr	rr[r&r$r(r(2s�������-�-�-�-�-�-�>�>�>�>�>�>�>�>�*�*�*�*�*�*�2�2�2�2�2�2�2�2� � � � � � �0�0�0�0�0�0�1�1�1�1�1�1�-�-�-�-�-�-�'�'�'�'�'�'�/�/�/�/�/�/�+�+�+�+�+�+�M�M�M�M�M�M�M�M�M�M�M�M�-�-�-�-�-�-�-�-�-�-�-�-�2��2�4�4���H�����!��`I�`I�`I�`I�D	����4�4�4����
)�)�)�V7�7�7� ;�;�;�;�
���J�'�'�'�,)�)�)�1�1�1�
1�1�1�
	�	�	�
�E�!�!�!�J	,��K�

�
�
�'�'�'�4�4�4����������������	�	�	�	����������
��������
���(���������������������������0���	�	�	�	�����
�������:�:�:����
%�%�%����K�K�K����.�.�.��%��
�5��;�J�	�	�	�A�A�A����"
<�
<�
<�"G�"G�"G�H>�>�>�)�)�)�"
"�
"�
"�,.�,.�,.�,.�\ � � �
#�#�#�$%�%�%�"�"�"����F�F�F�&�&�&����"�"�"�"����,�,�,�,�*�*�*����'�'�'�������((�(�(����&�&�&�8�8�8�	�9�
�H�E�E�E�80�0�0�0�#B�#B�#B�#B�J"�"�"�"�"�"�"����� ���������(�(�(�,�,�,�,�)�)�)�V!#�!#�!#�Fq#�q#�q#�p��� ������)�)�)�C�C�C�C�C�Cr&r(c�:�tt|����Sr$)rIr�)r�s r$rrs���u�U�|�|���r&z[ \t]*c���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�rprO�groupr)rVr�r�s   r$rrsH��	���d�#�#�A��5�5�7�7�C����	�	�,�,�X�6�6�7�7�7�7r&c�B�eZdZd�Zd�Zejejdfd�Zd�Z	dS)rDc�Z�||_||_dx|_|_dx|_|_dSrC)rLr�r��finished�blkopenline�indentedline)rrLr�s   r$r"zIndentSearcher.__init__!s4����	� ��
�!"�"�����/3�3���4�,�,�,r&c���|jrdS|jdzx}|_t|��dz}|j�|dd��rdS|j�||dz��S)NrBr`r�z>=rpz lineend+1c)rjr�r�rLrLr�)rr�r�s   r$�readlinezIndentSearcher.readline'sn���=�	��2��V�a�Z���D�F��A�w�w��~���9���T�4��/�/�	��2��y�}�}�T�4�-�#7�8�8�8r&)�class�def�for�if�try�whilec	�|�|jrdS||kr
||vr	||_dS||kr|jr||_d|_dSdSdS)Nr`)rjrkrl)	rrK�token�startrprV�INDENT�NAME�OPENERSs	         r$�
tokeneaterzIndentSearcher.tokeneater0sb���=�	��D�
�T�\�\�e�w�.�.�#�D����
�V�^�^�� 0�^� $�D���D�M�M�M��^�^�^r&c�"�tj}|jt_		tj|j��}|D]}|j|��
n#tjtf$rYnwxYw|t_n#|t_wxYw|j|j	fSr$)
�tokenize�tabsizer��generate_tokensrnr{�
TokenError�SyntaxErrorrkrl)r�save_tabsize�tokensrvs    r$rpzIndentSearcher.run<s����'���=���
	,�
�!�1�$�-�@�@��#�,�,�E�#�D�O�U�+�+�+�,���'��5�
�
�
���
����
 ,�H����|�H��+�+�+�+����!2�2�2s)�(A	�A2�	A"�A2�!A"�"A2�2BN)
rrPrQr"rnr}rxryr{rpr[r&r$rDrDsd������4�4�4�9�9�9�#�/� �
�H�
�
�
�
�3�3�3�3�3r&rDc�p�|�d��}|dkr|d|�||dzd�z}||fS)Nr1rr`)r�)�sr�s  r$r�r�NsB��	
���s���A��A�v�v�
�b�q�b�E�A�a��c�d�d�G�O���a�4�Kr&�[�]�/)�bracketleft�bracketright�slashc��|�|��}|rtj��r|dvrdS|d}tjdd�|��}tjdd�|��}tjdd|��}tjd	d
|��}tjdd|��}tjd
d|��}tjdd|��}tjdd|��}tjdd|��}|S)N>r^rWr_rBrz-[a-z]\bc�N�|������Sr$)rg�upper�r�s r$r]z!get_accelerator.<locals>.<lambda>gs��a�g�g�i�i�o�o�&7�&7�r&z\b\w+\bc��t�|���|�����Sr$)�keynamesr�rgr�s r$r]z!get_accelerator.<locals>.<lambda>hs$��X�\�\�!�'�'�)�)�Q�W�W�Y�Y�%G�%G�r&zKey-�Cancelz
Ctrl-BreakzControl-zCtrl-r��+z><r?rGrI)r�r
�	isCocoaTkr��sub)rFr�rGr�s    r$rOrO]s���k�k�)�$�$�G�
���)�+�+��	�>6�16�16��r���
�A�
��{�7�7��;�;�A�
��z�G�G��K�K�A�
��v�r�1���A�
��x��Q�'�'�A�
��z�7�A�&�&�A�
��s�C����A�
��t�S�!���A�
��s�B����A�
��s�B����A��Hr&c��|j}|�ddd��|�ddd��|�ddd��dS)	N�tcl_wordBreakAfterza brr��
tcl_wordcharsz\w�tcl_nonwordcharsz\W)r+r�)r�r+s  r$�
fixwordbreaksr�ssU��
��B��G�G� �%��+�+�+��G�G�E�?�E�*�*�*��G�G�E�%�u�-�-�-�-�-r&c�Z�|}t|��tjdd�rtjd}nd}tj|d��t||���}|j}d|d<td��D].}|�dd|zt|��zdz���/dS)	Nr`)r�r�
rP�rAz  r4)
r�r�argvr
�setupAppr(rLrNrArP)r�r�rrlrLr�s      r$�_editor_windowr�|s����D��$����
�x����|���8�A�;�����
�O�D�$�����T�H�5�5�5�D��9�D��D��N�
�2�Y�Y�6�6�����H�d�1�f�s�1�v�v�o��4�5�5�5�5�6�6r&�__main__)rGzidlelib.idle_test.test_editorrCF)�	verbosity�exit)rp):�
importlib.abcr��importlib.utilrwr{r�rarr}r�r��tkinter�tkinter.fontr�tkinter.ttkrrr�idlelib.configrrr	r
rrr
�idlelib.multicallrrrrr�idlelib.treer�idlelib.utilrrr��python_versionr�rr%r(r�compilerfrrDr�r�rOr�r�r�unittestrG�idlelib.idle_test.htestrpr[r&r$�<module>r�sA����������	�	�	�	�����	�	�	�	�
�
�
�
�
�
�
�
�����������������������!�!�!�!�!�!� � � � � � �������#�#�#�#�#�#� � � � � � �������������������������.�.�.�.�.�.�������������������������$�$�$�$�$�$�&�&�&�&�&�&����������/��/�1�1�1��	���	!��	�	�	�VC�VC�VC�VC�VC�VC�VC�VC�r.����"�*�Y�'�'��8�8�8�03�03�03�03�03�03�03�03�h�����

����
�
�
�,.�.�.�
6�
6�
6�$�z����������D�	(�A�E�B�B�B�B�+�+�+�+�+�+��C��������r&