3
tY]                @   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	T d dl
mZ d dljZd dljZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  dZ!dej"  Z#e$jdkZ%dd Z&G dd de'Z(dd Z)dd Z*G dd de'Z+dd Z,dd d!d"Z-d#d$ Z.d%d& Z/d'd( Z0e1d)krd d*l2m3Z3 e3d+d,d-d. d d/l4m5Z5 e5e0 dS )0    N)*)	Scrollbar)idleConf)configdialog)grep)help)
help_about)macosx)MultiCallCreator)pyparse)query)replace)search)window   z (%s)darwinc              C   sb   t j\} }}}}d| |f }|d|f 7 }|dkrB|d|f 7 }n|dkr^|d|d |f 7 }|S )zYFormat sys.version_info to produce the Sphinx version string used to install the chm docsz%s%sz%s	candidatezrc%sfinalr   )sysversion_info)majorminormicrolevelserialrelease r   lib/python3.6/idlelib/editor.py_sphinx_version!   s    r   c               @   s  e Zd ZddlmZ ddlmZmZ ddlm	Z	 ddl
mZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddl!m"Z" e#j$ Z%dZ&dddZ'dd Z(dd Z)dd Z*dd Z+dddZ,dddddddgZ-d,d- Z.d.d/ Z/d0d1 Z0d2d3 Z1dZ2d4d5 Z3dgZ4d8d9 Z5d:d; Z6d<d= Z7d>d? Z8dd@dAZ9d dBdCZ:ddDdEZ;ddFdGZ<dHdI Z=dJdK Z>dLdM Z?ddNdOZ@ddPdQZAdRdS ZBdTdU ZCdVdW ZDdXdY ZEdZd[ ZFd\d] ZGd^d_ ZHd`da ZIdbdc ZJddde ZKdfdg ZLddhdiZMddjdkZNddldmZOdndo ZPdpdq ZQdrds ZRdtdu ZSdvdw ZTdxdy ZUdzd{ ZVd|d} ZWeXjYeXjZ d~ Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd ZbdddZcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkd	ddZldd Zmd
ddZndd Zodd Zpdd Zqdd Zrdd Zsdd Ztdd Zudd Zvdd ZwddiZxdd ZydddZzdddZ{dd Z|dddÄZ}dddńZ~ddǄ ZddɄ Zdd˄ Zdd̈́ ZdddЄZdd҄ ZddԄ Zddք Zdd؄ Zddڄ Zdd܄ Zddބ Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS (  EditorWindowr   )
Percolator)ColorDelegatorcolor_config)UndoDelegator)	IOBindingencoding)mainmenu)MultiStatusBar)AutoComplete)
AutoExpand)Calltip)CodeContext)FormatParagraph)
ParenMatch)Rstrip)Squeezer)
ZoomHeightNc             C   sn  ddl m} tjd krtjjtjdd}tj	j
drvddtjd d   }tjjd	r^d
}qd}tjj||dd}nVtj	d d dkrtjjtjddt  }	tjj|	r|	}ntj	dkrtjjtjd}tjj|}tjj|r|t_tj	dkrdtj t_ndtjd d  t_|| _|p*|j}|| _t|| _tj|| jd | _}
|rl|j| _|j| j_ni | _i | j_tjjtjd| _d| _t|
 | _ }t!|dd | _"}tj#ddddd| _$dddd| j$d tj#ddd!ddd"}t%t&|f| | _'}| j'| j_(| j)  | j*  | jj+d#| j, | jj-d$| j. t/j0 rp|j-d$| j. |j-d%| j1 |j-d&| j1 n|j-d'| j1 |j-d(| j2 |j-d)| j2 |j-d*| j2 |j-d+| j3 |j-d,| j4 |j-d-| j5 |j-d.| j6 |j-d/| j7 |j-d0| j8 |j-d1| j9 |j-d2| j: |j-d3| j; |j-d4d5d6  |j-d7| j< |j-d8| j= |j-d9| j> |j-d:| j? |j-d;| j@ |j-d<| jA |j-d=| jB |j-d>| jC |j-d?| jD |j-d@| jE |j-dA| jF |j-dB| jG |j-dC| jH |j-dD| jI |j-dE| jJ |j-dF| jK |j-dG| jL |j-dH| jM |j-dI| jN |j-dJ| jOd |j-dK| jOdL |j-dM| jP |j-dN| jQ |j-dO| jR |r||j| < |r| |jS|< |j-dP| jT |j-dQ| jjU |j-dR| jV |j-dS| jW |j-dT| jX | jY  | jZ|dU< |j[t\t]dV |j^|dW< tj_| jdd|dX< |j[t`tadLdY |j[tbtadLdY |jc  tj#ddZd[d\d}| | _dd]| _e| je| _f| jg  d^| _hd}| _i| jj| | _k}| jl  | _m}|jn| |jo|_o|jp|_p|jq| jr | js|  | _t}|ju| jv d^| _w| jxd^ d | _y|rjtjjz|rZtjj| rZ|j{|rjdb| _w| j||}| jx| n|j}| db| _w| j~  | jr  | j  | j  | jjdc}|r|jdd}|d krd~}|dkr|j  |dL }|| _tj| j tj| _tj| _tj| _|jdedf |jdgdhdidj |jdkdl |jdmdn |jdodndpdq | j| }|j-de|j |j-dg|j |j-dr|j |j-ds| j| j |j-dt| j| j | j| }|j-du|j |j-do|j || }|j-dv|j |j-dw|j |j-dx| j| j | j| }|j-dk|j |j-dm|j |j-dy|j |j-dz| j| j |j-d{| j| j | j| }|j-d||j d S )Nr   )ScriptBindingZ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.chmr   z0Resources/English.lproj/Documentation/index.htmlzfile://zhttps://docs.python.org/%d.%d/   )menuzrecent-files.lst vbar)namemainr   widthint)typetext   ZnoneZwordprocessorheight)r9   ZpadxZwrapZhighlightthicknessr;   Ztabstyler@   ZWM_DELETE_WINDOWz<<close-window>>z<Control-Button-1>z<2>z<3>z<MouseWheel>z
