<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>

e f                @   s^  d  d l  Z  d  d l Z  d  d l Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l 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- i d d 6d d  6d! d" 6Z. d# d$   Z/ d% d&   Z0 d' d(   Z1 e2 d) k rZd  d* l3 m4 Z4 e4 e1  n  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} 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   9/opt/alt/python34/lib64/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   s[   d d l  } | j d t d d |  j d k rA |  j |  n  | rW |  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
        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 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   Z/ dL dM   Z0 dN dO   Z1 dP dQ   Z2 dR dS   Z3 dT dU   Z4 dV dW   Z5 d	 dX dY  Z6 d	 dZ d[  Z7 d	 d\ d]  Z8 d	 d^ d_  Z9 d` da   Z: db dc   Z; dd de   Z< df dg   Z= dh di   Z> dj dk   Z? dl dm   Z@ dn do   ZA eB jC eB jD dp ZE dq dr   ZF ds dt   ZG du dv   ZH dw dx   ZI dy dz   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 d  ZV d d   ZW d 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   Za d d   Zb d	 d d  Zc d	 d	 d d  Zd d d   Ze d	 d d  Zf d	 d d  Zg d d   Zh d d   Zi d d   Zj d d   Zk d d d  Zl 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	 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  | |  _ | 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 |  _# i d d 6d 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.  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 |  <| r|  | jR | <n  | j- dP |  jS  | j- dQ |  j jT  | j- dR |  jU  | j- dS |  jV  | j- dT |  jW  n  |  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 |  qq| j| |  dc |  _v n  |  j}   |  jq   |  j~   |  j   |  j j dd  } | r	| j de  } | d  k r^	dg } n  | d  k r	| j   | dL } n  | |  _ t j |  j  n  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text   ZpadxZnoneZwrapr   Zhighlightthickness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)r`   ra   rb   )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	ScrollbarrM   	GetOptionrO   	TkVersionr   ZTextrR   Zfocused_widgetcreatemenubarapply_bindingsZ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>   perr@   undoinsertfilterundo_block_startundo_block_stopZset_saved_change_hooksaved_change_hookrA   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    rm   filenamekeyrn   ZdochomeZpyverZbasepathZchmfilers   ry   rM   Ztext_optionsrR   Z	usespacesr   r   r   	is_py_srcrK   rd   r   r   r   r!   f   s>   					





	
				%	



	
	zEditorWindow.__init__c             C   s   t  | t  rw y | j |  j  } Wqw t k
 rs y | j |  j  } Wn! t k
 rn | j d  } Yn XYqw Xn  t j d d |  S)z3Return filename as BMP unicode so diplayable in Tk.z	iso8859-1u   [𐀀-􏿿]u   �)
isinstancebytesdecoderB   UnicodeDecodeErrorrC   resub)r    r   r   r   r   _filename_to_unicode?  s    z!EditorWindow._filename_to_unicodec             C   s)   |  j  j   \ } } |  j j |  d S)NrU   )r   Zdefaultfilenamerm   new)r    rV   r1   basenamer   r   r   r   N  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.rX    	insertzinsert linestart+cselz1.0rd   z	sel.firstZ	my_anchor<zsel.last>rU   )r   r   )stateZkeysymrR   r   comparerQ   splitr   rangelenstr
tag_removemark_settag_addsee)r    rV   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 ra |  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 d	 t	 d t
  |  j j d |  j  |  j j d d d  |  j j |  j  d  S)NrT   rX   Zborderwidth
backgroundZgrey75rJ   Z	_padding1z    rZ   columnzCol: ?r   zLn: ?r[   z<<set-line-and-column>>z<KeyRelease>z<ButtonRelease>)rF   rs   
status_barrx   r   rh   	set_labelr   r   ZBOTTOMXrR   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)rR   r   ZINSERTr   r   r   )r    rV   r   r   r   r   r   r     s    !z EditorWindow.set_line_and_columnfile_Fileedit_EditformatF_ormatrun_Runoptions_Optionsrc   _Windowr   _Helpc             C   s5  |  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 |  n  |  j   t |  j  d d |  _	 |  j d
 j
 d d d d d d |  j	 |  j d j t  |  _ |  j   d  S)NrL   tearoffr   labelrK   	underlineZappleZapplicationZIDLEr   rH   zRecent Filesr   )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   rL   r  r  rK   r   r   r   r|     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)Nrc   rd   rX   re   )r   r   r   deleter   Zadd_windows_to_menu)r    rK   rd   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,%drH   rI   cursorZarrowr   Zibeam)rR   r   xyrmenu
