
    d                    X   d dl Zd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlT d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl m!Z! d dl"m#Z# d dlm$Z$ dZ%d ej&                    z  Z'ej        dk    Z(d Z) G d d          Z*d Z+ ej,        d          Z-d Z. G d d          Z/d  Z0d!d"d#d$Z1d% Z2d& Z3d' Z4e5d(k    r'd d)l6m7Z7  e7d*d+d,-           d d.l8m9Z9  e9e4           dS dS )/    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                      t           j        \  } }}}}|  | }|| z  }|dk    r	|d| z  }n|dk    r||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            /croot/python-split_1694437901252/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_plac/lib/python3.11/idlelib/editor.py_sphinx_versionr%   &   sw    ),)9&E5%G%zG=== 	'		eAh((((N    c                      e Zd ZddlmZ ddlmZmZ ddlm	Z	 ddl
mZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZmZmZmZ ddl m!Z! ddl"m#Z#  e$j%                    Z&dZ'dZ(dZ)dZ*dxdZ+dydZ,d Z-d Z.d Z/d Z0dydZ1	 g dZ2d Z3d Z4d Z5d Z6d Z7dZ8d Z9d gZ: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`        z   dDz   ZadE 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~dcddiZde ZdydfZd{dgZdh ZdydiZdydjZdk Zdl Zdm Zdn Zd|doZdp Zdq Zdr Zds Zdt Zdu Zdv ZdydwZdS )}EditorWindowr   )
Percolator)ColorDelegatorcolor_config)UndoDelegator)	IOBindingencoding)mainmenu)MultiStatusBar)AutoComplete)
AutoExpand)Calltip)CodeContext)LineNumbers)FormatParagraphFormatRegionIndentsRstrip)
ParenMatch)
ZoomHeightNTc                 !   ddl m} t          j        %t          j                            t          j        dd          }t          j	        
                    d          rbddt          j        d d         z  z   }t          j                            d	          rd
}n	d}t          j                            ||dd          }nt          j	        d d         dk    rdd l}	d}
dt          j         d}	 |	                    |	j        |          }
n=# t"          $ r0 	 |	                    |	j        |          }
n# t"          $ r Y nw xY wY nw xY wt          j                            |
          r|
}n:t          j	        dk    r*t          j                            t          j        d          }t          j                            |          }t          j                            |          r6|t          _        t          j	        dk    rdt          j        z   t          _        n!dt          j        d d         z  t          _        || _        |p|j        }|| _        t/          |          | _        t3          j        || j                  x| _        }|r|j        | _        |j        | j        _        ni | _        i | j        _        t@          j!        o)t          j                            t@          j!        d          | _"        d| _#        tI          |          x| _%        }tM          |d          x| _'        }tA          j(        dddd          }ddd d|d!tA          j(        ddd"d          d#} tS          tT                    |fi |x| _+        }| j+        | j        _,        | -                                 | .                                 | j        /                    d$| j0                   | j        1                    d%| j2                   tg          j4                    rR|1                    d%| j2                   |1                    d&| j5                   |1                    d'| j5                   n|1                    d(| j5                   |1                    d)tl                     |1                    d*tl                     |1                    d+tl                     |1                    d,| j7                   |1                    d-| j8                   |1                    d.| j9                   |1                    d/| j:                   |1                    d0| j;                   |1                    d1| j<                   |1                    d2| j=                   |1                    d3| j>                   |1                    d4| j?                   |1                    d5| j@                   |1                    d6d7            |1                    d8| jA                   |1                    d9| jB                   |1                    d:| jC                   |1                    d;| jD                   |1                    d<| jE                   |1                    d=| jF                   |1                    d>| jG                   |1                    d?| jH                   |1                    d@| jI                   |1                    dA| jJ                   |1                    dB| jK                   | L                    |           x| _M        }|1                    dC|jN                   |1                    dD|jO                   |1                    dE|jP                   |1                    dF|jQ                   |1                    dG|jR                   |1                    dH|jS                   | T                    |           }|1                    dI|jU                   |1                    dJ|jV                   |1                    dK| W                    d                     |1                    dL| W                    dM                     |1                    dN| jX                   |1                    dO| jY                   |1                    dP| jZ                   |r||j        | <   |r
| |j[        |<   |1                    dQ| j\                   |1                    dR| j        j]                   |1                    dS| j^                   |1                    dT| j_                   |1                    dU| j`                   | a                                 |b                    t          t          dMV           |e                    dMdMW           |f                    dMdMW           | jg        |dX<   |h                    dMdt          Y           |jj        |dZ<   tA          jk        | j        dd          |d[<   |h                    dMdMt          Y           |l                                 | m                                 tA          j(        dd\d]d^          }| | _n        d_| _o        | jo        | _p        | q                                 t          t@          d`          s| j+        da         t@          _s        | t                                 db| _u        | v                    |          x| _w        }| x                                x| _y        }|z                    |           |j{        |_{        |j|        |_|        |}                    | j~                   |                     |           x| _        }|                    | j                   dc| _        |                     dc           d | _        d | _        d | _        |rt          j                            |          rft          j                            |          sG|                    |          r1dd| _        |                     |          }|                     |           n|                    |           dd| _        |                                  | ~                                 |                                  |                                  | j                            de          }|rX|                    df          }|dg}|dk    r|                                 |dMz   }|| _        t3          j        | j                   t,          j        | _        t0          j        | _        t0          j        | _        |                    dhdi           |                    djdkdldm           |                    dndo           |                    dpdq           |                    drdqdsdt           |                     | | j                  }|1                    dh|j                   |1                    dj|j                   |1                    du|j                   |1                    dv|                     |           j                   |1                    dw|                     |           j                   |                     |           }|1                    dx|j                   |1                    dr|j                    ||           }|1                    dy|j                   |1                    dz|j                   |1                    d{|j                   |1                    d||                     |           j                   |                     |           x| _        }|1                    dn|j                   |1                    dp|j                   |1                    d}|j                   |1                    d~|                     |           j                   | j        r;|                     |           | _        |1                    d| j        j                   n|                     ddd           | j        rc|                     |           | _        tA          j(        dddd^          r|                                  |1                    d| j                   d S |                     ddd           d S )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 zSoftware\Python\PythonCore\z\Help\Main Python Documentationr   z0Resources/English.lproj/Documentation/index.htmlzfile://zhttps://docs.python.org/%d.%d/   )menuzrecent-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                     dS 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)2   i  i@KL FTr   endz<<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disabledzline-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_framer   rE   	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   rE   rH   text_optionsrL   r   indents	usespacesr   r   r   	is_py_srcrD   rp   autocomplete
parenmatchscriptbindingr	  s                                  r$   __init__zEditorWindow.__init__J   s   333333 (w||COULIIG|!!'** L&c6Frr6J)JJ7==!899 @?GG0H gll8U+0,@ @GGbqb!U**;cj ; ; ;$//0H#NNGG(   "("3"3F4M47#9 #9,   	 7>>'** &%G))',,sJL Lg&&w//Gw~~g&& A(/%<8++,58M,ML))I+.+;BQB+?*@%
!uz	Dzz.t$,GGGG3 	( %
D &+%6DH"" "D%'DH"!)!1 "6bgll "476 76 !#',Szz1*$Zf====	D"6>7OOO&'+",uF F F	 	 2+D11*MMMMM	D"&),dj999($*:;;;? 
	3II($*:;;; II*4+@AAAIIeT23333 IIeD1222		.+...		,,,,		,,,,		-!6777		)TX&&&		*di(((		+tz***		%t'?@@@		*d.///		#T%5666		"D$5666		*D,>???		#T%;<<<		"$9$9:::		"DO444		($*?@@@		*do...		"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!24!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II+T->???II-tz/LMMMII.0HIIIII-t/EFFFII,d.CDDDTQ777!,,,""1Q"///+Y		a$	///!%'	6>JJV		a$	/// &vx'3&B B B	$}   =##%%% x!122 	A&*i&@H#  """ "2...3--///	D $ 5#3""4#9:::~~d+++"
##D$=>>>##E***
   	&w~~h'' &h0G0G &;;x(( ;%)DN $ 3 3H = =I//	:::)))!%   %%'''}  ** 	;**U##C{axx""$$$Ag DN$T%9::: '1"+#- 	);77713H+-E	G 	G 	G-/GHHH,.GHHH)+D24M	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 6DII/'AC C C C ""9mZHHH" 	I $ 0 0 6 6D!&."8vG G G 1..000II/1OPPPPP""9mZHHHHHs6   /D 
ED21E2
D?<E>D??EEc                 .    |                                   d S N)r   r  r\   s     r$   r   zEditorWindow.handle_winconfigl  s    r&   c           	      h   | j         }t          t          |j        j        |                    d          |                    d          g                    }|                                d|z  z
  }t          ||                    d                                        d          }||z  | _	        d S )NborderrQ   rC   rj   )rj   0)