<Button-4>z
<Button-5>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)rF   rG   expandIndentz
use-spacesboolr   F2     @KL Tr   endz<<autocomplete>>z	<Key-Tab>z<<try-open-completions>>z<KeyRelease-period>z<KeyRelease-slash>z<KeyRelease-backslash>z<<try-open-calltip>>z<KeyRelease-parenleft>z<<refresh-calltip>>z<KeyRelease-parenright>z<<paren-closed>>z<KeyRelease-bracketright>z<KeyRelease-braceright>z<<force-open-completions>>z<<expand-word>>z<<format-paragraph>>z<<flash-paren>>z<<check-module>>z<<run-module>>z<<do-rstrip>>z<<force-open-calltip>>z<<zoom-height>>z<<toggle-code-context>>z<<squeeze-current-text>>)rL   rM   rN   )Zidlelib.runscriptr1   r   help_urlospathjoinr   base_prefixplatformcountr   isdirr   isfilenormpathflistrootMenumenubarr   ZListedTopleveltopvarstkinter_varsZinversedictinstance_dictr   Zuserdirrecent_files_pathprompt_last_lineFrame
text_framer   r8   	GetOptionr;   r
   ZTextr>   Zfocused_widgetcreatemenubarapply_bindingsZprotocolclosebindclose_eventr	   ZisAquaTkright_menu_eventmousescrollcutcopypastecenter_insert_eventhelp_dialogpython_docsabout_dialogconfig_dialogopen_module_event
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_module_browseropen_path_browseropen_turtle_demoset_status_barhandle_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_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	event_addr(   Zautocomplete_eventZtry_open_completions_eventZforce_open_completions_eventr)   Zexpand_word_eventr,   Zformat_paragraph_eventr-   Zflash_paren_eventZparen_closed_eventZcheck_module_eventZrun_module_eventr.   Z	do_rstripr*   Ztry_open_calltip_eventZrefresh_calltip_eventZforce_open_calltip_eventr0   Zzoom_height_eventr+   Ztoggle_code_context_eventr/   Zsqueeze_current_text_event)selfr[   filenamekeyr\   r1   ZdochomeZpyverZbasepathZchmfiler_   rf   r8   Ztext_optionsr>   Z	usespacesr   r   r   	is_py_srcr6   rO   ZautocompleteZ
parenmatchZscriptbindingZctipZsqueezerr   r   r   __init__A   s   






















zEditorWindow.__init__c             C   sn   t |tr`y|j| j}W nD tk
r^   y|j| j}W n tk
rX   |jd}Y nX Y nX tjdd|S )z3Return filename as BMP unicode so diplayable in Tk.z	iso8859-1u   [𐀀-􏿿]u   �)
isinstancebytesdecodefilesystemencodingUnicodeDecodeErrorr%   resub)r   r   r   r   r   _filename_to_unicodeD  s    
z!EditorWindow._filename_to_unicodec             C   s   | j j \}}| jj| dS )NrA   )r   Zdefaultfilenamer[   new)r   rB   dirnamebasenamer   r   r   r   S  s    zEditorWindow.new_callbackc             C   s  |j d@ dkr|jdkrd S | jjdrd| jjdddrd| jjdddrdt| jjdjdd	 }n:| jjdd}x*tt	|D ]}|| dkrP qW t	|}t| jjdjdd	 }||krd}dt
| d }|j d	@ dkr| jjddd n| jjds| jjdd n@| jj| jjdd| jjdrD| jjdd n| jjdd | jj|}| jjd}| jj|d|r|| }}| jjddd | jjd|| | jjd| | jjd dS )N   r   ZHomeZiomarkz<=zinsert lineendzinsert linestart.rD    	insertzinsert linestart+cselz1.0rO   z	sel.firstZ	my_anchor<zsel.last>rA   )r   r   )stateZkeysymr>   r   comparer<   splitr   rangelenstr
tag_removemark_settag_addsee)r   rB   ZinsertptlineZlineatdestfirstlastr   r   r   r   X  s@    
zEditorWindow.home_callbackc             C   s   | j | j| _t| jdddd}tjdkr<| jjddtd | jjdd	td | jjd
dtd | jjt	t
d |jt	t
d | jjd| j | jjddd | jj| j d S )NrD   Zgrey75)r@   ZborderwidthZ
backgroundr   Z	_padding1z    )rF   columnzCol: ?r   zLn: ?)rF   rG   z<<set-line-and-column>>z<KeyRelease>z<ButtonRelease>)r'   r_   
status_barre   r   rV   	set_labelr   r   ZBOTTOMXr>   rk   set_line_and_columnr   Z
after_idle)r   sepr   r   r   r     s    
zEditorWindow.set_status_barc             C   s>   | j jtjd\}}| jjdd|  | jjdd|  d S )Nr   r   zCol: %sr   zLn: %s)r>   r   ZINSERTr   r   r   )r   rB   r   r   r   r   r   r     s    z EditorWindow.set_line_and_columnfile_Fileedit_EditformatF_ormatrun_Runoptions_Optionsr   _Windowr   _Helpc             C   s   | j }i  | _}xD| jD ]:\}}t|\}}t||dd ||< }|j|||d qW tj rt|ddd |d< }|jd|d | j  t| j dd| _	| jd	 j
d
dd| j	d | jd jt| _| j  d S )Nr   )r9   tearoff)labelr6   	underlineZappleZapplicationZIDLE)r   r6   )r   r   r3   zRecent Files)r   r   r6   r   )r^   r   
menu_specsprepstrr]   Zadd_cascader	   Z
isCarbonTk
fill_menusrecent_files_menuZinsert_cascader   ENDbase_helpmenu_lengthreset_help_menu_entries)r   Zmbarr   r9   r   r   r6   r   r   r   rh     s"    

zEditorWindow.createmenubarc             C   sJ   | j d }|jd}|d kr d}|| jkr<|j| jd | tj| d S )Nr   rO   rD   rP   )r   r   r   deleter   Zadd_windows_to_menu)r   r6   rO   r   r   r   r     s    


zEditorWindow.postwindowsmenuc             G   sR   |dkr<t |d }t| jd| | jd }d}|df}| jj|f|  dS )zHandle scrollbar.Zmovetor   rO   z@0,0ZscrollunitsrA   )floatround	getlinenor>   yview)r   rB   argsZfractionlinesr   r   r   r     s    zEditorWindow.handle_yviewc             C   s@   t j|jdkt j|jdki}||j r*dnd}| jj|d dS )a  Handle scrollwheel event.

        For wheel up, event.delta = 120*n on Windows, -1*n on darwin,
        where n can be > 1 if one scrolls fast.  Flicking the wheel
        generates up to maybe 20 events with n up to 10 or more 1.
        Macs use wheel down (delta = 1*n) to scroll up, so positive
        delta means to scroll up on both systems.

        X-11 sends Control-Button-4 event instead.
        r   r   r?   r  rA   )Z	EventTypeZ
MouseWheelZdeltaZButtonZnumr=   r>   Zyview_scroll)r   rB   Zupr  r   r   r   rn     s
    zEditorWindow.mousescrollc       	      C   s   | j jdd|j|jf  | js(| j  | j}|| _tjd d dk}|rX| j j	dd xX| j
D ]N}y|\}}}W n tk
r   w`Y nX |d krq`t| | }|j||d q`W |j|j|j |r| j j	dd d	S )
Nr   z@%d,%dr3   r4   Zarrow)Zcursor)r   ZibeamrA   )r>   r   xyrmenu
make_rmenurB   r   rV   configrmenu_specs
ValueErrorgetattrZentryconfigureZtk_popupZx_rootZy_root)	r   rB   r  Ziswinitemr   	eventnameZverify_stater   r   r   r   rm     s*    zEditorWindow.right_menu_eventClose<<close-window>>c             C   sj   t | jdd}xP| jD ]F}|d |d  }}|d k	rT| j|fdd}|j||d q|j  qW || _d S )Nr   )r   rD   c             S   s   | j | d S )N)event_generate)r>   r  r   r   r   rE     s    z(EditorWindow.make_rmenu.<locals>.command)r   rE   )r]   r>   r  add_commandr   r  )r   r  r  r   r  rE   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   s6   y| j jd}W n tk
r$   dS X |r.dS dS d S )Nz	sel.firstdisablednormal)r>   r   TclError)r   Zindxr   r   r   r    s
    zEditorWindow.rmenu_check_copyc             C   s6   y| j jjd| j d W n tk
