
W                 @   sX  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 Td  d l	 j
 Z d  d l j 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 d  d l m Z d  d	 l m Z d  d
 l m Z m Z m Z d  d l m Z d  d l m Z d Z  d e j!   Z" d d   Z# Gd d   d e$  Z% e%   Z& Gd d   d e$  Z' d d   Z( d d   Z) d  d l* Z* e* Z+ [* Gd d   d e$  Z, d d   Z- d d d d  d! d" i Z. d# d$   Z/ d% d&   Z0 d' d(   Z1 e2 d) k rTd  d* l3 m4 Z4 e4 e1  d S)+    N)*)MultiCallCreator)
WindowList)SearchDialog)
GrepDialog)ReplaceDialog)PyParse)idleConf)aboutDialogtextViewconfigDialog)macosxSupport)help   z (%s)c              C   s   t  j \ }  } } } } d |  | f } | d | f 7} | d k rY | d | f 7} n$ | d k r} | d | d | f 7} | S)zYFormat sys.version_info to produce the Sphinx version string used to install the chm docsz%s%sz%s	candidatezrc%sfinalr   )sysversion_info)majorminormicrolevelserialrelease r   A/afs/.cs/s/python-3.5.2/amd64_ubu14/lib/python3.5/EditorWindow.py_sphinx_version   s    r   c               @   sR   e  Z d  Z d d   Z d d d  Z d d   Z d d	   Z d d
 d  Z d S)
HelpDialogc             C   s   d  |  _  d  |  _ d  S)N)parentdlg)selfr   r   r   __init__-   s    	zHelpDialog.__init__Nc             C   sU   d d l  } | j d t d d |  j d k r> |  j |  | rQ |  j |  d S)z Display the help dialog.

            parent - parent widget for the help window

            near - a Toplevel widget (e.g. EditorWindow or PyShell)
                   to use as a reference for placing the help window
        r   NzEditorWindow.HelpDialog is no longer used by Idle.
It will be removed in 3.6 or later.
It has been replaced by private help.HelpWindow

stacklevel   )warningswarnDeprecationWarningr   show_dialog
nearwindow)r    r   nearwr   r   r   display1   s    	zHelpDialog.displayc             C   sr   | |  _  t j j t j j t j j t   d  } t j | d | d d |  _	 } | j
 d |  j d  d  S)Nzhelp.txtZHelpZmodalFz	<Destroy>+)r   ospathjoinabspathdirname__file__r   Z	view_filer   binddestroy)r    r   fnr   r   r   r   r'   C   s    	-"zHelpDialog.show_dialogc             C   s\   |  j  } | j   d | j   d f } | j   | j d |  | j   | j   d  S)N
   z=+%d+%d)r   Zwinfo_rootxZwinfo_rootyZwithdrawZgeometry	deiconifylift)r    r)   r   geomr   r   r   r(   I   s    	 

zHelpDialog.nearwindowc             C   s   d  |  _  d  |  _ d  S)N)r   r   )r    Zevr   r   r   r4   T   s    	zHelpDialog.destroy)__name__
__module____qualname__r!   r+   r'   r(   r4   r   r   r   r   r   +   s
   r   c               @   s  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 m Z d d l m Z d d l m Z d d l m Z d	 Z d	 d	 d	 d	 d
 d  Z d d   Z d d   Z d d   Z d d   Z d	 d d  Z d d d d d d d g Z d$ d%   Z d& d'   Z d	 Z d( d)   Z d g Z  d, d-   Z! d. d/   Z" d0 d1   Z# d2 d3   Z$ d	 d4 d5  Z% d	 d6 d7  Z& d	 d8 d9  Z' d	 d: d;  Z( d< d=   Z) d> d?   Z* d@ dA   Z+ d	 dB dC  Z, d	 dD dE  Z- dF dG   Z. dH dI   Z/ dJ dK   Z0 dL dM   Z1 dN dO   Z2 dP dQ   Z3 dR dS   Z4 dT dU   Z5 dV dW   Z6 d	 dX dY  Z7 d	 dZ d[  Z8 d	 d\ d]  Z9 d	 d^ d_  Z: d` da   Z; db dc   Z< dd de   Z= df dg   Z> dh di   Z? dj dk   Z@ dl dm   ZA dn do   ZB eC jD eC jE dp ZF dq dr   ZG ds dt   ZH du dv   ZI dw dx   ZJ dy dz   ZK d{ d|   ZL d} d~   ZM d	 d d  ZN d d   ZO d d   ZP d d   ZQ d d   ZR d d   ZS d d   ZT d d   ZU d d   ZV d d d  ZW d d   ZX d d d  ZY d d   ZZ d d   Z[ d d   Z\ d d   Z] d d   Z^ d d   Z_ d d   Z` d d   Za d d   Zb d d   Zc d	 d d  Zd d	 d	 d d  Ze d d   Zf d	 d d  Zg d	 d d  Zh d d   Zi d d   Zj d d   Zk d d   Zl d d d  Zm d d   Zn d d   Zo d d   Zp d d   Zq d d   Zr d d   Zs d d   Zt d d   Zu d d   Zv d d   Zw d d   Zx d d   Zy d d   Zz d d   Z{ d d   Z| d d   Z} d d   Z~ d d   Z d	 S)EditorWindowr   )