rL   summaptkgetintcgetwinfo_widthr   measurerH   )r  rL   inner_paddingpixel_widthzero_char_widths        r$   r   zEditorWindow.set_widtho  s    yC81D1D1561B1B1D E E F F&&((1}+<< DIIf--...66s;; 	 O3


r&   c                 r    | j                                         \  }}| j                            |           dS rY   )r   defaultfilenamer   new)r  r\   dirnamebasenames       r$   r   zEditorWindow.new_callback|  s3     G3355
wwr&   c                    |j         dz  dk    r|j        dk    rd S | j                            d          ry| j                            ddd          r]| j                            ddd          rAt          | j                            d                              d          d	                   }nU| j                            dd          }t          t          |                    D ]}||         d
vr nt          |          }t          | j                            d                              d          d	                   }||k    rd}dt          |          z   dz   }|j         d	z  dk    r| j                            ddd           nE| j                            d          s| j                            dd           n| j                            | j                            d          d| j                            d                    r| j                            dd           n| j                            dd           | j                            |          }| j                            d          }| j                            |d|          r||}}| j                            ddd           | j                            d||           | j                            d|           | j                            d           dS )N   r   Homeiomark<=zinsert lineendinsert linestart.r`   ) 	insertzinsert linestart+csel1.0rp   	sel.first	my_anchor<sel.last>rZ   )statekeysymrL   r   comparerI   splitr   rangelenstr
tag_removemark_settag_addsee)r  r\   insertptlinelineatdestfirstlasts           r$   r   zEditorWindow.home_callback  s   K!O!!elf&<&<49??8$$ 	#9Xt-=>>	#9/x@@	# 49??844::3??BCCHH9==!35EFFD!#d)),, # #>33E 4 TTY__X..44S99!<==vH"3x==04KMaI  u55559??;// @	"";99999$$TY__[%A%A3%)Y__X%>%>@ @ @I&&{K@@@@I&&{J???IOOD))E9??;//Dy  s400 (!%dI  u555IeUD111	8T***	hwr&   c                    |                      | j                  | _        t          | j        ddd          }t          j        dk    r"| j                            ddt                     | j                            dd	t                     | j                            d
dt                     | j                            t          t                     |                    t          t                     | j                            d| j                   | j                            ddd           | j                            | j                   d S )Nr`   grey75)rP   borderwidth
backgroundr   	_padding1z    )ra   rg   zCol: ?rV  zLn: ?)ra   rb   z<<set-line-and-column>>z<KeyRelease>z<ButtonRelease>)r0   r   
status_barr   r   r{   	set_labelRIGHTr   BOTTOMXrL   r   set_line_and_columnr   
after_idle)r  seps     r$   r   zEditorWindow.set_status_bar  s$   --dh77DHQA(KKK<8## O%%k6%FFF!!(H5!AAA!!&'!>>>&q111f1%%%	0$2JKKK	5*,=	? 	? 	?	T566666r&   c                     | j                             t                                        d          \  }}| j                            dd|z             | j                            dd|z             d S )Nr>  rg   zCol: %srV  zLn: %s)rL   r   INSERTrM  r`  ra  )r  r\   rV  rg   s       r$   re  z EditorWindow.set_line_and_column  sf    yv..44S99f!!(I,>???!!&(T/:::::r&   ))file_File)edit_Edit)formatF_ormat)run_Run)rr   _Options)r   _Window)r   _Helpc                    | j         }i x| _        }| j        D ][\  }}t          |          \  }}t	          | | dd          }t          ||d|          x||<   }|                    |||           \t          j                    r.t          |dd          x|d<   }|                    d	|
           | 	                                 t          | j         d          | _
        | j        d                             ddd| j
                   | j        d                             t                    | _        |                                  dS )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   )rF   tearoffpostcommand)labelrD   	underlineapple)rF   rw  applicationIDLE)ry  rD   rw  rj  r@   zRecent Files)ry  rz  rD   r   )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   rF   ry  rz  rx  rD   s           r$   r   zEditorWindow.createmenubar  s     |#%%? 	J 	JKD%&u~~Iu!$4(B(B(BDIIK$(D!5@%B %B %B BHTNT5tyIIII 	6-1$W:;.= .= .= =H]#d6555!%dlA!>!>!>f,,Qn78262H 	- 	J 	J 	J %)M&$9$?$?$D$D!$$&&&&&r&   c                     | j         d         }|                    d          }|d}|| j        k    r|                    | j        dz   |           t	          j        |           dS )zSCallback to register window.

        Only called when Window menu exists.
        r   rp   Nrq   r`   )r   r   r   deleter   add_windows_to_menu)r  rD   rp   s      r$   r   zEditorWindow.postwindowsmenu  sj    
 }X&jj;CKKq(#..."4(((((r&   c                 N    | j         |         }|                    ||           dS )z$Update label for menu item at index.)ry  Nr   entryconfig)r  rD   r   ry  menuitems        r$   update_menu_labelzEditorWindow.update_menu_label  -    =&U%00000r&   c                 N    | j         |         }|                    ||           dS )z$Update state for menu item at index.rJ  Nr  )r  rD   r   rJ  r  s        r$   r  zEditorWindow.update_menu_state  r  r&   c                     |dk    rVt          |d                   }t          |                     d          |z            |                     d          z
  }d}|df} | j        j        |g|R   dS )zHandle scrollbar.movetor   rp   @0,0scrollunitsrZ   )floatround	getlinenorL   yview)r  r\   argsfractionliness        r$   r   zEditorWindow.handle_yview  s~    HT!W~~H4>>%008;<<^^F++,EE7#D	%%%%%wr&   c                    | j         }|                    d|j         d|j                   }	 |                    dd|          o|                    |dd          }n# t
          $ r d}Y nw xY w|s-|                    ddd	           |                    d
|           | j        s| 	                                 | j        }|| _
        t          j        d d         dk    }|r|                    d           | j        D ]L}	 |\  }}	}
n# t          $ r Y w xY w|
 t!          | |
                      }|                    ||           M|                    |j        |j                   |r| j                             d           dS )N@,rE  r<  rH  FrC  rD  rp   rA  r@   rA   arrow)cursorr  ibeamrZ   )rL   r   xyrL  TclErrorrQ  rR  rmenu
make_rmenur\   r   r{   configrmenu_specs
ValueErrorr  entryconfiguretk_popupx_rooty_root)r  r\   rL   newdexin_selectionr  iswinitemry  	eventnameverify_staterJ  s               r$   r   zEditorWindow.right_menu_event(  s   y333%'3344	! LLdFCC C<<zBB L 	! 	! 	! LLL	! 	,OOE5%000MM(F+++z 	OO

RaR E) 	(KKwK'''$ 		5 		5D15.y,,    #/GD,//11E  e 4444u|U\222 	-IG,,,ws#   .A A,+A,D
DD)CloserV   Nc                     t          | j        d          }| j        D ]K}|d         |d         }}|#| j        |fd}|                    ||           7|                                 L|| _        d S )Nr   r~  r`   c                 0    |                      |           d S r$  event_generaterL   r  s     r$   re   z(EditorWindow.make_rmenu.<locals>.commandU  s    ''	22222r&   ry  re   )r   rL   r  add_commandr   r  )r  r  r  ry  r  re   s         r$   r  zEditorWindow.make_rmenuP  s    TY***$ 	& 	&D#AwQ9E !%i 3 3 3 3!!w!????##%%%%


