a
    åzeá  ã                
   @   sú  d dl Z edkr e jd e jd< zd dlT W n( eyT   ede jd edƒ‚Y n0 e jdkršz d dl	Z	dZ
e	 d	¡ e
¡ W n eeefy˜   Y n0 d d
lmZ edk rìeƒ at ¡  d dlmZ etƒ ejdde td edƒ‚d dlmZ d dlZd dlZd dlZd dlmZ d dlZd dlZd dlZd dl m!Z! d dl"Z"d dl#Z#d dl$Z$d dl%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/ d dl0m1Z1 d dl2m3Z3 d dl*m4Z4 d dlm5Z5m6Z6m7Z7 d dl8m9Z9 dZ:d Z;zdZ<e<e=_<e<e>_<W n e?y   Y n0 e ja@d<dd „ZAdaBd!d"„ ZCeCd#ƒ dejDfd$d%„ZEeEe_DG d&d'„ d'e.ƒZFG d(d)„ d)e1ƒZGG d*d+„ d+e'ƒZHG d,d-„ d-e9ƒZIG d.d/„ d/e4jJƒZKd0d1„ ZLG d2d3„ d3eƒZMG d4d5„ d5e3ƒZNd6d7„ ZOd8ZPd9d:„ ZQedkrîeQƒ  eCd;ƒ dS )=é    NÚ__main__zidlelib.pyshell)Ú*zJ** IDLE can't import Tkinter.
Your Python may not be configured for Tk. **©Úfileé   Úwin32Zshcore)Ú
messageboxg      !@©Úfix_scalingzIdle Cannot Startz"Idle requires tcl/tk 8.5+, not %s.©Úparent)ÚInteractiveInterpreter)Úpython_version)ÚTextWrapper)ÚColorDelegator)ÚidleConf©Údebugger)Ú
debugger_r)ÚEditorWindowÚfixwordbreaks)ÚFileList)ÚOutputWindow)Úrpc)Úidle_formatwarningÚStdInputFileÚStdOutputFile)ÚUndoDelegatorz	127.0.0.1zCtrl-D (end-of-file)c              	   C   sN   |du rt }z&| t| ||||d¡ | d¡ W n ttfyH   Y n0 dS )a   Show Idle-format warning (after replacing warnings.showwarning).

    The differences are the formatter called, the file=None replacement,
    which can be None, the capture of the consequence AttributeError,
    and the output of a hard-coded prompt.
    N)Úlineú>>> )Úwarning_streamÚwriter   ÚAttributeErrorÚOSError)ÚmessageÚcategoryÚfilenameÚlinenor   r   © r(   ú%/usr/lib/python3.9/idlelib/pyshell.pyÚidle_showwarningL   s    
ÿr*   c                 C   s0   | rt du r,tja tt_nt dur,t t_da dS )z>Replace warning.showwarning with idle_showwarning, or reverse.N)Ú_warnings_showwarningÚwarningsÚshowwarningr*   )Úcapturer(   r(   r)   Úcapture_warnings_   s    r/   Tc                 C   sX   t j}i }t|ƒD ].}|dd… |dd…  dkr| |¡||< q|| ƒ | |¡ dS )ao  Extend linecache.checkcache to preserve the <pyshell#...> entries

    Rather than repeating the linecache code, patch it to save the
    <pyshell#...> entries, call the original linecache.checkcache()
    (skipping them), and then restore the saved entries.

    orig_checkcache is bound at definition time to the original
    method, allowing it to be patched.
    Nr   éÿÿÿÿú<>)Ú	linecacheÚcacheÚlistÚpopÚupdate)r&   Zorig_checkcacher3   ÚsaveÚkeyr(   r(   r)   Úextended_linecache_checkcachen   s    r9   c                   @   sv   e Zd ZdZdd„ Zg d¢Zddd„Zdd	„ Zddd„Zddd„Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd
S )ÚPyShellEditorWindowz6Regular text edit window in IDLE, supports breakpointsc                 G   s–   g | _ tj| g|¢R Ž  | j d| j¡ | j d| j¡ | j d| jj¡ t	j
 tjd¡| _| jj| fdd„}| j |¡ | jjrŠ|  ¡  |  ¡  d S )Nú<<set-breakpoint-here>>ú<<clear-breakpoint-here>>z<<open-python-shell>>zbreakpoints.lstc                 S   s   |  ¡  | ƒ  d S ©N)Úrestore_file_breaks)Zold_hookÚselfr(   r(   r)   Úfilename_changed_hook“   s    z;PyShellEditorWindow.__init__.<locals>.filename_changed_hook)Úbreakpointsr   Ú__init__ÚtextÚbindÚset_breakpoint_hereÚclear_breakpoint_hereÚflistÚ
