
\[\                @   sm  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 d  d l m Z m Z m Z d  d l m Z d Z  d e j!   Z" d d   Z# Gd d   d e$  Z% e%   Z& d d   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. i d d  6d! d" 6d# d$ 6Z/ d% d&   Z0 d' d(   Z1 d) d*   Z2 e3 d+ k rid  d, l4 m5 Z5 e5 e' e2  n  d S)-    N)*)MultiCallCreator)idlever)
WindowList)SearchDialog)
GrepDialog)ReplaceDialog)PyParse)idleConf)aboutDialogtextViewconfigDialog)macosxSupport   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} n  | 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   */usr/lib/python3.4/idlelib/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   s9   |  j  d k r |  j |  n  | r5 |  j |  n  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
        N)r   show_dialog
nearwindow)r    r   nearr   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"   >   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#   D   s    	 

zHelpDialog.nearwindowc             C   s   d  |  _  d  |  _ d  S)N)r   r   )r    evr   r   r   r.   O   s    	zHelpDialog.destroy)__name__
__module____qualname__r!   r%   r"   r#   r.   r   r   r   r   r   +   s
   r   c             C   s   t  j |   d  S)N)
helpDialogr"   )r   r   r   r   _help_dialogT   s    r9   c               @   s  e  Z d  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 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   Z d	 d d  Z d d d d d d d g Z e j d& k r(d e d <n  d) d*   Z d+ d,   Z d	 Z  d- d.   Z! d g Z" d1 d2   Z# d3 d4   Z$ d5 d6   Z% d7 d8   Z& d	 d9 d:  Z' d	 d; d<  Z( d	 d= d>  Z) d	 d? d@  Z* dA dB   Z+ dC dD   Z, dE dF   Z- d	 dG dH  Z. d	 dI dJ  Z/ dK dL   Z0 dM dN   Z1 dO dP   Z2 dQ dR   Z3 dS dT   Z4 dU dV   Z5 dW dX   Z6 dY dZ   Z7 d[ d\   Z8 d	 d] d^  Z9 d	 d_ d`  Z: d	 da db  Z; d	 dc dd  Z< de df   Z= dg dh   Z> di dj   Z? dk dl   Z@ dm dn   ZA do dp   ZB dq dr   ZC ds dt   ZD eE jF eE jG du ZH dv dw   ZI dx dy   ZJ dz d{   ZK d| d}   ZL d~ d   ZM d d   ZN d d   ZO d	 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 d  ZY d d   ZZ d 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   Zd d d   Ze d	 d d  Zf d	 d	 d d  Zg d d   Zh d	 d d  Zi d	 d d  Zj d d   Zk d d   Zl d d   Zm d d   Zn d 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 d   Z d d   Z d	 S)EditorWindowr   )
Percolator)ColorDelegator)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| } qn* t j d k rt j j t j d  } n  t j j |  } t j j |  rk| t  _ t j d k rd t  j t  _ qqd t j	 d  d  t  _ n  t j   }	 | |  _ | p| j } | |  _ y t j Wn t k
 rd t _ Yn Xt |  |  _ t j | d |  j |  _ }
 | r0| j |  _ | j |  j _ n i  |  _ i  |  j _ t j j t j   d  |  _ t |
  |  _  } t! | d d |  _" } t j# d d d d d |  _$ i d d 6d d 6d d 6|  j$ d 6t j# d d d  d d d  6} t% d! k rd" | d# <n  t& t'  | |  |  _( } |  j( |  j _) |  j*   |  j+   |  j j, d$ |  j-  |  j j. d% |  j/  t0 j1   r| j. d% |  j/  | j. d& |  j2  n | j. d' |  j2  | j. d( |  j3  | j. d) |  j4  | j. d* |  j5  | j. d+ |  j6  | j. d, |  j7  | j. d- |  j8  | j. d. |  j9  | j. d/ |  j:  | j. d0 |  j;  | j. d1 d2 d3    | j. d4 |  j<  | j. d5 |  j=  | j. d6 |  j>  | j. d7 |  j?  | j. d8 |  j@  | j. d9 |  jA  | j. d: |  jB  | j. d; |  jC  | j. d< |  jD  | j. d= |  jE  | j. d> |  jF  | j. d? |  jG  | j. d@ |  jH  | j. dA |  jI  | j. dB |  jJ  | j. dC |  jK  | j. dD |  jL  | j. dE |  jM  | j. dF |  jN  | j. dG |  jO dH   | j. dI |  jO dJ   | j. dK |  jP  | j. dL |  jQ  | j. dM |  jR  | r| | j |  <| rx|  | jS | <n  | j. dN |  jT  | j. dO |  j jU  | j. dP |  jV  | j. dQ |  jW  | j. dR |  jX  n  |  jY   | jZ | dS <| j[ dT t\ dU t]  | j^ | dV <dW } t j# d d dX d dY rAdZ } n  | j_ d[ t j# d d d[  t j# d d d\ d d | f  | j[ dT t` dU ta d] dJ  | j[ dT tb dU ta d] dJ  | jc   t j# d d^ d_ d dY } | |  _d d` |  _e |  je |  _f |  jg   da |  _h dh |  _i |  jj |  |  _k } |  jl   |  _m } | jn |  | jo | _o | jp | _p | jq |  jr  |  js |   |  _t } | ju |  jv  da |  _w |  jx da  d  |  _y | r7	t j jz |  r	t j j
 |  r	| j{ |  r4	de |  _w |  j| |  } |  jx |  q4	q7	| j} |  de |  _w n  |  j~   |  jr   |  j   |  j   |  j j df  } | r	| j dg  } | d  k r	di } n  | dH k r	| j   | dJ } n  | |  _ t j |  j  n  t j |  _ t j |  _ t j |  _ |  j   d  S)jNZDocz