r&   c                 *    |                                  S r$  )rmenu_check_copyr  s    r$   rmenu_check_cutzEditorWindow.rmenu_check_cut\  s    $$&&&r&   c                 f    	 | j                             d          }|rdndS # t          $ r Y dS w xY w)NrE  normalrs   rL   r   r  )r  indxs     r$   r  zEditorWindow.rmenu_check_copy_  sO    	49??;//D  $3883  	 	 	::	s   " 
00c                 v    	 | j         j                            d| j         d           dS # t          $ r Y dS w xY w)Nztk::GetSelection	CLIPBOARDr  rs   )rL   r+  callr  r  s    r$   rmenu_check_pastezEditorWindow.rmenu_check_pasteg  sQ    	IL0$)[III 8  	 	 	::	s   &* 
88c                 8    t          j        | j                   dS )zHandle Help 'About IDLE' event.rZ   )r   AboutDialogr   r%  s     r$   r   zEditorWindow.about_dialogo  s     	tx(((wr&   c                 :    t          j        | j        d           dS )z&Handle Options 'Configure IDLE' event.SettingsrZ   )r	   ConfigDialogr   r%  s     r$   r   zEditorWindow.config_dialogu  s     	!$(:666wr&   c                 Z    | j         r| j         }n| j        }t          j        |           dS )zHandle Help 'IDLE Help' event.rZ   )r   r   r   show_idlehelp)r  r\   parents      r$   r   zEditorWindow.help_dialog{  s4     9 	YFFXF6"""wr&   c                    t           j        d d         dk    r[	 t          j        | j                   nY# t
          $ r3}t          j        dt          |          | j	                   Y d }~n!d }~ww xY wt          j        | j                   dS )Nr@   rA   Document Start Failuretitlemessager  rZ   )r   r{   rw   	startfilerv   OSErrorr   r   rP  rL   
webbrowseropen)r  r\   whys      r$   r   zEditorWindow.python_docs  s    <u$$8T]++++ 8 8 8$+CHHTY8 8 8 8 8 8 8 8 88 ODM***ws   4 
A1)A,,A1c                 :    | j                             d           dS )Nz<<Cut>>rZ   rL   r  r%  s     r$   r   zEditorWindow.cut  s    	  +++wr&   c                 r    | j                             d          sd S | j                             d           dS )NrC  z<<Copy>>rZ   )rL   
tag_rangesr  r%  s     r$   r   zEditorWindow.copy  s:    y##E** 	4	  ,,,wr&   c                 n    | j                             d           | j                             d           dS )Nz	<<Paste>>rA  rZ   )rL   r  rT  r%  s     r$   r   zEditorWindow.paste  s1    	  ---	hwr&   c                     | j                             ddd           | j                             dd           | j                             d           dS )NrC  rD  zend-1crA  rZ   )rL   rS  rR  rT  r%  s     r$   r   zEditorWindow.select_all  sM    	%111	8U+++	hwr&   c                 r    | j                             ddd           | j                             d           dS )NrC  rD  rp   rA  rZ   )rL   rQ  rT  r%  s     r$   r   zEditorWindow.remove_selection  s5    	UE5111	hwr&   c                 R    | j         j        | j         j        dfd}|S )zCursor 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+1czsel.last-1cc                     | j         dz  dk    r1	  d            d                    d S # t          $ r Y d S w xY wd S )NrM   r   rE  rA  )rJ  r  )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%%#OK000&&xZ1HIIIII   DD	 &%s   0 
>>)rL   r   rR  )r  r  r  r  r  r  s    ` @@@r$   r   z&EditorWindow.move_at_edge_if_selection  sQ     )/!Y/5	 	 	 	 	 	 	 	 r&   c                 :    | j                             d           dS )Nz<Meta-Delete>rZ   r  r%  s     r$   r   zEditorWindow.del_word_left  s    	  111wr&   c                 :    | j                             d           dS )Nz<Meta-d>rZ   r  r%  s     r$   r   zEditorWindow.del_word_right  s    	  ,,,wr&   c                 8    t          j        | j                   dS rY   )r   findrL   r%  s     r$   r   zEditorWindow.find_event  s    DIwr&   c                 8    t          j        | j                   dS rY   )r   
find_againrL   r%  s     r$   r   zEditorWindow.find_again_event  s    $)$$$wr&   c                 8    t          j        | j                   dS rY   )r   find_selectionrL   r%  s     r$   r   z!EditorWindow.find_selection_event  s    di(((wr&   c                 P    t          j         | j        | j        | j                   dS rY   )r
   rL   r   r   r%  s     r$   r   z EditorWindow.find_in_files_event  s!    	$)TWdj111wr&   c                 8    t          j         | j                   dS rY   )r   rL   r%  s     r$   r   zEditorWindow.replace_event  s    	"""wr&   c                     | j         }t          j        |dd          j        }|Y|                    ddd           |                    d| d           |                    d           |                                  dS )	Nz
