
W                 @   s_  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
 Z
 d  d l Z d  d l m Z d  d l m Z m Z y d  d l TWn2 e k
 r e d d e j e j d  Yn Xd  d l j 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) d  d l& m* Z* d Z+ d  Z, e j a- d  d l. Z. d d d  Z/ d d d d  Z0 d a1 d d   Z2 e2 d  d e j3 d d  Z4 e4 e _3 Gd d   d e  Z5 Gd d   d e  Z6 Gd  d!   d! e  Z7 Gd" d#   d# e!  Z8 Gd$ d%   d% e' j9  Z: Gd& d'   d' e  Z; Gd( d)   d) e#  Z< Gd* d+   d+ e
 j=  Z> Gd, d-   d- e>  Z? Gd. d/   d/ e>  Z@ d0 d1   ZA d2 ZB d3 d4   ZC eD d5 k rQe jE d5 e jE d) <eC   e2 d6  d S)7    N)InteractiveInterpreter)python_versionsystem)*zJ** IDLE can't import Tkinter.
Your Python may not be configured for Tk. **file   )EditorWindowfixwordbreaks)FileList)ColorDelegator)UndoDelegator)OutputWindow)idleConf)rpc)Debugger)RemoteDebugger)macosxSupportz	127.0.0.1c             C   ss   d } | d | | f 7} | d  k r8 t  j | |  } | j   } | rX | d | 7} | d | j |  f 7} | S)Nz!
Warning (from warnings module):
z  File "%s", line %s
z    %s
z%s: %s
)	linecachegetlinestrip__name__)messagecategoryfilenamelinenolines r   </afs/.cs/s/python-3.5.2/amd64_ubu14/lib/python3.5/PyShell.pyidle_formatwarning0   s    r   c             C   sd   | d  k r t  } y3 | j t |  | | | d |  | j d  Wn t t f k
 r_ Yn Xd  S)Nr   z>>> )warning_streamwriter   AttributeErrorOSError)r   r   r   r   r   r   r   r   r   idle_showwarning=   s    	r$   c             C   sF   |  r' t  d  k rB t j a  t t _ n t  d  k	 rB t  t _ d  a  d  S)N)_warnings_showwarningwarningsshowwarningr$   )capturer   r   r   capture_warningsP   s    		r)   Tc             C   sx   t  j } i  } xK t |  D]= } | d  d  | d d   d k r | j |  | | <q W| |   | j |  d  S)Nr   z<>)r   cachelistpopupdate)r   Zorig_checkcacher+   savekeyr   r   r   extended_linecache_checkcache_   s    	$
r1   c               @   s   e  Z d  Z d d   Z d& d' d( d) d* d+ g 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),PyShellEditorWindowc             G   s   g  |  _  t j |  |  |  j j d |  j  |  j j d |  j  |  j j d |  j j  t	 j
 j t j   d  |  _ |  j j |  d d  } |  j j |  |  j j r |  j   |  j   d  S)Nz<<set-breakpoint-here>>z<<clear-breakpoint-here>>z<<open-python-shell>>zbreakpoints.lstc             S   s   | j    |    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GetUserCfgDirbreakpointPathioZfilename_change_hookZset_filename_change_hookr   r3   color_breakpoint_text)r4   argsr5   r   r   r   r7   y   s    		
zPyShellEditorWindow.__init__Cut<<cut>>rmenu_check_cutCopy<<copy>>rmenu_check_copyPaste	<<paste>>rmenu_check_pasteNSet Breakpoint<<set-breakpoint-here>>Clear Breakpoint<<clear-breakpoint-here>>Tc             C   sc   |  j  d  k r d  S| r: t j   } t j | d  } n d d d d i } |  j j d |  d  S)Nbreak
foreground 
backgroundBREAK)rB   r   CurrentThemeGetHighlightr8   Z
tag_config)r4   ZcolorthemeZcfgr   r   r   rC      s    z)PyShellEditorWindow.color_breakpoint_textc             C   s   |  j  } |  j j } | j d d | d | d  y |  j j |  Wn" t k
 rl |  j j |  Yn Xy& |  j j	 j
 j } | j | |  Wn Yn Xd  S)NrV   z%d.0r   )r8   rB   r   tag_addr6   index
ValueErrorappendr<   pyshellinterpdebuggerr:   )r4   r   r8   r   debugr   r   r   set_breakpoint   s    	z"PyShellEditorWindow.set_breakpointc             C   sU   |  j  } |  j j } | s) | j   d  St t | j d    } |  j |  d  S)Ninsert)r8   rB   r   bellintfloatr[   rb   )r4   eventr8   r   r   r   r   r   r:      s    	
z'PyShellEditorWindow.set_breakpoint_herec             C   s   |  j  } |  j j } | s) | j   d  St t | j d    } y |  j j |  Wn Yn X| j	 d d d  y& |  j
 j j j } | j | |  Wn Yn Xd  S)Nrc   rV   zinsert linestartzinsert lineend +1char)r8   rB   r   rd   re   rf   r[   r6   remove
tag_remover<   r^   r_   r`   r;   )r4   rg   r8   r   r   ra   r   r   r   r;      s"    	
z)PyShellEditorWindow.clear_breakpoint_herec          	   C   s   |  j  r| |  j } |  j j } | s2 | j   d  Sg  |  _  | j d d t  y# |  j j j	 j
 } | j |  Wn Yn Xd  S)NrV   z1.0)r6   r8   rB   r   rd   ri   ZENDr<   r^   r_   r`   clear_file_breaks)r4   r8   r   ra   r   r   r   rj      s    		
	z%PyShellEditorWindow.clear_file_breaksc              C   s[  |  j  } |  j j } y, t |  j d   } | j   } Wd  QRXWn t k
 r[ g  } Yn Xy t |  j d  p } x. | D]& } | j | d  s{ | j |  q{ W|  j	   |  j  } | r | j | d t
 |  d  Wd  QRXWno t k
 rV} zO t |  j d d  sDd |  j _ t j d d	 d
 d t
 |  d |  j  WYd  d  } ~ Xn Xd  S)Nrw=