index.htmlZ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/   z>>> menuzrecent-files.lstnamevbarmainr:   widthtypeinttext   ZpadxZnoneZwrapheightg      !@ZwordprocessorZtabstyleZWM_DELETE_WINDOWz<<close-window>>z<Control-Button-1>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>r   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normalz	font-boldboolboldfontz	font-sizeexpandIndentz
use-spacesr   F2     @KL Twindowsend)r_   r`   ra   )r:   help_urlr'   r(   r)   r   base_prefixplatformcountr   isdirr   isfilenormpathr
   CurrentThemeflistrootps1AttributeErrorMenumenubarr   ZListedTopleveltopvarstkinter_varsZinversedictinstance_dictZGetUserCfgDirrecent_files_pathZFrame
text_frameZ	ScrollbarrJ   	GetOptionrL   Z	TkVersionr   ZTextrO   Zfocused_widgetcreatemenubarapply_bindingsZprotocolcloser-   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configZLEFTZBOTHZTOP	focus_setusetabstabwidthindentwidthset_notabs_indentwidthcontext_use_ps1num_context_linesr;   perr=   undoinsertfilterundo_block_startundo_block_stopZset_saved_change_hooksaved_change_hookr>   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_highlight_workaround)r    rm   filenamekeyrn   ZdochomeZpyverZbasepathZchmfileZcurrentThemers   rx   rJ   Ztext_optionsrO   
fontWeightZ	usespacesr   r   r   	is_py_srcrH   rc   r   r   r   r!   c   sJ   					



	


	
				%	



	
	zEditorWindow.__init__c                s   t  j j d  s d  S|  j   j d d   j d d   f d d      j d   f d d	     j d   f d
 d	    d  S)NrE   z<<Highlight-FocusOut>>z
<FocusOut>z<<Highlight-FocusIn>>z	<FocusIn>c                s     j  d  } | r |  d k ri t j t j   d  }   j d |    j d    j d |  q |  d k r   j d d d  q n  d  S)NselouthiliteZsel_fixinz1.0rc   )
tag_rangesr
   GetHighlightrl   Z
tag_configZ	tag_raisetag_add
tag_remove)ZfocusZ	sel_rangeZHILITE_CONFIG)rO   r   r   highlight_fixN  s    z9EditorWindow._highlight_workaround.<locals>.highlight_fixc                s
     d  S)Nr   r   )r4   )r   r   r   rT   [  s    z4EditorWindow._highlight_workaround.<locals>.<lambda>c                s
     d  S)Nr   r   )r4   )r   r   r   rT   ]  s    )r   rg   
startswithrO   	event_addr-   )r    r   )r   rO   r   r   D  s    			z"EditorWindow._highlight_workaroundc             C   s}   t  | t  s | r | Sy | j |  j  SWnH t k
 rx y | j |  j  SWn t k
 rs | j d  SYn XYn Xd S)z8convert filename to unicode in order to display it in Tkz	iso8859-1N)
isinstancestrdecoder?   UnicodeDecodeErrorr@   )r    r   r   r   r   _filename_to_unicode`  s    z!EditorWindow._filename_to_unicodec             C   s)   |  j  j   \ } } |  j j |  d S)NrR   )r   Zdefaultfilenamerm   new)r    rS   r+   basenamer   r   r   r   o  s    zEditorWindow.new_callbackc             C   s|  | 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	  } nR |  j j d d  } x: t t	 |   D] } | | d k r Pq q Wt	 |  } t |  j j d  j d  d	  } | | k rd } n  d t
 |  d } | j  d	 @d k r\|  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)| | } } n  |  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.rU    	insertzinsert linestart+cr   z1.0rc   z	sel.firstZ	my_anchor<zsel.last>rR   )r   r   )stateZkeysymrO   r   comparerN   splitr   rangelenr   r   mark_setr   see)r    rS   ZinsertptlineZlineatdestfirstlastr   r   r   r   t  s@    "(%	zEditorWindow.home_callbackc             C   s   |  j  |  j  |  _ t j d k r@ |  j j d d d t n  |  j j d d d t |  j j d d d t |  j j d t d	 t	  |  j
 j d
 |  j  |  j
 j d
 d d  |  j
 j |  j  d  S)NrF   Z	_padding1z    rW   columnzCol: ?r   zLn: ?rX   z<<set-line-and-column>>z<KeyRelease>z<ButtonRelease>)rC   rs   