Go To Linez/Enter a positive integer
('big' = end of file):rC  rD  rp   rA  .0rZ   )rL   r   GotoresultrQ  rR  rT  re  )r  r\   rL   linenos       r$   r   zEditorWindow.goto_line_event  s    yl)  	 	
 OOE5%000MM(vMMM222HHX$$&&&wr&   c                 F   	 | j                             dd                                          }n# t          $ r d}Y nw xY wt	          j        | j         dd|          j        }|<| j        r| j                            |           n| j	        
                    |           |S )zGet 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.
        rE  rH  rB   zOpen ModulezAEnter the name of a Python module
to search on sys.path and open:)rL   r   stripr  r   
ModuleNamer  r   r  r   r   )r  rF   	file_paths      r$   open_modulezEditorWindow.open_module  s    	9==j99??AADD 	 	 	DDD	$	=2	  	 	
  z ,
	****  +++s   -0 ??c                 .    |                                   dS rY   )r  r%  s     r$   r   zEditorWindow.open_module_event  s    wr&   c                     | j         j        }| j        j        dk    r|s|                                 }|dS ddlm} |                    | j        |           dS )NPyShellEditorWindowrZ   r   )browser)	r   r  	__class____name__r  idlelibr  ModuleBrowserr   )r  r\   r  r  s       r$   r   z EditorWindow.open_module_browser  sq    7#'+@@@ A''))Hw######di222wr&   c                 F    ddl m} |                    | j                   dS )Nr   )pathbrowserrZ   )r  r  PathBrowserr   )r  r\   r  s      r$   r   zEditorWindow.open_path_browser  s/    ''''''	***wr&   c                 Z    dd l }t          j        ddg}|                    |d           dS )Nr   z-cz,from turtledemo.__main__ import main; main()F)shellrZ   )
subprocessr   
executablePopen)r  r\   r  cmds       r$   r   zEditorWindow.open_turtle_demo  s@    ~=? 	E***wr&   c                     |r|dk    rn| j                             dd|z             | j                             ddd           | j                             ddd           |                                  d S d S d S )Nr   rA  z%d.0rC  rD  rp   z
insert +1l)rL   rR  rQ  rS  center)r  r  s     r$   gotolinezEditorWindow.gotoline  s}    &1**Ix&999I  u555IeX|<<<KKMMMMM	 **r&   c                 ~   |rt           j                            |          rdS t           j                            t           j                            |                    \  }}t           j                            |          t          v rdS | j                            dd          }|	                    d          od|v S )NTrD  z1.0 lineendz#!python)
rw   rx   r}   splitextr7  normcaser   rL   r   
startswith)r  r  baseextrV  s        r$   r   zEditorWindow.ispythonsource%  s     	27==22 	4G$$RW%5%5h%?%?@@	c7C  M114y}}UM22t$$9T)99r&   c                 Z    | j         r#| j                             |            d | _         d S d S r$  )r   unregister_maybe_terminater  s    r$   
close_hookzEditorWindow.close_hook.  s7    : 	J11$777DJJJ	 	r&   c                     || _         d S r$  )r  )r  r  s     r$   set_close_hookzEditorWindow.set_close_hook3  s    $r&   c                     | j         r| j                             |            |                                  | j                            |            |                                  d S r$  )r   filename_changed_editr   r   update_windowlist_registryr   r  s    r$   r   z!EditorWindow.filename_change_hook6  sb    : 	3J,,T222   ++D111r&   c                     | j         rd S |                     | j        j                  r|                                 | _         | j         r(| j                            | j         | j                   d S d S )N)filterafter)r   r   r   r  r*   r   insertfilterafterr   r  s    r$   _addcolorizerzEditorWindow._addcolorizer=  s{    : 	Ftw/00 	/,,..DJ: 	KH&&dj	&JJJJJ	K 	Kr&   c                     | j         sd S | j                                          | j                            | j                    d | _         d S r$  )r   removecolorsr   removefilterr  s    r$   _rmcolorizerzEditorWindow._rmcolorizerF  sH    z 	F
!!!dj)))


r&   c                    |                                   |                                  t                              | j                   | j        | j                                         | j        | j                                         dS dS )zUpdate the color themeN)	r-  r)  r(   r+   rL   r   update_highlight_colorsr   update_colorsr  s    r$   r   zEditorWindow.ResetColorizerM  s     	!!$),,,(55777(++----- )(r&   _c                 b   |                     d|           |                    |          }|r#|| j        v r|                     d|dz   |           d|                    |          k    r|                    d|           n|                    d|dz              |                    |           d S )NERRORz
 wordstart
rA  z+1c)rS  r   
IDENTCHARSrR  rT  )r  rL   poschars       r$   colorize_syntax_errorz"EditorWindow.colorize_syntax_error\  s    Wc"""xx}} 	;DDO++LL#"4c:::488C==  MM(C((((MM(C%K000r&   c                 z    t          j        dddd          }|sd| j        d<   dS t           j        | j        d<   dS )	z&Update the cursor blink configuration.rG   r(   zcursor-blinkrl   rJ   r   rn   N)r   r   rL   rm   )r  cursorblinks     r$   r   z EditorWindow.update_cursor_blinkg  sW    (VE E E 	A)*DIo&&& *2)@DIo&&&r&   c                     | j         | j                                          | j        | j                                         t          j        | j        dd          }|| j        d<   |                                  dS )z.Update the text widgets' font if it is changedNrG   r(   rj   )r   update_fontr   r   r   r   rL   r   )r  new_fonts     r$   	ResetFontzEditorWindow.ResetFontq  sz     ())+++ ())+++#DIv~FF$	&r&   c                 R   t          j                    x| j        _        }|                                D ]\  }} | j        j        |g|R   |                                 D ]E}t          j        |          }|r-|                                D ]\  }} | j        j        |g|R   FdS )zgRemove the virtual, configurable keybindings.

        Leaves the default Tk Text keybindings.
        N)	r   GetCurrentKeySetr/   default_keydefsitemsrL   event_deleteget_standard_extension_namesGetExtensionBindings)r  keydefsr\   keylistextensionNamexkeydefss         r$   RemoveKeybindingszEditorWindow.RemoveKeybindings  s     3;2K2M2MM%%mmoo 	4 	4NE7"DI"53733333!>>@@ 	< 	<M4]CCH <&.nn&6&6 < <NE7*DI*5;7;;;;;		< 	<r&   c                 V   t          j                    x| j        _        }|                                  |                                 D ]-}t          j        |          }|r|                     |           .i }| j        j        D ]J}i ||d         <   |d         D ]4}|r0|d         ||d                  t          |d                   d         <   5K| j	        D ]}| j	        |         }|
                    t                    }|,|dz  }t          d|          D ]}	|                    |	          dk    ru|                    |	d          }