open_shellÚosÚpathÚjoinr   ZuserdirÚbreakpointPathÚioZfilename_change_hookZset_filename_change_hookr&   r>   Úcolor_breakpoint_text)r?   Úargsr@   r(   r(   r)   rB   ˆ   s    ÿÿ
zPyShellEditorWindow.__init__))ZCutz<<cut>>Úrmenu_check_cut)ZCopyz<<copy>>Zrmenu_check_copy)ZPastez	<<paste>>Úrmenu_check_paste)NNN)zSet Breakpointr;   N)zClear Breakpointr<   NTc                 C   sD   | j du rdS |r(t ¡ }t |d¡}n
dddœ}| j d|¡ dS )z,Turn colorizing of breakpoint text on or offNÚbreakÚ )Ú
foregroundÚ
backgroundÚBREAK)rM   r   ÚCurrentThemeÚGetHighlightrC   Z
tag_config)r?   ZcolorÚthemeZcfgr(   r(   r)   rN   ¥   s    

z)PyShellEditorWindow.color_breakpoint_textc                 C   s†   | j }| jj}| dd| d|d  ¡ z| j |¡ W n tyV   | j |¡ Y n0 z| jj	j
j}| ||¡ W n   Y n0 d S )NrV   z%d.0r   )rC   rM   r&   Útag_addrA   ÚindexÚ
ValueErrorÚappendrG   ÚpyshellÚinterpr   rE   )r?   r'   rC   r&   Údebugr(   r(   r)   Úset_breakpoint±   s    z"PyShellEditorWindow.set_breakpointNc                 C   s>   | j }| jj}|s| ¡  d S tt| d¡ƒƒ}|  |¡ d S )NÚinsert)rC   rM   r&   ÚbellÚintÚfloatr[   ra   )r?   ÚeventrC   r&   r'   r(   r(   r)   rE   ¿   s    z'PyShellEditorWindow.set_breakpoint_herec                 C   sŠ   | j }| jj}|s| ¡  d S tt| d¡ƒƒ}z| j |¡ W n   Y n0 | 	ddd¡ z| j
jjj}| ||¡ W n   Y n0 d S )Nrb   rV   úinsert linestartzinsert lineend +1char)rC   rM   r&   rc   rd   re   r[   rA   ÚremoveÚ
tag_removerG   r^   r_   r   rF   )r?   rf   rC   r&   r'   r`   r(   r(   r)   rF   È   s$    ÿz)PyShellEditorWindow.clear_breakpoint_herec                 C   sd   | j r`| j}| jj}|s$| ¡  d S g | _ | ddt¡ z| jjj	j
}| |¡ W n   Y n0 d S )NrV   ú1.0)rA   rC   rM   r&   rc   ri   ZENDrG   r^   r_   r   Úclear_file_breaks)r?   rC   r&   r`   r(   r(   r)   rk   Û   s    z%PyShellEditorWindow.clear_file_breaksc              
   C   s:  | j }| jj}z8t| jdƒ}| ¡ }W d  ƒ n1 s:0    Y  W n ty\   g }Y n0 z~t| jdƒ^}|D ]}| |d ¡sr| |¡ qr|  	¡  | j }|r¼| |d t
|ƒ d ¡ W d  ƒ n1 sÐ0    Y  W nX ty4 } z>t| jddƒs d| j_tjd	d
t
|ƒ | jd W Y d}~n
d}~0 0 dS )z#Save breakpoints when file is savedÚrNÚwú=Ú
Úbreakpoint_error_displayedFTz
IDLE Errorz$Unable to update breakpoint list:
%s)Útitler$   r   )rA   rM   r&   ÚopenrL   Ú	readlinesr#   Ú
startswithr!   Úupdate_breakpointsÚstrÚgetattrÚrootrp   r   Ú	showerrorrC   )r?   Zbreaksr&   ÚfpÚlinesZnew_filer   Úerrr(   r(   r)   Ústore_file_breaksê   s2    *
<ÿýz%PyShellEditorWindow.store_file_breaksc                 C   s¶   | j  ¡  | jd u rd S | jj}|d u r,d S tj | j¡r²t| jdƒ}| 	¡ }W d   ƒ n1 sd0    Y  |D ]>}| 
|d ¡rrt|t|ƒd d … ƒ}|D ]}|  |¡ q qrd S )Nrl   rn   r   )rC   r6   rM   r&   rI   rJ   ÚisfilerL   rr   rs   rt   ÚevalÚlenra   )r?   r&   rz   r{   r   Zbreakpoint_linenumbersZbreakpoint_linenumberr(   r(   r)   r>     s    

&z'PyShellEditorWindow.restore_file_breaksc                 C   s$   | j }| d¡}|  |¡}|| _dS )z3Retrieves all the breakpoints in the current windowrV   N)rC   Z
tag_rangesÚranges_to_linenumbersrA   )r?   rC   ÚrangesZlinenumber_listr(   r(   r)   ru   %  s    

z&PyShellEditorWindow.update_breakpointsc                 C   sb   g }t dt|ƒdƒD ]H}tt|| jƒƒ}tt||d  jƒƒ}||k r| |¡ |d7 }q@q|S )Nr   é   r   )Úranger€   rd   re   Ústringr]   )r?   r‚   r{   r[   r'   Úendr(   r(   r)   r   ,  s    
z)PyShellEditorWindow.ranges_to_linenumbersc                 C   s   |   ¡  t | ¡ dS )z7Extend base method - clear breaks when module is closedN)rk   r   Ú_close©r?   r(   r(   r)   r‡   =  s    zPyShellEditorWindow._close)T)N)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rB   Úrmenu_specsrN   ra   rE   rF   rk   r}   r>   ru   r   r‡   r(   r(   r(   r)   r:   …   s   	

	
*r:   c                   @   s"   e Zd ZdZeZdZddd„ZdS )ÚPyShellFileListz8Extend base class: IDLE supports a shell and breakpointsNc                 C   s8   | j r| j j ¡  nt| ƒ| _ | j r2| j  ¡ s2d S | j S r=   )r^   ÚtopÚwakeupÚPyShellÚbegin©r?   rf   r(   r(   r)   rH   L  s    

zPyShellFileList.open_shell)N)r‰   rŠ   r‹   rŒ   r:   r   r^   rH   r(   r(   r(   r)   rŽ   C  s   rŽ   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚModifiedColorDelegatorz8Extend base class: colorizer for the shell window itselfc                 C   s   t  | ¡ |  ¡  d S r=   )r   rB   ÚLoadTagDefsrˆ   r(   r(   r)   rB   Z  s    
zModifiedColorDelegator.__init__c                 C   s*   |   ddd¡ |  ddd¡ t | ¡ d S )NZTODOrj   ÚiomarkZSYNC)ri   rZ   r   Úrecolorize_mainrˆ   r(   r(   r)   r—   ^  s    z&ModifiedColorDelegator.recolorize_mainc              	   C   sJ   t  | ¡ t ¡ }| j d d dœt |d¡t |d¡t |d¡dœ¡ d S )N)rU   rT   ÚstdoutÚstderrÚconsole)Ústdinr˜   r™   rš   )r   r•   r   rW   Útagdefsr6   rX   )r?   rY   r(   r(   r)   r•   c  s    



üz"ModifiedColorDelegator.LoadTagDefsc                 C   s   | j D ]}|  |dd¡ qd S )Nr–   r†   )rœ   ri   )r?   Útagr(   r(   r)   Úremovecolorsm  s    
z#ModifiedColorDelegator.removecolorsN)r‰   rŠ   r‹   rŒ   rB   r—   r•   rž   r(   r(   r(   r)   r”   W  s
   
r”   c                   @   s$   e Zd ZdZddd„Zddd„ZdS )	ÚModifiedUndoDelegatorz;Extend base class: forbid insert/delete before the I/O markNc                 C   sL   z$| j  |dd¡r"| j  ¡  W d S W n ty6   Y n0 t | |||¡ d S ©Nú<r–   )ÚdelegateÚcomparerc   ÚTclErrorr   rb   )r?   r[   ÚcharsÚtagsr(   r(   r)   rb   u  s    

zModifiedUndoDelegator.insertc                 C   sJ   z$| j  |dd¡r"| j  ¡  W d S W n ty6   Y n0 t | ||¡ d S r    )r¢   r£   rc   r¤   r   Údelete)r?   Zindex1Úindex2r(   r(   r)   r§   ~  s    

zModifiedUndoDelegator.delete)N)N)r‰   rŠ   r‹   rŒ   rb   r§   r(   r(   r(   r)   rŸ   r  s   
	rŸ   c                   @   s   e Zd Zdd„ ZdS )ÚMyRPCClientc                 C   s   t ‚dS )z0Override the base class - just re-raise EOFErrorN)ÚEOFErrorrˆ   r(   r(   r)   Ú
handle_EOFŠ  s    zMyRPCClient.handle_EOFN)r‰   rŠ   r‹   r«   r(   r(   r(   r)   r©   ˆ  s   r©   c                 C   s^   d|pd› d}| t |ƒkrNt| t |ƒ dƒ\}}|| d › |› |d › S |dd… S dS )z¹Return width long restart line formatted with filename.

    Fill line with balanced '='s, with any extras and at least one at
    the beginning.  Do not end with a trailing space.
    z= RESTART: ZShellz =rƒ   rn   Néþÿÿÿ)r€   Údivmod)Úwidthr&   r   ZdivÚmodr(   r(   r)   Úrestart_lineŽ  s
    r°   c                   @   s  e Zd Zdd„ ZdZdZdZdd„ Zdd„ Zdd	„ Z	d?dd„Z
dd„ Zdd„ Zdd„ Zdd„ Zd@dd„ZdZdd„ ZdZdd„ Zdd„ Zdd„ Zd d!„ Zd"Zd#d$„ ZdAd%d&„Zd'd(„ Zd)d*„ Zd+d,„ ZdBd-d.„Zd/d0„ Zd1d2„ Zd3d4„ Z d5d6„ Z!d7d8„ Z"d9d:„ Z#d;d<„ Z$d=d>„ Z%dS )CÚModifiedInterpreterc                 C   sB   || _ tjd j}tj| |d d| _d | _t| _	| j
jj| _d S )Nr   )ÚlocalsF)Ú	tkconsoleÚsysÚmodulesÚ__dict__r   rB   Ú
restartingÚsubprocess_arglistÚPORTÚportÚcompileÚcompilerÚflagsÚoriginal_compiler_flags)r?   r³   r²   r(   r(   r)   rB   ž  s    zModifiedInterpreter.__init__Nc                 C   s&   | j d u r|  ¡ | _ t | j ¡| _d S r=   )r¸   Úbuild_subprocess_arglistÚ
subprocessÚPopenÚ
rpcsubprocrˆ   r(   r(   r)   Úspawn_subprocess«  s    

z$ModifiedInterpreter.spawn_subprocessc                 C   s\   | j dksJ dƒ‚dd„ tjD ƒ}tjddddd	d
}d|f }tjg| d|t| j ƒg S )Nr   z/Socket should have been assigned a port number.c                 S   s   g | ]}d | ‘qS )z-Wr(   )Ú.0Úsr(   r(   r)   Ú
<listcomp>³  ó    z@ModifiedInterpreter.build_subprocess_arglist.<locals>.<listcomp>ÚmainÚGeneralzdelete-exitfuncFÚbool)ÚdefaultÚtypez&__import__('idlelib.run').run.main(%r)ú-c)rº   r´   Úwarnoptionsr   Ú	GetOptionÚ
executablerv   )r?   rm   Z	del_exitfZcommandr(   r(   r)   r¿   °  s    ÿ
ÿ
z,ModifiedInterpreter.build_subprocess_arglistc              	   C   sX  t | jf}tdƒD ]6}t |¡ zt|ƒ| _W  qVW q tyF   Y q0 q|  ¡  d S | jj	 
¡ d | _tdkr†| jj	 tjtjd¡ |  ¡  | jj	 d¡ z| j ¡  W n tjyÈ   |  ¡  Y d S 0 | j d| j¡ | j d| jj¡ | j d| jj¡ | j d| jj¡ | j d	| jj¡ | j d
t¡ | j d| ¡ | jdd |  ¡  | jS )Né   r   r   é
   rš   r›   r˜   r™   rG   r2   r_   T©Úwith_cwd)ÚHOSTrº   r„   ÚtimeÚsleepr©   Úrpccltr#   Údisplay_port_binding_errorÚlistening_sockÚgetsocknamer¹   Ú
setsockoptÚsocketÚ
SOL_SOCKETÚSO_REUSEADDRrÃ   Ú
settimeoutÚacceptÚtimeoutÚdisplay_no_subprocess_errorÚregisterr³   r›   r˜   r™   rG   r2   Útransfer_pathÚpoll_subprocess)r?   ÚaddrÚir(   r(   r)   Ústart_subprocess¼  s@    



ÿz$ModifiedInterpreter.start_subprocessFrS   c                 C   s0  | j r| jS d| _ |  ¡ }|r<zt | j¡ W n   Y n0 | j ¡  |  ¡  | j}|j}d|_|  	¡  z| j 
¡  W n tjy”   |  ¡  Y d S 0 | j|d | ¡  |j dd¡ | d¡ | t|j|ƒ¡ |j dd¡ |j dd¡ | sþ| ¡  |rt | j¡ | ¡  | j| jj_d| _ | jS )	NTFrÓ   r–   úend-1cro   ÚrestartÚleft)r·   rØ   Úgetdebuggerr   Zclose_subprocess_debuggerÚcloseÚterminate_subprocessr³   Ú	executingrÃ   rá   rÝ   râ   rã   rå   Ústop_readlinerC   r§   r!   r°   r®   Úmark_setÚmark_gravityÚ
showpromptZrestart_subprocess_debuggerÚload_breakpointsr¾   r»   r¼   r½   )r?   rÔ   r&   r`   rš   Zwas_executingr(   r(   r)   Úrestart_subprocessç  sF    

z&ModifiedInterpreter.restart_subprocessc                 C   s   | j  dddi ¡ d S )NÚexecZinterrupt_the_serverr(   )rØ   Z
remotecallrˆ   r(   r(   r)   Z__request_interrupt  s    z'ModifiedInterpreter.__request_interruptc                 C   s   t j| jd ¡  d S )N)Útarget)Ú	threadingÚThreadÚ'_ModifiedInterpreter__request_interruptÚstartrˆ   r(   r(   r)   Úinterrupt_subprocess  s    z(ModifiedInterpreter.interrupt_subprocessc                 C   sz   | j d ur| jj | j ¡ z| jj ¡  W n ty<   Y n0 z| j ¡  W n ty^   Y n0 |  ¡  d| j_	d | _d S )NF)
Ú_afteridr³   rC   Zafter_cancelrØ   rÚ   rî   r"   rï   rð   rˆ   r(   r(   r)   Úkill_subprocess  s    
z#ModifiedInterpreter.kill_subprocessc                 C   sL   z| j  ¡  W n ty"   Y dS 0 z| j  ¡  W n tyF   Y dS 0 dS )z"Make sure subprocess is terminatedN)rÂ   Úkillr#   Úwaitrˆ   r(   r(   r)   rï   (  s    z(ModifiedInterpreter.terminate_subprocessc                 C   s2   |rdg}|  tj¡ ntj}|  d|f ¡ d S )NrS   zRif 1:
        import sys as _sys
        _sys.path = %r
        del _sys
        
)Úextendr´   rJ   Ú
runcommand)r?   rÔ   rJ   r(   r(   r)   rå   5  s    üz!ModifiedInterpreter.transfer_pathc              
   C   s4  | j }|d u rd S z|j| jdd}W n2 tttfyX   | jjrHY d S d }|  ¡  Y n0 |r| j 	¡  d | _|\}}| jj
}|dkr¢|d urêtt|ƒ|d nH|dkrÀ| j d¡rê|  ¡  n*|dkrêd}t||tjd t|||d z| j ¡  W n ty   Y n0 | jjs0| jj | jj| j¡| _d S )	Ngš™™™™™©?)r  ZOKr   Z	EXCEPTIONú<<toggle-jit-stack-viewer>>ÚERRORz/pyshell.ModifiedInterpreter: Subprocess ERROR:
)rØ   ZpollresponseÚ
active_seqrª   r#   ÚKeyboardInterruptr³   Úclosingrö   Úresetoutputrš   ÚprintÚreprÚgetvarÚremote_stack_viewerr´   Ú
__stderr__Úendexecutingr"   rC   ÚafterÚpollintervalræ   rþ   )r?   ZcltÚresponseÚhowZwhatrš   Úerrmsgr(   r(   r)   ræ   D  sB    