Percolator)ColorDelegatorcolor_config)UndoDelegator)	IOBindingfilesystemencodingencoding)Bindings)Toplevel)MultiStatusBarNc             C   s	  t  j d  k r|t j j t j d d  } t j j d  r d d t j	 d  d  } t j j
 d  rr d } qd	 } t j j | | d d  } n} t j d  d  d
 k r t j j t j d d t    } t j j |  r| } n' t j d k rt j j t j d  } t j j |  } t j j |  rb| t  _ t j d k r|d t  j t  _ n d t j	 d  d  t  _ | |  _ | p| j } | |  _ y t j Wn t k
 rd t _ Yn Xt |  |  _ t j | d |  j |  _ }	 | r| j |  _ | j |  j _ n i  |  _ i  |  j _ t j j t j   d  |  _ t |	  |  _ }
 t  |
 d d |  _! } t j" d d d d d |  _# d d d d d d d  d! d |  j# d" t j" d d d" d d i } t$ d# k rd$ | d% <t% t&  |
 |  |  _' } |  j' |  j _( |  j)   |  j*   |  j j+ d& |  j,  |  j j- d' |  j.  t/ j0   r| j- d' |  j.  | j- d( |  j1  | j- d) |  j1  n | j- d* |  j1  | j- d+ |  j2  | j- d, |  j3  | j- d- |  j4  | j- d. |  j5  | j- d/ |  j6  | j- d0 |  j7  | j- d1 |  j8  | j- d2 |  j9  | j- d3 |  j:  | j- d4 d5 d6    | j- d7 |  j;  | j- d8 |  j<  | j- d9 |  j=  | j- d: |  j>  | j- d; |  j?  | j- d< |  j@  | j- d= |  jA  | j- d> |  jB  | j- d? |  jC  | j- d@ |  jD  | j- dA |  jE  | j- dB |  jF  | j- dC |  jG  | j- dD |  jH  | j- dE |  jI  | j- dF |  jJ  | j- dG |  jK  | j- dH |  jL  | j- dI |  jM  | j- dJ |  jN d!   | j- dK |  jN dL   | j- dM |  jO  | j- dN |  jP  | j- dO |  jQ  | r| | j |  <| rn|  | jR | <| j- dP |  jS  | j- dQ |  j jT  | j- dR |  jU  | j- dS |  jV  | j- dT |  jW  |  jX   | jY | dU <| jZ dV t[ dW t\  | j] | dX <t j^ |  j d d  | dY <|
 jZ dV t_ dW t` dZ dL  | jZ dV ta dW t` dZ dL  | jb   t j" d d[ d\ d d] } | |  _c d^ |  _d |  jd |  _e |  jf   d_ |  _g df |  _h |  ji |  |  _j } |  jk   |  _l } | jm |  | jn | _n | jo | _o | jp |  jq  |  jr |   |  _s } | jt |  ju  d_ |  _v |  jw d_  d  |  _x | rt j jy |  rt j j
 |  r| jz |  rdc |  _v |  j{ |  } |  jw |  n | j| |  dc |  _v |  j}   |  jq   |  j~   |  j   |  j j dd  } | rs	| j de  } | d  k r:	dg } | d! k rZ	| j   | dL } | |  _ t j |  j  t j |  _ t j |  _ t j |  _ d  S)hNZ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/winzPython%s.chmdarwinz0Resources/English.lproj/Documentation/index.htmlzfile://zhttps://docs.python.org/%d.%d/r#   z>>> menuzrecent-files.lstnamevbarmainr=   widthtypeinttextZpadx   wrapZnoneZhighlightthicknessr   heightg      !@ZwordprocessorZtabstyleZWM_DELETE_WINDOWz<<close-window>>z<Control-Button-1>z<2>z<3>z<<cut>>z<<copy>>z	<<paste>>z<<center-insert>>z<<help>>z<<python-docs>>z<<about-idle>>z<<open-config-dialog>>z<<open-module>>z<<do-nothing>>c             S   s   d S)Nbreakr   )eventr   r   r   <lambda>   s    z'EditorWindow.__init__.<locals>.<lambda>z<<select-all>>z<<remove-selection>>z<<find>>z<<find-again>>z<<find-in-files>>z<<find-selection>>z<<replace>>z<<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>>z<<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>>commandsidefillZyscrollcommandfontexpandIndentz
use-spacesboolr   F2     @KL Twindowsend)rb   rc   rd   )r=   help_urlr-   r.   r/   r   base_prefixplatformcountr   isdirr   isfilenormpathflistrootps1AttributeErrorMenumenubarr   ZListedTopleveltopvarstkinter_varsZinversedictinstance_dictr	   ZGetUserCfgDirrecent_files_pathFrame
text_frameZ	ScrollbarrN   	GetOptionrP   Z	TkVersionr   ZTextrS   Zfocused_widgetcreatemenubarapply_bindingsprotocolcloser3   close_eventr   ZisAquaTkright_menu_eventcutcopypastecenter_insert_eventhelp_dialogpython_docsabout_dialogconfig_dialogopen_module
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_eventindent_region_eventdedent_region_eventcomment_region_eventuncomment_region_eventtabify_region_eventuntabify_region_eventtoggle_tabs_eventchange_indentwidth_eventmove_at_edge_if_selectiondel_word_leftdel_word_righthome_callbackdictnew_callbackZclose_all_callbackopen_class_browseropen_path_browseropen_turtle_demoset_status_baryviewpackRIGHTYsetGetFontZLEFTZBOTHZTOPZ	focus_setusetabstabwidthindentwidthset_notabs_indentwidthcontext_use_ps1num_context_linesr>   perrA   undoinsertfilterundo_block_startundo_block_stopZset_saved_change_hooksaved_change_hookrB   ioZset_filename_change_hookfilename_change_hookZ	good_loadset_indentation_paramscolorexistsloadfileispythonsourceZset_filenameResetColorizerupdate_recent_files_listload_extensionsmenudictgetindexadd_separator	wmenu_endZregister_callbackpostwindowsmenutkMessageBoxaskyesnotkSimpleDialog
askinteger	showerror)r    ro   filenamekeyrp   ZdochomeZpyverZbasepathZchmfileru   r{   rN   Ztext_optionsrS   Z	usespacesr   r   r   	is_py_srcrL   rf   r   r   r   r!   f   s<   								





	
				%		





	zEditorWindow.__init__c             C   s   t  | t  rt y | j |  j  } WnL t k
 rs y | j |  j  } Wn! t k
 rn | j d  } Yn XYn Xt j d d |  S)z3Return filename as BMP unicode so diplayable in Tk.z	iso8859-1u   [𐀀-􏿿]u   �)
isinstancebytesdecoderC   UnicodeDecodeErrorrD   resub)r    r   r   r   r   _filename_to_unicode?  s    z!EditorWindow._filename_to_unicodec             C   s)   |  j  j   \ } } |  j j |  d S)NrW   )r   Zdefaultfilenamero   new)r    rX   r1   basenamer   r   r   r   N  s    zEditorWindow.new_callbackc             C   ss  | j  d @d k r& | j d k r& d  S|  j j d  r |  j j d d d  r |  j j d d d  r t |  j j d  j d  d	  } nO |  j j d d  } x7 t t	 |   D] } | | d k r Pq Wt	 |  } t |  j j d  j d  d	  } | | k rd } d t
 |  d } | j  d	 @d k rV|  j j d d d  n |  j j d  s~|  j j d d  nY |  j j |  j j d  d |  j j d   r|  j j d d  n |  j j d d  |  j j |  } |  j j d  } |  j j | d |  r | | } } |  j j d d d  |  j j d | |  |  j j d |  |  j j d  d S)N   r   ZHomeZiomarkz<=zinsert lineendzinsert linestart.rZ    	insertzinsert linestart+cselz1.0rf   z	sel.firstZ	my_anchor<zsel.last>rW   )r   r   )stateZkeysymrS   r   comparerR   splitr   rangelenstr