|
r]|                    |	d          }d}||v r|||         v r||         |         }|r't          ||          }
|                    |	|
           dS )	zeApply the virtual, configurable keybindings.

        Alse update hotkeys to current keyset.
        r   r`   Nre   acceleratorry  rB   )rL  )r   r@  r/   rA  r   rD  rE  menudefsr  r   r   r  rN  rK   	entrycgetget_acceleratorr  )r  rF  rH  rI  menuEventDictrD   r  menubarItemrp   r   accelitemNamer\   s                r$   ApplyKeybindingszEditorWindow.ApplyKeybindings  s    3;2K2M2MM%!>>@@ 	. 	.M4]CCH .##H--- M* 	J 	JD%'M$q'"Q J J JBFq'M$q'*747+;+;A+>?J  = 	G 	GK=-D**S//C{1HCq# G G99U##y00 NN5-@@E G#'>>%#A#A "&-77'=+EEE(5k(B8(L  G$3GU$C$CE ,,U,FFFG	G 	Gr&   c                 R    | j         st          j        dddd          | _        dS dS )zCUpdate the indentwidth if changed and not using tabs in this windowrG   rk   z
num-spacesrI   rJ   N)r   r   r   r   r  s    r$   r   z#EditorWindow.set_notabs_indentwidth  sA     | 	>'1&(<7< >  >  >D	> 	>r&   c                    t          j                    }| j        d         }|                    t                    }|| j        k    r|                    | j        dz   |           |rQ|                                 |D ]:}|                     |d                   }|	                    |d         |           ;|| j        d<   dS )z4Update the additional help entries on the Help menu.r   r`   r   r  N)
r   GetAllExtraHelpSourcesListr   r   r  r  r  r   _extra_help_callbackr  )r  	help_listhelpmenuhelpmenu_lengthentryr  s         r$   r  z$EditorWindow.reset_help_menu_entries  s    799	=("..--T666OOT6:_MMM 	B""$$$" B B//a99$$58S$AAAA (fr&   c                      |f fd	}|S )z9Return a callback that loads resource (file or web page).c                 x   |                      d          st          j                            |           } t          j        d d         dk    rX	 t          j        |            d S # t          $ r4}t          j	        dt          |          j                   Y d }~d S d }~ww xY wt          j        |            d S )N)wwwhttpr@   rA   r  r  )r  rw   rx   r   r   r{   r  r  r   r   rP  rL   r  r  )helpfiler  r  s     r$   display_extra_helpz=EditorWindow._extra_help_callback.<locals>.display_extra_help  s    &&77 67++H55|BQB5((<L***** < < <(/G #C< < < < < < < < < << )))))s   A% %
B#/)BB#r[   )r  resourcerb  s   `  r$   rX  z!EditorWindow._extra_help_callback  s,    (0 
	* 
	* 
	* 
	* 
	* 
	* "!r&   c                    g }| j         }|r]t          j                            |          r>t	          |dd          5 }|                                }ddd           n# 1 swxY w Y   |rQt          j                            |          dz   }||v r|                    |           |                    d|           g |D ]B}d|v s't          j                            |dd                   s	                    |           Cfd	|D             }d
}|dt          |                   }|r	 t	          |ddd          5 }|                    |           ddd           n# 1 swxY w Y   nY# t          $ rL}t          | j        dd          s,d| j        _        t!          j        dd| d| j                   Y d}~nd}~ww xY w| j        j        D ]}	|	j        }
|
                    dt.                     t1          |          D ]R\  }}|                                }|	                    |          }|
                    ||         dz   |z   |d           SdS )z/Load and update the recent files list and menusutf_8r   )r.   errorsNr4  r    rq   c                     g | ]}|v|	S r[   r[   ).0rx   	bad_pathss     r$   
<listcomp>z9EditorWindow.update_recent_files_list.<locals>.<listcomp>  s#    EEEDt9/D/D4/D/D/Dr&   1234567890ABCDEFGHIJKwrecentfiles_messageFTzIDLE Warningz)Cannot save Recent Files list to disk.
  z
Select OK to continue.r  r?  )ry  re   rz  )r   rw   rx   r   r  	readlinesabspathremoverA  appendrO  
writelinesr  r  r   rn  r   showwarningrL   r   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callbackrj  s                 @r$   r   z%EditorWindow.update_recent_files_list  sL    *	 	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047H7""x(((NN1h'''	 	' 	'Dt||27>>$qt*#=#=|  &&&EEEEGEEE)!CLL.) 	**)S#*9> > > 0AH&&w///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  * * *ty*?GG *48DI1*!9%(!9 !9 !9  $y	* * * ** . 	. 	.H-DKK3 )' 2 2 . .9%,,..	#::9EE  wqzC'7)'C)1+, ! . . . ..	. 	.sN   AA#&A#.E/ E#E/ #E''E/ *E'+E/ /
G9AG  Gc                      |f fd	}|S )Nc                 >    j                             |            d S )N)editFile)r   r  )
fn_closurer  s    r$   open_recent_filez=EditorWindow.__recent_file_callback.<locals>.open_recent_file  s    GLL*L-----r&   r[   )r  r  r  s   `  r$   __recent_file_callbackz#EditorWindow.__recent_file_callback  s*    (1 	. 	. 	. 	. 	. 	.r&   c                 H   |                                  }|                                 }|r|r|dz   |z   t          z   }n|r|}n|r|}nd}|p|p|}|                                 s
d|z  }d|z  }| j                            |           | j                            |           d S )Nz - untitledz*%s*z*%s)short_title
long_title_py_version	get_savedr   wm_titlewm_iconname)r  shortlongr  icons        r$   r   zEditorWindow.saved_change_hook  s      ""   	T 	EMD(;6EE 	EE 	EEE%%~~ 	 UNE4<D%   T"""""r&   c                 4    | j                                         S r$  )r   r  r  s    r$   r  zEditorWindow.get_saved%  s    y""$$$r&   c                 :    | j                             |           d S r$  )r   	set_saved)r  flags     r$   r  zEditorWindow.set_saved(  s    	D!!!!!r&   c                 8    | j                                          d S r$  )r   
reset_undor  s    r$   r  zEditorWindow.reset_undo+  s    	r&   c                 `    | j         j        }|rt          j                            |          ndS )Nr  )r   r  rw   rx   r7  )r  r  s     r$   r  zEditorWindow.short_title.  s,    7#-5Erw))):Er&   c                     | j         j        pdS )NrB   )r   r  r  s    r$   r  zEditorWindow.long_title2  s    w%2%r&   c                 .    |                                   dS rY   )r  r%  s     r$   r   z EditorWindow.center_insert_event5  s    wr&   rA  c                     | j         }|                                 \  }}|                     |          }||z
  }t          d||dz  z
            }|                    t          |                     d S )Nr`   rC   )rL   getwindowlinesr  maxr  r  )r  markrL   r   botr  rP   newtops           r$   r  zEditorWindow.center9  sn    y&&((S%%sQ*++

5==!!!!!r&   c                     | j         }|                     d          }|                     d          }||k    r5|                                dk    rt          |d                   }||z   dz
  }||fS )Nr  z@0,65535r`   rP   )rL   r  winfo_heightrI   )r  rL   r   r  rP   s        r$   r  zEditorWindow.getwindowlinesA  sr    ynnV$$nnZ((#::$++--22h((F,"CCxr&   c                 n    | j         }t          t          |                    |                              S r$  )rL   rI   r  r   )r  r  rL   s      r$   r  zEditorWindow.getlinenoK  s+    y5D))**+++r&   c                     | j                                         }t          j        d|          }t	          t          t          |                                                    S )zReturn (width, height, x, y)z(\d+)x(\d+)\+(-?\d+)\+(-?\d+))r   wm_geometryrematchlistr*  rI   groups)r  geomms      r$   get_geometryzEditorWindow.get_geometryO  sG    x##%%H5t<<CQXXZZ(()))r&   c                 .    |                                   dS rY   )r   r%  s     r$   r   zEditorWindow.close_eventU  s    

wr&   c                 >   | j         r|                                 sh| j                                        dk    r| j                                         | j                                         | j                                         | j                                         S d S )Nr  )r   r  r   rJ  	deiconifylowerlift	maybesaver  s    r$   r  zEditorWindow.maybesaveY  s    7 	'>>##  8>>##X--H&&(((   7$$&&&	' 	'r&   c                     	 |                                  }t          |          dk    r|                                  |S # t          $ r Y d S w xY w)Ncancel)r  rP  _closeAttributeError)r  replys     r$   r   zEditorWindow.closeb  s[    	NN$$E5zzX%%L 	 	 	DD	s   <? 
AAc                    | j         j        r |                     | j         j                   t          j        | j                   |                                  | j                                          d | _         d | _        | j	        r | j	                                         d | _	        d | _
        d | _        | j                                         d | _        | j                                         | j        r|                                  d S d S )N)rx  )r   r  r   r   unregister_callbackr   unload_extensionsr   r   r   rL   r   r   r   destroyr  r  s    r$   r  zEditorWindow._closek  s    7 	E))473C)DDD"4#7888   	: 	JDJ	 ? 	OO	 	r&   c                 <    i | _         |                                  d S r$  )
extensionsload_standard_extensionsr  s    r$   r   zEditorWindow.load_extensions  s!    %%'''''r&   c                     t          | j                                                  D ]&}t          |d          r|                                 'i | _        d S )Nr   )r  r  valuesr   r   )r  inss     r$   r  zEditorWindow.unload_extensions  sR    ..0011 	 	CsG$$ 		r&   c                     |                                  D ]O}	 |                     |           #  t          dt          |                     t	          j                     Y MxY wd S )NzFailed to load extension)rD  load_extensionprintrepr	traceback	print_exc)r  rF   s     r$   r  z%EditorWindow.load_standard_extensions  sx    5577 	& 	&D&##D))))&0$t**===#%%%%%	& 	&s	   .2A"c                 ,    t          j        d          S )NT)editor_only)r   GetExtensionsr  s    r$   rD  z)EditorWindow.get_standard_extension_names  s    %$7777r&   ZzDummyzzdummyc                 X   | j                             ||          }	 	 t          j        d|z   t                    }n+# t
          t          f$ r t          j        |          }Y nw xY wn# t
          $ r t          d|            w xY wt          ||          }t          j
        |          }t          |d          r|                     |j        |            ||           }|| j        |<   |r|                     |           |D ]}|                    dd          }|d d         dk    r|dd          }|d d         dk    |d	d          d