r,   dS X dS d S )Nztk::GetSelectionZ	CLIPBOARDr  r  )r>   tkcallr  )r   r   r   r   rmenu_check_paste  s
    zEditorWindow.rmenu_check_pastec             C   s   t j| j dS )zHandle Help 'About IDLE' event.rA   )r   ZAboutDialogr_   )r   rB   r   r   r   ru     s    zEditorWindow.about_dialogc             C   s   t j| jd dS )z&Handle Options 'Configure IDLE' event.ZSettingsrA   )r   ZConfigDialogr_   )r   rB   r   r   r   rv   $  s    zEditorWindow.config_dialogc             C   s"   | j r| j }n| j}tj| dS )zHandle Help 'IDLE Help' event.rA   )r\   r_   r   Zshow_idlehelp)r   rB   parentr   r   r   rs   *  s
    
zEditorWindow.help_dialogc             C   sn   t jd d dkr^ytj| j W qj tk
rZ } ztjdt|| j	d W Y d d }~X qjX nt
j| j dS )Nr3   r4   zDocument Start Failure)titlemessager  rA   )r   rV   rR   	startfilerQ   OSErrorr   r   r   r>   
webbrowseropen)r   rB   whyr   r   r   rt   4  s    $zEditorWindow.python_docsc             C   s   | j jd dS )Nz<<Cut>>rA   )r>   r  )r   rB   r   r   r   ro   ?  s    zEditorWindow.cutc             C   s    | j jdsd S | j jd dS )Nr   z<<Copy>>rA   )r>   Z
tag_rangesr  )r   rB   r   r   r   rp   C  s    zEditorWindow.copyc             C   s   | j jd | j jd dS )Nz	<<Paste>>r   rA   )r>   r  r   )r   rB   r   r   r   rq   J  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   rA   )r>   r   r   r   )r   rB   r   r   r   rx   O  s    zEditorWindow.select_allc             C   s    | j jddd | j jd dS )Nr   z1.0rO   r   rA   )r>   r   r   )r   rB   r   r   r   ry   U  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                sB   | j d@ dkr>yd d   W n tk
r<   Y nX d S )Nr?   r   z	sel.firstr   )r   r  )rB   )
edge_indexedges_tableself_text_indexself_text_mark_setr   r   move_at_edgee  s    z<EditorWindow.move_at_edge_if_selection.<locals>.move_at_edge)r'  r(  )r>   r   r   )r   r)  r-  r   )r)  r*  r+  r,  r   r   Z  s
    z&EditorWindow.move_at_edge_if_selectionc             C   s   | j jd dS )Nz<Meta-Delete>rA   )r>   r  )r   rB   r   r   r   r   n  s    zEditorWindow.del_word_leftc             C   s   | j jd dS )Nz<Meta-d>rA   )r>   r  )r   rB   r   r   r   r   r  s    zEditorWindow.del_word_rightc             C   s   t j| j dS )NrA   )r   findr>   )r   rB   r   r   r   rz   v  s    zEditorWindow.find_eventc             C   s   t j| j dS )NrA   )r   Z