tag_removemark_settag_addsee)r    rX   ZinsertptlineZlineatdestfirstlastr   r   r   r   S  s@    "(%zEditorWindow.home_callbackc             C   s  |  j  |  j  |  _ t |  j d d d d d d } t j d k r^ |  j j d d d	 t |  j j d
 d d	 t |  j j d d d	 t |  j j d	 t	 d t
  | j d	 t	 d t
  |  j j d |  j  |  j j d d d  |  j j |  j  d  S)NrV   rZ   ZborderwidthZ
backgroundZgrey75rK   Z	_padding1z    r\   columnzCol: ?r   zLn: ?r]   z<<set-line-and-column>>z<KeyRelease>z<ButtonRelease>)rG   ru   
status_barrz   r   rj   	set_labelr   r   ZBOTTOMXrS   r3   set_line_and_column	event_addZ
after_idle)r    sepr   r   r   r   ~  s    !
zEditorWindow.set_status_barc             C   sS   |  j  j t  j d  \ } } |  j j d d |  |  j j d d |  d  S)Nr   r   zCol: %sr   zLn: %s)rS   r   ZINSERTr   r   r   )r    rX   r   r   r   r   r   r     s    !z EditorWindow.set_line_and_columnfile_Fileedit_EditformatF_ormatrun_Runoptions_Optionsre   _Windowr   _Helpc             C   s2  |  j  } i  |  _ } xe |  j D]Z \ } } t |  \ } } t | d | d d | | <} | j d | d | d |  q  Wt j   r t | d d d d | d <} | j d d	 d |  |  j   t |  j  d d |  _	 |  j d
 j
 d d d d d d |  j	 |  j d j t  |  _ |  j   d  S)NrM   tearoffr   labelrL   	underlineZappleZapplicationZIDLEr   rI   zRecent Filesr   )rt   r   
menu_specsprepstrrs   Zadd_cascader   Z
isCarbonTk
fill_menusrecent_files_menuZinsert_cascader   ENDbase_helpmenu_lengthreset_help_menu_entries)r    Zmbarr   rM   r  r  rL   r   r   r   r}     s"    	  

zEditorWindow.createmenubarc             C   se   |  j  d } | j d  } | d  k r. d } | |  j k rT | j |  j d |  t j |  d  S)Nre   rf   rZ   rg   )r   r   r   deleter   Zadd_windows_to_menu)r    rL   rf   r   r   r   r     s    zEditorWindow.postwindowsmenuc       	      C   s   |  j  j d d | j | j f  |  j s6 |  j   |  j } | |  _ t j d  d  d k } | rz |  j  j	 d d  xp |  j
 D]e } y | \ } } } Wn t k
 r w Yn X| d  k r q t |  |    } | j | d | q W| j | j | j  | r|  j  j	 d d  d  S)	Nr   z@%d,%drI   rJ   ZcursorZarrowr   Zibeam)rS   r   xyrmenu
make_rmenurX   r   rj   configrmenu_specs
ValueErrorgetattrZentryconfigureZtk_popupZx_rootZy_root)	r    rX   r  Ziswinitemr  	eventnameZverify_stater   r   r   r   r     s(    #	
		zEditorWindow.right_menu_eventClose<<close-window>>c             C   s   t  |  j d d } xj |  j D]_ } | d | d } } | d  k	 rt |  j | d d  } | j d | d |  q | j   q W| |  _ d  S)Nr  r   rZ   c             S   s   |  j  |  d  S)N)event_generate)rS   r  r   r   r   r[     s    z(EditorWindow.make_rmenu.<locals>.commandr  r[   )rs   rS   r  add_commandr   r  )r    r  r  r  r  r[   r   r   r   r    s    zEditorWindow.make_rmenuc             C   s
   |  j    S)N)rmenu_check_copy)r    r   r   r   rmenu_check_cut  s    zEditorWindow.rmenu_check_cutc             C   sA   y |  j  j d  } Wn t k
 r. d SYn X| r9 d Sd Sd  S)Nz	sel.firstdisablednormal)rS   r   TclError)r    Zindxr   r   r   r    s
    	zEditorWindow.rmenu_check_copyc             C   sA   y  |  j  j j d |  j  d  Wn t k
 r8 d SYn Xd Sd  S)Nztk::GetSelectionZ	CLIPBOARDr!  r"  )rS   tkcallr#  )r    r   r   r   rmenu_check_paste  s
     	zEditorWindow.rmenu_check_pastec             C   s   t  j |  j d  d S)zHandle Help 'About IDLE' event.z
About IDLEN)r
   ZAboutDialogru   )r    rX   r   r   r   r     s    zEditorWindow.about_dialogc             C   s   t  j |  j d  d S)z&Handle Options 'Configure IDLE' event.ZSettingsN)r   ZConfigDialogru   )r    rX   r   r   r   r     s    zEditorWindow.config_dialogc             C   s/   |  j  r |  j  } n	 |  j } t j |  d S)zHandle Help 'IDLE Help' event.N)rp   ru   r   Zshow_idlehelp)r    rX   r   r   r   r   r     s    		zEditorWindow.help_dialogc             C   s   t  j d  d  d k r} y t j |  j  Wq t k
 ry } z* t j d d d t |  d |  j	  WYd  d  } ~ Xq Xn t
 j |  j  d S)NrI   rJ   titlezDocument Start Failuremessager   rW   )r   rj   r-   	startfilerh   OSErrorr   r   r   rS   
webbrowseropen)r    rX   whyr   r   r   r     s    ,zEditorWindow.python_docsc             C   s   |  j  j d  d S)Nz<<Cut>>rW   )rS   r  )r    rX   r   r   r   r     s    zEditorWindow.cutc             C   s*   |  j  j d  s d  S|  j  j d  d S)Nr   z<<Copy>>rW   )rS   Z
tag_rangesr  )r    rX   r   r   r   r     s    zEditorWindow.copyc             C   s$   |  j  j d  |  j  j d  d S)Nz	<<Paste>>r   rW   )rS   r  r   )r    rX   r   r   r   r   %  s    zEditorWindow.pastec             C   s=   |  j  j d d d  |  j  j d d  |  j  j d  d S)Nr   z1.0zend-1cr   rW   )rS   r   r   r   )r    rX   r   r   r   r   *  s    zEditorWindow.select_allc             C   s*   |  j  j d d d  |  j  j d  d  S)Nr   z1.0rf   r   )rS   r   r   )r    rX   r   r   r   r   0  s    zEditorWindow.remove_selectionc                s=   |  j  j  |  j  j  d       f d 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.

        sel.first+1csel.last-1cc                sK   |  j  d @d k rG y  d   d     Wn t k
 rF Yn Xd  S)NrT   r   z	sel.firstr   )r   r#  )rX   )