ÿz#ModifiedInterpreter.poll_subprocessc                 C   s
   || _ d S r=   r   )r?   r   r(   r(   r)   Úsetdebuggerl  s    zModifiedInterpreter.setdebuggerc                 C   s   | j S r=   r   rˆ   r(   r(   r)   rí   o  s    zModifiedInterpreter.getdebuggerc                 C   s   | j j d| j¡ dS )a’  Initiate the remote stack viewer from a separate thread.

        This method is called from the subprocess, and by returning from this
        method we allow the subprocess to unblock.  After a bit the shell
        requests the subprocess to open the remote stack viewer which returns a
        static object looking at the last exception.  It is queried through
        the RPC mechanism.

        i,  N)r³   rC   r  r  rˆ   r(   r(   r)   Úopen_remote_stack_viewerr  s    
z,ModifiedInterpreter.open_remote_stack_viewerc                 C   s°   ddl m} | j dddi ¡}|d u r6| jj ¡  d S | | j|¡}ddlm	}m
} t| jjƒ}t ¡ }t |d¡d }|||dd	}	|	jjd
dd ||	jd |ƒ}
|
 ¡  d S )Nr   )Ú
debugobj_rr÷   Zstackviewer)rG   )ÚScrolledCanvasÚTreeNodeÚnormalrU   )ÚbgZhighlightthicknessr   Zboth)ÚexpandÚfill)Úidlelibr  rØ   Úremotequeuer³   rx   rc   ZStubObjectTreeItemZidlelib.treer  r  ZToplevelr   rW   rX   ÚframeÚpackZcanvasr  )r?   r  ZoidÚitemr  r  r   rY   rU   ZscZnoder(   r(   r)   r    s    z'ModifiedInterpreter.remote_stack_viewerr   c                 C   s   |   |¡}|  ||¡ dS )z1Like runsource() but assumes complete exec sourceN)ÚstuffsourceÚexecfile©r?   Úsourcer&   r(   r(   r)   Ú
execsource’  s    
zModifiedInterpreter.execsourcec              	   C   sÀ   |du rZt  |¡8}| ¡ }tr<dtj |¡› d| d }W d  ƒ n1 sP0    Y  zt||dƒ}W nF tt	fy°   | j
 ¡  td| j