status_barr   rg   	set_labelr   r   ZBOTTOMXrO   r-   set_line_and_columnr   Z
after_idle)r    r   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)rO   r   ZINSERTr   r   r   )r    rS   r   r   r   r   r   r     s    !z EditorWindow.set_line_and_columnfile_Fileedit_EditformatF_ormatrun_Runoptions_Optionsrb   _Windowshelp_HelprF   _WindowrG   c             C   s#  |  j  } i  |  _ } x_ |  j D]T \ } } t |  \ } } t | d | | | <} | j d | d | d |  q  Wt j   r t | d d | d <} | j d d d |  n  |  j   t |  j   |  _	 |  j d j
 d	 d d
 d d d |  j	 |  j d j t  |  _ |  j   d  S)NrI   labelrH   	underlineZappleZapplicationZIDLEr   rD   zRecent Filesr   r  )rr   r   
menu_specsprepstrrq   Zadd_cascader   Z
isCarbonTk
fill_menusrecent_files_menuZinsert_cascader   ENDbase_helpmenu_lengthreset_help_menu_entries)r    Zmbarr   rI   r
  r  rH   r   r   r   rz     s     	 

zEditorWindow.createmenubarc             C   sk   |  j  d } | j d  } | d  k r1 d } n  | |  j k rZ | j |  j d |  n  t j |  d  S)Nrb   rc   rU   rd   )r   r   r   deleter   Zadd_windows_to_menu)r    rH   rc   r   r   r   r     s    	zEditorWindow.postwindowsmenuc       	      C   s,  |  j  j d d | j | j f  |  j s9 |  j   n  |  j } | |  _ t j d  d  d k } | r |  j  j	 d d  n  xs |  j
 D]h } y | \ } } } Wn t k
 r w Yn X| d  k r q n  t |  |    } | j | d | q W| j | j | j  | r(|  j  j	 d d  n  d  S)	Nr   z@%d,%drD   rE   cursorZarrowr   Zibeam)rO   r   xyrmenu
make_rmenurS   r   rg   r   rmenu_specs
ValueErrorgetattrZentryconfigureZtk_popupZx_rootZy_root)	r    rS   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)NZtearoffr   rU   c             S   s   |  j  |  d  S)N)event_generate)rO   r  r   r   r   rV     s    z(EditorWindow.make_rmenu.<locals>.commandr
  rV   )rq   rO   r  add_commandr   r  )r    r  r  r
  r  rV   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disabledrY   )rO   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$  rY   )rO   tkcallr%  )r    r   r   r   rmenu_check_paste  s
     	zEditorWindow.rmenu_check_pastec             C   s   t  j |  j d  d  S)Nz
About IDLE)r   ZAboutDialogrs   )r    rS   r   r   r   r     s    zEditorWindow.about_dialogc             C   s   t  j |  j d  d  S)NZSettings)r   ZConfigDialogrs   )r    rS   r   r   r   r      s    zEditorWindow.config_dialogc             C   s8   |  j  r |  j  } n	 |  j } t j | d |  j d  S)Nr$   )rn   rs   r8   r%   )r    rS   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)NrD   rE   titlezDocument Start Failuremessager   rR   )r   rg   r'   	startfilere   OSErrorr   r   r   rO   
webbrowseropen)r    rS   whyr   r   r   r   *  s    ,zEditorWindow.python_docsc             C   s   |  j  j d  d S)Nz<<Cut>>rR   )rO   r   )r    rS   r   r   r   r   5  s    zEditorWindow.cutc             C   s*   |  j  j d  s d  S|  j  j d  d S)Nr   z<<Copy>>rR   )rO   r   r   )r    rS   r   r   r   r   9  s    zEditorWindow.copyc             C   s$   |  j  j d  |  j  j d  d S)Nz	<<Paste>>r   rR   )rO   r   r   )r    rS   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   rR   )rO   r   r   r   )r    rS   r   r   r   r   E  s    zEditorWindow.select_allc             C   s*   |  j  j d d d  |  j  j d  d  S)Nr   z1.0rc   r   )rO   r   r   )r    rS   r   r   r   r   K  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                sN   |  j  d @d k rJ y  d   d     WqJ t k
 rF YqJ Xn  d  S)NrP   r   z	sel.firstr   )r   r%  )rS   )