find_againr>   )r   rB   r   r   r   r{   z  s    zEditorWindow.find_again_eventc             C   s   t j| j dS )NrA   )r   Zfind_selectionr>   )r   rB   r   r   r   r}   ~  s    z!EditorWindow.find_selection_eventc             C   s   t j | j| j| j dS )NrA   )r   r>   r   r[   )r   rB   r   r   r   r|     s    z EditorWindow.find_in_files_eventc             C   s   t j | j dS )NrA   )r   r>   )r   rB   r   r   r   r~     s    zEditorWindow.replace_eventc             C   sT   | j }tjdd|d}|d kr"dS |dkr6|j  dS |jdd|  |jd dS )NZGotozGo to line number:)r  rA   r   r   z%d.0)r>   r   r   bellr   r   )r   rB   r>   linenor   r   r   r     s    

zEditorWindow.goto_line_eventc             C   sp   y| j jddj }W n tk
r.   d}Y nX tj| j dd|j}|dk	rl| jr`| jj| n| j	j
| |S )zGet module name from user and open it.

        Return module path or None for calls by open_module_browser
        when latter is not invoked in named editor window.
        z	sel.firstzsel.lastr7   zOpen ModulezAEnter the name of a Python module
to search on sys.path and open:N)r>   r   stripr  r   Z
ModuleNameresultr[   r%  r   r   )r   r9   Z	file_pathr   r   r   open_module  s    
zEditorWindow.open_modulec             C   s   | j   dS )NrA   )r3  )r   rB   r   r   r   rw     s    zEditorWindow.open_module_eventc             C   sJ   | j j}| jjdko|s,| j }|d kr,dS ddlm} |j| j| dS )NZPyShellEditorWindowrA   r   )browser)	r   r   	__class____name__r3  idlelibr4  ZModuleBrowserr\   )r   rB   r   r4  r   r   r   r     s    z EditorWindow.open_module_browserc             C   s   ddl m} |j| j dS )Nr   )pathbrowserrA   )r7  r8  ZPathBrowserr\   )r   rB   r8  r   r   r   r     s    zEditorWindow.open_path_browserc             C   s&   dd l }tjddg}|j|dd dS )Nr   z-cz,from turtledemo.__main__ import main; main()F)shellrA   )
subprocessr   
executablePopen)r   rB   r:  cmdr   r   r   r     s    zEditorWindow.open_turtle_democ             C   sN   |d k	rJ|dkrJ| j jdd|  | j jddd | j jddd | j  d S )Nr   r   z%d.0r   z1.0rO   z
insert +1l)r>   r   r   r   center)r   r0  r   r   r   gotoline  s
    zEditorWindow.gotolinec             C   sb   | st jj|rdS t jjt jj|\}}t jj|dkrBdS | jjdd}|jdo`d|kS )	NT.py.pywz1.0z1.0 lineendz#!python)r@  rA  )	rR   rS   rX   splitextr   normcaser>   r   
startswith)r   r   baseZextr   r   r   r   r     s    zEditorWindow.ispythonsourcec             C   s   | j r| j j|  d | _ d S )N)r[   Zunregister_maybe_terminate)r   r   r   r   
close_hook  s    zEditorWindow.close_hookc             C   s
   || _ d S )N)rG  )r   rG  r   r   r   set_close_hook  s    zEditorWindow.set_close_hookc             C   s2   | j r| j j|  | j  | jj|  | j  d S )N)r[   Zfilename_changed_editr   r_   Zupdate_windowlist_registryr   )r   r   r   r   r     s
    z!EditorWindow.filename_change_hookc             C   sV   | j r
d S | j| jjr"| j | _ | j rR| jj| j | jj| j  | jj| j d S )N)	r   r   r   r   r!   r   removefilterr   r   )r   r   r   r   _addcolorizer  s    
zEditorWindow._addcolorizerc             C   s,   | j s
d S | j j  | jj| j  d | _ d S )N)r   Zremovecolorsr   rI  )r   r   r   r   _rmcolorizer  s
    
zEditorWindow._rmcolorizerc             C   s    | j   | j  tj| j dS )zUpdate the color themeN)rK  rJ  r   r"   r>   )r   r   r   r   r     s    zEditorWindow.ResetColorizer_c             C   sp   |j d| |j|}|r6|| jkr6|j d|d | d|j|krR|jd| n|jd|d  |j| d S )NZERRORz
 wordstart