breakpoint_error_displayedFTtitlez
IDLE Errorr   z$Unable to update breakpoint list:
%sparent)r6   rB   r   openrA   	readlinesr#   
startswithr!   update_breakpointsstrgetattrrootro   tkMessageBox	showerrorr8   )r4   Zbreaksr   fplinesZnew_filer   errr   r   r   store_file_breaks   s.    	
	*z%PyShellEditorWindow.store_file_breaksc             C   s   |  j  j   |  j d  k r  d  S|  j j } | d  k r< d  St j j |  j  r t |  j d   } | j	   } Wd  QRXx_ | D]W } | j
 | d  r t | t |  d d    } x | D] } |  j |  q Wq Wd  S)Nrk   rm   r   )r8   r.   rB   r   r>   r?   isfilerA   rr   rs   rt   evallenrb   )r4   r   r{   r|   r   Zbreakpoint_linenumbersZbreakpoint_linenumberr   r   r   r3     s     z'PyShellEditorWindow.restore_file_breaksc             C   s4   |  j  } | j d  } |  j |  } | |  _ d  S)NrV   )r8   Z
tag_rangesranges_to_linenumbersr6   )r4   r8   rangesZlinenumber_listr   r   r   ru     s    	z&PyShellEditorWindow.update_breakpointsc             C   s   g  } x t  d t |  d  D]f } t t | | j   } t t | | d j   } x' | | k  r | j |  | d 7} q^ Wq W| S)Nr      r   )ranger   re   rf   stringr]   )r4   r   r|   r[   r   endr   r   r   r     s    z)PyShellEditorWindow.ranges_to_linenumbersc             C   s   |  j    t j |   d  S)N)rj   r   _close)r4   r   r   r   r   -  s    
zPyShellEditorWindow._close)rE   rF   zrmenu_check_cut)rH   rI   rJ   )rK   rL   zrmenu_check_paste)NNN)rN   rO   N)rP   rQ   N)r   
__module____qualname__r7   Zrmenu_specsrC   rb   r:   r;   rj   r~   r3   ru   r   r   r   r   r   r   r2   v   s"   		*r2   c               @   s+   e  Z d  Z e Z d Z d d d  Z d S)PyShellFileListNc             C   sN   |  j  r |  j  j j   n+ t |   |  _  |  j  rG |  j  j   sG d  S|  j  S)N)r^   topwakeupPyShellbegin)r4   rg   r   r   r   r=   <  s    		zPyShellFileList.open_shell)r   r   r   r2   r   r^   r=   r   r   r   r   r   3  s   r   c               @   s@   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 S)
ModifiedColorDelegatorc             C   s   t  j |   |  j   d  S)N)r   r7   LoadTagDefs)r4   r   r   r   r7   J  s    zModifiedColorDelegator.__init__c             C   s7   |  j  d d d  |  j d d d  t j |   d  S)NZTODOz1.0iomarkZSYNC)ri   rZ   r   recolorize_main)r4   r   r   r   r   N  s    z&ModifiedColorDelegator.recolorize_mainc             C   su   t  j |   t j   } |  j j d d d  d d  i d t j | d  d t j | d  d t j | d  i  d  S)NstdinrU   rS   stdoutstderrconsole)r   r   r   rW   tagdefsr.   rX   )r4   rY   r   r   r   r   S  s    	z"ModifiedColorDelegator.LoadTagDefsc             C   s+   x$ |  j  D] } |  j | d d  q
 Wd  S)Nr   r   )r   ri   )r4   tagr   r   r   removecolors]  s    z#ModifiedColorDelegator.removecolorsN)r   r   r   r7   r   r   r   r   r   r   r   r   G  s   
r   c               @   s.   e  Z d  Z d d d  Z d d d  Z d S)ModifiedUndoDelegatorNc             C   s\   y- |  j  j | d d  r, |  j  j   d  SWn t k
 rA Yn Xt j |  | | |  d  S)N<r   )delegatecomparerd   TclErrorr   rc   )r4   r[   charstagsr   r   r   rc   e  s    zModifiedUndoDelegator.insertc             C   sY   y- |  j  j | d d  r, |  j  j   d  SWn t k
 rA Yn Xt j |  | |  d  S)Nr   r   )r   r   rd   r   r   delete)r4   Zindex1Zindex2r   r   r   r   n  s    zModifiedUndoDelegator.delete)r   r   r   rc   r   r   r   r   r   r   b  s   	r   c               @   s   e  Z d  Z d d   Z d S)MyRPCClientc             C   s
   t   d  S)N)EOFError)r4   r   r   r   
handle_EOFz  s    zMyRPCClient.handle_EOFN)r   r   r   r   r   r   r   r   r   x  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 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 d d% d&  Z d' d(   Z d) d*   Z d+ d,   Z d d- d.  Z d/ d0   Z d1 d2   Z d3 d4   Z  d5 d6   Z! d7 d8   Z" d9 d:   Z# d; d<   Z$ d= d>   Z% d S)?ModifiedInterpreterc             C   sf   | |  _  t j d j } t j |  d | d  |  _ d |  _ d  |  _ t	 |  _
 |  j j j |  _ d  S)N__main__localsF)	tkconsolesysmodules__dict__r   r7   save_warnings_filters