edge_indexedges_tableself_text_indexself_text_mark_setr   r   move_at_edgeZ  s    
z<EditorWindow.move_at_edge_if_selection.<locals>.move_at_edge)r0  r1  )rO   r   r   )r    r2  r6  r   )r2  r3  r4  r5  r   r   O  s
    z&EditorWindow.move_at_edge_if_selectionc             C   s   |  j  j d  d S)Nz<Meta-Delete>rR   )rO   r   )r    rS   r   r   r   r   c  s    zEditorWindow.del_word_leftc             C   s   |  j  j d  d S)Nz<Meta-d>rR   )rO   r   )r    rS   r   r   r   r   g  s    zEditorWindow.del_word_rightc             C   s   t  j |  j  d S)NrR   )r   findrO   )r    rS   r   r   r   r   k  s    zEditorWindow.find_eventc             C   s   t  j |  j  d S)NrR   )r   Z
find_againrO   )r    rS   r   r   r   r   o  s    zEditorWindow.find_again_eventc             C   s   t  j |  j  d S)NrR   )r   Zfind_selectionrO   )r    rS   r   r   r   r   s  s    z!EditorWindow.find_selection_eventc             C   s    t  j |  j |  j |  j  d S)NrR   )r   ZgreprO   r   rm   )r    rS   r   r   r   r   w  s    z EditorWindow.find_in_files_eventc             C   s   t  j |  j  d S)NrR   )r   replacerO   )r    rS   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   rR   r   r   z%d.0)rO   r   r   bellr   r   )r    rS   rO   linenor   r   r   r     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 | } | rv | j   } n  | 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  sE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 |  d  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)rO   r   r%  stripr   Z	askstring	importlibutil	find_specr  ImportErrorr   r   r   r   loaderabcSourceLoaderget_filenamerp   rm   r.  r   r   )r    rS   rI   specmsgZ	file_pathr   r   r   r     sF    	

	
		zEditorWindow.open_modulec             C   s   |  j  j } | s< t j d d d |  j |  j j   d  St j j |  \ } } t j j	 |  \ } } d d l
 m } | j |  j | | g  d  S)NzNo filenamez&This buffer has no associated filenamemasterr   )ClassBrowser)r   r   r   r   rO   r   r'   r(   r   splitextidlelibrI  rm   )r    rS   r   headtailbaseextrI  r   r   r   r     s    
zEditorWindow.open_class_browserc             C   s$   d d l  m } | j |  j  d  S)Nr   )PathBrowser)rK  rP  rm   )r    rS   rP  r   r   r   r     s    zEditorWindow.open_path_browserc             C   s7   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    rS   rR  cmdpr   r   r   r     s
    	zEditorWindow.open_turtle_democ             C   sl   | d  k	 rh | d k rh |  j  j d d |  |  j  j d d d  |  j  j d d d  |  j   n  d  S)Nr   r   z%d.0r   z1.0rc   z
insert +1l)rO   r   r   r   center)r    r:  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#!Zpython)rY  rZ  )	r'   r(   ri   rJ  r   normcaserO   r   r   )r    r   rN  rO  r   r   r   r   r     s    $zEditorWindow.ispythonsourcec             C   s)   |  j  r% |  j  j |   d  |  _  n  d  S)N)rm   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   sD   |  j  r |  j  j |   n  |  j   |  j j |   |  j   d  S)N)rm   Zfilename_changed_editr   rs   Zupdate_windowlist_registryr   )r    r   r   r   r     s
    	
z!EditorWindow.filename_change_hookc             C   s}   |  j  r d  S|  j |  j j  r4 |  j   |  _  n  |  j  ry |  j j |  j  |  j j |  j   |  j j |  j  n  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 d d d  } t j | d  } t j | d d d } t j | d  } |  j j d	 | d	 d
 | d
 d | d | d	 d | d
  d S)zUpdate the colour themerK   ZThemerI   rY   r  ZfgBgZfgr   Z