edge_indexedges_tableself_text_indexself_text_mark_setr   r   move_at_edge?  s    
z<EditorWindow.move_at_edge_if_selection.<locals>.move_at_edge)r.  r/  )rS   r   r   )r    r0  r4  r   )r0  r1  r2  r3  r   r   4  s
    z&EditorWindow.move_at_edge_if_selectionc             C   s   |  j  j d  d S)Nz<Meta-Delete>rW   )rS   r  )r    rX   r   r   r   r   H  s    zEditorWindow.del_word_leftc             C   s   |  j  j d  d S)Nz<Meta-d>rW   )rS   r  )r    rX   r   r   r   r   L  s    zEditorWindow.del_word_rightc             C   s   t  j |  j  d S)NrW   )r   findrS   )r    rX   r   r   r   r   P  s    zEditorWindow.find_eventc             C   s   t  j |  j  d S)NrW   )r   Z
find_againrS   )r    rX   r   r   r   r   T  s    zEditorWindow.find_again_eventc             C   s   t  j |  j  d S)NrW   )r   Zfind_selectionrS   )r    rX   r   r   r   r   X  s    z!EditorWindow.find_selection_eventc             C   s    t  j |  j |  j |  j  d S)NrW   )r   ZgreprS   r   ro   )r    rX   r   r   r   r   \  s    z EditorWindow.find_in_files_eventc             C   s   t  j |  j  d S)NrW   )r   replacerS   )r    rX   r   r   r   r   `  s    zEditorWindow.replace_eventc             C   sp   |  j  } t j d d d | } | d  k r1 d S| d k rK | j   d S| j d d |  | j d  d  S)NZGotozGo to line number:r   rW   r   r   z%d.0)rS   r   r   bellr   r   )r    rX   rS   linenor   r   r   r   d  s    		
zEditorWindow.goto_line_eventc          !   C   s  y |  j  j d d  } Wn t k
 r3 d } Yn X| j   } t j d d d |  j  d | } | rs | j   } | s} d  Sy t j j |  } WnN t	 t
 f k
 r } z( t j d t |  d |  j  d  SWYd  d  } ~ Xn X| d  k rt j d d	 d |  j  d  St | j t j j  sBt j d d
 d |  j  d  Sy | j j |  } Wn/ t k
 rt j d d d |  j  d  SYn X|  j r|  j j |  n |  j j |  | S)Nz	sel.firstzsel.last ZModulezAEnter the name of a Python module
to search on sys.path and open:r   initialvaluezImport errorzmodule not foundznot a source-based modulez$loader does not support get_filename)rS   r   r#  stripr   Z	askstring	importlibutil	find_specr  ImportErrorr   r   r   r   loaderabcSourceLoaderget_filenamerr   ro   r,  r   r   )r    rX   rM   specmsgZ	file_pathr   r   r   r   p  sH    	

	
		zEditorWindow.open_modulec             C   s   |  j  j } |  j j d k o! | s@ |  j   } | d  k r@ d  St j j |  \ } } t j j |  \ } } d d l	 m
 } | j
 |  j | | g  d  S)NZPyShellEditorWindowr   )ClassBrowser)r   r   	__class__r:   r   r-   r.   r   splitextidlelibrF  ro   )r    rX   r   headtailbaseextrF  r   r   r   r     s    zEditorWindow.open_class_browserc             C   s$   d d l  m } | j |  j  d  S)Nr   )PathBrowser)rI  rN  ro   )r    rX   rN  r   r   r   r     s    zEditorWindow.open_path_browserc             C   s5   d d  l  } t j d d g } | j | d d d  S)Nr   z-cz,from turtledemo.__main__ import main; main()shellF)
subprocessr   
executablePopen)r    rX   rP  cmdr   r   r   r     s
    	zEditorWindow.open_turtle_democ             C   si   | d  k	 re | d k re |  j  j d d |  |  j  j d d d  |  j  j d d d  |  j   d  S)Nr   r   z%d.0r   z1.0rf   z
insert +1l)rS   r   r   r   center)r    r8  r   r   r   gotoline  s
    zEditorWindow.gotolinec             C   s   | s t  j j |  r d St  j j t  j j |   \ } } t  j j |  d k r] d S|  j j d d  } | j d  o d | k S)	NT.py.pywz1.0z1.0 lineendz#!python)rV  rW  )	r-   r.   rl   rH  r   normcaserS   r   
startswith)r    r   rL  rM  r   r   r   r   r     s    $zEditorWindow.ispythonsourcec             C   s&   |  j  r" |  j  j |   d  |  _  d  S)N)ro   Zunregister_maybe_terminate)r    r   r   r   
close_hook  s    	zEditorWindow.close_hookc             C   s   | |  _  d  S)N)r[  )r    r[  r   r   r   set_close_hook  s    zEditorWindow.set_close_hookc             C   sA   |  j  r |  j  j |   |  j   |  j j |   |  j   d  S)N)ro   Zfilename_changed_editr   ru   Zupdate_windowlist_registryr   )r    r   r   r   r     s
    	
z!EditorWindow.filename_change_hookc             C   sw   |  j  r d  S|  j |  j j  r1 |  j   |  _  |  j  rs |  j j |  j  |  j j |  j   |  j j |  j  d  S)N)	r   r   r   r   r?   r   removefilterr   r   )r    r   r   r   _addcolorizer  s    		zEditorWindow._addcolorizerc             C   s:   |  j  s d  S|  j  j   |  j j |  j   d  |  _  d  S)N)r   Zremovecolorsr   r]  )r    r   r   r   _rmcolorizer  s
    	zEditorWindow._rmcolorizerc             C   s(   |  j    |  j   t j |  j  d S)zUpdate the color themeN)r_  r^  r=   r@   rS   )r    r   r   r   r     s    

zEditorWindow.ResetColorizer_c             C   s   | j  d |  | j |  } | rK | |  j k rK | j  d | d |  d | j |  k rs | j d |  n | j d | d  | j |  d  S)NERRORz
 wordstart
r   z+1c)r   r   
IDENTCHARSr   r   )r    rS   poscharr   r   r   colorize_syntax_error  s    z"EditorWindow.colorize_syntax_errorc             C   s#   t  j |  j d d  |  j d <d S)z.Update the text widgets' font if it is changedrO   r=   r^   N)r	   r   rp   rS   )r    r   r   r   	ResetFont  s    zEditorWindow.ResetFontc             C   s   t  j   |  j _ } x- | j   D] \ } } |  j j | |  q# WxY |  j   D]K } t  j |  } | rS x- | j   D] \ } } |  j j | |  q{ WqS Wd S)z/Remove the keybindings before they are changed.N)	r	   GetCurrentKeySetrE   default_keydefsitemsrS   Zevent_deleteget_standard_extension_namesGetExtensionBindings)r    keydefsrX   keylistextensionNamexkeydefsr   r   r   RemoveKeybindings  s    zEditorWindow.RemoveKeybindingsc             C   s  t  j   |  j _ } |  j   x6 |  j   D]( } t  j |  } | r- |  j |  q- Wi  } xa |  j j D]S } i  | | d <x< | d D]0 } | r | d | | d t | d  d <q Wql Wx |  j	 D] } |  j	 | } | j
 t  } | d k r q | d 7} x t d |  D] }	 | j |	  d k r| j |	 d  }
 |
 r| j |	 d  } d } | | k r| | | k r| | | } | rt | |  }
 | j |	 d |
 qWq Wd S)z-Update the keybindings after they are changedr   rZ   Nr[   acceleratorr  r9  )r	   rh  rE   ri  r~   rk  rl  menudefsr
  r   r   r  r   rQ   Z	entrycgetget_acceleratorZentryconfig)r    rm  ro  rp  ZmenuEventDictrL   r  ZmenubarItemrf   r   ZaccelZitemNamerX   r   r   r   ApplyKeybindings
  s<    
,
zEditorWindow.ApplyKeybindingsc             C   s+   |  j  s' t j d d d d d |  _ d S)zCUpdate the indentwidth if changed and not using tabs in this windowrO   r`   z
num-spacesrQ   rR   N)r   r	   r|   r   )r    r   r   r   r   .  s    	z#EditorWindow.set_notabs_indentwidthc             C   s   t  j   } |  j d } | j t  } | |  j k rN | j |  j d |  | r | j   x; | D]3 } |  j | d  } | j	 d | d d |  qe W| |  j d <d S)z3Update the additional help entries on the Help menur   rZ   r  r   r[   N)
r	   ZGetAllExtraHelpSourcesListr   r   r  r  r  r   "_EditorWindow__extra_help_callbackr  )r    Z	help_listZhelpmenuZhelpmenu_lengthentryrS  r   r   r   r  5  s    
z$EditorWindow.reset_help_menu_entriesc                s   |   f d d  } | S)zCCreate a callback with the helpfile value frozen at definition timec                s   |  j  d	  s! t j j |   }  t j d  d  d k r y t j |   Wq t k
 r } z* t j	 d d d t
 |  d   j  WYd  d  } ~ Xq Xn t j |   d  S)