k    r|d d	         }|d	d          d
k    |dz   }t          ||          r)| j                            |t          ||                     d S d S )Nr>  )packagez
Failed to import extension: rM  -r1  r`   rG  rq   rI  _event)extfilesr   	importlibimport_module__package__ImportError	TypeErrorr  r  r   rE  r   r  rM  r  r   r   rL   r   )	r  rF   fnamemodclsrF  r  vevent
methodnames	            r$   r  zEditorWindow.load_extension  s   !!$--	5-cEk;OOO+ 5 5 5-e445 	 	 	2D999	 c4  /553
## 	3OOCL'222c$ii # 
	E(((! E E#^^C55
 !n++!+ABBJ !!n++ o,,!+CRCJ !o,,'(2
3
++ EINN673
+C+CDDD
	E 
	EE Es&   = A) %A%"A) $A%%A) )Bc                     || j         j        }| j        }||_        |                                D ]\  }}|r |j        |g|R   dS )z"Add events with keys to self.text.N)r/   rA  rL   rF  rB  r   )r  rF  rL   r\   rG  s        r$   r   zEditorWindow.apply_bindings  sg    ?m3Gy%mmoo 	0 	0NE7 0u/w////	0 	0r&   c           	         || j         j        }|| j         j        }| j        }| j        }|D ]\  }}|                    |          }|s|D ]}||                                 |\  }	}
|	dd         dk    }|r
|	dd         }	t          |	          \  }}	t          ||
          }||
fd}|r6| 	                    |
t                    }|                    |	||||           |                    |	|||           dS )zFill in dropdown menus used by this window.

        Items whose name begins with '!' become checkbuttons.
        Other names indicate commands.  None becomes a separator.
        Nr`   !c                 0    |                      |           d S r$  r  r  s     r$   re   z(EditorWindow.fill_menus.<locals>.command  s    ++I66666r&   )ry  rz  re   rL  variable)ry  rz  re   rL  )r/   rM  rA  r   rL   r   r   r  rO  get_var_obj
BooleanVaradd_checkbuttonr  )r  rM  rF  r   rL   mname	entrylistrD   r\  ry  r  checkbuttonrz  rL  re   vars                   r$   r  zEditorWindow.fill_menus  s    }-H?m3G=y ( 	B 	BE9<<&&D " B B=&&((((',$E9#(!9#3K" * %abb	'.u~~$Iu"1'9"E"EK%)Y 7 7 7 7" B"..y*EE,,5I$+%( - * * * * ((u	185@ ) B B B B%B		B 	Br&   c                 z    |                      |          }|r|                                }|S t          |          r$  )r  r   	NameError)r  rF   r  values       r$   getvarzEditorWindow.getvar  s;    t$$ 	"GGIIELD//!r&   c                 ~    |                      ||          }|r|                    |           d S t          |          r$  )r  r   r  )r  rF   r  vartyper  s        r$   setvarzEditorWindow.setvar  s>    tW-- 	"GGENNNNND//!r&   c                 v    | j                             |          }|s|r || j                  x| j         |<   }|S )z:Return a tkinter variable instance for the event.
        )r   r   rL   )r  r  r  r  s       r$   r  zEditorWindow.get_var_obj  sN     ##I.. 	Dw 	D181C1CCDi(3