foregroundZ
backgroundZinsertbackgroundZselectforegroundZselectbackgroundN)r`  r_  r
   ry   r   rO   r   )r    ZthemeZnormal_colorsZcursor_colorZselect_colorsr   r   r   r      s    




zEditorWindow.ResetColorizer_c             C   s   | j  d |  | j |  } | rN | |  j k rN | j  d | d |  n  d | j |  k rv | j d |  n | j d | d  | j |  d  S)NZERRORz
 wordstart
r   z+1c)r   r   
IDENTCHARSr   r   )r    rO   poscharr   r   r   colorize_syntax_error  s    z"EditorWindow.colorize_syntax_errorc          	   C   sn   d } t  j d d d d d r* d } n  |  j j d t  j d d d  t  j d d d	 d d
 | f  d S)z.Update the text widgets' font if it is changedrY   rK   r:   z	font-boldrM   rZ   r[   r\   z	font-sizerN   N)r
   ry   rO   r   )r    r   r   r   r   	ResetFont  s    	zEditorWindow.ResetFontc             C   s   t  j   |  j _ } x- | j   D] \ } } |  j j | |  q# Wx\ |  j   D]N } t  j |  } | rS x0 | j   D] \ } } |  j j | |  q{ WqS qS Wd S)z/Remove the keybindings before they are changed.N)	r
   GetCurrentKeySetrA   default_keydefsitemsrO   Zevent_deleteget_standard_extension_namesGetExtensionBindings)r    keydefsrS   keylistextensionNamexkeydefsr   r   r   RemoveKeybindings)  s    zEditorWindow.RemoveKeybindingsc             C   s  t  j   |  j _ } |  j   x9 |  j   D]+ } t  j |  } | r- |  j |  q- q- Wi  } xd |  j j D]V } i  | | d <x? | d D]3 } | r | d | | d t | d  d <q q Wqo Wx	|  j	 D] } |  j	 | } | j
 t  } | d k rq n  | d 7} x t d |  D] }	 | j |	  d k r!| j |	 d  }
 |
 r| j |	 d  } d } | | k r| | | k r| | | } qn  | rt | |  }
 | j |	 d |
 qqq!q!Wq Wd S)z-Update the keybindings after they are changedr   rU   NrV   acceleratorr
  r;  )r
   rh  rA   ri  r{   rk  rl  menudefsr  r   r   r  r   rM   Z	entrycgetget_acceleratorZentryconfig)r    rm  ro  rp  ZmenuEventDictrH   r  ZmenubarItemrc   r   ZaccelZitemNamerS   r   r   r   ApplyKeybindings5  s<    
/
zEditorWindow.ApplyKeybindingsc             C   s.   |  j  s* t j d d d d d |  _ n  d S)zCUpdate the indentwidth if changed and not using tabs in this windowrK   r^   z
num-spacesrM   rN   N)r   r
   ry   r   )r    r   r   r   r   Y  s    	z#EditorWindow.set_notabs_indentwidthc             C   s   t  j   } |  j d } | j t  } | |  j k rQ | j |  j d |  n  | r | j   x> | D]3 } |  j | d  } | j	 d | d d |  qh Wn  | |  j d <d S)z3Update the additional help entries on the Help menur  rU   r
  r   rV   N)
r
   ZGetAllExtraHelpSourcesListr   r   r  r  r  r   "_EditorWindow__extra_help_callbackr!  )r    Z	help_listZhelpmenuZhelpmenu_lengthentryrU  r   r   r   r  `  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 |   }  n  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httprD   rE   r)  zDocument Start Failurer*  r   )rx  ry  )r   r'   r(   rk   r   rg   r+  r,  r   r   r   rO   r-  r.  )helpfiler/  )r    r   r   display_extra_helps  s    ,z>EditorWindow.__extra_help_callback.<locals>.display_extra_helpr   )r    rz  r{  r   )r    r   Z__extra_help_callbackq  s    z"EditorWindow.__extra_help_callbackc                sq  g  } t  j j |  j  rQ t |  j d d d d d  } | j   } Wd QXn  | r t  j j |  d } | | k r | j |  n  | j d |  n  g    xG | D]? } d	 | k s t  j j | d d   r   j	 |  q q W  f d d   | D } d } | d t
 |   } y8 t |  j d d d d d  } | j |  Wd QXWnr t k
 r} zR t |  j d d  sd |  j _ t j d d d d t |  d |  j  n  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rr@   utf_8errorsr8  Nrb  r    rU   c                s"   g  |  ] } |   k r |  q Sr   r   ).0r(   )	bad_pathsr   r   
<listcomp>  s   	 z9EditorWindow.update_recent_files_list.<locals>.<listcomp>Z1234567890ABCDEFGHIJKwrecentfilelist_error_displayedFTr)  z
IDLE Errorr*  z&Unable to update Recent Files list:
%sr   r
  r   rV   r  rd   )r'   r(   r   rw   r.  	readlinesr*   remover   appendr   