jd t | |¡ | j
 ¡  Y n0 |  |¡ dS )zExecute an existing fileNz__file__ = r'''z'''
z
del __file__r÷   zB*** Error in script or command!
Traceback (most recent call last):r   )Útokenizerr   ÚreadÚuse_subprocessrI   rJ   Úabspathr»   ÚOverflowErrorÚSyntaxErrorr³   r	  r
  r™   r   Úshowsyntaxerrorrô   Úruncode)r?   r&   r&  rz   Úcoder(   r(   r)   r$  —  s&    ÿÿ"
þzModifiedInterpreter.execfilec                 C   s&   |   |¡}t|tƒsJ ‚t | ||¡S )zBExtend base class method: Stuff the source in the line cache first)r#  Ú
isinstancerv   r   Ú	runsourcer%  r(   r(   r)   r2  «  s    
zModifiedInterpreter.runsourcec                 C   s>   d| j  }| j d | _ | d¡}t|ƒd d||ftj|< |S )z"Stuff source in the filename cachez<pyshell#%d>r   ro   r   )ÚgidÚsplitr€   r2   r3   )r?   r&  r&   r{   r(   r(   r)   r#  ´  s
    

zModifiedInterpreter.stuffsourcec                 C   s   |   d|f ¡ dS )z>Prepend sys.path with file's directory if not already includeda(  if 1:
            _filename = %r
            import sys as _sys
            from os.path import dirname as _dirname
            _dir = _dirname(_filename)
            if not _dir in _sys.path:
                _sys.path.insert(0, _dir)
            del _filename, _sys, _dirname, _dir
            
N)r  ©r?   r&   r(   r(   r)   Úprepend_syspath¼  s    øz#ModifiedInterpreter.prepend_syspathc                 C   sÄ   | j }|j}| ddd¡ t ¡ \}}}t|ddƒp:|p:d}t|ddƒpJd}t|d	dƒpZd
}	|	d
krl|d7 }|dkr‚d|	d  }
nd|d |	d f }
| ||
¡ | ¡  |  d| ¡ | 	¡  dS )z§Override Interactive Interpreter method: Use Colorizing

        Color the offending position instead of printing it and pointing at it
        with a caret.

        r  rj   r†   ÚmsgrS   z<no detail available>r'   r   Úoffsetr   ziomark + %d charsz&iomark linestart + %d lines + %d charszSyntaxError: %s
N)
r³   rC   ri   r´   Úexc_inforw   Zcolorize_syntax_errorr	  r!   rô   )r?   r&   r³   rC   rÌ   ÚvalueÚtbr7  r'   r8  Úposr(   r(   r)   r.  È  s$    ÿz#ModifiedInterpreter.showsyntaxerrorc                 C   s6   | j  ¡  |  ¡  t | ¡ | j  d¡r2| j  ¡  dS )z1Extend base class method to reset output properlyr  N)r³   r	  Úchecklinecacher   Úshowtracebackr  Úopen_stack_viewerrˆ   r(   r(   r)   r>  â  s
    