r&   c                     | j         r7| j                            d|          pd| j                            |          v S dS )NTODOSTRINGr`   )r   rL   tag_prevrange	tag_names)r  
text_indexs     r$   is_char_in_stringzEditorWindow.is_char_in_string  sL    : 	 9**6:>> ?ty22:>>>? 1r&   c                     	 | j                             d          }| j                             d          }||fS # t          $ r Y dS w xY w)NrE  rH  NNr  )r  rY  rZ  s      r$   get_selection_indicesz"EditorWindow.get_selection_indices  sY    	IOOK00E9??:..D$; 	 	 	::	s   7: 
AAc                 H    | j         d         pt          }t          |          S )Ntabs)rL   TK_TABWIDTH_DEFAULTrI   )r  currents     r$   get_tk_tabwidthzEditorWindow.get_tk_tabwidth  s     )F#:':7||r&   c           	          | j         }|                                 |k    rE|j                            dd|d         d|j        d|z            }|                    |           d S d S )Nrj   r/  z
-displayofn)r  )rL   r  r+  r  master	configure)r  newtabwidthrL   pixelss       r$   set_tk_tabwidthzEditorWindow.set_tk_tabwidth"  sr    y!![00W\\&)T&\"."%"35 5F NNN''''' 10r&   c                     |rD|rB|                                  }d|cxk    rdk    r
n n|| _        | j        | j        k    rd| _        |                     | j                   d S )NrC   r   F)guess_indentr   r   r   r  )r  r  guessr  s       r$   r   z#EditorWindow.set_indentation_params-  sv     	% 	%!!##AA{{{{{{{{{#$ 4=00$T]+++++r&   c                    | j         }|                                 \  }}|r0|r.|                    ||           |                    d|           dS |                    dd          }|dk    rC|                    ddd          r|                    d           n|                                 dS |d         d	vr|                    d           dS | j        }t          |	                    |                    }|d
k    sJ |dz
  | j
        z  | j
        z  }d
}		 |d d         }|	dz   }	t          |	                    |                    }||k    s
|d         d	vrnC|                                 |                    d|	z  d           ||k     r"|                    dd||z
  z  | j                   |                                 dS )NrA  rZ   r=  rB   rI  rD  z	insert-1crq    	r   r`   Tz
insert-%dcr?  )rL   r  r  rR  r   rL  bellr   rO  
expandtabsr   r   rA  r   r   )
r  r\   rL   rY  rZ  charsr   havewantncharsdeleteds
             r$   r   z"EditorWindow.smart_backspace_event6  s   y0022t 	T 	KKt$$$MM(E***7 +X66B;;||Hc511 K((((		7"IU""KK$$$7 =5##H--..axxxxd..$2BB	#2#JE)A-Mu''1122Dt||uRy55	 	L=0(;;;$;;KK#"535 5 5wr&   c                 j   | j         }|                                 \  }}|                                 	 |r||rzt          |          t          |          k    r.| j                            |          |                                 S |                    ||           |                    d|           |	                    dd          }t          || j                  \  }}|t          |          k    r|                     || j        z              n_| j        rd}n9t          |                    | j                            }| j        }	d|	||	z  z
  z  }|                    d|| j                   |                    d           	 |                                 dS # |                                 w xY w)NrA  r=  r@  r?  rZ   )rL   r  r   
index2liner   r   r   r  rR  r   get_line_indentr   rO  reindent_tor   r   r  rA  r   rT  )
r  r\   rL   rY  rZ  prefixraw	effectivepadr  s
             r$   r   zEditorWindow.smart_indent_eventa  s    y0022t	# / /e$$
4(8(888<;;EBB(   """"' E4(((h...XX0(;;F,VT]CCNCc&kk!!  T-=!=>>>> < 4CC #F$5$5dm$D$D E EI(AY]!23CHc4+FGGGHHX  """""D  """"s   =F C?F F2c                 4
   | j         }|                                 \  }}|                                 	 |r.|r,|                    ||           |                    d|           |                    dd          }dt          |          }}||k     r||         dv r|dz  }||k     r
||         dv ||k    rH|                    dd| j                   	 |	                    d           |
                                 dS |d|         }d}|r%|d	         dv r|dd	         }|dz  }|r
|d	         dv |r|                    d
|z  d           |                    d          dv r,|                    d           |                    d          dv ,|                    dd| j                   t          |                    d                    }	t          j        | j        | j                  }
| j        s| j        D ]}t'          |	|z
  d          }t)          |          dz   }|                    |d          }|
                    |           |
                    |                     |                    }||dk    r n|
                    |pd           nc|                    dd          }|r	|d         }nd}|                    |d          }|
                    |           |
                    d           |
                                }|t          j        k    r|t          j        k    rn|t          j        k    r|                    d|| j                   n|t          j        k    r(|                     |
                                            nz|t          j!        k    r]|
"                                dk    r|                    d|| j                   n5|                     |
#                                           nJ d|            	 |	                    d           |
                                 dS |
$                                }|                    d|| j                   |
%                                r| &                    |           n+|r)|
'                                r| (                    |           	 |	                    d           |
                                 dS # |	                    d           |
                                 w xY w)a  Insert a newline and indentation after Enter keypress event.

        Properly position the cursor on the new line based on information
        from the current line.  This takes into account if the current line
        is a shell prompt, is empty, has selected text, contains a block
        opener, contains a block closer, is a continuation line, or
        is inside a string.
        rA  r=  r   r  r`   r4  rZ   Nrq   zinsert - %d charsr  consolerD  zbogus continuation type ))rL   r  r   r  rR  r   rO  rA  r   rT  r   r  r   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   )r  r\   rL   rY  rZ  rV  r  r  indentlnor  contextstartatstartatindexrawtextbodrrB  s                     r$   r   z%EditorWindow.newline_and_indent_event  s    y0022te	# / /E4(((h...88.99D c$iiqAa%%DGu,,Q a%%DGu,,Avv . 79 9 9j HHX  """""k "1"XF A 48u,,CRCyQ  48u,,  ?/!3X>>> ((8$$--H%%% ((8$$-- KK$(CDDD TZZ1122Ct/??A( #5  G!#-33G#'==4#7L"hh|X>>GJJw'''11 ;;LIIK KC'Q,, +7""""&&y(;; )#$Q4LL#(L((<::

7###''))AGN""333'555 KK&$2MNNNN'+++
 $$Q%=%=%?%?@@@@'--- ..00144Hf$($?A A A A (()C)C)E)EFFFF>>>>>>> HHX  """"" --//FKK&$*EFFF  "" 2''.... 2A--// 2**5111HHX  """"" HHX  """"s   BS, >LS, ;BS, ,+Tc                     || j         fd}|S )Nc                 $     ||d| z  z             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                 `    | j         r#t          || j                  \  }}d|z  d|z  z   S d|z  S )Nr@  r?  )r   divmodr   )r  r  ntabsnspacess       r$   _make_blankszEditorWindow._make_blanks  s=    < 	#At}55NE7%<#-//7Nr&   c                     | j         }|                                 |                    ddd          r|                    dd           |r/|                    d|                     |          | j                   |                                 d S )Nr=  z!=rA  )rL   r   rL  r  rA  r@  r   r   )r  rg   rL   s      r$   r  zEditorWindow.reindent_to  s    y<<*D(;; 	6KK*H555 	5KK$"3"3F";";35 5 5r&   c                     t          | j                                                  \  }}|r3|r1t          || j                  \  }}t          || j                  \  }}ndx}}||z
  S Nr   )IndentSearcherrL   rp  r  r   )r  openerindentedr  indentsmallindentlarges         r$   r  zEditorWindow.guess_indent%  st    )$)4488:: 	*h 	*.vt}EEC.xGGC())K+[((r&   c                     | j         d S | j         j        r| j                                          d}n| j                                          d}|                     dd| d           d S )NShowHiderr   rt   z Line Numbers)rD   r   ry  )r   is_shownhide_sidebarshow_sidebarr  )r  r\   