writelinesr,  r  rn   r  r   r   r   rO   rs   rv   r  r  r  	enumeraterstripr   #_EditorWindow__recent_file_callbackr!  )r    new_fileZrf_listZrf_list_filer(   ZulcharsZrf_fileerrinstancerH   i	file_nameZ
ufile_namecallbackr   )r  r   r     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 | } n  |  j j |  |  j j |  d  S)Nz - Untitledz*%s*z*%s)short_title
long_title_py_version	get_savedrs   Zwm_titleZwm_iconname)r    ZshortZ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    Z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)Nr;  )r   r   r   )r    r   r   r   r    s    zEditorWindow.long_titlec             C   s   |  j    d  S)N)rW  )r    rS   r   r   r   r     s    z EditorWindow.center_insert_eventr   c             C   sb   |  j  } |  j   \ } } |  j |  } | | } t d | | d  } | j t |   d  S)NrU   rG   )rO   getwindowlines	getlinenomaxr   float)r    markrO   rs   botr:  rQ   Znewtopr   r   r   rW    s    	
zEditorWindow.centerc             C   sp   |  j  } |  j d  } |  j d  } | | k rf | j   d k rf t | d  } | | d } n  | | f S)Nz@0,0z@0,65535rU   rQ   )rO   r  Zwinfo_heightrN   )r    rO   rs   r  rQ   r   r   r   r    s    	zEditorWindow.getwindowlinesc             C   s"   |  j  } t t | j |    S)N)rO   rN   r  r   )r    r  rO   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+))rs   Zwm_geometryrematchlistmaprN   groups)r    r3   mr   r   r   get_geometry  s    zEditorWindow.get_geometryc             C   s   |  j    d  S)N)r|   )r    rS   r   r   r   r}     s    zEditorWindow.close_eventc             C   sh   |  j  rd |  j   sW |  j j   d k r: |  j j   n  |  j j   |  j j   n  |  j  j   Sd  S)NrY   )r   r  rs   r   r1   lowerr2   	maybesave)r    r   r   r   r    s    	zEditorWindow.maybesavec             C   s/   |  j    } t |  d k r+ |  j   n  | S)NZcancel)r  r   _close)r    Zreplyr   r   r   r|     s    zEditorWindow.closec             C   s   |  j  j r% |  j d |  j  j  n  t j |  j  |  j   |  j  j   d  |  _  d  |  _ |  j	 r |  j	 j d  d  |  _	 n  d  |  _
 d  |  _ |  j j   d  |  _ |  j j   |  j r |  j   n  d  S)Nr  F)r   r   r   r   Zunregister_callbackr   unload_extensionsr|   r   r   rO   ru   r   rs   r.   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   sI   x9 t  |  j j    D]" } t | d  r | j   q 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    rI   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  0  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 |  n  | |   } | |  j | <| r|  j |  x | D] } | j d d  } x* | d  d  d k r*| d d   } qWx* | d d   d	 k rW| d  d  } q.W| d
 } t	 | |  r |  j j | t | |   q q Wn  d  S)Nr   packagez
Failed to import extension: rs  -ra  rU   r   r   Z_eventrd   rd   )r>  import_module__package__rA  	TypeErrorr  r  r
   rl  r  r  rs  r  r{   r8  rO   r-   )r    rI   modclsrm  r  ZveventZ
methodnamer   r   r   r  3  s2    
zEditorWindow.load_extensionc             C   sg   | d  k r |  j  j } n  |  j } | | _ x3 | j   D]% \ } } | r: | j | |  q: q: Wd  S)N)rA   ri  rO   rm  rj  r   )r    rm  rO   rS   rn  r   r   r   r{   N  s    		zEditorWindow.apply_bindingsc             C   su  | d k r |  j  j } n  | d k r6 |  j  j } n  |  j } |  j } x&| D]\ } } | j |  } | sv qO n  x | D] } | s | j   q} | \ }	 }
 |	 d d  d k } | r |	 d d  }	 n  t |	  \ } }	 t | |
  } | |
 d d  } | rG|  j	 |
 t
  } | j d |	 d | d | d	 | d
 |  q} | j d |	 d | d | d	 |  q} WqO Wd S)zAdd appropriate entries to the menus and submenus

        Menus that are absent or None in self.menudict are ignored.
        NrU   !c             S   s   |  j  |  d  S)N)r   )rO   r  r   r   r   rV   p  s    z(EditorWindow.fill_menus.<locals>.commandr
  r  rV   rr  Zvariable)rA   rs  ri  r   rO   r   r   r  rt  get_var_objZ
BooleanVarZadd_checkbuttonr!  )r    rs  rm  r   rO   ZmnameZ	entrylistrH   rw  r
  r  Zcheckbuttonr  rr  rV   varr   r   r   r  W  s8    		
zEditorWindow.fill_menusc             C   s5   |  j  |  } | r% | j   } | St |   d  S)N)r  r   	NameError)r    rI   r  valuer   r   r   getvar|  s
    zEditorWindow.getvarc             C   s8   |  j  | |  } | r( | j |  n t |   d  S)N)r  r   r  )r    rI   r  vartyper  r   r   r   setvar  s    zEditorWindow.setvarc             C   s@   |  j  j |  } | r< | r< | |  j  |  j  | <} n  | S)N)ru   r   rO   )r    rI   r  r  r   r   r   r    s    zEditorWindow.get_var_objc             C   s<   |  j  r4 |  j j d |  p3 d |  j j |  k Sd Sd  S)NZTODOSTRINGrU   )r   rO   tag_prevrangeZ	tag_names)r    Z