make_rmenurV   r   rh   configrmenu_specs
ValueErrorgetattrZentryconfigureZtk_popupZx_rootZy_root)	r    rV   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   rX   c             S   s   |  j  |  d  S)N)event_generate)rR   r  r   r   r   rY     s    z(EditorWindow.make_rmenu.<locals>.commandr  rY   )rq   rR   r  add_commandr   r  )r    r  r  r  r  rY   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)rR   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"  )rR   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AboutDialogrs   )r    rV   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ConfigDialogrs   )r    rV   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)rn   rs   r   Zshow_idlehelp)r    rV   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)NrH   rI   titlezDocument Start Failuremessager   rU   )r   rh   r-   	startfilerf   OSErrorr   r   r   rR   
webbrowseropen)r    rV   whyr   r   r   r     s    ,zEditorWindow.python_docsc             C   s   |  j  j d  d S)Nz<<Cut>>rU   )rR   r  )r    rV   r   r   r   r     s    zEditorWindow.cutc             C   s*   |  j  j d  s d  S|  j  j d  d S)Nr   z<<Copy>>rU   )rR   Z
tag_rangesr  )r    rV   r   r   r   r     s    zEditorWindow.copyc             C   s$   |  j  j d  |  j  j d  d S)Nz	<<Paste>>r   rU   )rR   r  r   )r    rV   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   rU   )rR   r   r   r   )r    rV   r   r   r   r   *  s    zEditorWindow.select_allc             C   s*   |  j  j d d d  |  j  j d  d  S)Nr   z1.0rd   r   )rR   r   r   )r    rV   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                sN   |  j  d @d k rJ y  d   d     WqJ t k
 rF YqJ Xn  d  S)NrS   r   z	sel.firstr   )r   r#  )rV   )
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/  )rR   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>rU   )rR   r  )r    rV   r   r   r   r   H  s    zEditorWindow.del_word_leftc             C   s   |  j  j d  d S)Nz<Meta-d>rU   )rR   r  )r    rV   r   r   r   r   L  s    zEditorWindow.del_word_rightc             C   s   t  j |  j  d S)NrU   )r   findrR   )r    rV   r   r   r   r   P  s    zEditorWindow.find_eventc             C   s   t  j |  j  d S)NrU   )r   Z
find_againrR   )r    rV   r   r   r   r   T  s    zEditorWindow.find_again_eventc             C   s   t  j |  j  d S)NrU   )r   Zfind_selectionrR   )r    rV   r   r   r   r   X  s    z!EditorWindow.find_selection_eventc             C   s    t  j |  j |  j |  j  d S)NrU   )r   ZgreprR   r   rm   )r    rV   r   r   r   r   \  s    z EditorWindow.find_in_files_eventc             C   s   t  j |  j  d S)NrU   )r   replacerR   )r    rV   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   rU   r   r   z%d.0)rR   r   r   bellr   r   )r    rV   rR   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 | } | 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 |  | 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)rR   r   r#  stripr   Z	askstring	importlibutil	find_specr  ImportErrorr   r   r   r   loaderabcSourceLoaderget_filenamerp   rm   r,  r   r   )r    rV   rL   specmsgZ	file_pathr   r   r   r   p  sH    	

	
		zEditorWindow.open_modulec             C   s   |  j  j } |  j j d k o! | sC |  j   } | d  k rC d  Sn  t 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  rm   )r    rV   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  rm   )r    rV   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    rV   rP  cmdr   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.0rd   z
insert +1l)rR   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.   rj   rH  r   normcaserR   r   
startswith)r    r   rL  rM  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   } t j | d  } t j | d d d } t j | d  } |  j j d | d d | d d | d	 | d d
 | d  t d k r |  j j d | d  n  d S)zUpdate the color themer"  r  ZfgBgZfgZhiliteZ