z!ModifiedInterpreter.showtracebackc                 C   s>   t j}t| ¡ ƒD ]&}|d d… |dd …  dkr||= qd S )Nr   r0   r1   )r2   r3   r4   Úkeys)r?   Úcr8   r(   r(   r)   r=  ê  s    z"ModifiedInterpreter.checklinecachec                 C   s@   | j jr|  ¡  dS | jr0| j dd|fi ¡ nt|| jƒ dS )z*Run the code without invoking the debuggerr   r÷   r/  r   )r³   rð   Údisplay_executing_dialogrØ   r  r÷   r²   )r?   r0  r(   r(   r)   r  ð  s    zModifiedInterpreter.runcommandc                 C   st  | j jr|  ¡  |  ¡  | j}z"zT| j  ¡  |sT| jdurT| j dd|fi ¡| _n |rh| 	|| j
¡ nt|| j
ƒ W nž ty¶   | j js°tjddd| j jdr¦‚ q²|  ¡  n‚ Y n`   trätd| j jd	 |  ¡  | j  ¡  n,| j jrd
| j _td| j jd	 n|  ¡  Y n0 W tspz| j  ¡  W n ty@   Y n0 n,tsnz| j  ¡  W n tyl   Y n0 0 dS )úOverride base class methodNr÷   r/  zExit?zDo you want to exit altogether?Zyes©rË   r   z IDLE internal error in runcode()r   Fr  )r³   rð   rö   r=  r   ÚbeginexecutingrØ   Z
asyncqueuer  Úrunr²   r÷   Ú
SystemExitr  r   ZaskyesnorC   r>  r*  r
  r™   r  Úcanceledr"   )r?   r0  r   r(   r(   r)   r/  ü  sZ    

ÿü
ÿ
üzModifiedInterpreter.runcodec                 C   s   | j j |¡S )rC  )r³   r™   r!   )r?   rÅ   r(   r(   r)   r!   *  s    zModifiedInterpreter.writec                 C   s   t jdd| jjd d S )NzPort Binding ErroraA  IDLE can't bind to a TCP/IP port, which is necessary to communicate with its Python execution server.  This might be because no networking is installed on this computer.  Run IDLE with the -n command line switch to start without a subprocess and refer to Help/IDLE Help 'Running without a subprocess' for further details.r   ©r   ry   r³   rC   rˆ   r(   r(   r)   rÙ   .  s
    øz.ModifiedInterpreter.display_port_binding_errorc                 C   s   t jdd| jjd d S )NzSubprocess Connection Errorz¢IDLE's subprocess didn't make connection.
See the 'Startup failure' section of the IDLE doc, online at
https://docs.python.org/3/library/idle.html#startup-failurer   rI  rˆ   r(   r(   r)   rã   9  s
    ûz/ModifiedInterpreter.display_no_subprocess_errorc                 C   s   t jdd| jjd d S )NzAlready executingzYThe Python Shell window is already executing a command; please wait until it is finished.r   rI  rˆ   r(   r(   r)   rB  A  s
    üz,ModifiedInterpreter.display_executing_dialog)FrS   )F)N)N)&r‰   rŠ   r‹   rB   rþ   rØ   rÂ   rÃ   r¿   ré   rö   rû   rý   rÿ   rï   rå   r  ræ   r   r  rí   r  r  r3  r'  r$  r2  r#  r6  r.  r>  r=  r  r/  r!   rÙ   rã   rB  r(   r(   r(   r)   r±   œ  sF   	+
,
&
	
.r±   c                       s’  e Zd Zdeƒ  ZeZeZg d¢Z	e
jdg ZdZddlmZ dPdd	„Zd
d„ ZdZdZdZdZdZdZdd„ Zdd„ ZdQdd„Zdd„ ZdRdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z d d!„ Z!d"d#„ Z"d$d%„ Z#d&d'„ Z$d(Z%d)d*„ Z&d+d,„ Z'd-d.„ Z(d/d0„ Z)dSd1d2„Z*d3d4„ Z+d5d6„ Z,d7d8„ Z-d9d:„ Z.d;d<„ Z/dTd=d>„Z0dUd?d@„Z1dVdAdB„Z2dCdD„ Z3dEdF„ Z4dGdH„ Z5dWdJdK„Z6‡ fdLdM„Z7‡ fdNdO„Z8‡  Z9S )Xr‘   zIDLE Shell ))r   Z_File)ZeditZ_Edit)r`   Z_Debug)ÚoptionsZ_Options)ZwindowZ_Window)ÚhelpZ_Help)ZSqueezeú<<squeeze-current-text>>Fr   )ÚHistoryNc                 C   s$  t r&| j}|d d dkr&| dd¡ t| ƒ| _|d u rVtƒ }t|ƒ | ¡  t|ƒ}t	 
| |d d ¡ d| _d| _ttdƒr‚tjnd| _| j d	¡d
 | _| j| _| j}|jdd | d| j¡ | d| j¡ | d| j¡ | d| j¡ | d| j¡ | d| j¡ | d| j¡ t r8| d| j¡ | d| j¡ |   | ¡}| d|j!¡ tj"| _#tj$| _%tj&| _'ddl(m)} t*| d|j+|j,ƒ| _&t-| d|j+|j,ƒ| _"t-| d|j+dƒ| _$t-| d|j+|j,ƒ| _.t sà| j"t_"| j$t_$| j&t_&zdd l/}|j0|_1W n   tj2t_$‚ Y n0 |  3| j¡| _4d| _5d S )Nrƒ   r   Úshell)rN  ZShe_llTé   Úps1r   ro   r0   Úchar)Úwrapz<<newline-and-indent>>z<<plain-newline-and-indent>>z<<interrupt-execution>>z<<end-of-file>>z<<open-stack-viewer>>ú<<toggle-debugger>>r  z<<view-restart>>z<<restart-shell>>rL  )Úiomenur›   r˜   r™   Úbackslashreplacerš   é2   )6r*  Ú
menu_specsrb   r±   r_   ÚTkr   ÚwithdrawrŽ   r   rB   ZusetabsZindentwidthÚhasattrr´   rP  Úsys_ps1r4  Zprompt_last_lineÚpromptrC   Z	configurerD   Úenter_callbackÚlinefeed_callbackÚcancel_callbackÚeof_callbackr?  Útoggle_debuggerÚtoggle_jit_stack_viewerÚview_restart_markÚrestart_shellZSqueezerZsqueeze_current_text_eventr˜   Úsave_stdoutr™   Úsave_stderrr›   Ú
save_stdinr  rT  r   ÚencodingÚerrorsr   rš   ÚpydocZ
plainpagerZpagerr  rM  Úhistoryr  )r?   rG   Úmsrx   rC   ZsqueezerrT  rj  r(   r(   r)   rB   e  sx    

ÿÿÿÿÿzPyShell.__init__c                 C   s   t jddS )NT)Z
shell_only)r   ZGetExtensionsrˆ   r(   r(   r)   Úget_standard_extension_names¨  s    z$PyShell.get_standard_extension_namesc                 C   s   |a d S r=   ©r    )r?   Ústreamr(   r(   r)   Úset_warning_stream²  s    zPyShell.set_warning_streamc                 C   s   t S r=   rn  rˆ   r(   r(   r)   Úget_warning_stream¶  s    zPyShell.get_warning_streamc                 C   sH   | j r$tjdd| jd |  ¡  dS | j ¡ }|r<|  ¡  n|  ¡  d S )NzDon't debug nowz*You can only toggle the debugger when idler   rR   )	rð   r   ry   rC   Úset_debugger_indicatorr_   rí   Úclose_debuggerÚopen_debugger)r?   rf   Údbr(   r(   r)   ra  ¹  s    þ