NwwwhttprI   rJ   r'  zDocument Start Failurer(  r   )rx  ry  )rZ  r-   r.   rn   r   rj   r)  r*  r   r   r   rS   r+  r,  )helpfiler-  )r    r   r   display_extra_helpH  s    ,z>EditorWindow.__extra_help_callback.<locals>.display_extra_helpr   )r    rz  r{  r   )r    r   Z__extra_help_callbackF  s    z"EditorWindow.__extra_help_callbackc                sm  g  } t  j j |  j  rO t |  j d d d d d  } | j   } Wd QRX| r t  j j |  d } | | k r | j |  | j d |  g    xD | D]< } d	 | k s t  j j | d d   r   j	 |  q W  f d d   | D } d } | d t
 |   } y9 t |  j d d d d d  } | j |  Wd QRXWnx t k
 r} zX t |  j d d  sd |  j _ t j d d d d |  j t |   d |  j  WYd d } ~ Xn Xx |  j j D] } | j }	 |	 j d t  xl t |  D]^ \ }
 } | j   } |  j |  } | j |  } |	 j d | |
 d | d | d d  qWqWd S)z/Load and update the recent files list and menusrrD   utf_8errorsr6  Nrb  r    rZ   c                s"   g  |  ] } |   k r |  q Sr   r   ).0r.   )	bad_pathsr   r   
<listcomp>f  s   	 z9EditorWindow.update_recent_files_list.<locals>.<listcomp>Z1234567890ABCDEFGHIJKr*   recentfilelist_error_displayedFTr'  zIDLE Warningr(  z|Cannot update File menu Recent Files list. Your operating system says:
%s
Select OK and IDLE will continue without updating.r   r  r   r[   r  rg   )r-   r.   r   ry   r,  	readlinesr0   remover   appendr   
writelinesr*  r  rp   r  r   showwarningr   r   rS   ru   rx   r  r  r  	enumeraterstrip#_EditorWindow__recent_file_callbackr  )r    new_fileZrf_listZrf_list_filer.   ZulcharsZrf_fileerrinstancerL   i	file_nameZ
ufile_namecallbackr   )r  r   r   U  sL    )	z%EditorWindow.update_recent_files_listc                s   |   f d d  } | S)Nc                s     j  j d |   d  S)NZeditFile)r   r,  )Z
fn_closure)r    r   r   open_recent_file  s    z=EditorWindow.__recent_file_callback.<locals>.open_recent_filer   )r    r  r  r   )r    r   Z__recent_file_callback  s    z#EditorWindow.__recent_file_callbackc             C   s   |  j    } |  j   } | r9 | r9 | d | t } n$ | rH | } n | rW | } n d } | pl | pl | } |  j   s d | } d | } |  j j |  |  j j |  d  S)Nz - Untitledz*%s*z*%s)short_title
long_title_py_version	get_savedru   Zwm_titleZwm_iconname)r    Zshortlongr'  Ziconr   r   r   r     s    		

zEditorWindow.saved_change_hookc             C   s   |  j  j   S)N)r   r  )r    r   r   r   r    s    zEditorWindow.get_savedc             C   s   |  j  j |  d  S)N)r   	set_saved)r    flagr   r   r   r    s    zEditorWindow.set_savedc             C   s   |  j  j   d  S)N)r   
reset_undo)r    r   r   r   r    s    zEditorWindow.reset_undoc             C   s:   |  j  j } | r' t j j |  } n d } |  j |  S)Nr  )r   r   r-   r.   r   r   )r    r   r   r   r   r    s
    zEditorWindow.short_titlec             C   s   |  j  |  j j p d  S)Nr9  )r   r   r   )r    r   r   r   r    s    zEditorWindow.long_titlec             C   s   |  j    d  S)N)rT  )r    rX   r   r   r   r     s    z EditorWindow.center_insert_eventr   c             C   sb   |  j  } |  j   \ } } |  j |  } | | } t d | | d  } | j t |   d  S)NrZ   r#   )rS   getwindowlines	getlinenomaxr   float)r    markrS   ru   botr8  rV   Znewtopr   r   r   rT    s    	
