HEX
Server: Apache/2.4.65 (Unix) OpenSSL/1.1.1k
System: Linux vps109042.inmotionhosting.com 4.18.0 #1 SMP Mon Sep 30 15:36:27 MSK 2024 x86_64
User: cisa (1010)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: //opt/imh/python3.13/lib/python3.13/idlelib/__pycache__/editor.cpython-313.pyc
�

��e���H�SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSK7 SSKJ
r
 SSKJr SSKJr SSKJr SSKJr SSKJr SS	KJr SS
KJr SSKJr SSKJr SS
KJr SSKJr SSKJr SSKJr SSKJr SSK J!r! SSK"J#r# SSKJ$r$ Sr%S\RL"5-r'\RS:Hr(Sr)"SS5r*Sr+\RX"S5r-Sr."SS5r/S r0S!S"S#S$.r1S%r2S&r3S'r4\5S(:XaSS)K6J7r7 \7"S*S+S,S-9 SS.K8J9r9 \9"\45 gg)/�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��[Rupp#nUU3nXR-
nUS:Xa
USU3-
nU$US:waXSSU3-
nU$)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      �4/opt/imh/python3.13/lib/python3.13/idlelib/editor.py�_sphinx_versionr%&so��),�)9�)9�&�E�%�����w��G����G�����R��x�=� ���N�
�'�	��A�h�Z��x�(�(���N�c���\rSrSrSSKJr SSKJrJr SSK	J
r
 SSKJrJ
r
 SSKJr SSKJr SS	KJr SS