zPyShell.toggle_debuggerc                 C   s   | j  ¡ }|  d|  ¡ d S )NrS  )r_   rí   Zsetvar©r?   ru  r(   r(   r)   rr  Ç  s    
zPyShell.set_debugger_indicatorc                 C   s   d S r=   r(   r“   r(   r(   r)   rb  Ë  s    zPyShell.toggle_jit_stack_viewerc                 C   sh   | j  ¡ }|r\| j  d ¡ | ¡  | j jr8t | j j¡ |  ¡  | j 	d¡ | j
| _|  ¡  |  ¡  d S )Nz[DEBUG OFF]
)r_   rí   r  rî   rØ   r   Zclose_remote_debuggerr	  rš   r!   r[  r\  rô   rr  rv  r(   r(   r)   rs  Î  s    
zPyShell.close_debuggerc                 C   sX   | j jrt | j j| ¡}n
t | ¡}| j  |¡ | ¡  d| j | _	|  
¡  |  ¡  d S )Nz[DEBUG ON]
)r_   rØ   r   Zstart_remote_debuggerr   ZDebuggerr  rõ   r[  r\  rô   rr  )r?   Zdbg_guir(   r(   r)   rt  Û  s    
ÿ
zPyShell.open_debuggerc                 C   s    | j r
dnd}|  dd|¡ d S )NÚdisabledr  r`   z*tack*iewer)rð   Zupdate_menu_state)r?   Ústater(   r(   r)   Údebug_menu_postcommandç  s    zPyShell.debug_menu_postcommandc                 C   s   |   ¡  d| _dS )úHelper for ModifiedInterpreterTN)r	  rð   rˆ   r(   r(   r)   rE  ë  s    zPyShell.beginexecutingc                 C   s   d| _ d| _|  ¡  dS )rz  FN)rð   rH  rô   rˆ   r(   r(   r)   r  ð  s    zPyShell.endexecutingc                 C   sD   | j r&tjddd| jd}|du r&dS |  ¡  d| _d| _t | ¡S )zExtend EditorWindow.close()zKill?z7Your program is still running!
 Do you want to kill it?ÚokrD  FÚcancelT)	rð   r   ZaskokcancelrC   rñ   rH  r  r   rî   )r?   r  r(   r(   r)   rî   ö  s    üzPyShell.closec                 C   sV   |   ¡  tr| j ¡  | jt_| jt_| j	t_
d| _d| _d| j_d| _t | ¡ dS )zEExtend EditorWindow._close(), shut down debugger and execution serverN)rs  r*  r_   rÿ   re  r´   r˜   rf  r™   rg  r›   rš   rG   r^   rk  r   r‡   rˆ   r(   r(   r)   r‡     s    
zPyShell._closec                 C   s   dS )z8Override EditorWindow method: never remove the colorizerTr(   r5  r(   r(   r)   Úispythonsource  s    zPyShell.ispythonsourcec                 C   s   | j S r=   )Úshell_titlerˆ   r(   r(   r)   Úshort_title  s    zPyShell.short_titlezHType "help", "copyright", "credits" or "license()" for more information.c                 C   sŒ   | j  dd¡ |  ¡  tr:d}| j ¡ }|sF|  ¡  dS nd}tjt	_|  
dt	jt	j| j|f ¡ | j  ¡  |  ¡  dd l}d|_d |_dS )	Nr–   rb   rS   Fz›==== No Subprocess ====

WARNING: Running IDLE without a Subprocess is deprecated
and will be removed in a later version. See Help/IDLE Help
for details.

zPython %s on %s
%s
%sr   T)rC   rò   r	  r*  r_   ré   rî   r   Údisplayhookr´   r!   ÚversionÚplatformÚ	COPYRIGHTZfocus_forcerô   ÚtkinterZ_support_default_rootZ_default_root)r?   ZnosubÚclientr„  r(   r(   r)   r’     s&    
ÿ
zPyShell.beginc                 C   s   | j s
d S d| _| j ¡  d S ©NT)ÚreadingÚ_stop_readline_flagr   Úquitrˆ   r(   r(   r)   rñ   9  s    zPyShell.stop_readlinec                 C   sˆ   | j }zd| _ | j ¡  W || _ n|| _ 0 | jr:d| _dS | j dd¡}t|ƒdkrXd}|  ¡  | jrtd| _t	stt
‚| jr„d| _d}|S )NTFrS   r–   rê   r   ro   )r‡  r   Úmainlooprˆ  rC   Úgetr€   r	  rH  r*  r  Ú	endoffile)r?   r7   r   r(   r(   r)   Úreadline?  s(    zPyShell.readlinec                 C   s   dS r†  r(   rˆ   r(   r(   r)   ÚisattyV  s    zPyShell.isattyc                 C   s¢   z| j  ddd¡rW d S W n   Y n0 | jsT| jsT|  ¡  | j d¡ |  ¡  dS d| _d| _	| jrŽ| jj
rŽ| j ¡ r„| j ¡  n
| j ¡  | jrž| j ¡  dS )Nú	sel.firstz!=úsel.lastzKeyboardInterrupt
rR   FT)rC   r£   rð   r‡  r	  r_   r!   rô   rŒ  rH  rØ   rí   rö   rý   r   r‰  r“   r(   r(   r)   r_  Y  s&    



zPyShell.cancel_callbackc                 C   sf   | j r| jsd S | j ddd¡r0| j ddd¡s4d S | j sL|  ¡  |  ¡  nd| _d| _| j 	¡  dS )Nr–   z==rb   rê   FTrR   )
rð   r‡  rC   r£   r	  rî   rH  rŒ  r   r‰  r“   r(   r(   r)   r`  o  s    ÿ

zPyShell.eof_callbackc                 C   s0   | j r"| j dd¡ | j d¡ n
|  |¡ dS )Nrb   ro   rR   )r‡  rC   rb   ÚseeÚnewline_and_indent_eventr“   r(   r(   r)   r^  ~  s
    
zPyShell.linefeed_callbackc                 C   s:  | j r| jsd S z8| j dd¡}|rF| j ddd¡rF|  ||¡ W dS W n   Y n0 | j ddd¡rX| j d	d¡}|r°| j dd|d
 ¡r°|  | j |d |d
 ¡|¡ dS | j d	d¡}|rø| j dd|d ¡rø|  | j |d |d
 ¡|¡ dS | j dd¡}|r>| j |d dd¡r>|  | j |d
 d¡|¡ n|  | j dd¡|¡ dS | j ddd¡rx| j dd¡ | j dd¡}|r¤| 	¡ s¤| j 