r   z+1c)r   r   
IDENTCHARSr   r   )r   r>   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 changedr:   r   rH   N)r   r   r\   r>   )r   r   r   r   	ResetFont  s    zEditorWindow.ResetFontc             C   s   t j  | j_}x&|j D ]\}}| jj|f|  qW xF| j D ]:}t j|}|rBx&|j D ]\}}| jj|f|  q^W qBW dS )z/Remove the keybindings before they are changed.N)	r   GetCurrentKeySetr&   default_keydefsitemsr>   Zevent_deleteget_standard_extension_namesGetExtensionBindings)r   keydefsrB   keylistextensionNamexkeydefsr   r   r   RemoveKeybindings  s    
zEditorWindow.RemoveKeybindingsc             C   sV  t j  | j_}| j  x(| j D ]}t j|}|r"| j| q"W i }xR| jjD ]F}i ||d < x4|d D ](}|rj|d ||d  t|d d < qjW qPW x| j	D ]}| j	| }|j
t}|dkrq|d7 }xtd|D ]r}	|j|	dkr|j|	d}
|
r|j|	d}d}||kr.||| kr.|| | }|rt||}
|j|	|
d qW qW dS )	z-Update the keybindings after they are changedr   rD   NrE   acceleratorr   r7   )r]  )r   rS  r&   rT  ri   rV  rW  menudefsr   r   r   r   r   r=   Z	entrycgetget_acceleratorZentryconfig)r   rX  rZ  r[  ZmenuEventDictr6   r  ZmenubarItemrO   r   ZaccelZitemNamerB   r   r   r   ApplyKeybindings#  s<    
(



zEditorWindow.ApplyKeybindingsc             C   s   | j stjddddd| _dS )zCUpdate the indentwidth if changed and not using tabs in this windowr:   rJ   z
num-spacesr<   )r=   N)r   r   rg   r   )r   r   r   r   r   G  s    
z#EditorWindow.set_notabs_indentwidthc             C   s   t j }| jd }|jt}|| jkr8|j| jd | |rr|j  x,|D ]$}| j|d }|j	|d |d qJW || jd< dS )z3Update the additional help entries on the Help menur   rD   r   )r   rE   N)
r   ZGetAllExtraHelpSourcesListr   r   r   r   r   r   "_EditorWindow__extra_help_callbackr  )r   Z	help_listZhelpmenuZhelpmenu_lengthentryr=  r   r   r   r   N  s    



z$EditorWindow.reset_help_menu_entriesc                s   |f fdd	}|S )zCCreate a callback with the helpfile value frozen at definition timec                s   | j dstjj| } tjd d dkrrytj|  W q| tk
rn } ztj	dt
| jd W Y d d }~X q|X n
tj|  d S )Nwwwhttpr3   r4   zDocument Start Failure)r   r!  r  )rc  rd  )rE  rR   rS   rZ   r   rV   r"  r#  r   r   r   r>   r$  r%  )helpfiler&  )r   r   r   display_extra_helpa  s    
$z>EditorWindow.__extra_help_callback.<locals>.display_extra_helpr   )r   re  rf  r   )r   r   Z__extra_help_callback_  s    z"EditorWindow.__extra_help_callbackc                s  g }t jj| jr8t| jdddd}|j }W dQ R X |rjt jj|d }||kr^|j| |jd| g  x4|D ],}d|kst jj|dd  rt j	| qtW  fd
d|D }d}|dt
| }y,t| jdddd}|j| W dQ R X W n\ tk
rR } z>t| jddsBd| j_tjdd| jt| | jd W Y dd}~X nX xt| jjD ]h}|j}	|	jdt xNt|D ]B\}
}|j }| j|}|j|}|	j||
 d | |dd q~W q^W dS )z/Load and update the recent files list and menusrutf_8r   )r%   errorsNrM  r    rD   c                s   g | ]}| kr|qS r   r   ).0rS   )	bad_pathsr   r   
<listcomp>  s    z9EditorWindow.update_recent_files_list.<locals>.<listcomp>Z1234567890ABCDEFGHIJKwrecentfilelist_error_displayedFTzIDLE Warningz|Cannot update File menu Recent Files list. Your operating system says:
%s
Select OK and IDLE will continue without updating.)r   r!  r  r   )r   rE   r   rP   )rR   rS   r   rc   r%  	readlinesabspathremover   appendr   
writelinesr#  r  r\   ro  r   showwarningr   r   r>   r_   rb   r   r   r   	enumeraterstrip#_EditorWindow__recent_file_callbackr  )r   new_fileZrf_listZrf_list_filerS   ZulcharsZrf_fileerrinstancer6   i	file_nameZ
ufile_namecallbackr   )rl  r   r   n  sL    



z%EditorWindow.update_recent_files_listc                s   |f fdd	}|S )Nc                s    j j| d d S )N)Z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 }|r*|r*|d | t }n|r4|}n|r>|}nd}|pL|pL|}| j sfd| }d| }| jj| | jj| d S )Nz - Untitledz*%s*z*%s)short_title
long_title_py_version	get_savedr_   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   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   rR   rS   r   r   )r   r   r   r   r   r    s
    zEditorWindow.short_titlec             C   s   | j | jjpdS )Nr7   )r   r   r   )r   r   r   r   r    s    zEditorWindow.long_titlec             C   s   | j   dS )NrA   )r>  )r   rB   r   r   r   rr     s    z EditorWindow.center_insert_eventr   c             C   sH   | j }| j \}}| j|}|| }td||d  }|jt| d S )NrD   r5   )r>   getwindowlinesr  maxr  r  )r   markr>   r_   botr0  r@   Znewtopr   r   r   r>    s    
zEditorWindow.centerc             C   sN   | j }| jd}| jd}||krF|j dkrFt|d }|| d }||fS )Nz@0,0z@0,65535rD   r@   )r>   r  Zwinfo_heightr<   )r   r>   r_   r  r@   r   r   r   r    s    

zEditorWindow.getwindowlinesc             C   s   | j }tt|j|S )N)r>   r<   r  r   )r   r  r>   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+))r_   Zwm_geometryr   matchlistmapr<   groups)r   Zgeommr   r   r   get_geometry  s    
zEditorWindow.get_geometryc             C   s   | j   dS )NrA   )rj   )r   rB   r   r   r   rl     s    zEditorWindow.close_eventc             C   sH   | j rD| j s:| jj dkr&| jj  | jj  | jj  | j j S d S )Nr  )r   r  r_   r   Z	deiconifylowerZlift	maybesave)r   r   r   r   r    s    