menu_labels      r$   r  z&EditorWindow.toggle_line_numbers_event.  s    $F% 	 **,,,JJ**,,,JI](2%A%A%A 	 	C 	C 	C 	C 	Cr&   )NNNNr$  )rA  r  )T)r  
__module____qualname__idlelib.percolatorr)   idlelib.colorizerr*   r+   idlelib.undor,   idlelib.iomenur-   r.   r  r/   idlelib.statusbarr0   idlelib.autocompleter1   idlelib.autoexpandr2   idlelib.calltipr3   idlelib.codecontextr4   idlelib.sidebarr5   idlelib.formatr6   r7   r8   r9   idlelib.parenmatchr:   idlelib.zoomheightr;   r   getfilesystemencodingfilesystemencodingrv   r  r  r   r"  r   r   r   r   r   re  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   r   r  r   r   r   r   r  r   r  r!  r   r)  r-  r   stringascii_lettersdigitsr5  r8  r   r>  rJ  rT  r   r  rX  r   rw  r   r  r  r  r  r  r   r  r  r  r  r   r  r   r  r   r  r  rD  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(   3   s       ------>>>>>>>>******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  
) ) )V7 7 7 ; ; ; ;&  J#' #' #'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P> > >) ) )"" " ",. ,. ,. ,.\     
# # #$% % %" " "  F F F& & &  " " " "  , , , ,* * *  ' ' '    (( ( (  & & &8 8 8 	9
HE E E80 0 0 0$B $B $B $BL" " "" " " "   $      ( ( (, , , ,) ) )V!# !# !#Fq# q# q#p       ) ) )C C C C C Cr&   r(   c                 :    t          t          |                     S r$  )rI   r  )r   s    r$   r  r  <  s    uU||r&   z[ \t]*c                     t                               |           }|                                t          |                                                    |                    fS )zReturn 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  rp   rO  groupr  )rV  r   r  s      r$   r  r  A  sH     	d##A5577C		,,X667777r&   c                   F    e Zd ZdZd Zd Zej        ej        dfdZ	d Z
dS )rD  z4Manage initial indent guess, returned by run method.c                 L    || _         dx| _        | _        d x| _        | _        d S rC  )rL   r  finishedblkopenlineindentedline)r  rL   s     r$   r"  zIndentSearcher.__init__N  s-    	!""/334,,,r&   c                     | j         rdS | j        dz   x}| _        t          |          dz   }| j                            |dd          rdS | j                            ||dz             S )NrB   r`   r  z>=rp   z lineend+1c)rj  r  r  rL   rL  r   )r  r  r  s      r$   readlinezIndentSearcher.readlineS  sn    = 	2VaZDFAww~9T4// 	2y}}T4-#7888r&   )classdefforifr  trywhilewithc	                 |    | j         rd S ||k    r||v r	|| _        d S ||k    r| j        r|| _        d| _         d S d S d S )Nr`   )rj  rk  rl  )	r  rK   tokenstartrp   rV  INDENTNAMEOPENERSs	            r$   
tokeneaterzIndentSearcher.tokeneater\  sb    
 = 	DT\\ew..#DV^^ 0^ $DDMMM ^^^r&   c                     	 t          j        | j                  }|D ]} | j        |  n# t           j        t
          f$ r Y nw xY w| j        | j        fS )ztReturn 2 lines containing block opener and and indent.

        Either the indent line or both may be None.
        )tokenizegenerate_tokensrn  r|  
TokenErrorSyntaxErrorrk  rl  )r  tokensrw  s      r$   rp  zIndentSearcher.runi  sz    
	-dm<<F ( ('''(#[1 	 	 	D	 !222s   (+ AAN)r  rP  rQ  __doc__r"  rn  r~  ry  rz  r|  rp  r[   r&   r$   rD  rD  K  sl        ::4 4 4
9 9 9 #/ -   3 3 3 3 3r&   rD  c                 p    |                      d          }|dk    r| d|         | |dz   d         z   } || fS )zExtract 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).
    r1  r   Nr`   )r  )sr  s     r$   r  r  z  sB     	
sAAvvbqbEAacddGOa4Kr&   []/)bracketleftbracketrightslashc                    |                      |          }|rt          j                    r|dv rdS |d         }t          j        dd |          }t          j        dd |          }t          j        dd|          }t          j        d	d
|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }|S )ak  Return 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.
    >   r^   rW   r_   rB   r   z-[a-z]\bc                 N    |                                                                  S r$  )rg  upperr  s    r$   r]   z!get_accelerator.<locals>.<lambda>  s    aggiioo&7&7 r&   z\b\w+\bc                     t                               |                                 |                                           S r$  )keynamesr   rg  r  s    r$   r]   z!get_accelerator.<locals>.<lambda>  s$    X\\!''))QWWYY%G%G r&   zKey-Cancelz
Ctrl-BreakzControl-zCtrl-r  +z><r?  rG  rI  )r   r   	isCocoaTkr  sub)rF  r  rG  r  s       r$   rO  rO    s    kk)$$G  )++ 	 >6 16 16 r
A
{77;;A
zGGKKA
vr1A
xq))A
z7A&&A
sCA
tS!A
sBA
sBAHr&   c                     | j         }|                    ddd           |                    ddd           |                    ddd           d S )	Ntcl_wordBreakAfterza br   r   tcl_wordcharsz\wtcl_nonwordcharsz\W)r+  r  )r   r+  s     r$   fixwordbreaksr    sU     
BGG %+++GGE?E***GGE%u-----r&   c                 Z   | }t          |           t          j        dd          rt          j        d         }nd }t          j        |d            t          ||          }|j        }d|d<   t          d          D ].}|                    dd|z  t          |          z   dz              /d S )	Nr`   )r   r  
   rP      rA  z  r4  )
r  r   argvr   setupAppr(   rL   rN  rA  rP  )r  r   r  rl  rL   r  s         r$   _editor_windowr    s    D$
x| 8A;
OD$TH555D9DDN2YY 6 6Hd1fs1vvo455556 6r&   __main__)rG   zidlelib.idle_test.test_editorrC   F)	verbosityexit)rp  ):importlib.abcr  importlib.utilrw   r{   r  ra  r   r~  r  r  tkintertkinter.fontr   tkinter.ttkr   r   r   idlelib.configr   r  r	   r
   r   r   r   idlelib.multicallr   r   r   r   r   idlelib.treer   idlelib.utilr   r   r  python_versionr  r   r%   r(   r  compilerf  r  rD  r  r  rO  r  r  r  unittestrG   idlelib.idle_test.htestrp  r[   r&   r$   <module>r     sB           				  				  



                    ! ! ! ! ! !                   # # # # # #                                     . . . . . .                         $ $ $ $ $ $ & & & & & &        //111		!
 
 
FC FC FC FC FC FC FC FCR0   "*Y''8 8 8*3 *3 *3 *3 *3 *3 *3 *3^  $ 
 ( ( (V. . .6 6 6$ zD	(AEBBBB++++++C r&   