dd¡ | j ddd¡rÄ|  |¡ dS | j dd¡ | jrö| j dd¡ | j d¡ n
|  |¡ | j d	dd¡ | j ¡  | jr.| j ¡  n|  ¡  dS )Nr  r  z<=r–   rR   rb   r¡   úiomark linestartr›   r   r   zinsert lineendz>=rš   rg   rê   zend-1c linestartro   )rð   r‡  rC   r‹  r£   ÚrecallZtag_prevrangeZtag_nextrangerò   Ústripr§   r’  rb   r‘  rZ   Zupdate_idletasksr   r‰  Úrunit)r?   rf   ÚselÚprevÚnextÚindicesrÅ   r(   r(   r)   r]  ‡  sZ    
ÿ


zPyShell.enter_callbackc              	   C   sL  t  dd|¡}t  dd|¡}| d¡}| j ¡  zþ| j ddd¡ | j dd	¡ | j d
d¡}| ¡  	d¡r„|  
|¡ | j d
d¡}| j d|d  ¡ ¡ t|ƒdkrt  d|d ¡ d¡}t  d|¡ d¡}|dd … D ]8}| |¡rþ||t|ƒd …  }| j dd| ¡  ¡ qÜW | j d¡ | j ¡  n| j d¡ | j ¡  0 d S )Nz^\s*\nrS   z\n\s*$ro   r—  rj   r†   rb   rê   rg   ú:r   r   z	^([ \t]*))ÚreÚsubr4  rC   Zundo_block_startri   rò   r‹  ÚrstripÚendswithr’  rb   r•  r€   ÚsearchÚgrouprt   r‘  Zundo_block_stop)r?   rÅ   rf   r{   ÚprefixZorig_base_indentZnew_base_indentr   r(   r(   r)   r”  Æ  s.    



ÿzPyShell.recallc                 C   s–   | j  dd¡}t|ƒ}|dkr8||d  dv r8|d }q|dkrX||d  dkrX|d }|dkrz||d  dv rz|d }qX|d |… }| j |¡ d S )Nr–   rê   r   r   z 	ro   )rC   r‹  r€   r_   r2  )r?   r   rè   r(   r(   r)   r–  à  s    

zPyShell.runitc                 C   s\   | j jr| j  ¡ S z
tj W n    tjdd| jd Y d S 0 ddlm	} || j
| jƒ d S )NzNo stack tracez@There is no stack trace yet.
(sys.last_traceback is not defined)r   r   )ÚStackBrowser)r_   rØ   r  r´   Úlast_tracebackr   ry   rC   Zidlelib.stackviewerr£  rx   rG   )r?   rf   r£  r(   r(   r)   r?  î  s    

ýzPyShell.open_stack_viewerc                 C   s   | j  d¡ | j  d¡ d S )Nr–   rë   )rC   r‘  r“   r(   r(   r)   rc  ü  s    zPyShell.view_restart_markc                 C   s   | j jdd dS )z&Callback for Run/Restart Shell Cntl-F6TrÓ   N)r_   rö   r“   r(   r(   r)   rd     s    zPyShell.restart_shellc                 C   s:   |   ¡  | j | j¡ | j dd¡ |  ¡  | j ¡  d S )Nrb   rê   )	r	  rš   r!   r\  rC   rò   Úset_line_and_columnrM   Z
reset_undorˆ   r(   r(   r)   rô     s
    zPyShell.showpromptc                 C   sP   | j jj}t|ddd}d | |¡¡}| d¡s:|d7 }| jj 	d|d¡ d S )NrO  T)r®   ÚtabsizeZexpand_tabsro   r“  r™   )