KJr SSKJr SSKJr SS
KJr SSKJrJrJrJ r  SSK!J"r" SSK#J$r$ \%RL"5r'Sr(Sr)Sr*Sr+SySjr,SzSjr-Sr.Sr/Sr0Sr1SzSjr2/SQr3Sr4Sr5Sr6Sr7Sr8Sr9S r:S!/r;S"r<S#r=S$r>S%r?SzS&jr@SzS'jrASzS(jrBSzS)jrCS*rDS+rES,rFSzS-jrGSzS.jrHS/rIS0rJS1rKS2rLS3rMS4rNS5rOS6rPS7rQS8rRS9rSSzS:jrTSzS;jrUSzS<jrVS=rWS>rXS?rYS@rZSAr[SBr\SCr]SDr^\_R�\_R�-SE-rbSFrcSGrdSHreSIrfSJrgSKrhSLriSMrjSzSNjrkSOrlSPrmSQrnSRroSSrpSTrqSUrrSVrsS{SWjrtSXruS{SYjrvSZrwS[rxS\ryS]rzS^r{S_r|S`r}Sar~SbrScSd0r�Ser�SzSfjr�S|Sgjr�Shr�SzSijr�SzSjjr�Skr�Slr�Smr�Snr�S}Sojr�Spr�Sqr�Srr�Ssr�Str�Sur�Svr�SzSwjr�Sxr�g)~�EditorWindow�3r)�
Percolator)�ColorDelegator�color_config)�
UndoDelegator)�	IOBinding�encoding)�mainmenu)�MultiStatusBar)�AutoComplete)�
AutoExpand)�Calltip)�CodeContext)�LineNumbers)�FormatParagraph�FormatRegion�Indents�Rstrip)�
ParenMatch)�
ZoomHeightNTc
�"�SSKJn [RGc[R
R
[RSS5n[RRS5(adSS[RSS--n[R
RS	5(aS
nO�Sn[R
R
X�SS5nO�[RSSS:Xa^SSK
n	S
n
S[RS3nU	RU	R U5n
[R
R'U
5(aU
nOB[RS:Xa.[R
R
[RS5n[R
R)U5n[R
R'U5(a<U[l[RS:XaS[R-[lOS[RSS-[lXlU=(d UR,nX@l[/U5Ul[2R4"X@R0S9=UlnU(a-UR8UlUR<UR6lO0Ul0UR6l[@RB=(a. [R
R
[@RBS5Ul"S
Ul#[IU5=Ul%n
[MU
SS9=Ul'n[@RP"SSSSS9nSSS SUS![@RP"SSS"SS9S#.n[S[T5"U
40UD6=Ul+nURVUR6l,UR[5 UR]5 UR6R_S$UR`5 UR6RcS%URd5 [fRh"5(aUURcS%URd5 URcS&URj5 URcS'URj5 OURcS(URj5 URcS)[l5 URnS*:Xa,URcS+[l5 URcS,[l5 URcS-URp5 URcS.URr5 URcS/URt5 URcS0URv5 URcS1URx5 URcS2URz5 URcS3UR|5 URcS4UR~5 URcS5UR�5 URcS6UR�5 URcS7S85 URcS9UR�5 URcS:UR�5 URcS;UR�5 URcS<UR�5 URcS=UR�5 URcS>UR�5 URcS?UR�5 URcS@UR�5 URcSAUR�5 URcSBUR�5 URcSCUR�5 UR�U5=UlNnURcSDUR�5 URcSEUR�5 URcSFUR�5 URcSGUR�5 URcSHUR�5 URcSIUR�5 UR�U5nURcSJUR�5 URcSKUR�5 URcSLUR�S55 URcSMUR�SN55 URcSOUR�5 URcSPUR�5 URcSQUR�5 U(a�X1R<U'U(aXR�U'URcSRUR�5 URcSSUR*R�5 URcSTUR�5 URcSUUR�5 URcSVUR�5 UR�5 U
R�[�[�SNSW9 U
R�SNSNSX9 U
R�SNSNSX9 UR�USY'UR�SNS[�SZ9 UR�US['[@R�"UR,SS5US\'UR�SNSN[�SZ9 UR�5 UR�5 [@RP"SS]S^S_S9nU(+UloS`UlpUR�UlqUR�5 [�[@Sa5(dURVSb[@ltUR�5 ScUlvUR�U5=UlxnUR�5=UlznUR�U5 UR�Ul|UR�Ul}UR�UR�5 UGRU5=Ul�nUGRUGR5 SdUl�UGRSd5 SUl�SUl�SUl�U(a�[R
GRU5(ag[R
RU5(dCUGRU5(a+SeUl�UGRU5nUGRU5 OUGRU5 SeUl�UGR5 UR�5 UGR5 UGR5 UGR GR#Sf5nU(a\UGR%Sg5nUcShnUS:�aUGR'5 USN-nUUl�[2GR*"UGR,5 G[.GR0Ul�G[2GR4Ul�G[2GR6Ul�UGR9SiSj5 UGR9SkSlSmSn5 UGR9SoSp5 UGR9SqSr5 UGR9SsSrStSu5 UGR;XGR<5nURcSiUGR>5 URcSkUGR@5 URcSvUGRB5 URcSwUGREU5GRF5 URcSxUGRIU5GRJ5 UGRMU5nURcSyUGRN5 URcSsUGRP5 U"U5nURcSzUGRR5 URcS{UGRT5 URcS|UGRV5 URcS}UGRYU5GRZ5 UGR]U5=Ul�nURcSoUGR`5 URcSqUGRb5 URcS~UGRd5 URcSUGRgU5GRh5 UGRj(a@UGRmU5Ul�URcS�UGRGRn5 OUGRqS�S�S�5 UGRr(abUGRuU5Ul�[@RP"SSS�S_S9(aUGRw5 URcS�UGRv5 gUGRqS�S�S�5 g!["a3 U	RU	R$U5n
GNK!["a GNYf=ff=f)�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)rG�padx�wrap�highlightthicknessrI�tabstylerQ�WM_DELETE_WINDOW�<<close-window>>z<Control-Button-1>z<2>z<3>z<MouseWheel>�x11z
<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��g�N�break�)�events r$�<lambda>�'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_framerrF�	GetOptionr�TextrM�focused_widget�
createmenubar�apply_bindings�protocol�close�bind�close_eventr
�isAquaTk�right_menu_eventr�_windowingsystem�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_eventr8�fregion�indent_region_event�dedent_region_event�comment_region_event�uncomment_region_event�tabify_region_event�untabify_region_eventr9�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�hasattrrp�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_addr2�user_input_insert_tags�autocomplete_event�try_open_completions_event�force_open_completions_eventr3�expand_word_eventr7�format_paragraph_eventr;�flash_paren_event�paren_closed_event�check_module_event�run_module_event�run_custom_eventr:�	do_rstripr4�ctip�try_open_calltip_event�refresh_calltip_event�force_open_calltip_eventr<�zoom_height_event�allow_code_contextr5�toggle_code_context_event�update_menu_state�allow_line_numbersr6�toggle_line_numbers_event)�selfr��filename�keyr�r>�dochome�pyver�basepathr��docfile�KEYr�r�rFrI�text_optionsrMr��indents�	usespacesr�r�r��	is_py_srcrErs�autocomplete�
parenmatch�
scriptbindingr
s                               r$�__init__�EditorWindow.__init__Jsn
��3�� � �(��w�w�|�|�C�O�O�U�L�I�G��|�|�!�!�'�*�*�&��c�6F�6F�r��6J�)J�J���7�7�=�=�!8�9�9�?�G�0�H� �g�g�l�l�8�+0�,�@�G����b�q�!�U�*����5�c�j�j�\�:�;���$�/�/��0H�0H�#�N�G��7�7�>�>�'�*�*�%�G������)��'�'�,�,�s���J�L���g�g�&�&�w�/�G��w�w�~�~�g�&�&�(/��%��<�<�8�+�,5��8M�8M�,M�L�)��)I�+.�+;�+;�B�Q�+?�*@��%��
��!�u�z�z���	��D�z����.�.�t�,�,�G�G���3�� %�
�
�D��&+�%6�%6�D�H�H�"� "�D��%'�D�H�H�"�!)�!1�!1�"6�b�g�g�l�l�� � �"4�76���!#���',�S�z�1���*�$�Z�f�=�=��	�D��"�"�6�>�7��O�����&'��+�"�,�,����u�F�	��,�D�1�*�M��M�M��	�D�"&�)�)������������������,�d�j�j�9����
�
�(�$�*:�*:�;��?�?����I�I�(�$�*:�*:�;�
�I�I�*�4�+@�+@�A��I�I�e�T�2�2�3�
�I�I�e�D�1�1�2��	�	�.�+�.�� � �E�)��I�I�l�K�0��I�I�l�K�0��	�	�-��!6�!6�7��	�	�)�T�X�X�&��	�	�*�d�i�i�(��	�	�+�t�z�z�*��	�	�%�t�'?�'?�@��	�	�*�d�.�.�/��	�	�#�T�%5�%5�6��	�	�"�D�$5�$5�6��	�	�*�D�,>�,>�?��	�	�#�T�%;�%;�<��	�	�"�$9�:��	�	�"�D�O�O�4��	�	�(�$�*?�*?�@��	�	�*�d�o�o�.��	�	�"�D�$9�$9�:��	�	�%�t�'?�'?�@��	�	�&��(A�(A�B��	�	�-��!3�!3�4��	�	�/�4�#7�#7�8��	�	�'��(B�(B�C��	�	�*�4�+H�+H�I��	�	�$�T�%<�%<�=�!%�!2�!2�4�!8�8���w��	�	�%�w�'B�'B�C��	�	�%�w�'B�'B�C��	�	�&��(D�(D�E��	�	�(�'�*H�*H�I��	�	�%�w�'B�'B�C��	�	�'��)F�)F�G��,�,�t�$���	�	�#�W�%>�%>�?��	�	�*�G�,L�,L�M��	�	�(�D�:�:�1�=�>��	�	�)�T�;�;�A�>�?��	�	�%�t�'9�'9�:��	�	�&��(;�(;�<��	�	�)�4�+=�+=�>��&)���d�#��"&�
�
�3���I�I�+�T�->�->�?��I�I�-�t�z�z�/L�/L�M��I�I�.��0H�0H�I��I�I�-�t�/E�/E�F��I�I�,�d�.C�.C�D��������T��Q��7�����!��,��"�"�1�Q�"�/��+�+��Y���	�	�a��$�	�/�!%����
���'�'��	�	�6�>�J��V���	�	�a��$�	�/����������&�&�v�x�'3�&�B�	�$�}�����
� �=�=����#�#�%��x�!1�2�2�&*�i�i��&@�H�#�� � �"�"2�������.�.���3��-�-�/�/��	�D������ $� 5� 5���#�3�3����"�"�4�#9�#9�:��~�~�d�+�+���"�
�#�#�D�$=�$=�>�����#�#�E�*���
� ��� �����w�w�~�~�h�'�'����
�
�h�0G�0G��;�;�x�(�(�%)�D�N� $� 3� 3�H� =�I��/�/�	�:������)�!%���������� ��%�%�'������}�}� � ��*����*�*�U�#�C��{����a�x��"�"�$��A�g�� �D�N��$�$�T�%9�%9�:�'�1�1���"�+�+��
�#�-�-���	
���)�;�7����1�3H�+�-E�	G����-�/G�H����,�.G�H����)�+D�2�4M�	O�
�(�(��/J�/J�K���	�	�$�l�&E�&E�F��	�	�,��9�9�	;��	�	�.��;�;�	=��	�	�#�T�_�_�T�%:�%L�%L�M��	�	�(��&�&�t�,�C�C�	E��_�_�T�*�
��	�	�#�Z�%A�%A�B��	�	�$�j�&C�&C�D�%�d�+�
��	�	�$�m�&F�&F�G��	�	�"�M�$B�$B�C��	�	�"�M�$B�$B�C��	�	�/�4�;�;�t�#4�#>�#>�?��<�<��-�-��	�D��	�	�(�$�*E�*E�F��	�	�'��)C�)C�D��	�	�*�D�,I�,I�J��	�	�#�T�_�_�T�%:�%L�%L�M��"�"�"� $� 0� 0�� 6�D���I�I�/��'�'�A�A�
C�
�"�"�9�m�Z�H��"�"�"� $� 0� 0�� 6�D���!�!�&�.�"8�v�G��.�.�0��I�I�/��1O�1O�P��"�"�9�m�Z�H��W)���"(�"3�"3�F�4M�4M�47�#9���,�����	�s7�AD?�D?
AE<�E
AE)�E)
AE8�E3AE<�E7AE8�E8AE<c�$�UR5 g�N)r��rr^s  r$r��EditorWindow.handle_winconfigms�����r&c	�:�URn[[URRURS5URS5/55nUR
5SU--
n[XRS5S9RS5nX4-Ul	g)N�borderrRrDrm)rm�0)
rM�sum�map�tk�getint�cget�winfo_widthr�measurerI)rrM�
inner_padding�pixel_width�zero_char_widths     r$r��EditorWindow.set_widthps����y�y���C���������8�1D�15���6�1B�1D�E�F�
��&�&�(�1�}�+<�<��
��I�I�f�-�.�6�6�s�;�	� �3��
r&c�r�URR5up#URRU5 gr[)r��defaultfilenamer��new)rr^�dirname�basenames    r$r��EditorWindow.new_callback}s*�� �G�G�3�3�5����
�
���w��r&c�B�URS-S:waURS:XagURRS5(a{URR	SSS5(aYURR	SSS5(a7[URRS5R
S5S	5nOLURRSS5n[[U55H
nX2S
;dM
 O
 [U5n[URRS5R
S5S	5nX$:XaSnS[U5-S
-nURS	-S:XaURRSSS5 GO]URRS5(dURRSS5 O�URR	URRS5SURRS55(aURRSS5 OURRSS5 URRU5nURRS5nURR	USU5(aXvpvURRSSS5 URRSXg5 URRSU5 URRS5 g)N�r�Home�iomark�<=zinsert lineend�insert linestart�.rc)� �	�insertzinsert linestart+�c�sel�1.0rs�	sel.first�	my_anchor�<�sel.last�>r\)�state�keysymrMr��comparerJ�splitr��range�len�str�
tag_remove�mark_set�tag_add�see)rr^�insertpt�line�lineat�dest�first�lasts        r$r��EditorWindow.home_callback�sV���K�K�!�O��!�e�l�l�f�&<���9�9�?�?�8�$�$��9�9���X�t�-=�>�>��9�9���/��x�@�@��4�9�9�?�?�8�4�:�:�3�?��B�C�H��9�9�=�=�!3�5E�F�D�!�#�d�)�,���>��3��-��T����T�Y�Y�_�_�X�.�4�4�S�9�!�<�=�����H�"�3�x�=�0��4���K�K��M�a���I�I� � ���u�5��9�9�?�?�;�/�/��	�	�"�"�;��9��9�9�$�$�T�Y�Y�_�_�[�%A�3�%)�Y�Y�_�_�X�%>�@�@��I�I�&�&�{�K�@��I�I�&�&�{�J�?��I�I�O�O�D�)�E��9�9�?�?�;�/�D��y�y� � ��s�4�0�0�!�d��I�I� � ���u�5��I�I���e�U�1��	�	���8�T�*��	�	�
�
�h��r&c��URUR5Ul[URSSSS9n[R
S:XaURR
SS[S9 URR
SS	[S9 URR
S
S[S9 URR[[S9 UR[[S9 URRS
UR5 URRS
SS5 URRUR5 g)Nrc�grey75)rQ�borderwidth�
backgroundr�	_padding1z    )rdrjzCol: ?r^zLn: ?)rdrez<<set-line-and-column>>z<KeyRelease>z<ButtonRelease>)r1r��
status_barr�rr~�	set_label�RIGHTr��BOTTOM�XrMr��set_line_and_columnr�
after_idle)r�seps  r$r��EditorWindow.set_status_bar�s����-�-�d�h�h�7����D�H�H�Q�A�(�K���<�<�8�#�
�O�O�%�%�k�6��%�F����!�!�(�H�5�!�A����!�!�&�'��!�>������&�q��1����f�1��%��	�	���0�$�2J�2J�K��	�	���5�*�,=�	?��	�	���T�5�5�6r&c���URR[5RS5up#URRSSU-5 URRSSU-5 g)NrFrjzCol: %sr^zLn: %s)rMr��INSERTrUrirj)rr^r^rjs    r$rn� EditorWindow.set_line_and_column�sR���y�y���v�.�4�4�S�9������!�!�(�I��,>�?����!�!�&�(�T�/�:r&))�file�_File)�edit�_Edit)�format�F_ormat)�run�_Run)ru�_Options)r�_Window)r�_Helpc�T�URn0=UlnURH@up4[U5upT[	XS3S5n[XSUS9=X#'nUR
XGUS9 MB [R"5(a [USSS9=US'nUR
S	US
9 UR5 [URSS9Ul
URSRS
SSURS9 URSR[5UlUR5 g)a�Populate the menu bar widget for the editor window.

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

Instance variables:
menubar: Menu widget containing first level menu items.
menudict: Dictionary of {menuname: Menu instance} items.  The keys
    represent the valid menu items for this window and may be a
    subset of all the menudefs available.
recent_files_menu: Menu widget contained within the 'file' menudict.
�_menu_postcommandNr)rG�tearoff�postcommand)�labelrE�	underline�apple)rGr��application�IDLE)r�rE�r�rurAzRecent Files)r�r�rEr)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�rGr�r�r�rEs        r$r��EditorWindow.createmenubar�s-�� �|�|��#%�%��
���?�?�K�D�&�u�~��I�!�$�&�0A�(B�D�I�K�$(��!�5@�%B�
B�H�N�T����5�y��I�+������-1�$�W�:;�.=�
=�H�]�#�d����6���5�����!%�d�l�l�A�!>����
�
�f��,�,�Q�n�78�26�2H�2H�	-�	J�%)�M�M�&�$9�$?�$?��$D��!��$�$�&r&c���URSnURS5nUcSnX R:�aURURS-U5 [R
"U5 g)zCCallback to register window.

Only called when Window menu exists.
rrsNrtrc)r�r�r��deleter�add_windows_to_menu)rrErss   r$r��EditorWindow.postwindowsmenusY��
�}�}�X�&���j�j�����;��C������K�K����q�(�#�.��"�"�4�(r&c�@�URUnURX#S9 g)z$Update label for menu item at index.)r�N�r��entryconfig)rrEr�r��menuitems     r$�update_menu_label�EditorWindow.update_menu_label�!���=�=��&�����U��0r&c�@�URUnURX#S9 g)z$Update state for menu item at index.�rRNr�)rrEr�rRr�s     r$r�EditorWindow.update_menu_stater�r&c���US:XaC[US5n[URS5U-5URS5-
nSnUS4nURR"U/UQ76 g)zHandle scrollbar.�movetorrs�@0,0�scroll�unitsr\)�float�round�	getlinenorM�yview)rr^�args�fraction�liness     r$r��EditorWindow.handle_yviewsg���H���T�!�W�~�H��4�>�>�%�0�8�;�<��^�^�F�+�,�E��E��7�#�D��	�	����%��%�r&c�2�URnURSURSUR35nUR	SSU5=(a UR	USS5nU(d%UR
SSS	5 URS
U5 UR(dUR5 URnXl
[RSSS:HnU(aURS
S9 URH-nUup�n
U
cM[!X
5"5nUR#X�S9 M/ UR%UR&UR(5 U(aURRSS9 g![
a SnGNf=f![a M�f=f)N�@�,rMrDrPFrKrLrsrIrArB�arrow)�cursorr��ibeamr\)rMr��x�yrT�TclErrorrYrZ�rmenu�
make_rmenur^rr~�config�rmenu_specs�
ValueErrorr��entryconfigure�tk_popup�x_root�y_root)rr^rM�newdex�in_selectionr��iswin�itemr��	eventname�verify_staterRs            r$r��EditorWindow.right_menu_event)sj���y�y�����a����y��%�'�'��3�4��	!� �L�L��d�F�C�C��<�<���z�B�
���O�O�E�5�%�0��M�M�(�F�+��z�z��O�O���
�
���
����R�a� �E�)����K�K�w�K�'��$�$�D�
�15�.��,��#���D�/�1�E�� � �� �4�%�	���u�|�|�U�\�\�2���I�I���G��,���7�	!� �L�	!�� �
��
�s#�-E5�F�5F�F�
F�F)�CloserWNc���[URSS9nURHAnUSUSpCUb"URU4SjnURX5S9 M1UR	5 MC Xlg)Nrr�rcc�&�URU5 gr)��event_generate�rMr�s  r$rh�(EditorWindow.make_rmenu.<locals>.commandVs���'�'�	�2r&�r�rh)r�rMr��add_commandr�r�)rr�r�r�r�rhs      r$r��EditorWindow.make_rmenuQsi���T�Y�Y��*���$�$�D�#�A�w��Q��9�� �!%���i�3��!�!��!�?��#�#�%�%��
r&c�"�UR5$r))�rmenu_check_copy�rs r$�rmenu_check_cut�EditorWindow.rmenu_check_cut]s���$�$�&�&r&c�p�URRS5nU(aS$S$![a gf=f)NrM�normalrv�rMr�r�)r�indxs  r$r��EditorWindow.rmenu_check_copy`s<��	4��9�9�?�?�;�/�D� $�8�3��3���	��	�s�(�
5�5c��URRRSURS5 g![a gf=f)Nztk::GetSelection�	CLIPBOARDr�rv)rMr1�callr�r�s r$�rmenu_check_paste�EditorWindow.rmenu_check_pastehs?��	��I�I�L�L���0�$�)�)�[�I����	��	�s�14�
A�Ac�D�[R"UR5 g)zHandle Help 'About IDLE' event.r\)r�AboutDialogr�r*s  r$r��EditorWindow.about_dialogps��	���t�x�x�(�r&c�F�[R"URS5 g)z&Handle Options 'Configure IDLE' event.�Settingsr\)r	�ConfigDialogr�r*s  r$r��EditorWindow.config_dialogvs��	�!�!�$�(�(�:�6�r&c��UR(a
URnOURn[R"U5 g)zHandle Help 'IDLE Help' event.r\)r�r�r�
show_idlehelp)rr^�parents   r$r��EditorWindow.help_dialog|s.���9�9��Y�Y�F��X�X�F����6�"�r&c�6�[RSSS:Xa"[R"UR5 g[R"UR5 g![
a3n[R"S[U5URS9 SnAgSnAff=f)NrArB�Document Start Failure��title�messager�r\)rr~rz�	startfilery�OSErrorrr�rXrM�
webbrowser�open)rr^�whys   r$r��EditorWindow.python_docs�sy���<�<����u�$�
8����T�]�]�+��
�O�O�D�M�M�*����
8��$�$�+C���H�T�Y�Y�8���
8�s� A�
B�%)B�Bc�:�URRS5 g)Nz<<Cut>>r\�rMr�r*s  r$r��EditorWindow.cut�s���	�	� � ��+�r&c�|�URRS5(dgURRS5 g)NrKz<<Copy>>r\)rM�
tag_rangesr�r*s  r$r��EditorWindow.copy�s/���y�y�#�#�E�*�*���	�	� � ��,�r&c�p�URRS5 URRS5 g)Nz	<<Paste>>rIr\)rMr�r\r*s  r$r��EditorWindow.paste�s'���	�	� � ��-��	�	�
�
�h��r&c��URRSSS5 URRSS5 URRS5 g)NrKrLzend-1crIr\)rMr[rZr\r*s  r$r��EditorWindow.select_all�s?���	�	���%���1��	�	���8�U�+��	�	�
�
�h��r&c�t�URRSSS5 URRS5 g)NrKrLrsrIr\)rMrYr\r*s  r$r��EditorWindow.remove_selection�s+���	�	���U�E�5�1��	�	�
�
�h��r&c�|^^^^�URRmURRmSmUUUU4SjnU$)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�x>�URS-S:XaT"S5 T"STT5 gg![a gf=f)NrNrrMrI)rRr�)r^�
edge_index�edges_table�self_text_index�self_text_mark_sets ����r$�move_at_edge�<EditorWindow.move_at_edge_if_selection.<locals>.move_at_edge�sH������a��A�%��#�K�0�&�x��Z�1H�I�&�� ����s�,�
9�9)rMr�rZ)rrrr	r
rs ` @@@r$r��&EditorWindow.move_at_edge_if_selection�s9����)�)�/�/��!�Y�Y�/�/��5��	�	��r&c�:�URRS5 g)Nz
<Meta-Delete>r\r�r*s  r$r��EditorWindow.del_word_left�s���	�	� � ��1�r&c�:�URRS5 g)Nz<Meta-d>r\r�r*s  r$r��EditorWindow.del_word_right�s���	�	� � ��,�r&c�D�[R"UR5 gr[)r�findrMr*s  r$r��EditorWindow.find_event�s�����D�I�I��r&c�D�[R"UR5 gr[)r�
find_againrMr*s  r$r��EditorWindow.find_again_event�s�����$�)�)�$�r&c�D�[R"UR5 gr[)r�find_selectionrMr*s  r$r��!EditorWindow.find_selection_event�s�����d�i�i�(�r&c�p�[R"URURUR5 gr[)r
rMr�r�r*s  r$r�� EditorWindow.find_in_files_event�s!���	�	�$�)�)�T�W�W�d�j�j�1�r&c�D�[R"UR5 gr[)rrMr*s  r$r��EditorWindow.replace_event�s������	�	�"�r&c��URn[R"USS5RnUbIUR	SSS5 URSUS35 UR
S5 UR5 g)	Nz
Go To Linez/Enter a positive integer
('big' = end of file):rKrLrsrI�.0r\)rMr�Goto�resultrYrZr\rn)rr^rM�linenos    r$r��EditorWindow.goto_line_event�st���y�y������l�)���&�		�
���O�O�E�5�%�0��M�M�(�v�h�b�M�2��H�H�X���$�$�&�r&c�r�URRSS5R5n[R
"URSSU5RnUbIUR(aURRU5 U$URRU5 U$![a SnN�f=f)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.
rMrPrCzOpen ModulezAEnter the name of a Python module
to search on sys.path and open:)rMr��stripr�r�
ModuleNamer#r�r�r�r�)rrG�	file_paths   r$�open_module�EditorWindow.open_module�s���	��9�9�=�=��j�9�?�?�A�D��$�$��	�	�=�2��	��f�		�
� ��z�z��
�
���	�*������ � ��+�����	��D�	�s�*B'�'B6�5B6c�$�UR5 gr[)r*r*s  r$r��EditorWindow.open_module_events������r&c���URRnURRS:XaU(dUR	5nUcgSSKJn URURU5 g)N�PyShellEditorWindowr\r)�browser)	r�r�	__class__�__name__r*�idlelibr0�
ModuleBrowserr�)rr^rr0s    r$r�� EditorWindow.open_module_browsersX���7�7�#�#�����'�'�+@�@���'�'�)�H����#����d�i�i��2�r&c�F�SSKJn URUR5 g)Nr)�pathbrowserr\)r3r7�PathBrowserr�)rr^r7s   r$r��EditorWindow.open_path_browsers��'�����	�	�*�r&c�R�SSKn[RSS/nURUSS9 g)Nrz-cz,from turtledemo.__main__ import main; main()F)�shellr\)�
subprocessr�
executable�Popen)rr^r<�cmds    r$r��EditorWindow.open_turtle_demos1����~�~��=�?��	����E��*�r&c���UbqUS:�ajURRSSU-5 URRSSS5 URRSSS5 UR	5 ggg)NrrIz%d.0rKrLrsz
insert +1l)rMrZrYr[�center)rr$s  r$�gotoline�EditorWindow.gotolinesc����&�1�*��I�I���x��&��9��I�I� � ���u�5��I�I���e�X�|�<��K�K�M�	#-�r&c��U(a$[RRU5(ag[RR[RR	U55up#[RRU5[;agURRSS5nURS5=(a SU;$)NTrLz1.0 lineendz#!�python)
rzr{r��splitextr>�normcaserrMr��
startswith)rr�base�extr^s     r$r��EditorWindow.ispythonsource&s����2�7�7�=�=��2�2���G�G�$�$�R�W�W�%5�%5�h�%?�@�	��
�7�7���C� �M�1���y�y�}�}�U�M�2�����t�$�9��T�)9�9r&c�l�UR(a#URRU5 SUlggr))r��unregister_maybe_terminater�s r$�
close_hook�EditorWindow.close_hook/s'���:�:��J�J�1�1�$�7��D�J�r&c��Xlgr))rO)rrOs  r$�set_close_hook�EditorWindow.set_close_hook4s��$�r&c���UR(aURRU5 UR5 URR	U5 UR5 gr))r��filename_changed_editr�r��update_windowlist_registryr�r�s r$r��!EditorWindow.filename_change_hook7sE���:�:��J�J�,�,�T�2���� ����+�+�D�1����r&c�&�UR(agURURR5(aUR	5UlUR(a/UR
R
URURS9 gg)N)�filter�after)r�r�r�rr+r��insertfilterafterr�r�s r$�
_addcolorizer�EditorWindow._addcolorizer>sb���:�:�����t�w�w�/�/�0�0��,�,�.�D�J��:�:��H�H�&�&�d�j�j��	�	�&�J�r&c��UR(dgURR5 URRUR5 SUlgr))r��removecolorsr��removefilterr�s r$�_rmcolorizer�EditorWindow._rmcolorizerGs9���z�z���
�
���!������d�j�j�)���
r&c� �UR5 UR5 [RUR5 UR
bUR
R
5 URbURR5 gg)zUpdate the color themeN)	rar\r(r,rMr��update_highlight_colorsr��
update_colorsr�s r$r��EditorWindow.ResetColorizerNso��	
���������!�!�$�)�)�,����(����5�5�7����(����+�+�-�)r&�_c�>�URSU5 URU5nU(a%X0R;aURSUS-U5 SURU5:XaURSU5 OURSUS-5 UR	U5 g)N�ERRORz
 wordstart�
rIz+1c)r[r��
IDENTCHARSrZr\)rrM�pos�chars    r$�colorize_syntax_error�"EditorWindow.colorize_syntax_error]sy�����W�c�"��x�x��}���D�O�O�+��L�L��#��"4�c�:��4�8�8�C�=� ��M�M�(�C�(��M�M�(�C�%�K�0�����
r&c��[R"SSSSS9nU(dSURS'g[RURS'g)	z&Update the cursor blink configuration.rHr(zcursor-blinkrorKrrqN)rr�rMrp)r�cursorblinks  r$r�� EditorWindow.update_cursor_blinkhsC���(�(����V�E���)*�D�I�I�o�&�*2�)@�)@�D�I�I�o�&r&c� �URbURR5 URbURR5 [R"UR
SS5nXRS'UR5 g)z.Update the text widgets' font if it is changedNrHr(rm)r��update_fontr�rr�r�rMr�)r�new_fonts  r$�	ResetFont�EditorWindow.ResetFontrsp�����(����)�)�+����(����)�)�+��#�#�D�I�I�v�~�F��$�	�	�&�����r&c��[R"5=URlnUR	5H"up#UR
R"U/UQ76 M$ UR5HXn[R"U5nU(dM"UR	5H"up#UR
R"U/UQ76 M$ MZ g)zWRemove the virtual, configurable keybindings.

Leaves the default Tk Text keybindings.
N)	r�GetCurrentKeySetr0�default_keydefs�itemsrM�event_delete�get_standard_extension_names�GetExtensionBindings)r�keydefsr^�keylist�
extensionName�xkeydefss      r$�RemoveKeybindings�EditorWindow.RemoveKeybindings�s���3;�2K�2K�2M�M��
�
�%��%�m�m�o�N�E��I�I�"�"�5�3�7�3�.�!�>�>�@�M��4�4�]�C�H��x�&.�n�n�&6�N�E��I�I�*�*�5�;�7�;�'7�Ar&c�N�[R"5=URlnUR	5 UR5H3n[R"U5nU(dM"UR	U5 M5 0nURRH;n0XES'USH(nU(dMUSXES[US5S'M* M= URH�nURUnUR[5nUcM,US-
n[SU5H�n	URU	5S:XdMURU	S5n
U
(dM5URU	S5nSnXt;aX�U;aXGUnU(dMf[X5n
UR!X�S9 M� M� g)	zUApply the virtual, configurable keybindings.

Also update hotkeys to current keyset.
rrcNrh�acceleratorr�rC)r�)rryr0rzr�r}r~�menudefsr�r�r�r�rVrL�	entrycget�get_acceleratorr�)
rrr�r��
menuEventDictrEr��menubarItemrsr��accel�itemNamer^s
             r$�ApplyKeybindings�EditorWindow.ApplyKeybindings�s���3;�2K�2K�2M�M��
�
�%������!�>�>�@�M��4�4�]�C�H��x��#�#�H�-�A��
��M�M�*�*�D�%'�M�q�'�"��Q����4�BF�q�'�M�q�'�*�7�4��7�+;�A�+>�?� �+�
 �=�=�K��=�=��-�D��*�*�S�/�C��{���1�H�C��q�#����9�9�U�#�y�0� �N�N�5�-�@�E��u�#'�>�>�%��#A�� "��&�7�'��+E�E�(5�(B�8�(L�� �5�$3�G�$C�E� �,�,�U�,�F�'�)r&c�`�UR(d[R"SSSSS9Ulgg)zCUpdate the indentwidth if changed and not using tabs in this windowrHrnz
num-spacesrJrKN)r�rr�r�r�s r$r��#EditorWindow.set_notabs_indentwidth�s,���|�|�'�1�1�&�(�<�7<� >�D��r&c�|�[R"5nURSnUR[5nX0R
:�aUR
UR
S-U5 U(a@UR5 UH*nURUS5nURUSUS9 M, X RS'g)z4Update the additional help entries on the Help menu.rrcrr�N)
r�GetAllExtraHelpSourcesListr�r�r�r�r�r��_extra_help_callbackr�)r�	help_list�helpmenu�helpmenu_length�entryr?s      r$r��$EditorWindow.reset_help_menu_entries�s����7�7�9�	��=�=��(��"�.�.��-���6�6�6��O�O�T�6�6��:�_�M���"�"�$�"���/�/��a��9���$�$�5��8�S�$�A�#�!)�
�
�f�r&c�^�U4U4SjjnU$)z9Return a callback that loads resource (file or web page).c�z>�URS5(d[RRU5n[R
SSS:Xa[R"U5 g[R"U5 g![a3n[R"S[U5TRS9 SnAgSnAff=f)N)�www�httprArBr�r�)rIrzr{r�rr~r�r�rr�rXrMr�r�)�helpfiler�rs  �r$�display_extra_help�=EditorWindow._extra_help_callback.<locals>.display_extra_help�s�����&�&��7�7��7�7�+�+�H�5���|�|�B�Q��5�(�<��L�L��*�
����)��	�<��(�(�/G� #�C�����<��<�s�A=�=
B:�)B5�5B:r])r�resourcer�s`  r$r��!EditorWindow._extra_help_callback�s���(0�
	*�"�!r&c���/nURnU(aH[RRU5(a$[	USSS9nUR5nSSS5 U(aJ[RR
U5S-nX;aURU5 URSU5 /nUHCnSU;d)[RRUSS5(aM2URU5 ME UVs/sHofU;dM
UPM nnS	nUS[U5nU(a'[	US
SSS9nURU5 SSS5 UR&R(Hsn
U
R*nUR-S[.5 [1U5H?up�U
R35n
U
R5U
5nUR7X|S-U
-USS9 MA Mu g!,(df   GN�=fs snf!,(df   N�=f![a\n	[URSS5(d5S
URl[ R""SSU	S3UR$S9 Sn	A	GNSn	A	ff=f)z/Load and update the recent files list and menus�utf_8r)r/�errorsNrjr�rt�1234567890ABCDEFGHIJK�w�recentfiles_messageFTzIDLE Warningz)Cannot save Recent Files list to disk.
  z
Select OK to continue.r�rG)r�rhr�)r�rzr{r�r��	readlines�abspath�removerI�appendrW�
writelinesr�r�r�r�r�showwarningrMr�r�r�r�r��	enumerate�rstrip�#_EditorWindow__recent_file_callbackr�)r�new_file�rf_listr)�rf_list_file�	bad_pathsr{�ulchars�rf_file�err�instancerE�i�	file_name�callbacks               r$r��%EditorWindow.update_recent_files_list�s$�����*�*�	�������	�2�2��i�&�y�:�=I�&�0�0�2��:���w�w���x�0�4�7�H��"����x�(��N�N�1�h�'��	��D��t�|�2�7�7�>�>�$�q��*�#=�#=�� � ��&��%,�E�G�D�9�/D�4�G��E�)���!�C��L�)���
*��)�S�#*�9�>�AH��&�&�w�/�>����.�.�H��-�-�D��K�K��3�� )�'� 2���%�,�,�.�	�#�:�:�9�E��� � �w�z�C�'7�)�'C�)1�+,�!�.�!3�/�=:�:��F�
>�>���
*��t�y�y�*?��G�G�48�D�I�I�1��*�*��!%�%(�E�*9�!9� $�y�y�	*���
*�sO�G�>	G1�G1�+H�7G6�	H�
G.�6
H�H�H�
I-�AI(�(I-c�^�U4U4SjjnU$)Nc�8>�TRRUS9 g)N)�editFile)r�r�)�
fn_closurers �r$�open_recent_file�=EditorWindow.__recent_file_callback.<locals>.open_recent_files����G�G�L�L�*�L�-r&r])rr�r�s`  r$�__recent_file_callback�#EditorWindow.__recent_file_callbacks���(1�	.��r&c�~�UR5nUR5nU(a1U(a*[R"5(dUS-U-[-nOU(aUnOU(aUnOSnU=(d U=(d UnUR5(d
SU-nSU-nURRU5 URRU5 [R"5(aLURRSU5 URRSUR5(+5 gg)Nz - �untitledz*%s*z*%sz
-titlepathz	-modified)
�short_title�
long_titler
�	isCocoaTk�_py_version�	get_savedr��wm_title�wm_iconname�
wm_attributes)r�short�longr��icons     r$r��EditorWindow.saved_change_hooks���� � �"����� ���T�&�"2�"2�"4�"4��E�M�D�(�;�6�E�
��E�
��E��E��%��%����~�~����U�N�E��4�<�D������%� ������T�"�������H�H�"�"�<��6�
�H�H�"�"�;�D�N�N�4D�0D�E�r&c�6�URR5$r))r�r�r�s r$r��EditorWindow.get_saved/s���y�y�"�"�$�$r&c�:�URRU5 gr))r��	set_saved)r�flags  r$r��EditorWindow.set_saved2s���	�	���D�!r&c�8�URR5 gr))r��
reset_undor�s r$r��EditorWindow.reset_undo5s���	�	���r&c�~�URRnU(a[RR	U5$S$)Nr�)r�rrzr{r>)rrs  r$r��EditorWindow.short_title8s-���7�7�#�#��-5�r�w�w����)�E�:�Er&c�@�URR=(d S$)NrC)r�rr�s r$r��EditorWindow.long_title<s���w�w���%�2�%r&c�$�UR5 gr[)rBr*s  r$r�� EditorWindow.center_insert_event?s�����
�r&c��URnUR5up4URU5nXC-
n[SXVS--
5nUR	[U55 g)NrcrD)rM�getwindowlinesr��maxr�r�)r�markrMr��botr$rQ�newtops        r$rB�EditorWindow.centerCsS���y�y���&�&�(�������%������Q����*�+���
�
�5��=�!r&c��URnURS5nURS5nX#:Xa)UR5S:Xa[US5nX$-S-
nX#4$)Nr�z@0,65535rcrQ)rMr��winfo_heightrJ)rrMr�r�rQs     r$r��EditorWindow.getwindowlinesKs]���y�y���n�n�V�$���n�n�Z�(���:�$�+�+�-��2���h��(�F��,��"�C��x�r&c�`�URn[[URU555$r))rMrJr�r�)rr�rMs   r$r��EditorWindow.getlinenoUs$���y�y���5����D�)�*�+�+r&c��URR5n[R"SU5n[	[[UR555$)zReturn (width, height, x, y)z(\d+)x(\d+)\+(-?\d+)\+(-?\d+))r��wm_geometry�re�match�listr0rJ�groups)r�geom�ms   r$�get_geometry�EditorWindow.get_geometryYs=���x�x�#�#�%���H�H�5�t�<���C��Q�X�X�Z�(�)�)r&c�$�UR5 gr[)r�r*s  r$r��EditorWindow.close_event_s���
�
��r&c�\�UR(a�UR5(dlURR5S:waURR	5 URR5 URR
5 URR5$g)Nr�)r�r�r�rR�	deiconify�lower�lift�	maybesaver�s r$r�EditorWindow.maybesavecsl���7�7��>�>�#�#��8�8�>�>�#�X�-��H�H�&�&�(������ ����
�
���7�7�$�$�&�&�
r&c��UR5n[U5S:waUR5 U$![a gf=f)N�cancel)rrX�_close�AttributeError)r�replys  r$r��EditorWindow.closels?��	��N�N�$�E��5�z�X�%����
��L���	��	�s�03�
A�Ac�j�URR(a#URURRS9 [R"UR
5 UR
5 URR5 SUlSUlUR(a!URR5 SUl	SUl
SUlURR5 SUlURR5 UR(aUR5 gg)N)r�)r�rr�r�unregister_callbackr��unload_extensionsr�r�r�rMr�r�r��destroyrOr�s r$r�EditorWindow._closeus����7�7����)�)�4�7�7�3C�3C�)�D��"�"�4�#7�#7�8���� ����
�
�������	��:�:��J�J�����D�J���	� �������������������?�?��O�O��r&c�2�0UlUR5 gr))�
extensions�load_standard_extensionsr�s r$r��EditorWindow.load_extensions�s������%�%�'r&c��[URR55H&n[US5(dMUR	5 M( 0Ulg)Nr�)r�r�valuesr�r�)r�inss  r$r
�EditorWindow.unload_extensions�s=������.�.�0�1�C��s�G�$�$��	�	��2���r&c��UR5HnURU5 M g! [S[U55 [R
"5 MI=f)NzFailed to load extension)r}�load_extension�print�repr�	traceback�	print_exc)rrGs  r$r�%EditorWindow.load_standard_extensions�sJ���5�5�7�D�
&��#�#�D�)�8��
&��0�$�t�*�=��#�#�%�s	�+�,Ac�*�[R"SS9$)NT)�editor_only)r�
GetExtensionsr�s r$r}�)EditorWindow.get_standard_extension_names�s���%�%�$�7�7r&�ZzDummy�zzdummyc��URRX5n[R"SU-[S9n[X15n[R"U5n[US5(aURURU5 U"U5nX`RU'U(a�URU5 UH�nUR!SS5nUSSS:XaUSSnUSSS:XaMUS	SS
:XaUSS	nUS	SS
:XaMUS-n[Xh5(dM^UR"R%U[Xh55 M� gg![
[4a [R"U5nGN0f=f![
a [SU5 ef=f)NrF)�packagez
Failed to import extension: r��-rgrcrOrtrQ�_event)�extfilesr��	importlib�
import_module�__package__�ImportError�	TypeErrorrr�rr~r�r�r�rr�rrMr�)	rrG�fname�mod�clsrr�vevent�
methodnames	         r$r�EditorWindow.load_extension�sv���
�
�!�!�$�-��	�
5��-�-�c�E�k�;�O���c� ���/�/��5���3�
�#�#��O�O�C�L�L�'�2��$�i�� #����������(�!��#�^�^�C��5�
� ��!�n��+�!+�A�B��J�!��!�n��+� ���o��,�!+�C�R��J�!���o��,�'�(�2�
��3�+�+��I�I�N�N�6�7�3�+C�D�"��� ��+�
5��-�-�e�4��
5���	��2�D�9��	�s#�E�&E+�'E.�*E+�+E.�.Fc���UcURRnURnXlUR	5H!up4U(dMUR
"U/UQ76 M# g)z"Add events with keys to self.text.N)r0rzrMrr{r)rrrMr^r�s     r$r��EditorWindow.apply_bindings�sL���?��m�m�3�3�G��y�y����%�m�m�o�N�E��w����u�/�w�/�.r&c
��UcURRnUcURRnURnURnUH�upVURU5nU(dMUH�nUcUR
5 MUup�U	SSS:HnU(aU	SSn	[U	5up�[X*5n
XJ4SjnU(a)URU
[5nURX�X�US9 M~URX�UU
S9 M� M� g)z�Fill in dropdown menus used by this window.

Items whose name begins with '!' become checkbuttons.
Other names indicate commands.  None becomes a separator.
Nrc�!c�&�URU5 gr)r�r�s  r$rh�(EditorWindow.fill_menus.<locals>.command�s���+�+�I�6r&)r�r�rhr��variable)r�r�rhr�)
r0r�rzr�rMr�r�r�r��get_var_obj�
BooleanVar�add_checkbuttonr�)rr�rr�rM�mname�	entrylistrEr�r�r��checkbuttonr�r�rh�vars                r$r��EditorWindow.fill_menus�s
�����}�}�-�-�H��?��m�m�3�3�G��=�=���y�y�� (��E��<�<��&�D���"���=��&�&�(�',�$�E�#(��!�9��#3�K�"� %�a�b�	��'.�u�~�$�I�"1�'�"E�K�%)�7�"�"�.�.�y�*�E���,�,�5�$+�%(�-�*��(�(�u�18�5@�)�B�%#�	!)r&c�l�URU5nU(aUR5nU$[U5er))r9r��	NameError)rrGr?�values    r$�getvar�EditorWindow.getvar�s/�����t�$����G�G�I�E��L��D�/�!r&c�l�URX5nU(aURU5 g[U5er))r9r�rB)rrGrC�vartyper?s     r$�setvar�EditorWindow.setvar�s*�����t�-����G�G�E�N��D�/�!r&c��URRU5nU(d(U(a!U"UR5=URU'nU$)z:Return a tkinter variable instance for the event.
        )r�r�rM)rr�rGr?s    r$r9�EditorWindow.get_var_obj�sB�����#�#�I�.���w�18����1C�C�D���i�(�3��
r&c��UR(aAURRSU5=(d SURRU5;$g)N�TODO�STRINGrc)r�rM�
tag_prevrange�	tag_names)r�
text_indexs  r$�is_char_in_string�EditorWindow.is_char_in_stringsE���:�:��9�9�*�*�6�:�>�?��t�y�y�2�2�:�>�>�
?�r&c��URRS5nURRS5nX4$![a gf=f)NrMrP�NNr�)rrarbs   r$�get_selection_indices�"EditorWindow.get_selection_indicessE��	��I�I�O�O�K�0�E��9�9�?�?�:�.�D��;����	��	�s�8;�
A�Ac�P�URS=(d [n[U5$)N�tabs)rM�TK_TABWIDTH_DEFAULTrJ)r�currents  r$�get_tk_tabwidth�EditorWindow.get_tk_tabwidth&s ���)�)�F�#�:�':���7�|�r&c	���URnUR5U:wa@URRSSUSSURSU-5nURUS9 gg)Nrmr5z
-displayof�n)rY)rMr\r1r��master�	configure)r�newtabwidthrM�pixelss    r$�set_tk_tabwidth�EditorWindow.set_tk_tabwidth,s^���y�y�����!�[�0��W�W�\�\�&�)�T�&�\�".����"%��"3�5�F�
�N�N��N�'�1r&c���U(aNU(aGUR5nSUs=::aS::a	O OX0lURUR:waSUlUR	UR5 g)NrDrF)�guess_indentr�r�r�rd)rr"�guessr�s    r$r��#EditorWindow.set_indentation_params7sQ�����!�!�#�A��A�{��{�#$� ����4�=�=�0�$������T�]�]�+r&c�B�URnUR5up4U(a+U(a$URX45 URSU5 gUR	SS5nUS:Xa;URSSS5(aURS5 gUR
5 gUSS	;aURS5 gURn[URU55nUS
:�deUS-
UR-UR-nS
n	USSnU	S-n	[URU55nXx::d	USS	;aOM5UR5 URSU	-S5 Xx:a"URSS
X�-
-UR5 UR5 g)NrIr\rErCrQrLz	insert-1crt� 	rrcz
insert-%dcrG)rMrVr�rZr�rT�bellr�rW�
expandtabsr�r�rIrr�)
rr^rMrarb�charsr��have�want�
ncharsdeleteds
          r$r��"EditorWindow.smart_backspace_event@s����y�y���0�0�2����T��K�K��$��M�M�(�E�*�����+�X�6���B�;��|�|�H�c�5�1�1����K�(���	�	����"�I�U�"��K�K��$���=�=���5�#�#�H�-�.���a�x��x����d�.�.�.�$�2B�2B�B���
���#�2�J�E�)�A�-�M��u�'�'��1�2�D��|�u�R�y��5���	
�������L�=�0�(�;��;��K�K��#���"5��3�3�
5�����r&c�8�URnUR5up4UR5 U(amU(af[U5[U5:wa+URRU5UR
5 $URX45 URSU5 URSS5n[XPR5upgU[U5:XaURXpR-5 OjUR(aSnO:[UR!UR55nURn	SX�U	--
-nUR#SX�R$5 UR'S5 UR
5 g!UR
5 f=f)NrIrErHrGr\)rMrVr��
index2liner�r�r�r�rZr��get_line_indentr�rW�reindent_tor�r�rmrIrr\)
rr^rMrarb�prefix�raw�	effective�padr_s
          r$r��EditorWindow.smart_indent_eventksD���y�y���0�0�2�������	#����e�$�
�4�(8�8��<�<�;�;�E�B�(
� � �"�'���E�(��
�
�h��.��X�X�0�(�;�F�,�V�]�]�C�N�C��c�&�k�!�� � ��-=�-=�!=�>��<�<��C� #�F�$5�$5�d�m�m�$D� E�I��(�(�A����]�!2�3�C����H�c�+F�+F�G��H�H�X���� � �"��D� � �"�s�AF�C4F�Fc�	�URnUR5up4UR5 U(a*U(a#URX45 UR	SU5 URSS5nS[
U5pvXg:aXVS;aUS-
nXg:a
XVS;aMXg:Xa@URSSUR5 URS5 UR5 gUSUnSnU(a%US	S;aUSS	nUS-
nU(aUS	S;aMU(aURS
U-S5 URS5S;a(URS5 URS5S;aM(URSSUR5 [URS55n	[R"URUR 5n
UR"(d�UR$Hmn['X�-
S5n[)U5S-n
URU
S5nU
R+U5 U
R-UR/U
55nUcUS:XdMm O U
R1W=(d S5 OUUR3SS5nU(aUSn
OS
n
URU
S5nU
R+U5 U
R1S5 U
R55nU[R6:wGaU[R8:XaO�U[R::XaURSX�R5 O�U[R<:Xa UR?U
RA55 OqU[RB:XaRU
RE5S:�aURSUUR5 O+UR?U
RG55 OSU<35eURS5 UR5 gU
RI5nURSX�R5 U
RK5(aURMU5 O-U(a&U
RO5(aURQU5 URS5 UR5 g!URS5 UR5 f=f)aUInsert 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.
rIrErrkrcrjr\Nrtzinsert - %d charsr!�consolerLzbogus continuation type ))rMrVr�r�rZr�rWrIrr\r�rtr�r�Parserr�r�r�r�r�r�set_code�find_good_parse_start�_build_char_in_string_func�set_lorO�get_continuation_type�C_NONE�C_STRING_FIRST_LINE�C_STRING_NEXT_LINES�	C_BRACKETrv�compute_bracket_indent�C_BACKSLASH�get_num_lines_in_stmt�compute_backslash_indent�get_base_indent_string�is_block_openerr��is_block_closerr�)rr^rMrarbr^r�r_�indent�lnor��context�startat�startatindex�rawtext�bod�rrJs                  r$r��%EditorWindow.newline_and_indent_event�s���y�y���0�0�2�������e	#������E�(��
�
�h��.��8�8�.��9�D��c�$�i�q��%�D�G�u�,��Q����%�D�G�u�,��v����.�� �7�7�9��j
�H�H�X��� � �"�k�"�1�X�F��A��4��8�u�,��C�R�y���Q����4��8�u�,�����/�!�3�X�>��(�(�8�$��-����H�%��(�(�8�$��-�
�K�K��$��(C�(C�D��T�Z�Z��1�2�C����t�/�/����?�A��(�(�#�5�5�G�!�#�-��3�G�#'��=�4�#7�L�"�h�h�|�X�>�G��J�J�w�'��1�1� �;�;�L�I�K�C���'�Q�,�� 6�������"��&�&�y�(�;���#$�Q�4�L�#(�L��(�(�<��:���
�
�7�#�������'�'�)�A��G�N�N�"���3�3�3���'�5�5�5��K�K��&�2M�2M�N��'�+�+�+�
�$�$�Q�%=�%=�%?�@��'�-�-�-��.�.�0�1�4����H�f�$(�$?�$?�A��(�(��)C�)C�)E�F�>� 8���>�>�1��
�H�H�X��� � �"��-�-�/�F��K�K��&�*E�*E�F�� � �"�"��'�'��.��A�-�-�/�/��*�*�5�1���H�H�X��� � �"��
�H�H�X��� � �"�s4�A.R'� "R'�%1R'�AR'�1C(R'�FR'�BR'�'#S
c�(�UUR4SjnU$)Nc��U"USU--5$)Nz+%dcr])�offset�_startindex�_iciss   r$�inner�6EditorWindow._build_char_in_string_func.<locals>.inners����v���6�7�7r&)rR)r�
startindexr�s   r$r��'EditorWindow._build_char_in_string_funcs��&0��.�.�	8��r&c�r�UR(a"[XR5up#SU-SU--$SU-$)NrHrG)r��divmodr�)rr_�ntabs�nspacess    r$�_make_blanks�EditorWindow._make_blankss5���<�<�#�A�}�}�5�N�E��%�<�#��-�/�/���7�Nr&c��URnUR5 URSSS5(aURSS5 U(a,UR	SURU5UR5 UR5 g)NrEz!=rI)rMr�rTr�rIr�rr�)rrjrMs   r$rv�EditorWindow.reindent_to sm���y�y�������<�<�*�D�(�;�;��K�K�*�H�5���K�K��$�"3�"3�F�";��3�3�
5����r&c���[UR5R5upU(a9U(a2[XR5up4[X R5up5XT-
$S=pEXT-
$�Nr)�IndentSearcherrMr{rur�)r�opener�indentedrx�indentsmall�indentlarges      r$rg�EditorWindow.guess_indent/sa��)�$�)�)�4�8�8�:����h�.�v�}�}�E��C�.�x���G��C��(�(�)*�)�K��(�(r&c���URcgURR(aURR5 SnOURR5 SnUR	SSUS3S9 g)N�Show�Hiderurwz
 Line Numbers)rEr�r�)r��is_shown�hide_sidebar�show_sidebarr�)rr^�
menu_labels   r$r�&EditorWindow.toggle_line_numbers_event8sp�����$�����%�%����*�*�,��J����*�*�,��J����I�]�(2�|�=�%A�	�	Cr&)$r�r�r�rOr�r�r
r^rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rir�rMr�r�r�r�r�rFrIr�)NNNNr))rIrU)T)�r2�
__module__�__qualname__�__firstlineno__�idlelib.percolatorr*�idlelib.colorizerr+r,�idlelib.undor-�idlelib.iomenur.r/r3r0�idlelib.statusbarr1�idlelib.autocompleter2�idlelib.autoexpandr3�idlelib.calltipr4�idlelib.codecontextr5�idlelib.sidebarr6�idlelib.formatr7r8r9r:�idlelib.parenmatchr;�idlelib.zoomheightr<r�getfilesystemencoding�filesystemencodingryrrrr&r�r�r�r�r�rnr�r�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�r*r�r�r�r�rCr�rOrRr�r\rar��string�
ascii_letters�digitsrkrnr�rvr�r�r�r�r�r�r�r�r�r�r�r�r�r�rBr�r�r�r�rr�rr�r
rr}r&rr�r�rDrHr9rRrVr\rdr�r�r�r�r�r�rvrgr�__static_attributes__r]r&r$r(r(3s���-�>�*�2� �0�1�-�'�/�+�M�M�-�-��2�2�4���H�����!��aI�F	�4��
)�V7� ;��&�J�#'�J)�1�
1�
	�
�E�!�J	,��K�

�'�4�����	����
��
�(���������0�	��
��:��
%��K��.��%�%��
�
�5��;�J�	�A��"
<�&G�P>�)�"
"�,.�\ �
F�6%�"��F�&��"��,�*��'���((��&�8�	�9�
�H�E�80�$B�L"�"��$���(�,�)�V!#�Fq#�p� ��)�Cr&r(c�*�[[U55$r))rJr�)r�s r$rtrtFs���u�U�|��r&z[ \t]*c��[RU5nUR5[UR	5RU554$)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�rsrW�grouprm)r^r�r�s   r$ruruKs;��	���d�#�A��5�5�7�C����	�,�,�X�6�7�7�7r&c�b�\rSrSrSrSrSr\R\RS4Sjr
SrSrg	)
r�iUz4Manage initial indent guess, returned by run method.c�H�XlS=UlUlS=UlUlgr�)rMr��finished�blkopenline�indentedline)rrMs  r$r&�IndentSearcher.__init__Xs%���	�!"�"�����/3�3���4�,r&c���UR(agURS-=ol[U5S-nURR	USS5(agURRX"S-5$)NrCrcr!z>=rsz lineend+1c)r�r�rrMrTr�)rr�r�s   r$�readline�IndentSearcher.readline]s_���=�=���V�V�a�Z���F��A�w��~���9�9���T�4��/�/���y�y�}�}�T�-�#7�8�8r&)�class�def�for�ifr��try�while�withc	��UR(agX:XaX(;aXPlgX:Xa UR(aXPlSUlggg)Nrc)r�r�r�)	rrL�token�startrsr^�INDENT�NAME�OPENERSs	         r$�
tokeneater�IndentSearcher.tokeneaterfs?��
�=�=��
�\�e�.�#��
�^�� 0� 0� $���D�M�!1�^r&c���[R"UR5nUHnUR"U6 M URUR4$![R[
4a N4f=f)z`Return 2 lines containing block opener and indent.

Either the indent line or both may be None.
)�tokenize�generate_tokensr�r��
TokenError�SyntaxErrorr�r�)r�tokensr�s   r$r{�IndentSearcher.runssi��
	��-�-�d�m�m�<�F�������'� �
����!2�!2�2�2���#�#�[�1�	��	�s�8A�A/�.A/)r�r�r�r�rMN)
r2r�r�r��__doc__r&r�r�r�r�r�r{r�r]r&r$r�r�Us.��:�4�
9�#�/�/� �
�
�-��3r&r�c�P�URS5nUS:�a
USUXS-S-nX4$)z�Extract the underscore from a string.

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

Args:
    s: String with underscore.

Returns:
    Tuple of (position of underscore, string without underscore).
rgrNrc)r)�sr�s  r$r�r��s6��	
���s��A��A�v�
�b�q�E�A��c�d�G�O���4�Kr&�[�]�/)�bracketleft�bracketright�slashc�6�URU5nU(a [R"5(aUS;agUSn[R"SSU5n[R"SSU5n[R"SSU5n[R"S	S
U5n[R"SSU5n[R"S
SU5n[R"SSU5n[R"SSU5n[R"SSU5nU$)aKReturn a formatted string for the keybinding of an event.

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

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

Returns:
    Formatted string of the keybinding.
>rarYrbrCrz-[a-z]\bc�>�UR5R5$r))r��upper�r�s r$r_�!get_accelerator.<locals>.<lambda>�s��a�g�g�i�o�o�&7r&z\b\w+\bc�f�[RUR5UR55$r))�keynamesr�r�r�s r$r_r��s��X�\�\�!�'�'�)�Q�W�W�Y�%Gr&zKey-�Cancelz
Ctrl-BreakzControl-zCtrl-r$�+z><rGrOrQ)r�r
r�r��sub)rr�r�r�s    r$r�r��s����k�k�)�$�G�
��)�)�+�+�	�>6�16����
�A�
���{�7��;�A�
���z�G��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��URnURSSS5 URSSS5 URSSS5 g)	N�tcl_wordBreakAfterza brr��
tcl_wordcharsz\w�tcl_nonwordcharsz\W)r1r�)r�r1s  r$�
fixwordbreaksr	�s?��
���B��G�G� �%��+��G�G�E�?�E�*��G�G�E�%�u�-r&c�H�Un[U5 [RSS(a[RSnOSn[R"US5 [XS9nURnSUS'[S5H'nURSSU-[U5-S-5 M) g)	Nrc)r�r�
rQ�rIz  rj)
r	r�argvr
�setupAppr(rMrVrIrX)r�r�rrwrMr�s      r$�_editor_windowr�s����D��$��
�x�x���|��8�8�A�;����
�O�O�D�$���T�5�D��9�9�D��D��N�
�2�Y�����H�d�1�f�s�1�v�o��4�5�r&�__main__)rHzidlelib.idle_test.test_editorrDF)�	verbosity�exit)r{):�
importlib.abcr'�importlib.utilrzr~r�r�rr�rr��tkinter�tkinter.fontr�tkinter.ttkrrr�idlelib.configrr3r	r
rrr
�idlelib.multicallrrrrr�idlelib.treer�idlelib.utilrrrZ�python_versionr�rr%r(rt�compiler�rur�r�rr�r	rr2�unittestrH�idlelib.idle_test.htestr{r]r&r$�<module>r s����	��	�
�
������!� ��#� �����.�����$�&������/�/�1�1��	����	!��
�PC�PC�f0��*�*�Y�'��8�*3�*3�^�$��

���(
�V.�
6�&�z����	(�A�E�B�+����r&