zEditorWindow.maybesavec             C   s    | j  }t|dkr| j  |S )NZcancel)r  r   _close)r   Zreplyr   r   r   rj     s    zEditorWindow.closec             C   s   | j jr| j| j jd tj| j | j  | j j  d | _ d | _| j	rZ| j	jd d | _	d | _
d | _| jj  d | _| jj  | jr| j  d S )N)ry  F)r   r   r   r   Zunregister_callbackr   unload_extensionsrj   r   r   r>   ra   r   r_   ZdestroyrG  )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   s4   x(t | jj D ]}t|dr|j  qW i | _d S )Nrj   )r  r  valueshasattrrj   )r   insr   r   r   r    s    
zEditorWindow.unload_extensionsc             C   sH   xB| j  D ]6}y| j| W q
   tdt| tj  Y q
X q
W d S )NzFailed to load extension)rV  load_extensionprintrepr	traceback	print_exc)r   r9   r   r   r   r    s    z%EditorWindow.load_standard_extensionsc             C   s   t jddS )NT)Zeditor_only)r   ZGetExtensions)r   r   r   r   rV  "  s    z)EditorWindow.get_standard_extension_namesZZzDummyZzzdummyc       	      C   sF  | j j||}y>ytjd| td}W n" ttfk
rH   tj|}Y nX W n  tk
rl   td|  Y nX t||}t	j
|}t|dr| j|j| || }|| j|< |rB| j| x|D ]|}|jdd}x |d d dkr|dd  }qW x"|dd  d	kr|d d }qW |d
 }t||r| jj|t|| qW d S )Nr   )packagez
Failed to import extension: r^  -rL  rD   r   r   Z_eventrP   rP   )extfilesr   	importlibimport_module__package__ImportError	TypeErrorr  r  r   rW  r  r   r^  r  ri   r   r>   rk   )	r   r9   fnamemodclsrX  r  ZveventZ
methodnamer   r   r   r  )  s4    







zEditorWindow.load_extensionc             C   sJ   |d kr| j j}| j}||_x(|j D ]\}}|r&|j|f|  q&W d S )N)r&   rT  r>   rX  rU  r   )r   rX  r>   rB   rY  r   r   r   ri   E  s    zEditorWindow.apply_bindingsc          	   C   s   |dkr| j j}|dkr | j j}| j}| j}x|D ]\}}|j|}|sJq2x|D ]}|sb|j  qP|\}	}
|	dd dk}|r|	dd }	t|	\}}	t||
}||
fdd}|r| j	|
t
}|j|	||||d qP|j|	|||d qPW q2W dS )zAdd appropriate entries to the menus and submenus

        Menus that are absent or None in self.menudict are ignored.
        NrD   !c             S   s   | j | d S )N)r  )r>   r  r   r   r   rE   g  s    z(EditorWindow.fill_menus.<locals>.command)r   r   rE   r]  Zvariable)r   r   rE   r]  )r&   r^  rT  r   r>   r   r   r   r_  get_var_objZ
BooleanVarZadd_checkbuttonr  )r   r^  rX  r   r>   ZmnameZ	entrylistr6   rb  r   r  Zcheckbuttonr   r]  rE   varr   r   r   r   N  s8    




zEditorWindow.fill_menusc             C   s&   | j |}|r|j }|S t|d S )N)r  r   	NameError)r   r9   r  valuer   r   r   getvars  s
    
zEditorWindow.getvarc             C   s(   | j ||}|r|j| nt|d S )N)r  r   r  )r   r9   r  vartyper  r   r   r   setvar{  s    zEditorWindow.setvarc             C   s.   | j j|}| r*|r*|| j | j |< }|S )N)ra   r   r>   )r   r9   r  r  r   r   r   r    s    
zEditorWindow.get_var_objc             C   s,   | j r$| jjd|p"d| jj|kS dS d S )NZTODOSTRINGrD   )r   r>   tag_prevrangeZ	tag_names)r   Z
text_indexr   r   r   is_char_in_string  s    zEditorWindow.is_char_in_stringc             C   s:   y | j jd}| j jd}||fS  tk
r4   dS X d S )Nz	sel.firstzsel.last)NN)r>   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)r>   TK_TABWIDTH_DEFAULTr<   )r   Zcurrentr   r   r   get_tk_tabwidth  s    zEditorWindow.get_tk_tabwidthc             C   sB   | j }| j |kr>|jjdd|d d|jd| }|j|d d S )NrH   Zmeasurez
-displayofn)r  )r>   r  r  r  ZmasterZ	configure)r   Znewtabwidthr>   Zpixelsr   r   r   set_tk_tabwidth  s    
zEditorWindow.set_tk_tabwidthTc             C   sP   |r@|r@| j  }d|  ko"dkn  r.|| _| j| jkr@d| _| j| j d S )Nr5   r   F)guess_indentr   r   r   r  )r   r   Zguessr|  r   r   r   r     s    z#EditorWindow.set_indentation_paramsc       
      C   sP  | j }| j \}}|r6|r6|j|| |jd| dS |jdd}|dkrp|jdddrd|jd n|j  dS |d d	kr|jd dS | j}t|j	|}|d
kst
|d | j | j }d
}	xJ|| jkrP |d d }|	d }	t|j	|}||ks|d d	krP qW |j  |jd|	 d ||k rD|jdd||   |j  dS )Nr   rA   zinsert linestartr7   r   z1.0z	insert-1crD   z 	r   z
insert-%dcr   rP   rP   rP   )r>   r  r   r   r   r   r/  r   r   
expandtabsAssertionErrorr   rd   r   r   r   )
r   rB   r>   r   r   charsr   ZhaveZwantZncharsdeletedr   r   r   r     sD    