zEditorWindow.centerc             C   sm   |  j  } |  j d  } |  j d  } | | k rc | j   d k rc t | d  } | | d } | | f S)Nz@0,0z@0,65535rZ   rV   )rS   r  Zwinfo_heightrR   )r    rS   ru   r  rV   r   r   r   r    s    	zEditorWindow.getwindowlinesc             C   s"   |  j  } t t | j |    S)N)rS   rR   r  r   )r    r  rS   r   r   r   r    s    	zEditorWindow.getlinenoc             C   s:   |  j  j   } t j d |  } t t t | j     S)zReturn (width, height, x, y)z(\d+)x(\d+)\+(-?\d+)\+(-?\d+))ru   Zwm_geometryr   matchlistmaprR   groups)r    r9   mr   r   r   get_geometry  s    zEditorWindow.get_geometryc             C   s   |  j    d  S)N)r   )r    rX   r   r   r   r     s    zEditorWindow.close_eventc             C   sb   |  j  r^ |  j   sQ |  j j   d k r7 |  j j   |  j j   |  j j   |  j  j   Sd  S)Nr"  )r   r  ru   r   r7   lowerr8   	maybesave)r    r   r   r   r    s    	zEditorWindow.maybesavec             C   s,   |  j    } t |  d k r( |  j   | S)Ncancel)r  r   _close)r    Zreplyr   r   r   r     s    
zEditorWindow.closec             C   s   |  j  j r" |  j d |  j  j  t j |  j  |  j   |  j  j   d  |  _  d  |  _ |  j	 r} |  j	 j d  d  |  _	 d  |  _
 d  |  _ |  j j   d  |  _ |  j j   |  j r |  j   d  S)Nr  F)r   r   r   r   Zunregister_callbackr   unload_extensionsr   r   r   rS   rw   r   ru   r4   r[  )r    r   r   r   r    s"    
								zEditorWindow._closec             C   s   i  |  _  |  j   d  S)N)
extensionsload_standard_extensions)r    r   r   r   r     s    	zEditorWindow.load_extensionsc             C   sF   x6 t  |  j j    D] } t | d  r | j   q Wi  |  _ d  S)Nr   )r  r  valueshasattrr   )r    insr   r   r   r    s    zEditorWindow.unload_extensionsc             C   sT   xM |  j    D]? } y |  j |  Wq t d t |   t j   Yq Xq Wd  S)NzFailed to load extension)rk  load_extensionprintrepr	traceback	print_exc)r    rM   r   r   r   r    s    z%EditorWindow.load_standard_extensionsc             C   s   t  j d d  S)NZeditor_onlyT)r	   ZGetExtensions)r    r   r   r   rk    s    z)EditorWindow.get_standard_extension_namesc             C   s  yK y t  j d | d t } Wn' t t f k
 rI t  j |  } Yn XWn" t k
 ro t d |    Yn Xt | |  } t j |  } t	 | d  r |  j
 | j |  | |   } | |  j | <| r|  j |  x | D] } | j d d  } x* | d  d  d k r'| d d   } q Wx* | d d   d	 k rT| d  d  } q+W| d
 } t	 | |  r |  j j | t | |   q Wd  S)Nr   packagez
Failed to import extension: rs  -r`  rZ   r   r   Z_eventrg   rg   )r<  import_module__package__r?  	TypeErrorr  r  r	   rl  r  r  rs  r  r~   r6  rS   r3   )r    rM   modclsrm  r  ZveventZ
methodnamer   r   r   r  
  s2    
zEditorWindow.load_extensionc             C   sa   | d  k r |  j  j } |  j } | | _ x0 | j   D]" \ } } | r7 | j | |  q7 Wd  S)N)rE   ri  rS   rm  rj  r   )r    rm  rS   rX   rn  r   r   r   r~   %  s    		zEditorWindow.apply_bindingsc             C   si  | d k r |  j  j } | d k r0 |  j  j } |  j } |  j } x | D]\ } } | j |  } | sm qI x | D] } | s | j   qt | \ }	 }
 |	 d d  d k } | r |	 d d  }	 t |	  \ } }	 t | |
  } | |
 d d  } | r;|  j	 |
 t
  } | j d |	 d | d | d	 | d
 |  qt | j d |	 d | d | d	 |  qt WqI Wd S)zAdd appropriate entries to the menus and submenus

        Menus that are absent or None in self.menudict are ignored.
        NrZ   !c             S   s   |  j  |  d  S)N)r  )rS   r  r   r   r   r[   G  s    z(EditorWindow.fill_menus.<locals>.commandr  r  r[   rr  variable)rE   rs  ri  r   rS   r   r   r
  rt  get_var_objZ
BooleanVarZadd_checkbuttonr  )r    rs  rm  r   rS   ZmnameZ	entrylistrL   rw  r  r  Zcheckbuttonr  rr  r[   varr   r   r   r  .  s8    		
zEditorWindow.fill_menusc             C   s5   |  j  |  } | r% | j   } | St |   d  S)N)r  r   	NameError)r    rM   r  valuer   r   r   getvarS  s
    zEditorWindow.getvarc             C   s8   |  j  | |  } | r( | j |  n t |   d  S)N)r  r   r  )r    rM   r  vartyper  r   r   r   setvar[  s    zEditorWindow.setvarc             C   s=   |  j  j |  } | r9 | r9 | |  j  |  j  | <} | S)N)rw   r   rS   )r    rM   r  r  r   r   r   r  b  s    zEditorWindow.get_var_objc             C   s<   |  j  r4 |  j j d |  p3 d |  j j |  k Sd Sd  S)NZTODOSTRINGrZ   )r   rS   tag_prevrangeZ	tag_names)r    Z
text_indexr   r   r   is_char_in_stringr  s    	zEditorWindow.is_char_in_stringc             C   sO   y2 |  j  j d  } |  j  j d  } | | f SWn t k
 rJ d SYn Xd  S)Nz	sel.firstzsel.last)NN)rS   r   r#  )r    r   r   r   r   r   get_selection_indices~  s    z"EditorWindow.get_selection_indicesc             C   s   |  j  d p t } t |  S)Ntabs)rS   TK_TABWIDTH_DEFAULTrR   )r    currentr   r   r   get_tk_tabwidth  s    zEditorWindow.get_tk_tabwidthc             C   s[   |  j  } |  j   | k rW | j j d d | d d | j d |  } | j d |  d  S)Nr^   Zmeasurez
-displayofnr  )rS   r  r$  r%  ZmasterZ	configure)r    ZnewtabwidthrS   Zpixelsr   r   r   set_tk_tabwidth  s    		zEditorWindow.set_tk_tabwidthTc             C   sl   | rX | rX |  j    } d | k o/ d k n r= | |  _ |  j |  j k rX d |  _ |  j |  j  d  S)Nr#   r   F)guess_indentr   r   r   r  )r    r   Zguessr  r   r   r   r     s    		z#EditorWindow.set_indentation_paramsc             C   s  |  j  } |  j   \ } } | rK | rK | j | |  | j d |  d S| j d d  } | d k r | j d d d  r | j d  n
 | j   d S| d d	 k r | j d  d S|  j } t | j	 |   } | d
 k s t
  | d |  j |  j } |  j r't j j d  d }	 n d }	 d
 }
 x] | |	 k rCP| d  d  } |
 d }
 t | j	 |   } | | k s| d d	 k r6Pq6W| j   | j d |
 d  | | k  r| j d d | |  | j   d S)Nr   rW   zinsert linestartr9  r   z1.0z	insert-1crZ   z 	r   rb  z
insert-%dcr   rg   rg   rg   rg   )rS   r  r  r   r   r   r7  r   r   
expandtabsAssertionErrorr   r   r   rq   r   r   r   r   )r    rX   rS   r   r   charsr   ZhaveZwantlast_line_of_promptZncharsdeletedr   r   r   r     sJ    	
		


z"EditorWindow.smart_backspace_eventc       
   
   C   sE  |  j  } |  j   \ } } | j   z| ry | ry t |  t |  k rY |  j |  S| j | |  | j d |  | j d d  } t | |  j	  \ } } | t
 |  k r |  j | |  j  nU |  j r d } n3 t
 | j |  j	   } |  j }	 d |	 | |	 } | j d |  | j d  d SWd  | j   Xd  S)Nr   zinsert linestartr   r   rW   )rS   r  r   
index2liner   r  r   r   
classifywsr   r   reindent_tor   r   r  r   r   r   )
r    rX   rS   r   r   prefixraw	effectiveZpadr  r   r   r   r     s,    	
			zEditorWindow.smart_indent_eventc             C   s  |  j  } |  j   \ } } | j   z| rT | rT | j | |  | j d |  | j d d  } d t |  } } x* | | k  r | | d k r | d } q| W| | k r | j d d  d S| d  |  } d } t j	 j
 d  d }	 x@ | r4| d d k r4| |	 k r4| d  d  } | d } q W| rO| j d | d  x& | j d  d k rw| j d  qRW| j d d  t | j d   }
 t j |  j |  j  } |  j sax |  j D] } t |
 | d  } t |  d	 } | j | d  } | j |  | j |  j |  j |   } | d  k	 sF| d k rPqW| j | pZd  nW | j d
 d  } | r| d } n d } | j | d  } | j |  | j d  | j   } | t j k r| t j k rn | t j k r| j d |  n | t j k r,|  j | j     nc | t j! k rv| j"   d k r`| j d |  q|  j | j#    n d st$ d | f   d S| j%   } | j d |  | j&   r|  j' |  n | r| j(   r|  j) |  d SWd  | j* d  | j+   Xd  S)Nr   zinsert linestartr   z 	rZ   rb  rW   zinsert - %d charsz.0Zconsolez1.0zbogus continuation type %rrg   rg   rg   ),rS   r  r   r  r   r   r   r   r   rq   r   r  r   r   ZParserr   r   r   r   r  r  Zset_strZfind_good_parse_start_build_char_in_string_funcZset_lor  Zget_continuation_typeZC_NONEZC_STRING_FIRST_LINEZC_STRING_NEXT_LINESZ	C_BRACKETr  Zcompute_bracket_indentZC_BACKSLASHZget_num_lines_in_stmtZcompute_backslash_indentr  Zget_base_indent_stringZis_block_openerr   Zis_block_closerr   r   r   )r    rX   rS   r   r   r   r  r  indentr  lnor  contextZstartatZstartatindexZrawtextZbodr|  r   r   r   r   r     s    	