restartingsubprocess_arglistPORTportcompilecompilerflagsoriginal_compiler_flags)r4   r   r   r   r   r   r7     s    					zModifiedInterpreter.__init__Nc             C   s7   |  j  d  k r |  j   |  _  t j |  j   |  _ d  S)N)r   build_subprocess_arglist
subprocessPopen
rpcsubproc)r4   r   r   r   spawn_subprocess  s    z$ModifiedInterpreter.spawn_subprocessc             C   s   d d   t  j D } t j d d d d d d d	 } t d
 k rS d | f } n d | f } t  j g | d | t |  j  g S)Nc             S   s   g  |  ] } d  |  q S)z-Wr   ).0r   r   r   r   
<listcomp>  s   	 z@ModifiedInterpreter.build_subprocess_arglist.<locals>.<listcomp>mainGeneralzdelete-exitfuncdefaultFtypeboolzidlelib.PyShellz&__import__('idlelib.run').run.main(%r)z__import__('run').main(%r)z-c)r   warnoptionsr   	GetOptionr   
executablerv   r   )r4   rl   Z	del_exitfZcommandr   r   r   r     s    z,ModifiedInterpreter.build_subprocess_arglistc             C   s  t  |  j f } xX t d  D]< } t j |  y t |  |  _ PWq t k
 rW Yq Xq W|  j   d  S|  j j	 j
   d |  _ t d k r |  j j	 j t j t j d  |  j   |  j j	 j d  y |  j j   Wn# t j k
 r|  j   d  SYn X|  j j d |  j  |  j j d |  j j  |  j j d |  j j  |  j j d |  j j  |  j j d	 |  j j  |  j j d
 t  |  j j d |   |  j d d  |  j   |  j S)N   r   r   
   r   r   r   r   r<   r   r_   with_cwdT)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   r<   r   transfer_pathpoll_subprocess)r4   addrir   r   r   start_subprocess  s>    	


	
z$ModifiedInterpreter.start_subprocessFrT   c             C   s  |  j  r |  j Sd |  _  |  j   } | rJ y t j |  j  Wn Yn X|  j j   |  j   |  j } | j } d | _ |  j	   y |  j j
   Wn# t j k
 r |  j   d  SYn X|  j d |  | j   | j j d d  d | r | n d } t | j  t |  d d	 d
 } | j d j | |   | j j d d  | j j d d  | st| j   | rt j |  j  | j   |  j |  j j _ d |  _  |  j S)NTFr   r   zend-1cz	RESTART: ZShell   r   rm   z
{0} {1} {0}restartleft) r   r   getdebuggerr   Zclose_subprocess_debuggercloseterminate_subprocessr   	executingr   r   r   r   r   r   stop_readliner8   r   re   widthr   r!   formatmark_setmark_gravity
showpromptZrestart_subprocess_debuggerload_breakpointsr   r   r   r   )r4   r   r   ra   r   Zwas_executingr   Zhalfbarr   r   r   restart_subprocess  sH    		
			

	
%

	z&ModifiedInterpreter.restart_subprocessc             C   s   |  j  j d d f  i   d  S)NexecZinterrupt_the_server)r   Z
remotecall)r4   r   r   r   Z__request_interrupt  s    z'ModifiedInterpreter.__request_interruptc             C   s   t  j d |  j  j   d  S)Ntarget)	threadingThread'_ModifiedInterpreter__request_interruptstart)r4   r   r   r   interrupt_subprocess  s    z(ModifiedInterpreter.interrupt_subprocessc             C   s   |  j  d  k	 r% |  j j j |  j   y |  j j j   Wn t k
 rM Yn Xy |  j j   Wn t k
 rs Yn X|  j   d |  j _	 d  |  _ d  S)NF)
_afteridr   r8   Zafter_cancelr   r   r   r"   r   r   )r4   r   r   r   kill_subprocess  s    
z#ModifiedInterpreter.kill_subprocessc             C   sX   y |  j  j   Wn t k
 r) d  SYn+ Xy |  j  j   Wn t k
 rS d  SYn Xd  S)N)r   killr#   wait)r4   r   r   r   r     s    	z(ModifiedInterpreter.terminate_subprocessc             C   sC   | r" d g } | j  t j  n	 t j } |  j d | f  d  S)NrT   zRif 1:
        import sys as _sys
        _sys.path = %r
        del _sys
        
)extendr   r?   
runcommand)r4   r   r?   r   r   r   r     s    		z!ModifiedInterpreter.transfer_pathc             C   s  |  j  } | d  k r d  Sy | j |  j d d } Wn; t t t f k
 rr |  j j r^ d  Sd  } |  j   Yn X| rd|  j j	   d  |  _ | \ } } |  j j
 } | d k r | d  k	 r>t t |  d | nf | d k r|  j j d  r>|  j   n; | d k r>d } t | | d t j t | | d | y |  j j   Wn t k
 rcYn X|  j j s|  j j j |  j j |  j  |  _ d  S)	Nr   g?ZOKr   Z	EXCEPTIONz<<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"   r8   afterpollintervalr   r   )r4   ZcltresponsehowZwhatr   errmsgr   r   r   r   ,  s@    		z#ModifiedInterpreter.poll_subprocessc             C   s   | |  _  d  S)N)r`   )r4   r`   r   r   r   setdebuggerT  s    zModifiedInterpreter.setdebuggerc             C   s   |  j  S)N)r`   )r4   r   r   r   r   W  s    zModifiedInterpreter.getdebuggerc             C   s   |  j  j j d |  j  d  S)Ni,  )r   r8   r  r  )r4   r   r   r   open_remote_stack_viewerZ  s    