foregroundr   ZinsertbackgroundZselectforegroundZselectbackgroundg      !@ZinactiveselectbackgroundN)r_  r^  r	   ZCurrentThemeZGetHighlightrR   r  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    rR   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 changedrN   r=   r\   N)r	   r   rn   rR   )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	   GetCurrentKeySetrD   default_keydefsitemsrR   Zevent_deleteget_standard_extension_namesGetExtensionBindings)r    keydefsrV   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   rX   NrY   acceleratorr  r9  )r	   rg  rD   rh  r}   rj  rk  menudefsr	  r   r   r  r   rP   Z	entrycgetget_acceleratorZentryconfig)r    rl  rn  ro  ZmenuEventDictrK   r  ZmenubarItemrd   r   ZaccelZitemNamerV   r   r   r   ApplyKeybindings  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 windowrN   r^   z
num-spacesrP   rQ   N)r   r	   rz   r   )r    r   r   r   r   ;  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   rX   r  r   rY   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  B  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httprH   rI   r'  zDocument Start Failurer(  r   )rw  rx  )rZ  r-   r.   rl   r   rh   r)  r*  r   r   r   rR   r+  r,  )helpfiler-  )r    r   r   display_extra_helpU  s    ,z>EditorWindow.__extra_help_callback.<locals>.display_extra_helpr   )r    ry  rz  r   )r    r   Z__extra_help_callbackS  s    z"EditorWindow.__extra_help_callbackc                sz  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 QXWn{ t k
 r} z[ t |  j d d  sd |  j _ t j d d d d |  j 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rrC   utf_8errorsr6  Nra  r    rX   c                s"   g  |  ] } |   k r |  q Sr   r   ).0r.   )	bad_pathsr   r   
<listcomp>s  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   rY   r  re   )r-   r.   r   rw   r,  	readlinesr0   remover   appendr   
writelinesr*  r  rn   r  r   showwarningr   r   rR   rs   rv   r  r  r  	enumeraterstrip#_EditorWindow__recent_file_callbackr  )r    new_fileZrf_listZrf_list_filer.   ZulcharsZrf_fileerrinstancerK   i	file_nameZ
ufile_namecallbackr   )r  r   r   b  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)Nr9  )r   r   r   )r    r   r   r   r    s    zEditorWindow.long_titlec             C   s   |  j    d  S)N)rT  )r    rV   r   r   r   r     s    z EditorWindow.center_insert_eventr   c             C   sb   |  j  } |  j   \ } } |  j |  } | | } t d | | d  } | j t |   d  S)NrX   r#   )rR   getwindowlines	getlinenomaxr   float)r    markrR   rs   botr8  rT   Znewtopr   r   r   rT    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,65535rX   rT   )rR   r  Zwinfo_heightrQ   )r    rR   rs   r  rT   r   r   r   r    s    	zEditorWindow.getwindowlinesc             C   s"   |  j  } t t | j |    S)N)rR   rQ   r  r   )r    r  rR   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_geometryr   matchlistmaprQ   groups)r    r9   mr   r   r   get_geometry  s    zEditorWindow.get_geometryc             C   s   |  j    d  S)N)r~   )r    rV   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)Nr"  )r   r  rs   r   r7   lowerr8   	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   rR   ru   r   rs   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   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)rj  load_extensionprintrepr	traceback	print_exc)r    rL   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   rj    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: rr  -r`  rX   r   r   Z_eventre   re   )r<  import_module__package__r?  	TypeErrorr  r  r	   rk  r  r
  rr  r  r}   r6  rR   r3   )r    rL   modclsrl  r  ZveventZ
methodnamer   r   r   r    s2    
zEditorWindow.load_extensionc             C   sg   | d  k r |  j  j } n  |  j } | | _ x3 | j   D]% \ } } | r: | j | |  q: q: Wd  S)N)rD   rh  rR   rl  ri  r   )r    rl  rR   rV   rm  r   r   r   r}   2  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.
        NrX   !c             S   s   |  j  |  d  S)N)r  )rR   r  r   r   r   rY   T  s    z(EditorWindow.fill_menus.<locals>.commandr  r  rY   rq  Zvariable)rD   rr  rh  r   rR   r   r   r	  rs  get_var_objZ
BooleanVarZadd_checkbuttonr  )r    rr  rl  r   rR   ZmnameZ	entrylistrK   rv  r  r  Zcheckbuttonr  rq  rY   varr   r   r   r
  ;  s8    		