text_indexr   r   r   is_char_in_string  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)rO   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)rO   TK_TABWIDTH_DEFAULTrN   )r    Zcurrentr   r   r   get_tk_tabwidth  s    zEditorWindow.get_tk_tabwidthc             C   s^   |  j  } |  j   | k rZ | j j d d | d d | j d |  } | j d |  n  d  S)Nr\   Zmeasurez
-displayofnr  )rO   r  r&  r'  rH  Z	configure)r    ZnewtabwidthrO   Zpixelsr   r   r   set_tk_tabwidth  s    		zEditorWindow.set_tk_tabwidthTc             C   su   | ra | ra |  j    } d | k o/ d k n r@ | |  _ n  |  j |  j k ra d |  _ qa n  |  j |  j  d  S)NrG   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
 }
 xb | |	 k rFPn  | d  d  } |
 d }
 t | j	 |   } | | k s| d d	 k r6Pq6q6| j   | j d |
 d  | | k  r| j d d | |  n  | j   d S)Nr   rR   zinsert linestartr;  r   z1.0z	insert-1crU   z 	r   rb  z
insert-%dcr   rd   rd   rd   rd   )rO   r  r  r   r   r   r9  r   r   
expandtabsAssertionErrorr   r   r   ro   r   r   r   r   )r    rS   rO   r   r   charsr   ZhaveZwantlast_line_of_promptZncharsdeletedr   r   r   r     sJ    	
		


z"EditorWindow.smart_backspace_eventc       
   
   C   sH  |  j  } |  j   \ } } | j   z| r| | r| t |  t |  k rY |  j |  S| j | |  | j d |  n  | 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   rR   )rO   r  r   
index2liner   r  r   r   
classifywsr   r   reindent_tor   r   r  r   r   r   )
r    rS   rO   r   r   prefixraw	effectiveZpadr  r   r   r   r     s,    	
			zEditorWindow.smart_indent_eventc             C   s  |  j  } |  j   \ } } | j   z| rW | rW | j | |  | j d |  n  | 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@ | r7| d d k r7| |	 k r7| d  d  } | d } q W| rU| j d | d  n  x& | j d  d k r}| j d  qXW| j d d  t | j d   }
 t j |  j |  j  } |  j sjx |  j D] } t |
 | d  } t |  d	 } | j | d  } | j |  | j |  j |  j |   } | d  k	 sL| d k rPqqW| j | pc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 r5|  j | j     nc | t j! k r| j"   d k ri| j d |  q|  j | j#    n d st$ d | f   d S| j%   } | j d |  | j&   r|  j' |  n" | r| j(   r|  j) |  n  d SWd  | j* d  | j+   Xd  S)Nr   zinsert linestartr   z 	rU   rb  rR   zinsert - %d charsz.0Zconsolez1.0zbogus continuation type %rrd   rd   rd   ),rO   r  r   r  r   r   r   r   r   ro   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    rS   rO   r   r   r   r  r  indentr  Z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   inner  s    z6EditorWindow._build_char_in_string_func.<locals>.inner)r  )r    Z
startindexr  r   r   r   r    s    z'EditorWindow._build_char_in_string_funcc       
      C   s   |  j    \ } } } } xs t t |   D]_ } | | } | r+ t | |  j  \ } }	 |	 |  j }	 |  j |	  | | d   | | <q+ q+ W|  j | | | |  d S)NrR   )
get_regionr   r   r  r   r   _make_blanks
set_region)
r    rS   rL  rM  r  linesrd  r   r  r  r   r   r   r     s    
(z EditorWindow.indent_region_eventc       
      C   s   |  j    \ } } } } x| t t |   D]h } | | } | r+ t | |  j  \ } }	 t |	 |  j d  }	 |  j |	  | | d   | | <q+ q+ W|  j | | | |  d S)Nr   rR   )	r  r   r   r  r   r  r   r  r  )
r    rS   rL  rM  r  r  rd  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)NrU   z##)r  r   r   r  )r    rS   rL  rM  r  r  rd  r   r   r   r   r     s
    