z,ModifiedInterpreter.open_remote_stack_viewerc             C   s   d d l  m } |  j j d d d i   } | d  k rK |  j j j   d  S| j |  j |  } d d l m	 } m
 } t |  j j  } t j   } t j | d  d } | | d	 | d
 d }	 |	 j j d d d d  | |	 j d  |  }
 |
 j   d  S)Nr   )RemoteObjectBrowserr   Zstackviewerr<   )ScrolledCanvasTreeNodeZnormalrU   bgZhighlightthicknessexpandr   fillZboth)zflist)idlelibr  r   remotequeuer   rx   rd   ZStubObjectTreeItemZidlelib.TreeWidgetr  r  ZToplevelr   rW   rX   framepackZcanvasr  )r4   r  Zoiditemr  r  r   rY   rU   ZscZnoder   r   r   r  g  s    z'ModifiedInterpreter.remote_stack_viewerr   c             C   s#   |  j  |  } |  j | |  d  S)N)stuffsourceexecfile)r4   sourcer   r   r   r   
execsourcez  s    zModifiedInterpreter.execsourcec             C   s   | d  k r1 t  j |   } | j   } Wd  QRXy t | | d  } WnX t t f k
 r |  j j   t d d |  j j	 t
 j |  |  |  j j   Yn X|  j |  d  S)Nr   zB*** Error in script or command!
Traceback (most recent call last):r   )tokenizerr   readr   OverflowErrorSyntaxErrorr   r   r   r   r   showsyntaxerrorr   runcode)r4   r   r  r{   coder   r   r   r    s    	zModifiedInterpreter.execfilec             C   s   |  j  |  } d |  _ t j d  d   |  _ t j d d d t  z t j |  | |  SWd  |  j d  k	 r |  j t j d  d   <d  |  _ Xd  S)Nr   actionerrorr   )	r  Zmorer&   filtersr   filterwarningsSyntaxWarningr   	runsource)r4   r  r   r   r   r   r&    s    	zModifiedInterpreter.runsourcec             C   sS   d |  j  } |  j  d |  _  | j d  } t |  d d | | f t j | <| S)Nz<pyshell#%d>r   rn   r   )gidsplitr   r   r+   )r4   r  r   r|   r   r   r   r    s
    #zModifiedInterpreter.stuffsourcec             C   s   |  j  d | f  d  S)Na(  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
            
)r   )r4   r   r   r   r   prepend_syspath  s    z#ModifiedInterpreter.prepend_syspathc             C   s  |  j  } | j } | j d d d  t j   \ } } } t | d d  pU | pU d } t | d d  pm d } t | d	 d  p d
 }	 |	 d
 k r | d 7} | d k r d |	 d }
 n d | d |	 d f }
 | j | |
  | j   |  j d |  | j	   d  S)Nr   z1.0r   msgrT   z<no detail available>r   r   offsetr   ziomark + %d charsz&iomark linestart + %d lines + %d charszSyntaxError: %s
)
r   r8   ri   r   exc_inforw   Zcolorize_syntax_errorr   r!   r   )r4   r   r   r8   r   valuetbr*  r   r+  posr   r   r   r    s"    		

z#ModifiedInterpreter.showsyntaxerrorc             C   sG   |  j  j   |  j   t j |   |  j  j d  rC |  j  j   d  S)Nz<<toggle-jit-stack-viewer>>)r   r   checklinecacher   showtracebackr   open_stack_viewer)r4   r   r   r   r1    s
    
z!ModifiedInterpreter.showtracebackc             C   sU   t  j } xE t | j    D]1 } | d  d  | d d   d k r | | =q Wd  S)Nr   z<>r*   )r   r+   r,   keys)r4   cr0   r   r   r   r0    s    	$z"ModifiedInterpreter.checklinecachec             C   sV   |  j  j r |  j   d S|  j rB |  j j d d | f i   n t | |  j  d S)Nr   r   r  r   )r   r   display_executing_dialogr   r  r   r   )r4   r   r   r   r   r     s    
	zModifiedInterpreter.runcommandc             C   s  |  j  j r |  j j   |  j   |  j d  k	 rQ |  j t j d  d   <d  |  _ |  j } zNyw |  j  j	   | r |  j
 d  k	 r |  j
 j d d | f i   |  _ n, | r | j | |  j  n t | |  j  Wn t k
 r.|  j  j s't j d d d d d |  j  j r  q*|  j   n   Yny t rgt d d	 |  j  j |  j   |  j  j   n; |  j  j rd
 |  j  _ t d d	 |  j  j n
 |  j   Yn XWd  t sy |  j  j   Wn t k
 rYn XXd  S)Nr   r  zExit?zDo you want to exit altogether?r   yesrq   z IDLE internal error in runcode()r   Fr   )r   r   r_   r   r0  r   r&   r#  r`   beginexecutingr   Z
asyncqueuer   runr   r   
SystemExitr   ry   Zaskyesnor8   r1  use_subprocessr   r   r  canceledr"   )r4   r   r`   r   r   r   r    sP    
			