z"EditorWindow.smart_backspace_eventc       
   
   C   s   | j }| j \}}|j  z|rV|rVt|t|kr>| j|S |j|| |jd| |jdd}t|| j	\}}|t
|kr| j|| j  n>| jrd}n&t
|j| j	}| j}	d|	||	   }|jd| |jd dS |j  X d S )Nr   zinsert linestartr   r   rA   )r>   r  r   
index2liner   r   r   r   
classifywsr   r   reindent_tor   r   r  r   r   r   )
r   rB   r>   r   r   prefixraw	effectiveZpadr  r   r   r   r     s,    

zEditorWindow.smart_indent_eventc             C   s  | j }| j \}}|j  z|r>|r>|j|| |jd| |jdd}dt| }}x ||k rx|| dkrx|d }qZW ||kr|jdd dS |d | }d}x2|r|d dkr|| jkr|d d }|d }qW |r|jd| d x|jddkr|jd qW |jdd t	|j
d}	tj| j| j}
| jsxj| jD ]`}t|	| d}t|d	 }|j|d}|
j| |
j| j| j|}|d k	s|dkrDP qDW |
j|pd n@|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r6|jd| nh|tjkrR| j|
j  nL|tjkr|
j  dkrz|jd| n| j|
j!  ndst"d|f dS |
j# }|jd| |
j$ r| j%| n|r|
j& r| j'| dS |j(d |j)  X d S )Nr   zinsert linestartr   z 	rD   rM  rA   zinsert - %d charsz.0Zconsolez1.0zbogus continuation type %rrP   rP   )*r>   r  r   r   r   r   r   r   rd   r  r   r   ZParserr   r   r   r   r  r  Zset_codeZ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   rB   r>   r   r   r   r|  r  indentZlnor
  contextZstartatZstartatindexZrawtextZbodrg  r   r   r   r   r     s    






z%EditorWindow.newline_and_indent_eventc             C   s   || j f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   sz   | j  \}}}}xTtt|D ]D}|| }|rt|| j\}}	|	| j }	| j|	||d   ||< qW | j|||| dS )NrA   )
get_regionr   r   r  r   r   _make_blanks
set_region)
r   rB   headtailr  r  rO  r   r  r  r   r   r   r     s    
z EditorWindow.indent_region_eventc       
      C   s   | j  \}}}}xZtt|D ]J}|| }|rt|| j\}}	t|	| j d}	| j|	||d   ||< qW | j|||| dS )Nr   rA   )	r  r   r   r  r   r  r   r  r  )
r   rB   r  r  r  r  rO  r   r  r  r   r   r   r     s    z EditorWindow.dedent_region_eventc             C   sR   | j  \}}}}x,tt|d D ]}|| }d| ||< q"W | j|||| dS )NrD   z##rA   )r  r   r   r  )r   rB   r  r  r  r  rO  r   r   r   r   r     s    z!EditorWindow.comment_region_eventc             C   s   | j  \}}}}xdtt|D ]T}|| }|s0q|d d dkrN|dd  }n|d d dkrj|dd  }|||< qW | j|||| dS )Nr5   z##rD   #rA   )r  r   r   r  )r   rB   r  r  r  r  rO  r   r   r   r   r     s    z#EditorWindow.uncomment_region_eventc             C   s   | j  \}}}}| j }|d kr$d S x\tt|D ]L}|| }|r2t||\}	}
t|
|\}}d| d|  ||	d   ||< q2W | j|||| dS )Nr   r   rA   )r  _asktabwidthr   r   r  divmodr  )r   rB   r  r  r  r  r   rO  r   r  r  ntabsnspacesr   r   r   r     s     $z EditorWindow.tabify_region_eventc             C   s`   | j  \}}}}| j }|d kr$d S x&tt|D ]}|| j|||< q2W | j|||| dS )NrA   )r  r  r   r   r  r  )r   rB   r  r  r  r  r   rO  r   r   r   r     s     z"EditorWindow.untabify_region_eventc             C   sF   | j ddd| j  d d| j  d d	 | jd
rB| j | _d| _dS )NzToggle tabsz
Turn tabs onoffz?
Indent width will be
remains atz 8.z!
 Note: a tab is always 8 columns)r  r   rA   )r  r  )r  r  )r   r   r>   r   )r   rB   r   r   r   r     s    

zEditorWindow.toggle_tabs_eventc             C   s:   | j dd| j| jddd}|r6|| jkr6| j r6|| _dS )NzIndent widthz6New indent width (2-16)
(Always use 8 when using tabs)r5      )r  initialvalueminvaluemaxvaluerA   )r   r>   r   r   )r   rB   r   r   r   r   r     s    z%EditorWindow.change_indentwidth_eventc             C   sn   | j }| j \}}|r8|r8|j|d }|j|d }n|jd}|jd}|j||}|jd}||||fS )Nz
 linestartz-1c lineend +1czinsert linestartzinsert lineend +1crM  )r>   r  r   r   r   )r   r>   r   r   r  r  r  r  r   r   r   r    s    