r_   r³   r®   r   rK   rR  rŸ  ZperZbottomrb   )r?   r7  r®   ÚwrapperZwrapped_msgr(   r(   r)   Úshow_warning  s    

zPyShell.show_warningc                 C   sb   | j  dd¡}| jr | j |¡ | j  d¡dkr>| j  dd¡ | j  dd¡ |  ¡  | j ¡  d S )Nr–   rê   zend-2cro   )	rC   r‹  rk  Ústorerb   rò   r¥  ZctipZremove_calltip_window)r?   r&  r(   r(   r)   r	    s    zPyShell.resetoutputr(   c                 C   sX   z0| j  dd¡ t | ||d¡}| j  dd¡ W n   ‚ Y n0 | jrTd| _tsTt‚|S )Nr–   Úrightrì   F)rC   ró   r   r!   rH  r*  r  )r?   rÅ   r¦   Úcountr(   r(   r)   r!     s    zPyShell.writec                    s:   z| j  ddd¡rW dS W n ty.   Y dS 0 tƒ  ¡ S )Nr  r¡   r–   rw  )rC   r£   r¤   ÚsuperrP   rˆ   ©Ú	__class__r(   r)   rP   +  s    
zPyShell.rmenu_check_cutc                    s   | j  ddd¡rdS tƒ  ¡ S )Nrb   r¡   r–   rw  )rC   r£   r¬  rQ   rˆ   r­  r(   r)   rQ   3  s    zPyShell.rmenu_check_paste)N)N)N)N)N)N)N)r(   ):r‰   rŠ   r‹   r   r~  r”   r   rŸ   r   rW  r   r   Zallow_line_numbersZidlelib.historyrM  rB   rm  r‡  rð   rH  rŒ  r  rˆ  rp  rq  ra  rr  rb  rs  rt  ry  rE  r  rî   r‡   r}  r  rƒ  r’   rñ   r  rŽ  r_  r`  r^  r]  r”  r–  r?  rc  rd  rô   r¨  r	  r!   rP   rQ   Ú__classcell__r(   r(   r­  r)   r‘   I  sh   

ÿ
C

ÿ
	?




r‘   c              
   C   s2   | j dkr.dD ]}|  |dd|  |d¡ ¡ qdS )z6Make paste replace selection on x11.  See issue #5124.Zx11)ÚTextZEntryZSpinboxz	<<Paste>>z%catch {%W delete sel.first sel.last}
N)Z_windowingsystemZ
bind_class)rx   Úclsr(   r(   r)   Úfix_x11_paste9  s    

ÿýr²  a¢  
USAGE: idle  [-deins] [-t title] [file]*
       idle  [-dns] [-t title] (-c cmd | -r file) [arg]*
       idle  [-dns] [-t title] - [arg]*

  -h         print this help message and exit
  -n         run IDLE without a subprocess (DEPRECATED,
             see Help/IDLE Help for details)

The following options will override the IDLE 'settings' configuration:

  -e         open an edit window
  -i         open a shell window

The following options imply -i and will open a shell:

  -c cmd     run the command in a shell, or
  -r file    run script from file

  -d         enable the debugger
  -s         run $IDLESTARTUP or $PYTHONSTARTUP before anything else
  -t title   set title of shell window

A default edit window will be bypassed when -c, -r, or - are used.

[arg]* are passed to the command (-c) or script (-r) in sys.argv[1:].

Examples:

idle
        Open an edit window or shell depending on IDLE's configuration.

idle foo.py foobar.py
        Edit the files, also open a shell if configured to start with shell.

idle -est "Baz" foo.py
        Run $IDLESTARTUP or $PYTHONSTARTUP, edit foo.py, and open a shell
        window with the title "Baz".

idle -c "import sys; print(sys.argv)" "foo"
        Open a shell window and run the command, passing "-c" in sys.argv[0]
        and "foo" in sys.argv[1].

idle -d -s -r foo.py "Hello World"
        Open a shell window, run a startup script, enable the debugger, and
        run foo.py, passing "foo.py" in sys.argv[0] and "Hello World" in
        sys.argv[1].

echo "import sys; print(sys.argv)" | idle - "foobar"
        Open a shell window, run the script piped in, passing '' in sys.argv[0]
        and "foobar" in sys.argv[1].
c               
      s\  dd l } ddlm} ddlm} ddlm} tdƒ dad}d}d}d }d }d}	z|   tj	dd … d¡\}
}W nF | j
y´ } z,td	|tf tjd
 t d¡ W Y d }~n
d }~0 0 |
D ]Ô\}}|dkrÒ|}d}|dkrâd}d}|dkrîd}|dkrtj t¡ t ¡  |dkrd}|dkr6tdtjd
 da|dkrj|}tj |¡rTntd|ƒ t ¡  d}|dkr|d}	d}|dkrº|t_d}qº|r²|d dkr²tj ¡ }d}tttjƒƒD ]}tj tj| ¡tj|< qÀ|r
|d dkr
dg|dd …  t_	nª|rdg| t_	n–|r2|g| t_	n‚|r’d}g }|D ]}| tj |¡¡ qD|D ],}tj |¡}|tjvrbtj d|¡ qbn"t ¡ }|tjvr´tj d|¡ tj ddddd}|pÎ|}|pÚ| }trî|sît!ƒ  t"dda#t# $¡  dd l%m&} |t#ƒ tj 'tj t(¡d!¡‰|ƒ d"krRtj 'ˆd#¡}t#j)|d$ nZ| *¡ s¬t+d%krpd&‰ d'}nd(‰ d)}‡ ‡fd*d+„|D ƒ}d,d+„ |D ƒ}t#j,dg|¢R Ž  t-t#ƒ t.t#ƒ t/t#ƒa0| 1t#t0¡ |r|s|s|d d … D ] }t0 2|¡d u rî| 3|¡ qî|st0 4¡  |rTt0 5¡ }|s6d S | *¡ rZt0j6rZ|j7 8¡  nt0j9}|rh| :¡  |	r¨tj; <d-¡p†tj; <d.¡}|r¨tj |¡r¨|j= >|¡ |s´|rü|j= ?d/tj	f ¡ |rÜ|j= @|¡ n|r4|j= A|¡ |j= >|¡ n8|r4| Bt#¡}|r| C|¡ | D¡ }|r4| C|¡ t0jErHt# F¡  q4t# G¡  tdƒ d S )0Nr   )Úsystem)Útesting)ÚmacosxTFr   zc:deihnr:st:zError: %s
%sr   rƒ   rÍ   z-dz-ez-hz-iz-nz: Warning: running IDLE without a subprocess is deprecated.z-rzNo script file: z-sz-tú-rS   rÈ   rÉ   zeditor-on-startuprÊ   )rÌ   ZIdle)Z	classNamer	   ZIconsZWindowszidle.ico)rË   g333333!@z.png)é   é    é0   é   z.gif)r·  r¸  r¹  c                    s"   g | ]}t j ˆd |ˆ f ¡‘qS )z	idle_%d%s)rI   rJ   rK   )rÄ   Úsize©ÚextZicondirr(   r)   rÆ   ã  s   ÿzmain.<locals>.<listcomp>c                 S   s   g | ]}t t|d ‘qS ))Zmasterr   )Z
PhotoImagerx   )rÄ   Úiconfiler(   r(   r)   rÆ   å  s   ÿZIDLESTARTUPZPYTHONSTARTUPzbif 1:
            import sys as _sys
            _sys.argv = %r
            del _sys
            
)HÚgetoptr‚  r³  r  r´  rµ  r/   r*  r´   ÚargvÚerrorr
  Ú	usage_msgr™   Úexitr˜   r!   rI   rJ   r~   r‘   r~  r›   r)  r„   r€   r+  r]   Údirnamerb   Úgetcwdr   rÏ   ZNoDefaultRootrX  rx   rY  Úidlelib.runr
   rK   Ú__file__Zwm_iconbitmapZisAquaTkÚ	TkVersionZwm_iconphotor   r²  rŽ   rG   ZsetupApprr   rh   ÚnewrH   Údictr   Úlowerr^   rt  Úenvironr‹  r_   r$  r  r'  r6  ZtkVersionWarningr¨  ZpreferTabsPreferenceWarningZinversedictrŠ  Zdestroy)r¿  r³  r´  rµ  Zenable_shellZenable_editr`   ÚcmdZscriptZstartupZoptsrO   r7  ÚoÚarè   Zpathxr&   ÚdirZ
edit_startr
   r¾  ZsizesZ	iconfilesZiconsrN  ZtkversionwarningZprefer_tabs_preference_warningr(   r¼  r)   rÈ   z  s$    


ÿ



ÿ



ÿÿ
ÿü


rÈ   F)NN)Rr´   r‰   rµ   r„  ÚImportErrorr
  r  rG  r‚  ZctypesZPROCESS_SYSTEM_DPI_AWAREZOleDLLZSetProcessDpiAwarenessr"   r#   r   rÈ  rX  rx   rY  rÆ  r
   ry   r0  r   r2   rI   Zos.pathr   rœ  rÝ   rÀ   Útextwrapr   rù   rÖ   r(  r,   Zidlelib.colorizerr   Zidlelib.configr   r  r   r   Zidlelib.editorr   r   Zidlelib.filelistr   Zidlelib.outwinr   r   r   r   r   Zidlelib.undor   rÕ   r¹   ÚeofrÃ  r‰  Ú	NameErrorr    r*   r+   r/   Ú
checkcacher9   r:   rŽ   r”   rŸ   Z	RPCClientr©   r°   r±   r‘   r²  rÂ  rÈ   r(   r(   r(   r)   Ú<module>   s´   ÿ
þ
 ÿ
ÿ
 ?   0   s6 6