zEditorWindow.fill_menusc             C   s5   |  j  |  } | r% | j   } | St |   d  S)N)r  r   	NameError)r    rL   r  valuer   r   r   getvar`  s
    zEditorWindow.getvarc             C   s8   |  j  | |  } | r( | j |  n t |   d  S)N)r  r   r  )r    rL   r  vartyper  r   r   r   setvarh  s    zEditorWindow.setvarc             C   s@   |  j  j |  } | r< | r< | |  j  |  j  | <} n  | S)N)ru   r   rR   )r    rL   r  r  r   r   r   r  o  s    zEditorWindow.get_var_objc             C   s<   |  j  r4 |  j j d |  p3 d |  j j |  k Sd Sd  S)NZTODOSTRINGrX   )r   rR   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)rR   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)rR   TK_TABWIDTH_DEFAULTrQ   )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  )rR   r  r$  r%  ZmasterZ	configure)r    ZnewtabwidthrR   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)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
 }
 xc | |	 k rFPn  | d  d  } |
 d }
 t | j	 |   } | | k s| d d	 k r6Pq6q6W| j   | j d |
 d  | | k  r| j d d | |  n  | j   d S)Nr   rU   zinsert linestartr9  r   z1.0z	insert-1crX   z 	r   ra  z
insert-%dcr   re   re   re   re   )rR   r  r  r   r   r   r7  r   r   
expandtabsAssertionErrorr   r   r   ro   r   r   r   r   )r    rV   rR   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   rU   )rR   r  r   
index2liner   r  r   r   
classifywsr   r   reindent_tor   r   r  r   r   r   )
r    rV   rR   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 	rX   ra  rU   zinsert - %d charsz.0Zconsolez1.0zbogus continuation type %rre   re   re   ),rR   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    rV   rR   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   innero  s    z6EditorWindow._build_char_in_string_func.<locals>.inner)r  )r    Z
startindexr  r   r   r   r  n  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)NrU   )
get_regionr   r   r  r   r   _make_blanks
set_region)
r    rV   rJ  rK  r  linesrc  r   r  r  r   r   r   r   t  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   rU   )	r  r   r   r  r   r  r   r  r  )
r    rV   rJ  rK  r  r  rc  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)NrX   z##)r  r   r   r  )r    rV   rJ  rK  r  r  rc  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)Nr#   z##rX   #)r  r   r   r  )r    rV   rJ  rK  r  r  rc  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    rV   rJ  rK  r  r  r   rc  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    rV   rJ  rK  r  r  r   rc  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   rU   )r  r  )r  r  )r   r   rR   r   )r    rV   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:  minvaluer#   maxvalue   rU   )r   rR   r   r   )r    rV   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 +1cra  )rR   r  r   r   r   )r    rR   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)Nra  r   z1.0rd   r   )
rR   r/   r7  r   r   r   r  r   r   r   )r    rJ  rK  r  r  rR   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   )rR   r   r   r  r   r  r   )r    r   rR   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   rR   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   )IndentSearcherrR   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  )zwindowsr  )zhelpr  )r  r  N)r:   r;   r<   Zidlelib.Percolatorr>   Zidlelib.ColorDelegatorr?   Zidlelib.UndoDelegatorr@   Zidlelib.IOBindingrA   rB   rC   rI  rD   tkinterrE   Zidlelib.MultiStatusBarrF   rf   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   stringZascii_lettersZdigitsrb  re  rf  rp  rt  r   r  ru  r   r  r   r  r  r  r  r  r   rT  r  r  r  r   r  r~   r  r   r  r  rj  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)rQ   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   rX   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   )rR   r   r  finishedblkopenlineindentedline)r    rR   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  rX   z.0z>=rd   z lineend+1c)r  r  r  rR   r   r   )r    r  r  r   r   r   readlineB  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)NrX   )r  r  r  )	r    rP   tokenstartrd   r   INDENTNAMEZOPENERSr   r   r   
tokeneaterK  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   W  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  5  s   
	r  c             C   sJ   |  j  d  } | d k r@ |  d  |  |  | d d   }  n  | |  f S)Nr`  r   rX   )r5  )r  r  r   r   r   r	  i  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>>r9  r   z-[a-z]\bc             S   s   |  j    j   S)N)groupupper)r  r   r   r   rW     s    z!get_accelerator.<locals>.<lambda>z\b\w+\bc             S   s   t  j |  j   |  j    S)N)keynamesr   r  )r  r   r   r   rW     s    zKey-ZCancelz
Ctrl-BreakzControl-zCtrl-r  r,   z><r   r   r   >   r	  r  r
  )r   r   Z	isCocoaTkr   r   )rl  r  rm  r  r   r   r   rs  x  s"      	
rs  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   sx   |  } t  |  t j d d   r3 t j d } n d  } t j | d   t d | d |  } | j j d | j  d  S)NrX   rn   r   z<<close-all-windows>>)	r  r   argvr   ZsetupAppr=   rR   r3   r   )r   rn   r   r   r   r   r   _editor_window  s    
r  __main__)r   )5r<  Zimportlib.abcimportlib.utilr-   rh   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  rs  r  r  r:   Zidlelib.idle_test.htestr   r   r   r   r   <module>   sd   
-	     4	
	