%	z%EditorWindow.newline_and_indent_eventc             C   s   | |  j  d d  } | S)Nc             S   s   | | d |   S)Nz+%dcr   )offsetZ_startindexZ_icisr   r   r   innerb  s    z6EditorWindow._build_char_in_string_func.<locals>.inner)r  )r    Z
startindexr  r   r   r   r  a  s    z'EditorWindow._build_char_in_string_funcc       
      C   s   |  j    \ } } } } xp t t |   D]\ } | | } | r+ t | |  j  \ } }	 |	 |  j }	 |  j |	  | | d   | | <q+ W|  j | | | |  d S)NrW   )
get_regionr   r   r  r   r   _make_blanks
set_region)
r    rX   rJ  rK  r  linesrd  r   r  r  r   r   r   r   g  s    
%z EditorWindow.indent_region_eventc       
      C   s   |  j    \ } } } } xy t t |   D]e } | | } | r+ t | |  j  \ } }	 t |	 |  j d  }	 |  j |	  | | d   | | <q+ W|  j | | | |  d S)Nr   rW   )	r  r   r   r  r   r  r   r  r  )
r    rX   rJ  rK  r  r  rd  r   r  r  r   r   r   r   r  s    
%z EditorWindow.dedent_region_eventc             C   sk   |  j    \ } } } } x6 t t |  d  D] } | | } d | | | <q/ W|  j | | | |  d  S)NrZ   z##)r  r   r   r  )r    rX   rJ  rK  r  r  rd  r   r   r   r   r   }  s
    
z!EditorWindow.comment_region_eventc             C   s   |  j    \ } } } } x t t |   D]r } | | } | sD q+ | d  d  d k rm | d d   } n& | d  d  d k r | d d   } | | | <q+ W|  j | | | |  d  S)Nr#   z##rZ   #)r  r   r   r  )r    rX   rJ  rK  r  r  rd  r   r   r   r   r     s    
z#EditorWindow.uncomment_region_eventc             C   s   |  j    \ } } } } |  j   } | d  k r4 d  Sxx t t |   D]d } | | } | rG t | |  \ }	 }
 t |
 |  \ } } d | d | | |	 d   | | <qG W|  j | | | |  d  S)Nr   r   )r  _asktabwidthr   r   r  divmodr  )r    rX   rJ  rK  r  r  r   rd  r   r  r  ntabsnspacesr   r   r   r     s     
(z EditorWindow.tabify_region_eventc             C   s   |  j    \ } } } } |  j   } | d  k r4 d  Sx1 t t |   D] } | | j |  | | <qG W|  j | | | |  d  S)N)r  r  r   r   r  r  )r    rX   rJ  rK  r  r  r   rd  r   r   r   r     s     z"EditorWindow.untabify_region_eventc             C   sW   |  j  d d d |  j d d |  j d d	 d
 |  j rS |  j |  _ d |  _ d S)NzToggle tabsz
Turn tabs onoffz?
Indent width will be
remains atz 8.z!
 Note: a tab is always 8 columnsr   r   rW   )r  r  )r  r  )r   r   rS   r   )r    rX   r   r   r   r     s    !	zEditorWindow.toggle_tabs_eventc             C   s\   |  j  d d d |  j d |  j d d d d } | rX | |  j k rX |  j rX | |  _ d	 S)