zEditorWindow.get_regionc             C   sx   | j }dj|}||kr$|j  d S |jddd |jd| |j  |j|| |j|| |j  |j	d|d d S )NrM  r   z1.0rO   r   )
r>   rT   r/  r   r   r   r   r   r   r   )r   r  r  r  r  r>   newcharsr   r   r   r    s    
zEditorWindow.set_regionc             C   s2   | j r&t|| j\}}d| d|  S d| S d S )Nr   r   )r   r  r   )r   r  r  r  r   r   r   r    s    zEditorWindow._make_blanksc             C   sJ   | j }|j  |jdddr(|jdd |r>|jd| j| |j  d S )Nzinsert linestartz!=r   )r>   r   r   r   r   r  r   )r   r   r>   r   r   r   r    s    zEditorWindow.reindent_toc             C   s   | j dd| j| jdddS )Nz	Tab widthzColumns per tab? (2-16)r5   r  )r  r  r  r  )r   r>   r   )r   r   r   r   r    s    zEditorWindow._asktabwidthc             C   sP   t | j| jj \}}|r@|r@t|| j\}}t|| j\}}nd }}|| S )Nr   )IndentSearcherr>   r   r   r  )r   openerZindentedr  ZindentsmallZindentlarger   r   r   r  $  s    zEditorWindow.guess_indent)NNNN)N)r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r  r  N)N)N)N)N)N)N)N)N)N)N)r   )r   )N)NN)N)N)T)r6  
__module____qualname__Zidlelib.percolatorr    Zidlelib.colorizerr!   r"   Zidlelib.undor#   Zidlelib.iomenur$   r%   r7  r&   Zidlelib.statusbarr'   Zidlelib.autocompleter(   Zidlelib.autoexpandr)   Zidlelib.calltipr*   Zidlelib.codecontextr+   Zidlelib.paragraphr,   Zidlelib.parenmatchr-   Zidlelib.rstripr.   Zidlelib.squeezerr/   Zidlelib.zoomheightr0   r   getfilesystemencodingr   rQ   r   r   r   r   r   r   r   rh   r   r   rn   r  rm   r  r  r  r  r  ru   rv   rs   rt   ro   rp   rq   rx   ry   r   r   r   rz   r{   r}   r|   r~   r   r3  rw   r   r   r   r?  r   rG  rH  r   rJ  rK  r   stringZascii_lettersZdigitsrN  rQ  rR  r\  r`  r   r   ra  r   rx  r   r  r  r  r  r  rr   r>  r  r  r  rl   r  rj   r  r   r  r  rV  r  r  ri   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
  
  +



		$.	
		%	,#j	
	r   c             C   s   t t| S )N)r<   r  )r   r   r   r   r  .  s    r  c             C   s\   d }}xJ| D ]B}|dkr,|d }|d }q|dkrN|d }|| d | }qP qW ||fS )Nr   r   rD   r   r   )sr   r  r  Zchr   r   r   r  6  s    

r  c               @   s8   e Zd Zdd Zdd ZejejdfddZdd Z	dS )r  c             C   s(   || _ || _d | _| _d  | _| _d S )Nr   )r>   r   r|  finishedblkopenlineindentedline)r   r>   r   r   r   r   r   K  s    zIndentSearcher.__init__c             C   sL   | j r
dS | jd  }| _t|d }| jj|ddr:dS | jj||d S )Nr7   rD   z.0z>=rO   z lineend+1c)r  r|  r  r>   r   r   )r   r|  r  r   r   r   readlineQ  s    zIndentSearcher.readlineclassdefforiftrywhilec	       	      C   s>   | j rn2||kr ||kr || _n||kr:| jr:|| _d| _ d S )NrD   )r  r  r  )	r   r=   tokenstartrO   r   INDENTNAMEZOPENERSr   r   r   
tokeneaterZ  s    zIndentSearcher.tokeneaterc             C   sl   t j}| jt _zHy(t j| j}x|D ]}| j|  q$W W n t jtfk
rR   Y nX W d |t _X | j| j	fS )N)
tokenizetabsizer   generate_tokensr  r  
TokenErrorSyntaxErrorr  r  )r   Zsave_tabsizetokensr  r   r   r   r   f  s    

zIndentSearcher.runN)r  r  r  r  r  r  )
r6  r  r  r   r  r  r  r  r  r   r   r   r   r   r  D  s   
	r  c             C   s6   | j d}|dkr.| d | | |d d   } || fS )NrL  r   rD   )r.  )r  r|  r   r   r   r   x  s    
r   []/)ZbracketleftZbracketrightZslashc             C   s   | j |}| s tj r$|dkr$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>>r7   r   z-[a-z]\bc             S   s   | j  j S )N)groupupper)r  r   r   r   rC     s    z!get_accelerator.<locals>.<lambda>z\b\w+\bc             S   s   t j| j | j S )N)keynamesr   r   )r  r   r   r   rC     s    zKey-ZCancelz
Ctrl-BreakzControl-zCtrl-r  +z><r   r   r   >   r  r  r  )r   r	   Z	isCocoaTkr   r   )rX  r  rY  r  r   r   r   r_    s"    
  r_  c             C   s4   | j }|jddd |jddd |jddd d S )	NZtcl_wordBreakAfterza br   r   Ztcl_wordcharsz\wZtcl_nonwordcharsz\W)r  r  )r\   r  r   r   r   fixwordbreaks  s    r  c             C   s   | }t | tjdd  r&tjd }nd }tj|d  t||d}|j}d|d< x,tdD ] }|jdd| t	| d  qZW d S )	NrD   )r\   r   
   r@      r   z  rM  )
r  r   argvr	   ZsetupAppr   r>   r   r   r   )r  r\   r   r   r>   r|  r   r   r   _editor_window  s    r  __main__)r:   zidlelib.idle_test.test_editorr5   F)	verbosityexit)r   )6Zimportlib.abcr  importlib.utilrR   rV   r  r  r  r$  ZtkinterZtkinter.ttkr   Ztkinter.simpledialogZsimpledialogr   Ztkinter.messageboxZ
messageboxr   Zidlelib.configr   r7  r   r   r   r   r	   Zidlelib.multicallr
   r   r   r   r   r   r  Zpython_versionr  r   r   r   objectr   r  r  r  r   r  r_  r  r  r6  Zunittestr:   Zidlelib.idle_test.htestr   r   r   r   r   <module>   sn   


            4
	