zModifiedInterpreter.runcodec             C   s   |  j  j j |  S)N)r   r   r!   )r4   r   r   r   r   r!   "  s    zModifiedInterpreter.writec             C   s    t  j d d d |  j j 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.rq   )ry   rz   r   r8   )r4   r   r   r   r   &  s    z.ModifiedInterpreter.display_port_binding_errorc             C   s    t  j d d d |  j j d  S)NzSubprocess Startup ErrorzIDLE's subprocess didn't make connection.  Either IDLE can't start a subprocess or personal firewall software is blocking the connection.rq   )ry   rz   r   r8   )r4   r   r   r   r   1  s    z/ModifiedInterpreter.display_no_subprocess_errorc             C   s    t  j d d d |  j j d  S)NzAlready executingzYThe Python Shell window is already executing a command; please wait until it is finished.rq   )ry   rz   r   r8   )r4   r   r   r   r5  9  s    z,ModifiedInterpreter.display_executing_dialog)&r   r   r   r7   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  r1  r0  r   r  r!   r   r   r5  r   r   r   r   r     sF   
+-&1r   c                   s/  e  Z d  Z d e   d Z e Z e Z dV dW dX dY dZ d[ g Z	 d d l
 m Z d d d  Z d d   Z d Z d Z d Z d Z d Z d Z d d   Z d d   Z d d d  Z d d   Z d d d   Z d! d"   Z d# d$   Z d% d&   Z d' d(   Z d) d*   Z d+ d,   Z d- d.   Z d/ d0   Z  d1 Z! d2 d3   Z" d4 d5   Z# d6 d7   Z$ d8 d9   Z% d d: d;  Z& d< d=   Z' d> d?   Z( d@ dA   Z) dB dC   Z* dD dE   Z+ d dF dG  Z, d dH dI  Z- d dJ dK  Z. dL dM   Z/ dN dO   Z0 f  dP dQ  Z1   f dR dS   Z2   f dT dU   Z3   S)\r   zPython z Shellr   _Fileedit_Editra   _Debugoptions_Optionswindows_Windowhelp_Helpr   )HistoryNc          	   C   s  t  r3 |  j } | d d d k r3 | j d d  t |   |  _ | d  k rw t   } t |  | j   t |  } t	 j
 |  | d  d   d |  _ d |  _ d |  _ |  j } | j d d  | j d	 |  j  | j d
 |  j  | j d |  j  | j d |  j  | j d |  j  | j d |  j  | j d |  j  t  rr| j d |  j  | j d |  j  t j |  _ t j |  _ t j |  _  d d l! m" } t# |  d | j$  |  _ t% |  d | j$  |  _ t% |  d | j$  |  _ t% |  d | j$  |  _& t  s0|  j t _ |  j t _ |  j t _ y d d  l' } | j( | _) Wn t j* t _   Yn X|  j+ |  j  |  _, d |  _- d  S)Nr   r   shellShe_llT   wrapcharz<<newline-and-indent>>z<<plain-newline-and-indent>>z<<interrupt-execution>>z<<end-of-file>>z<<open-stack-viewer>>z<<toggle-debugger>>z<<toggle-jit-stack-viewer>>z<<view-restart>>z<<restart-shell>>)	IOBindingr   r   r   r   2   )zshellrH  ).r:  
menu_specsrc   r   r_   Tkr	   withdrawr   r   r7   ZusetabsZindentwidthZcontext_use_ps1r8   Z	configurer9   enter_callbacklinefeed_callbackcancel_callbackeof_callbackr2  toggle_debuggertoggle_jit_stack_viewerview_restart_markrestart_shellr   r   save_stdoutr   save_stderrr   
save_stdinr  rL  PseudoInputFileencodingPseudoOutputFiler   pydocZ
plainpagerZpagerr  rF  historyr  )r4   r<   msrx   r8   rL  r_  r   r   r   r7   W  s\    		

				zPyShell.__init__c             C   s   t  j d d  S)NZ
shell_onlyT)r   ZGetExtensions)r4   r   r   r   get_standard_extension_names  s    z$PyShell.get_standard_extension_namesFc             C   s
   | a  d  S)N)r    )r4   streamr   r   r   set_warning_stream  s    zPyShell.set_warning_streamc             C   s   t  S)N)r    )r4   r   r   r   get_warning_stream  s    zPyShell.get_warning_streamc             C   s`   |  j  r0 t j d d d |  j |  j   d S|  j j   } | rR |  j   n
 |  j   d  S)NzDon't debug nowz*You can only toggle the debugger when idlerq   rR   )	r   ry   rz   r8   set_debugger_indicatorr_   r   close_debuggeropen_debugger)r4   rg   dbr   r   r   rU    s    		

zPyShell.toggle_debuggerc             C   s%   |  j  j   } |  j d |  d  S)Nz<<toggle-debugger>>)r_   r   Zsetvar)r4   ri  r   r   r   rf    s    zPyShell.set_debugger_indicatorc             C   s   d  S)Nr   )r4   rg   r   r   r   rV    s    zPyShell.toggle_jit_stack_viewerc             C   s   |  j  j   } | r{ |  j  j d   | j   |  j  j rN t j |  j  j  |  j   |  j j	 d  d t
 _ |  j   |  j   d  S)Nz[DEBUG OFF]
z>>> )r_   r   r	  r   r   r   Zclose_remote_debuggerr   r   r!   r   ps1r   rf  )r4   ri  r   r   r   rg    s    

	
zPyShell.close_debuggerc             C   sq   |  j  j r' t j |  j  j |   } n t j |   } |  j  j |  | j   d t _ |  j	   |  j
   d  S)Nz[DEBUG ON]
>>> )r_   r   r   Zstart_remote_debuggerr   r	  r   r   rj  r   rf  )r4   Zdbg_guir   r   r   rh    s    
	
zPyShell.open_debuggerc             C   s   |  j    d |  _ d  S)Nr   )r   r   )r4   r   r   r   r7    s    
zPyShell.beginexecutingc             C   s    d |  _  d |  _ |  j   d  S)Nr   )r   r;  r   )r4   r   r   r   r    s    		zPyShell.endexecutingc             C   sc   |  j  r: t j d d d d d |  j } | d k r: d S|  j   d |  _ d |  _ t j |   S)	NzKill?z7Your program is still running!
 Do you want to kill it?r   okrq   FcancelT)	r   ry   Zaskokcancelr8   r   r;  r   r   r   )r4   r  r   r   r   r     s    	
		zPyShell.closec             C   sy   |  j    t r |  j j   |  j t _ |  j t _ |  j	 t _
 d  |  _ d  |  _ d  |  j _ d  |  _ t j |   d  S)N)rg  r:  r_   r   rY  r   r   rZ  r   r[  r   r   r<   r^   r`  r   r   )r4   r   r   r   r     s    
			zPyShell._closec             C   s   d S)NTr   )r4   r   r   r   r   ispythonsource  s    zPyShell.ispythonsourcec             C   s   |  j  S)N)shell_title)r4   r   r   r   short_title  s    zPyShell.short_titlez@Type "copyright", "credits" or "license()" for more information.c             C   s   |  j  j d d  |  j   t rO d } |  j j   } | sm |  j   d Sn d d d d } t j t	 _ |  j
 d	 t	 j t	 j |  j | f  |  j  j   |  j   d
 d  l } d  | _ d S)Nr   rc   rT   Fz==== No Subprocess ====

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