z!EditorWindow.comment_region_eventc             C   s   |  j    \ } } } } x t t |   D]x } | | } | sG q+ n  | d  d  d k rp | d d   } n) | d  d  d k r | d d   } n  | | | <q+ W|  j | | | |  d  S)NrG   z##rU   #)r  r   r   r  )r    rS   rL  rM  r  r  rd  r   r   r   r   r     s    
z#EditorWindow.uncomment_region_eventc             C   s   |  j    \ } } } } |  j   } | d  k r4 d  Sx{ t t |   D]g } | | } | rG t | |  \ }	 }
 t |
 |  \ } } d | d | | |	 d   | | <qG qG W|  j | | | |  d  S)Nr   r   )r  _asktabwidthr   r   r  divmodr  )r    rS   rL  rM  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    rS   rL  rM  r  r  r   rd  r   r   r   r     s     z"EditorWindow.untabify_region_eventc             C   sZ   |  j  d d d |  j d d |  j d d	 d
 |  j rV |  j |  _ d |  _ n  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   rR   )r  r  )r  r  )r   r   rO   r   )r    rS   r   r   r   r     s    !zEditorWindow.toggle_tabs_eventc             C   s_   |  j  d d d |  j d |  j d d d d } | r[ | |  j k r[ |  j r[ | |  _ n  d	 S)
NzIndent widthz6New indent width (2-16)
(Always use 8 when using tabs)r   r<  minvaluerG   maxvalue   rR   )r   rO   r   r   )r    rS   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  )rO   r  r   r   r   )r    rO   r   r   rL  rM  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.0rc   r   )
rO   r)   r9  r   r   r   r  r   r   r   )r    rL  rM  r  r  rO   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   sk   |  j  } | j   | j d d d  r; | j d d  n  | r] | j d |  j |   n  | j   d  S)Nzinsert linestartz!=r   )rO   r   r   r  r   r  r   )r    r   rO   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  rG   r  r  )r   rO   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   )IndentSearcherrO   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  )r  r  )windowsr  )zhelpr  )r  r	  )r  r  N)r5   r6   r7   Zidlelib.Percolatorr;   Zidlelib.ColorDelegatorr<   Zidlelib.UndoDelegatorr=   Zidlelib.IOBindingr>   r?   r@   rK  rA   tkinterrB   Zidlelib.MultiStatusBarrC   re   r!   r   r   r   r   r   r   r  r   rg   rz   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   rX  r   r\  r]  r   r_  r`  r   stringZascii_lettersZdigitsrc  rf  rg  rq  ru  r   r  rv  r   r  r   r  r  r  r  r  r   rW  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:   X   s   +	
	*	$,	
		%	0#k
	r:   c             C   s   t  t |    S)N)rN   r  )r   r   r   r   r  8  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   rU   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   )rO   r   r  finishedblkopenlineindentedline)r    rO   r   r   r   r   r!   X  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)Nr;  rU   z.0z>=rc   z lineend+1c)r  r  r  rO   r   r   )r    r  r  r   r   r   readline^  s    	zIndentSearcher.readlineclassdefforiftrywhilec	       	      C   s^   |  j  r nN | | k r0 | | k r0 | |  _ n* | | k rZ |  j rZ | |  _ d |  _  n  d  S)NrU   )r  r  r  )	r    rM   tokenstartrc   r   INDENTNAMEZOPENERSr   r   r   
tokeneaterg  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  s  s    		
zIndentSearcher.runN)zclasszdefzforzifztryzwhile)
r5   r6   r7   r!   r  r  r   r  r  r  r   r   r   r   r  Q  s   
	r  c             C   sJ   |  j  d  } | d k r@ |  d  |  |  | d d   }  n  | |  f S)Nra  r   rU   )r7  )r  r  r   r   r   r    s    %r  [Zbracketleft]Zbracketright/Zslashc             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>>r;  r   z-[a-z]\bc             S   s   |  j    j   S)N)groupupper)r  r   r   r   rT     s    z!get_accelerator.<locals>.<lambda>z\b\w+\bc             S   s   t  j |  j   |  j    S)N)keynamesr   r  )r  r   r   r   rT     s    zKey-ZCancelz
Ctrl-BreakzControl-zCtrl-r  r&   z><r   r   r   >   r  r  r  )r   r   Z	isCocoaTkr  sub)rm  r  rn  r  r   r   r   rt    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'  )rn   r&  r   r   r   fixwordbreaks  s    	r  c             C   s   |  } t  |  t j d d   r3 t j d } n d  } t j | d   t d | d |  } | j j d | j  |  j	   d  S)NrU   rn   r   z<<close-all-windows>>)
r  r   argvr   ZsetupAppr:   rO   r-   r}   Zmainloop)r   rn   r   r   r   r   r   _editor_window  s    
r  __main__)r  )6r>  Zimportlib.abcimportlib.utilr'   rg   r  r  r   r  Ztkinter.simpledialogZsimpledialogr   Ztkinter.messageboxZ
messageboxr   r  r-  Zidlelib.MultiCallr   rK  r   r   r   r   r   r	   Zidlelib.configHandlerr
   r   r   r   r   r  Zpython_versionr  r   objectr   r8   r9   r:   r  r  tokenizer  r  r  r  rt  r  r  r5   Zidlelib.idle_test.htestr  r   r   r   r   <module>   sf   
(	     4	
	