NzIndent widthz6New indent width (2-16)
(Always use 8 when using tabs)r   r:  minvaluer#   maxvalue   rW   )r   rS   r   r   )r    rX   r   r   r   r   r     s    				z%EditorWindow.change_indentwidth_eventc             C   s   |  j  } |  j   \ } } | rP | rP | j | d  } | j | d  } n | j d  } | j d  } | j | |  } | j d  } | | | | f S)Nz
 linestartz-1c lineend +1czinsert linestartzinsert lineend +1crb  )rS   r  r   r   r   )r    rS   r   r   rJ  rK  r  r  r   r   r   r    s    	zEditorWindow.get_regionc             C   s   |  j  } d j |  } | | k r2 | j   d  S| j d d d  | j d |  | j   | j | |  | j | |  | j   | j	 d | d  d  S)Nrb  r   z1.0rf   r   )
rS   r/   r7  r   r   r   r  r   r   r   )r    rJ  rK  r  r  rS   newcharsr   r   r   r    s    	


zEditorWindow.set_regionc             C   s=   |  j  r1 t | |  j  \ } } d | d | Sd | Sd  S)Nr   r   )r   r  r   )r    r  r  r  r   r   r   r    s    	zEditorWindow._make_blanksc             C   se   |  j  } | j   | j d d d  r8 | j d d  | rW | j d |  j |   | j   d  S)Nzinsert linestartz!=r   )rS   r   r   r  r   r  r   )r    r   rS   r   r   r   r    s    	
zEditorWindow.reindent_toc             C   s.   |  j  d d d |  j d |  j d d d d S)	Nz	Tab widthzColumns per tab? (2-16)r   r:  r  r#   r  r  )r   rS   r   )r    r   r   r   r    s    		zEditorWindow._asktabwidthc             C   sr   t  |  j |  j  j   \ } } | r` | r` t | |  j  \ } } t | |  j  \ } } n
 d } } | | S)Nr   )IndentSearcherrS   r   r   r  )r    ZopenerZindentedr  ZindentsmallZindentlarger   r   r   r    s    !
zEditorWindow.guess_indent)zfiler   )zeditr   )zformatr   )zrunr  )zoptionsr  )zwindowsr  )zhelpr  )r  r  N)r:   r;   r<   Zidlelib.Percolatorr>   Zidlelib.ColorDelegatorr?   r@   Zidlelib.UndoDelegatorrA   Zidlelib.IOBindingrB   rC   rD   rI  rE   tkinterrF   Zidlelib.MultiStatusBarrG   rh   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   rU  r   r[  r\  r   r^  r_  r   stringascii_lettersdigitsrc  rf  rg  rq  ru  r   r  rv  r   r  r   r  r  r  r  r  r   rT  r  r  r  r   r  r   r  r   r  r  rk  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=   [   s   +	
		+	$.	
		%	0#k
	r=   c             C   s   t  t |    S)N)rR   r  )r   r   r   r   r    s    r  c             C   st   d } } x] |  D]U } | d k r: | d } | d } q | d k re | d } | | d | } q Pq W| | f S)Nr   r   rZ   r   r   )sr   r  r  Zchr   r   r   r    s    


r  c               @   sO   e  Z d  Z d d   Z d d   Z e j e j d d d  Z d d   Z	 d S)r  c             C   s6   | |  _  | |  _ d |  _ |  _ d  |  _ |  _ d  S)Nr   )rS   r   r  finishedblkopenlineindentedline)r    rS   r   r   r   r   r!   /  s    		zIndentSearcher.__init__c             C   sd   |  j  r d S|  j d } |  _ t |  d } |  j j | d d  rM d S|  j j | | d  S)Nr9  rZ   z.0z>=rf   z lineend+1c)r  r  r  rS   r   r   )r    r  r  r   r   r   readline5  s    	zIndentSearcher.readlineclassdefforiftrywhilec	       	      C   s[   |  j  r nK | | k r0 | | k r0 | |  _ n' | | k rW |  j rW | |  _ d |  _  d  S)NrZ   )r  r  r  )	r    rQ   tokenstartrf   r   INDENTNAMEZOPENERSr   r   r   
tokeneater>  s    		zIndentSearcher.tokeneaterc             C   s   t  j } |  j t  _ zV y4 t  j |  j  } x | D] } |  j |   q4 WWn t  j t f k
 ri Yn XWd  | t  _ X|  j |  j	 f S)N)
	_tokenizetabsizer   generate_tokensr  r  
TokenErrorSyntaxErrorr  r  )r    Zsave_tabsizetokensr  r   r   r   r   J  s    		
zIndentSearcher.runN)zclasszdefzforzifztryzwhile)
r:   r;   r<   r!   r  r  r  r  r  r   r   r   r   r   r  (  s   
	r  c             C   sG   |  j  d  } | d k r= |  d  |  |  | d d   }  | |  f S)Nr`  r   rZ   )r5  )r  r  r   r   r   r
  \  s    "r
  Zbracketleft[Zbracketright]Zslash/c             C   s	  |  j  |  } | s. t j   r2 | d k r2 d S| d } t j d d d   |  } t j d	 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)N<<open-module>><<goto-line>><<change-indentwidth>>r9  r   z-[a-z]\bc             S   s   |  j    j   S)N)groupupper)r  r   r   r   rY   u  s    z!get_accelerator.<locals>.<lambda>z\b\w+\bc             S   s   t  j |  j   |  j    S)N)keynamesr   r  )r  r   r   r   rY   v  s    zKey-ZCancelz
Ctrl-BreakzControl-zCtrl-r  r,   z><r   r   r   >   r  r  r  )r   r   Z	isCocoaTkr   r   )rm  r  rn  r  r   r   r   rt  k  s"      	
rt  c             C   sF   |  j  } | j d d d  | j d d d  | j d d d  d  S)	NZtcl_wordBreakAfterza br   r   Ztcl_wordcharsz[a-zA-Z0-9_]Ztcl_nonwordcharsz[^a-zA-Z0-9_])r$  r%  )rp   r$  r   r   r   fixwordbreaks  s    	r  c             C   sx   |  } t  |  t j d d   r3 t j d } n d  } t j | d   t d | d |  } | j j d | j  d  S)NrZ   rp   r   z<<close-all-windows>>)	r  r   argvr   ZsetupAppr=   rS   r3   r   )r   rp   r   r   r   r   r   _editor_window  s    
r  __main__)r   )5r<  Zimportlib.abcimportlib.utilr-   rj   r   r  r   r  Ztkinter.simpledialogZsimpledialogr   Ztkinter.messageboxZ
messageboxr   r  r+  Zidlelib.MultiCallr   rI  r   r   r   r   r   Zidlelib.configHandlerr	   r
   r   r   r   r   r  Zpython_versionr  r   objectr   Z
helpDialogr=   r  r  tokenizer  r  r
  r  rt  r  r  r:   Zidlelib.idle_test.htestr   r   r   r   r   <module>   sb   
-	     4
	