zPython %s on %s
%s
%sr   T)r8   r   r   r:  r_   r   r   r   displayhookr   r!   versionplatform	COPYRIGHTZfocus_forcer   tkinterZ_default_root)r4   Znosubclientrt  r   r   r   r     s$    

	
	zPyShell.beginc             C   s'   |  j  s d  Sd |  _ |  j j   d  S)NT)reading_stop_readline_flagr   quit)r4   r   r   r   r     s    		zPyShell.stop_readlinec             C   s   |  j  } z d |  _  |  j j   Wd  | |  _  X|  j rF d |  _ d S|  j j d d  } t |  d k rs d } |  j   |  j r d |  _ t	 s t
  |  j r d |  _ d } | S)Nr   FrT   r   zend-1cr   rn   )rv  r   mainlooprw  r8   getr   r   r;  r:  r   	endoffile)r4   r/   r   r   r   r   readline"  s(    		
		
				zPyShell.readlinec             C   s   d S)NTr   )r4   r   r   r   isatty9  s    zPyShell.isattyc          
   C   s   y  |  j  j d d d  r d  SWn Yn X|  j p: |  j se |  j   |  j j d  |  j   d Sd |  _ d |  _	 |  j r |  j j
 r |  j j   r |  j j   n |  j j   |  j r |  j j   d S)Nz	sel.firstz!=zsel.lastzKeyboardInterrupt
rR   r   r   )r8   r   r   rv  r   r_   r!   r   r{  r;  r   r   r   r   r   rx  )r4   rg   r   r   r   rS  <  s&    

			zPyShell.cancel_callbackc             C   s   |  j  r |  j r d  S|  j j d d d  oD |  j j d d d  sK d  S|  j  sk |  j   |  j   n d |  _ d |  _ |  j j	   d S)Nr   z==rc   zend-1cr   r   rR   )
r   rv  r8   r   r   r   r;  r{  r   rx  )r4   rg   r   r   r   rT  R  s    	
		zPyShell.eof_callbackc             C   s@   |  j  r/ |  j j d d  |  j j d  n |  j |  d S)Nrc   rn   rR   )rv  r8   rc   seenewline_and_indent_event)r4   rg   r   r   r   rR  a  s
    	zPyShell.linefeed_callbackc             C   s  |  j  r |  j r d  SyK |  j j d d  } | ra |  j j d d d  ra |  j | |  d SWn Yn X|  j j d d d  r|  j j d	 d  } | r |  j j d d | d
  r |  j |  j j | d | d
  |  d S|  j j d	 d  } | rI|  j j d d | d  rI|  j |  j j | d | d
  |  d S|  j j d d  } | r|  j j | d d d  r|  j |  j j | d
 d  |  n |  j |  j j d d  |  d S|  j j d d d  r|  j j d d  |  j j d d  } | r/| j	   r/|  j j
 d d  |  j j d d d  rX|  j |  d S|  j j d d  |  j r|  j j d d  |  j j d  n |  j |  |  j j d	 d d  |  j j   |  j r|  j j   n
 |  j   d S)Nz	sel.firstzsel.lastz<=r   rR   rc   r   ziomark linestartr   r   r   zinsert lineendz>=r   zinsert linestartzend-1czend-1c linestartrn   )r   rv  r8   rz  r   recallZtag_prevrangeZtag_nextranger   r   r   r  rc   r~  rZ   Zupdate_idletasksr   rx  runit)r4   rg   selprevnextindicesr   r   r   r   rQ  j  sX    "'"'&		
zPyShell.enter_callbackc             C   s  t  j d d |  } t  j d d |  } | j d  } |  j j   zC|  j j d d d  |  j j d d	  |  j j d
 d  } | j   j	 d  r |  j
 |  |  j j d
 d  } |  j j d | d j    t |  d k rt  j d | d  j d  } t  j d |  j d  } x^ | d d   D]L } | j |  rg| | t |  d   } |  j j d d | j    q8WWd  |  j j d  |  j j   Xd  S)Nz^\s*\nrT   z\n\s*$rn   r  z1.0r   rc   zend-1czinsert linestart:r   r   z	^([ \t]*))resubr(  r8   Zundo_block_startri   r   rz  rstripendswithr  rc   r   r   searchgrouprt   r~  Zundo_block_stop)r4   r   rg   r|   prefixZorig_base_indentZnew_base_indentr   r   r   r   r    s*    %zPyShell.recallc             C   s   |  j  j d d  } t |  } x. | d k rQ | | d d k rQ | d } q$ W| d k r| | | d d k r| | d } x. | d k r | | d d k r | d } q W| d  |  } |  j j |  d  S)Nr   zend-1cr   r   z 	rn   )r8   rz  r   r_   r&  )r4   r   r   r   r   r   r    s    # 
#zPyShell.runitc             C   ss   |  j  j r |  j  j   Sy t j Wn% t j d d d |  j d  SYn Xd d l m	 } | |  j
 |  j  d  S)NzNo stack tracez@There is no stack trace yet.
(sys.last_traceback is not defined)rq   r   )StackBrowser)r_   r   r  r   last_tracebackry   rz   r8   Zidlelib.StackViewerr  rx   r<   )r4   rg   r  r   r   r   r2    s    	
	zPyShell.open_stack_viewerc             C   s$   |  j  j d  |  j  j d  d  S)Nr   r   )r8   r~  )r4   rg   r   r   r   rW    s    zPyShell.view_restart_markc             C   s   |  j  j d d  d  S)Nr   T)r_   r   )r4   rg   r   r   r   rX    s    zPyShell.restart_shellc          	   C   sl   |  j    y t t j  } Wn d } Yn X|  j j |  |  j j d d  |  j   |  j	 j
   d  S)NrT   rc   zend-1c)r   rv   r   rj  r   r!   r8   r   set_line_and_columnrB   Z
reset_undo)r4   r   r   r   r   r     s    

zPyShell.showpromptc             C   sz   |  j  j d d  } |  j r. |  j j |  |  j  j d  d k rY |  j  j d d  |  j  j d d  |  j   d  S)Nr   zend-1czend-2crn   )r8   rz  r`  storerc   r   r  )r4   r  r   r   r   r     s    	zPyShell.resetoutputc             C   s   t  | t  rs t |  rs t |  d k rs x' t |  D] \ } } | d k r: Pq: Wt d | | | d d   yB |  j j d d  t j	 |  | | d  } |  j j d d  Wn   Yn X|  j
 r d |  _
 t s t  | S)	Nu   ￿zUCS-2r   z%Non-BMP character not supported in Tkr   rightr   r   )
isinstancerv   r   max	enumerateUnicodeEncodeErrorr8   r   r   r!   r;  r:  r   )r4   r   r   r   rK  countr   r   r   r!     s"    -			zPyShell.writec                sF   y  |  j  j d d d  r d SWn t k
 r8 d SYn Xt   j   S)Nz	sel.firstr   r   disabled)r8   r   r   superrG   )r4   )	__class__r   r   rG     s    	zPyShell.rmenu_check_cutc                s)   |  j  j d d d  r d St   j   S)Nrc   r   r   r  )r8   r   r  rM   )r4   )r  r   r   rM     s    zPyShell.rmenu_check_paste)zfiler<  )r=  r>  )zdebugr?  )zoptionsrA  )rB  rC  )zhelprE  )4r   r   r   r   rn  r   r   r   r   rN  Zidlelib.IdleHistoryrF  r7   rb  rv  r   r;  r{  r   rw  rd  re  rU  rf  rV  rg  rh  r7  r  r   r   rm  ro  rs  r   r   r|  r}  rS  rT  rR  rQ  r  r  r2  rW  rX  r   r   r!   rG   rM   r   r   )r  r   r   A  sd   	:	?	r   c               @   sO   e  Z d  Z d d d  Z e d d    Z e d d    Z d d	   Z d S)

PseudoFileNc             C   s   | |  _  | |  _ | |  _ d  S)N)rG  r   	_encoding)r4   rG  r   r]  r   r   r   r7   "  s    		zPseudoFile.__init__c             C   s   |  j  S)N)r  )r4   r   r   r   r]  '  s    zPseudoFile.encodingc             C   s   d |  j  S)Nz<%s>)r   )r4   r   r   r   name+  s    zPseudoFile.namec             C   s   d S)NTr   )r4   r   r   r   r}  /  s    zPseudoFile.isatty)r   r   r   r7   propertyr]  r  r}  r   r   r   r   r     s   r  c               @   s(   e  Z d  Z d d   Z d d   Z d S)r^  c             C   s   d S)NTr   )r4   r   r   r   writable5  s    zPseudoOutputFile.writablec             C   st   |  j  r t d   t |  t k	 r^ t | t  sO t d t |  j   t j |  } |  j j	 | |  j
  S)Nzwrite to closed filezmust be str, not )closedr\   r   rv   r  	TypeErrorr   __str__rG  r!   r   )r4   r   r   r   r   r!   8  s    	zPseudoOutputFile.writeN)r   r   r   r  r!   r   r   r   r   r^  3  s   r^  c               @   sU   e  Z d  Z d d d  Z d d   Z d d d  Z d d	 d
  Z d d   Z d S)r\  Nc             C   s#   t  j |  | | |  d |  _ d  S)NrT   )r  r7   _line_buffer)r4   rG  r   r]  r   r   r   r7   E  s    zPseudoInputFile.__init__c             C   s   d S)NTr   )r4   r   r   r   readableI  s    zPseudoInputFile.readabler   c             C   s   |  j  r t d   | d  k r* d } n( t | t  sR t d t |  j   |  j } d |  _ | d k  r x |  j j	   } | s P| | 7} qs Wn\ x6 t
 |  | k  r |  j j	   } | s P| | 7} q W| | d   |  _ | d  |  } | S)Nzread from closed filer   zmust be int, not rT   r   r*   )r  r\   r  re   r  r   r   r  rG  r|  r   )r4   sizeresultr   r   r   r   r  L  s,    				  zPseudoInputFile.readc             C   s   |  j  r t d   | d  k r* d } n( t | t  sR t d t |  j   |  j pg |  j j	   } | d k  r t
 |  } | j d d |  } | d k r | d } | | d   |  _ | d  |  S)Nzread from closed filer   zmust be int, not r   rn   r*   )r  r\   r  re   r  r   r   r  rG  r|  r   find)r4   r  r   Zeolr   r   r   r|  c  s    		
zPseudoInputFile.readlinec             C   s   |  j  j   d  S)N)rG  r   )r4   r   r   r   r   s  s    zPseudoInputFile.closer*   r*   )r   r   r   r7   r  r  r|  r   r   r   r   r   r\  C  s
   r\  c             C   sG   |  j  d k rC x1 d D]) } |  j | d d |  j | d   q Wd  S)NZx11TextEntrySpinboxz	<<Paste>>z%catch {%W delete sel.first sel.last}
)r  r  r  )Z_windowingsystemZ
bind_class)rx   clsr   r   r   fix_x11_pastew  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  t  d  d a d }  d } d } d  } d  } d } y) t j t j d d   d  \ } } WnR t j k
 r } z/ t d | t f d t j t j	 d  WYd  d  } ~ Xn Xx*| D]"\ }	 }
 |	 d k r |
 } d }  |	 d	 k r d } d }  |	 d
 k rd } |	 d k r-t j
 j t  t j	   |	 d k r?d }  |	 d k rdt d d t j d a |	 d k r|
 } t j j |  rn t d |  t j	   d }  |	 d k rd } d }  |	 d k r |
 t _ d }  q W| r
| d d k r
t j j   } d }  x= t t t j   D]& } t j j t j |  t j | <q W| r}| d d k r}d g | d d   t _ n | rd g | t _ n | r| g | t _ n | r3d } g  } x' | D] } | j t j j |   qWxs | D]: } t j j |  } | t j k rt j j d |  qWn. t j   } | t j k rat j j d |  t j d d d d d } | p| } |  p| }  t d d  a t j   t j j t j j t   d   t!   d k rt j j  d  } t j" d  |  nc t# d! k rit# d" k r$d# n d$      f d% d&   d3 D } d* d&   | D } t j$ d |  t% t  t& t  t' t  a( t) j* t t(  t) j+   rt j, d+ d,  t j, d+ d-  t j, d+ d.  | r4| p| s4x: | d  d   D]( } t( j- |  d  k r| j. |  qW| s4t( j/   |  rut( j0   } | sPd  St) j+   r~t( j1 r~| j2 j3   n	 t( j4 } | r| j5   | rt j6 j7 d/  pt j6 j7 d0  } | rt j j |  r| j8 j9 |  | s| rH| j8 j: d1 t j f  | r| j8 j; |  qw| rw| j8 j< |  | j8 j9 |  n/ | rwt) j= t  } | rw| j8 j: d2 |  x t( j> rt j?   qzWt j@   t  d  d  S)4NTFr   zc:deihnr:st:zError: %s
%sr   r   z-cz-dz-ez-hz-iz-nz: Warning: running IDLE without a subprocess is deprecated.z-rzNo script file: z-sz-tr   -rT   r   r   zeditor-on-startupr   r   Z	classNameZIdleZIconsZWindowszidle.icor   g      !@g333333!@z.pngz.gifc                s/   g  |  ]% } t  j j  d  |   f   q S)z	idle_%d%s)r>   r?   r@   )r   r  )exticondirr   r   r     s   	zmain.<locals>.<listcomp>       0   c             S   s   g  |  ] } t  d  |   q S)r   )Z
PhotoImage)r   iconfiler   r   r   r     s   	 r  z<B2>z<B2-Motion>z<<PasteSelection>>ZIDLESTARTUPZPYTHONSTARTUPzbif 1:
            import sys as _sys
            _sys.argv = %r
            del _sys
            
zprint('%s'))r  r  r  )Ar)   r:  getoptr   argvr"  r   	usage_msgr   exitr   r!   r>   r?   r   r   rn  r   r  r   r   abspathr]   dirnamerc   getcwdr   r   rO  rx   rP  r@   __file__r   Zwm_iconbitmapZ	TkVersionZwm_iconphotor	   r  r   r<   r   ZsetupAppZisAquaTkZunbind_classrr   rh   newr=   dictr   lowerr^   rh  environrz  r_   r  r   r  r)  ZtkVersionWarningZinversedictry  Zdestroy)Zenable_shellZenable_editra   cmdZscriptZstartupZoptsrD   r*  oar   Zpathxr   dirZ
edit_startr  Z	iconfilesZiconsrG  Ztkversionwarningr   )r  r  r   r     s    
) 
	

	
$
!



	
	
r   r   F)Fr  r>   Zos.pathr  r   r   r   r   r   r  rB   r   r   r   rr  r   r   rt  ImportErrorr   r  r  Ztkinter.messageboxZ
messageboxry   Zidlelib.EditorWindowr   r	   Zidlelib.FileListr
   Zidlelib.ColorDelegatorr   Zidlelib.UndoDelegatorr   Zidlelib.OutputWindowr   Zidlelib.configHandlerr   r  r   r   r   r   r   r   r    r&   r   r$   r%   r)   
checkcacher1   r2   r   r   r   Z	RPCClientr   r   r   
TextIOBaser  r^  r\  r  r  r   r   r   r   r   r   r   <module>   sz   	
	
	  4?