B
    v9aŊ                @   sJ  d dl mZmZmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ d dl,m-Z. d dl/m0Z1 d dl m2Z2 d dl3m4Z4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z; d d	l<m=Z=m>Z> d d
l?m@Z@ d dlAmBZB d dlCmDZD d dlEmFZF d dlGmHZH d dlImJZJ e5 ZKeBeDeFeHeJfZLG dd deZMdaNG dd de!ZOG dd de!ZPG dd de!ZQG dd de!ZRG dd dZSeS ZTdZUddd d!d"ZVd#d$ ZWG d%d& d&e!ZXeYd'krFd d(lZm[Z[ e[d)d*d+d, d d-l\m]Z] e]eM dS ).    )ToplevelListboxTextScaleCanvas	StringVar
BooleanVarIntVarTRUEFALSETOPBOTTOMRIGHTLEFTSOLIDGROOVENONEBOTHXYWEEWNSNSEWNW
HORIZONTALVERTICALANCHORACTIVEEND)Frame
LabelFrameButtonCheckbuttonEntryLabel
OptionMenuNotebookRadiobutton	ScrollbarStyleN)
messagebox)idleConfConfigChanges)GetKeysDialog)DynOptionMenu)macosx)SectionName
HelpSource)	view_text)AutoComplete)CodeContext)
ParenMatch)FormatParagraph)Squeezerc                   s   e Zd Zd$dddddZdd Zdd	 Zd
d Zdd Zdd Z fddZ	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Z  ZS )%ConfigDialog F)_htest_utestc            C   s   t | | || _|ri |_|s(|   | jdd | |p>d | d }| |s\dnd }| 	d| d|  | 
  | jttd | | | d	| j | jj  t  |s|   |   |   d S )
N   )borderwidthzIDLE Preferences         +)heightwidthZWM_DELETE_WINDOW)r   __init__parentinstance_dictZwithdraw	configuretitleZwinfo_rootxZwinfo_rootyZgeometrycreate_widgetsZ	resizabler   Z	transientZprotocolcancelfontpagefontlistZ	focus_settracersattachZgrab_setZwm_deiconifyZwait_window)selfrG   rJ   r<   r=   xy rT   "/usr/lib/python3.7/configdialog.pyrF   -   s*    
zConfigDialog.__init__c             C   s   t |  | _}t|| _t|| j| _t|| _t|| _	| 
 | _|j| jdd |j| jdd |j| jdd |j| j	dd |j| jdd |  |jtttd |  jtd d S )	Nz
Fonts/Tabs)text
Highlightsz Keys z	 General Z
Extensions)sideexpandfill)rX   )r(   noteHighPagehighpageFontPagerM   KeysPageZkeyspageGenPageZgenpagecreate_page_extensionsZextpageaddZenable_traversalpackr   r
   r   create_action_buttonsr   )rQ   r[   rT   rT   rU   rK   ]   s    



zConfigDialog.create_widgetsc             C   s   t  ri }nddi}t| dd}t|dd}xRd| jfd| jfd| jfd| jffD ]*\}}t|f||td	|j	t
d
d qTW t|dddj	td |j	td |S )Npadding)         )re   ZOkZApplyZCancelZHelp)rV   command	takefocusr>   )rX   padxr   )rD   r?   )rX   )r1   ZisAquaTkr!   okapplyrL   helpr#   r   rc   r   r   r   )rQ   Zpadding_argsZouterZbuttonsZtxtcmdrT   rT   rU   rd   |   s    z"ConfigDialog.create_action_buttonsc             C   s   |    |   d S )N)rm   destroy)rQ   rT   rT   rU   rl      s    zConfigDialog.okc             C   s$   |    t  |   |   d S )N)deactivate_current_configchangessave_allsave_all_changed_extensionsactivate_config_changes)rQ   rT   rT   rU   rm      s    zConfigDialog.applyc             C   s   |    d S )N)rp   )rQ   rT   rT   rU   rL      s    zConfigDialog.cancelc                s&   | j jdda|   t   d S )Nz1.0end)rM   font_samplegetfont_sample_textZgrab_releasesuperrp   )rQ   )	__class__rT   rU   rp      s    zConfigDialog.destroyc             C   s8   | j j| j  dd }t| dtt|d d d S )NrV   )optionzHelp for IDLE preferencesr;   )rJ   rV   )r[   ZtabZselectstripr4   help_common
help_pagesrx   )rQ   ZpagerT   rT   rU   rn      s    	zConfigDialog.helpc             C   s&   | j j }x|D ]}|  qW d S )N)rG   rH   keysZRemoveKeybindings)rQ   win_instancesinstancerT   rT   rU   rq      s    
z&ConfigDialog.deactivate_current_configc             C   s\   | j j }x4|D ],}|  |  |  |  |  qW xtD ]}|	  qHW d S )N)
rG   rH   r   ZResetColorizerZ	ResetFontZset_notabs_indentwidthZApplyKeybindingsZreset_help_menu_entriesreloadablesreload)rQ   r   r   klassrT   rT   rU   ru      s    

z$ConfigDialog.activate_config_changesc             C   sh  | j }t| j}tjd | _tjd | _| t	| _	| 
  t| | _|jddd |jddd t|| jdd| _| jd| j t|| jjd	}|j| j_t|d
d
d| _| jjdddd |jdddd | jjdddddgd |jdd i | _d | _| | _| j| _d}x.t| j D ] }| !| |d | d }qW | j| | j"d | d  |S )N
extensionsr      )weightrh   Zbrowse)ZlistvariableZ
selectmodez<<ListboxSelect>>)ri      )rE   rD   Znws)columnrowstickynsnsew
   )r   r   r   rk   )re   r;   {z} )#rG   r!   r[   r-   
defaultCfgext_defaultCfguserCfgext_userCfgregisteris_intload_extensionsr   Zextension_namesrowconfigurecolumnconfigurer   extension_listbindextension_selectedr*   yviewsetyscrollcommandr"   details_framegridrI   config_framecurrent_extensionZ
outerframeZtabbed_page_setsortedr   create_extension_frameZselection_set)rQ   rG   frameZscrollZ	ext_namesext_namerT   rT   rU   ra      s>    





z#ConfigDialog.create_page_extensionsc       
      C   s^  i | _ xtjddD ]}g | j |< qW x0| j D ]$}t| j|}dd |D }x|D ]}|| qZW || }x|D ]}| jj||dd}yddd| }d}W nB tk
r   yt	|}d	}W n t
k
r   |}d }Y nX Y nX y| jj|||d|d
}W n t
k
r   |}Y nX t| }	|	t| | j | |||||	d qzW q0W d S )NF)Zactive_onlyc             S   s   g | ]}| d r|qS )Zenable)
startswith).0opt_namerT   rT   rU   
<listcomp>8  s    z0ConfigDialog.load_extensions.<locals>.<listcomp>T)raw)TrueFalseboolint)typer   default)namer   r   valuevar)r   r-   ZGetExtensionsr   r   ZGetOptionListremoveGetKeyErrorr   
ValueErrorr   r   r   strappend)
rQ   r   Zopt_listZenablesr   Zdef_strZdef_objZopt_typer   r   rT   rT   rU   r   -  sF    


zConfigDialog.load_extensionsc             C   s   | j  }|r| j |}|d ks,|| jkrV| jrV| jjdd | j| j   d | _|r| jj|d | j| jdddd || _d S )Nr;   )rV   r   r   )r   r   r   )	r   curselectionrx   r   r   configr   Zgrid_forgetr   )rQ   eventZnewselrT   rT   rU   r   [  s    
zConfigDialog.extension_selectedc             C   s   t | jddd}|| j|< |j}xt| j| D ]\}}t||d d}|j|dtd |d }|d d	krt	||d
dddj|dt
dd q0|d dkrt||d| jdfddj|dtdd q0t||ddj|dtdd q0W d S )Nr   )rD   rE   r   )rV   r   )r   r   r   r   r   r   r   r      )variableonvalueoffvaluerE   r      )r   r   r   rk   r   keyz%Pr   )textvariableZvalidateZvalidatecommandrE      )r   rE   )VerticalScrolledFramer   r   interior	enumerater   r&   r   r   r$   r   r%   r   r   )rQ   r   fZ
entry_arear   optZlabelr   rT   rT   rU   r   j  s$    
z#ConfigDialog.create_extension_framec             C   sX   |d }|d }|d    p"|}|d | ||krH| j||S | j|||S )Nr   r   r   )rx   r}   r   r   ZRemoveOption	SetOption)rQ   sectionr   r   r   r   rT   rT   rU   set_extension_value  s    z ConfigDialog.set_extension_valuec             C   sN   d}x6| j D ],}| j | }x|D ]}| ||r d}q W qW |rJ| j  d S )NFT)r   r   r   ZSave)rQ   Zhas_changesr   optionsr   rT   rT   rU   rt     s    	

z(ConfigDialog.save_all_changed_extensions)r;   )__name__
__module____qualname__rF   rK   rd   rl   rm   rL   rp   rn   rq   ru   ra   r   r   r   r   rt   __classcell__rT   rT   )r{   rU   r:   )   s    0&
>.r:   u^  <ASCII/Latin1>
AaBbCcDdEeFfGgHhIiJj
1234567890#:+=(){}[]
¢£¥§©«®¶½ĞÀÁÂÃÄÅÇÐØß

<IPA,Greek,Cyrillic>
ɐɕɘɞɟɤɫɮɰɷɻʁʃʆʎʞʢʫʭʯ
ΑαΒβΓγΔδΕεΖζΗηΘθΙιΚκ
БбДдЖжПпФфЧчЪъЭэѠѤѬӜ

<Hebrew, Arabic>
אבגדהוזחטיךכלםמןנסעף
ابجدهوزحطي٠١٢٣٤٥٦٧٨٩

<Devanagari, Tamil>
०१२३४५६७८९अआइईउऊएऐओऔ
௦௧௨௩௪௫௬௭௮௯அஇஉஎ

<East Asian>
〇一二三四五六七八九
汉字漢字人木火土金水
가냐더려모뵤수유즈치
あいうえおアイウエオ
c                   sV   e Zd Z fddZdd Zdd Zdd Zd	d
 ZdddZdd Z	dd Z
  ZS )r^   c                s0   t  | |j| _|   |   |   d S )N)rz   rF   highlight_samplecreate_page_font_tabload_font_cfgload_tab_cfg)rQ   masterr]   )r{   rT   rU   rF     s
    zFontPage.__init__c       
      C   s~  t t| | j| _t t| | j| _t t| | j| _t t| d| _	t
| dtdd}t
| dtdd}t
| dtdd}t|}t|}t|tdd}t|d	d
td| _| jd| j | jd| j | jd| j t|}|j| jjd | jj|jd t|dd}t|| jd | _t|| jdddd| _t|ddd| _| jtt  t|tdd}	t!|| j	ddddd| _"| j#ddd |j$ddddd |j$dddddd d! |j$ddddd"d# |j%t&ddt'd$ |j%t&ddt'd$ |j%t&t(d% | jj%tt)t'd& |j%tt*d' |j%tt(d% | jj%tt(d% | jj%tt(dd( | jj%t)t+d) |	j%t&t(dd( | j"j%t&dt'd* d S )+N)mainIndentz
num-spacesrh   z Shell/Editor Font )r?   reliefrV   z Font Sample (Editable) z Indentation Width zFont Face :)ZjustifyrV   r   T)rD   rj   exportselectionz<ButtonRelease-1>z<KeyRelease-Up>z<KeyRelease-Down>)ri   )r   zSize :)rV   r   r   ZBold)r   r   r   rV   r@   )rE   rD   zPython Standard: 4 Spaces!Z
horizontal   )r   orientZtickintervalZfrom_to)r   r>   )r   r   rk   padyr   )r   r   Zrowspanrk   r   r   Zew)r   r   rk   r   r   )rX   rk   r   rZ   )rX   anchor)rX   rY   rZ   )rX   rZ   )rX   r   rk   )rY   rZ   )rX   rk   rZ   ),rO   rb   r   var_changed_font	font_name	font_sizer   	font_boldr	   	space_numr"   r   r!   r&   r   r   r   rN   r   on_fontlist_selectr*   r   r   r   r0   sizelistr$   Zbold_toggler   rw   insertr    ry   r   Zindent_scaler   r   rc   r   r   r   r
   r   r   )
rQ   Z
frame_fontZframe_sampleZframe_indentZframe_font_nameZframe_font_paramZfont_name_titleZscroll_fontZfont_size_titleZindent_titlerT   rT   rU   r     sh    .zFontPage.create_page_font_tabc       	      C   s   t | dd}|d  }|d }|d dk}tt| }|  x|D ]}| jt	| qJW | j
| dd |D }y>||}| j| | j| | j| | j| W n tk
r   Y nX | jd	| | j| |   d S )
Nr   EditorWindowr   r   rh   Zboldc             S   s   g | ]}|  qS rT   )lower)r   srT   rT   rU   r   ^  s    z*FontPage.load_font_cfg.<locals>.<listcomp>)7891011121314Z16Z18Z20Z22Z25Z29Z34Z40)r-   ZGetFontr   listtkFontZfamiliessortrN   r   r    r   r   indexsee
select_setselect_anchorZactivater   r   SetMenur   set_samples)	rQ   Zconfigured_fontr   r   r   ZfontsfontZlc_fontsZcurrent_font_indexrT   rT   rU   r   L  s,    

zFontPage.load_font_cfgc             G   sZ   | j  }tddd| | j }tddd| | j }tddd| |   d S )Nr   r   r   z	font-sizez	font-bold)r   rx   rr   
add_optionr   r   r   )rQ   paramsr   rT   rT   rU   r   o  s    


zFontPage.var_changed_fontc             C   s0   | j |jjdkrtnt}| j|  d S )NZ
KeyRelease)	rN   rx   r   r   r   r   r   r   r   )rQ   r   r   rT   rT   rU   r   ~  s    zFontPage.on_fontlist_selectNc             C   sH   | j  }| j rtjntj}|| j |f}|| jd< || jd< d S )Nr   )	r   rx   r   r   ZBOLDZNORMALr   rw   r   )rQ   r   r   Zfont_weightZnew_fontrT   rT   rU   r     s
    

zFontPage.set_samplesc             C   s$   t jdddddd}| j| d S )Nr   r   z
num-spaces   r   )r   r   )r-   	GetOptionr   r   )rQ   r   rT   rT   rU   r     s    zFontPage.load_tab_cfgc             G   s   | j  }tddd| d S )Nr   r   z
num-spaces)r   rx   rr   r   )rQ   r   r   rT   rT   rU   var_changed_space_num  s    
zFontPage.var_changed_space_num)N)r   r   r   rF   r   r   r   r   r   r   r  r   rT   rT   )r{   rU   r^     s   m#

r^   c                   s   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Z  ZS )+r\   c                s2   t  | |j| _t|| _|   |   d S )N)rz   rF   r   cdr+   stylecreate_page_highlightload_theme_cfg)rQ   r   )r{   rT   rU   rF     s
    
zHighPage.__init__c       
         s  ddddddddd	d
dddddd _ tt  j _tt  j _t  _	tt  j
 _tt  j _tt  j _t dtdd}t dtdd}t|tdddddtdtd
 } _|ddd  |dd d  d!}x$|D ]}|t|d |d  q W x8 j D ].}|f fd"d#	}| j | d d$| q(W d%|d&<  jjd'dd(d) t|d'd* _t|}t jd+ j d, _!t" j jd dd- _#t$| j	dd. j%d/ _&t$| j	dd0 j%d/ _' j	(d t|d1 j)d, _*t+|d2d3}	t$| jd j,d4d5 _-t$| jd j,d6d5 _.t"| jd d d7 _/t"| jd d d7 _0t|d8 j1d, _2t+|dd9 _3|j4t5d:d:t6t7d; |j4t8d:d:t9d<  jj4t8d:d:t6t9d; |j4t8d:dd=  jj4t8d:d:t6t7d;  j!j4t8t6t9d>d?d@  j#j4t8t6t9d>dAd@  j&j4t5t:dB  j'j4t;t<dB  j*j4t=t9d:d:dC |	j4t8t<d:d:dD  j-j4t8t<d:dE  j.j4t8t<d:ddD  j/j4t8t9d:d:dC  j0j4t8t9t<d:d:dF  j2j4t8t9d:d:dC  j3j4t8t9d:dG d S )HN)normalZ00)contextZ01)keywordZ02)
definitionZ03)builtinZ04)commentZ05)stringZ06)hiliteZ07)hitZ08)cursorZ09)breakr   )consoler   )errorr   )stdoutr   )stderrr   )zNormal TextzCode ContextzPython KeywordszPython DefinitionszPython BuiltinszPython CommentszPython StringszSelected Textz
Found TextCursorzEditor BreakpointzShell Normal TextzShell Error TextzShell Stdout TextzShell Stderr Textrh   z Custom Highlighting )r?   r   rV   z Highlighting Theme r   )Zcourier   r;   Zhand2      r   )	r   r?   r   r  rE   rD   rj   highlightthicknesswrapz<Double-Button-1>c             S   s   dS )Nr  rT   )erT   rT   rU   <lambda>L      z0HighPage.create_page_highlight.<locals>.<lambda>z<B1-Motion>c             S   s   dS )Nr  rT   )r  rT   rT   rU   r  M  r  )#)
r  )z#you can click herer  )r   r  )z#to choose itemsr  )r   r  )zcode context sectionr	  )z

r  )defr
  ) r  )funcr  )z(param):
  r  )z"""string"""r  )z

  var0 = r  )z'string'r  )z

  var1 = r  )z
'selected'r  )z

  var2 = r  )z'found'r  )z

  var3 = r  )r   r  )(r  )Noner
  )z)
r  )z  breakpoint("line")r  )z

r  )z error r  )r"  r  )zcursor |r  )z
 r  )shellr  )r"  r  )r  r  )r"  r  )r  r  )z

r  c                s    j | d S )N)highlight_targetr   )r   elem)rQ   rT   rU   temd  s    z+HighPage.create_page_highlight.<locals>.temz<ButtonPress-1>disabledstatezframe_color_set.TFrameZsolid)r?   r   )r  zChoose Color for :)rV   ri   )r  Z
Foreground)r   r   rV   ri   Z
BackgroundzSave as New Custom Themez	Select : )rV   za Built-in Theme)r   r   ri   rV   za Custom Theme)ri   zDelete Custom Theme)r?   r>   )rX   rk   r   rY   rZ   )rX   rk   r   rZ   )rX   rk   r   r   r  )rX   rY   rZ   rk   r   rg   )rX   r   )rX   rZ   rk   r   )rX   r   rk   r   )rX   r   rk   )rX   rZ   r   rk   r   )rX   rZ   r   )>theme_elementsrO   rb   r   var_changed_builtin_namebuiltin_namevar_changed_custom_namecustom_namer   fg_bg_togglevar_changed_colorcolorvar_changed_theme_sourcetheme_sourcevar_changed_highlight_targetr'  r"   r   r   r   r   r   r   r   r   r    Ztag_bindr  rI   r!   frame_color_setr#   	get_colorZbutton_set_colorr0   
targetlistr)   set_color_sample_bindingfg_onbg_onr   save_as_new_themeZbutton_save_customr&   set_theme_typeZbuiltin_theme_oncustom_theme_onbuiltinlist
customlistdelete_custombutton_delete_customtheme_messagerc   r   r
   r   r   r   r   r   r   r   )
rQ   frame_customZframe_themerV   Ztext_and_tagsZtexttagelementr)  Zframe_fg_bg_toggleZtheme_type_titlerT   )rQ   rU   r    s    v





zHighPage.create_page_highlightc          	      s.   j tjdddddd t } j  rtdd}|   j	|| tdd}|  |s j
d	  jd
 qވ j	||d  nHtdd}|   j	|| tdd}|   j	||d     t j }|j fddd  j	||d        d S )Nr   Themer   r   r   )r   r   	highlightuser)r*  z- no custom themes -r   c                s    j |  d S )Nr   )r,  )rR   )rQ   rT   rU   r    r  z)HighPage.load_theme_cfg.<locals>.<lambda>)r   )r5  r   r-   r  ZCurrentThemerx   GetSectionListr   r@  r   r?  r+  r0  rA  r>  r   r,  r   r9  paint_theme_sampleset_highlight_target)rQ   current_option	item_listZtheme_namesrT   )rQ   rU   r    s2    

zHighPage.load_theme_cfgc             G   s   d}| j  }||krXtddd|kr<tddd|d  tddd| d| jd< n*tddd| tdddd	 d	| jd< |   d S )
N)zIDLE ClassiczIDLE Newr   rG  r   r   name2zNew theme, see HelprV   r;   )r.  rx   r-   r  rr   r   rD  rK  )rQ   r   Z
old_themesr   rT   rT   rU   r-    s    

z!HighPage.var_changed_builtin_namec             G   s.   | j  }|dkr*tddd| |   d S )Nz- no custom themes -r   rG  r   )r0  rx   rr   r   rK  )rQ   r   r   rT   rT   rU   r/    s    
z HighPage.var_changed_custom_namec             G   s4   | j  }tddd| |r(|   n|   d S )Nr   rG  r   )r5  rx   rr   r   r-  r/  )rQ   r   r   rT   rT   rU   r4    s
    

z!HighPage.var_changed_theme_sourcec             G   s   |    d S )N)on_new_color_set)rQ   r   rT   rT   rU   r2    s    zHighPage.var_changed_colorc             G   s   |    d S )N)rL  )rQ   r   rT   rT   rU   r6    s    z%HighPage.var_changed_highlight_targetc             C   s\   | j  r,d| jd< d| jd< | jd n,d| jd< | jd d| jd< | jd d S )Nr  r+  r*  )r*  )z	!disabled)r5  rx   r@  rA  rC  r+  r?  )rQ   rT   rT   rU   r>    s    




zHighPage.set_theme_typec             C   s   | j  }| j| jd d}tj| d| |d\}}|r||kr| j rzd}| |}|sbd S | 	| | j
| n| j
| d S )Nr  
backgroundzPick new color for : )rG   rJ   Zinitialcolorz_Your changes will be saved as a new Custom Theme. Enter a name for your new Custom Theme below.)r'  rx   r  lookupr7  tkColorChooserZaskcolorr5  get_new_theme_name
create_newr3  r   )rQ   targetZ
prev_colorZ	rgbTupletZcolor_stringmessage	new_themerT   rT   rU   r8  (  s    



zHighPage.get_colorc             C   s~   | j  }| jjd|d | j r(dnd}| j| j  d }| jj|f||i | j	 }|d | }t
d||| d S )Nzframe_color_set.TFrame)rQ  
foregroundrQ  r   -rH  )r3  rx   r  rI   r1  r,  r'  r   
tag_configr0  rr   r   )rQ   Z	new_colorplaneZsample_elementthemeZtheme_elementrT   rT   rU   rP  N  s    

zHighPage.on_new_color_setc             C   s,   t ddt dd }t| d||j}|S )NrI  rH  r   zNew Custom Theme)r-   rJ  r2   result)rQ   rW  
used_namesrX  rT   rT   rU   rT  Y  s
    
zHighPage.get_new_theme_namec             C   s   |  d}|r| | d S )NzNew Theme Name:)rT  rU  )rQ   new_theme_namerT   rT   rU   r=  a  s    
zHighPage.save_as_new_themec             C   s   | j  rd}| j }nd}| j }t||}|td krftd | }x|D ]}|| ||< qRW | || tdd}|	  | j
|| | j d |   d S )Nr   rI  rH  r   )r5  rx   r.  r0  r-   ZGetThemeDictrr   save_newrJ  r   rA  r   r   r>  )rQ   r`  Z
theme_type
theme_namerX  Ztheme_changesrF  Zcustom_theme_listrT   rT   rU   rU  l  s     


zHighPage.create_newc             C   sd   | j  dkr4| jd | jd | jd n$| jd | jd | jd |   d S )Nr  )r*  r   )z	!disabled)r'  rx   r;  r+  r<  r1  r   set_color_sample)rQ   rT   rT   rU   rL    s    zHighPage.set_highlight_targetc             G   s   |    d S )N)rc  )rQ   argsrT   rT   rU   r:    s    z!HighPage.set_color_sample_bindingc             C   sH   | j | j  d }| j r"dnd}| j||}| jjd|d d S )Nr   rY  rQ  zframe_color_set.TFrame)rQ  )r,  r'  rx   r1  r   Ztag_cgetr  rI   )rQ   tagr\  r3  rT   rT   rU   rc    s    zHighPage.set_color_samplec             C   s   | j  r| j }n
| j }x| jD ]}| j| d }t||}|dkrbt|dd |d< |td krtd | }|d |kr||d  |d< |d |kr||d  |d< | jj	|f| q(W | 
  d S )	Nr   r  r  rQ  rH  z-foregroundrY  z-background)r5  rx   r.  r0  r,  r-   ZGetHighlightrr   r   r[  rc  )rQ   r]  Zelement_titlerF  ZcolorsZ
theme_dictrT   rT   rU   rK    s"    

zHighPage.paint_theme_samplec             C   sN   t jd |s t jd | x(|D ] }|| }t jd ||| q&W d S )NrH  )r-   r   has_sectionadd_sectionr   )rQ   rb  r]  rF  r   rT   rT   rU   ra    s
    
zHighPage.save_newc             O   s   t j||S )N)r,   askyesno)rQ   rd  kwargsrT   rT   rU   rh    s    zHighPage.askyesnoc             C   s   | j  }d}| jd|| | ds&d S | j  td| tdd}|	  |sp| j
d | j|d n| j||d  | jtjd	 d
d | jtjd	 d
d t  | j  | j  |   d S )Nz.Are you sure you wish to delete the theme %r ?zDelete Theme)rG   rH  rI  )r*  z- no custom themes -r   r   rG  r   r   )r0  rx   rh  r  rq   rr   delete_sectionr-   rJ  r   r?  r+  rA  r   r5  r   r   r   r.  rs   rt   ru   r>  )rQ   rb  delmsgrN  rT   rT   rU   rB    s&    



zHighPage.delete_custom)r   r   r   rF   r  r  r-  r/  r4  r2  r6  r>  r8  rP  rT  r=  rU  rL  r:  rc  rK  ra  rh  rB  r   rT   rT   )r{   rU   r\     s,    w4&((r\   c                   s   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zedd Zdd  Zd!d" Z  ZS )#r_   c                s(   t  | |j| _|   |   d S )N)rz   rF   r   r  create_page_keysload_key_cfg)rQ   r   )r{   rT   rU   rF   4  s    zKeysPage.__init__c                s"  t t| | j| _t t| | j| _t t| | j| _	t t| | j
| _t| dtdd}t| dtdd t|}t|dd}t|}t|td}t|ttd| _| jd	| j | jj|d
< | jj|d
< |j| jd< |j| jd< t|d| jdd| _ fddtdD }t|d | j	d| jdd| _ t|d | j	d| jdd| _!t"|d | jd d d| _#t"|d | jd d d| _$t|d d| j%d| _&t|d d| j'd| _(t|d dd| _)|j*t+ddt,t-d  j*t+ddt-d | jj*t+t.ddd |j*t/ddt,t-d |j0ddd  |j1ddd  |j2dddt3d! | jj2ddt4d" |j2ddt5d" |j2ddt6d" | j j2ddt3t5 d" | j!j2ddt3t5 d" | j#j2ddt4d" | j$j2ddt4d" | j)j2ddt4ddd# | j&j*t/t.d$dd% | j(j*t/t.d$dd% |d j*t7t-d$d& |d j*t7t.d$dd' d S )(Nrh   z Custom Key Bindings )r?   r   rV   z	 Key Set zAction - Key(s))rV   )r   )rj   r   z<ButtonRelease-1>ri   r   ZxscrollcommandzGet New Keys for Selectionr*  )rV   ri   r+  c                s   g | ]}t  d ddqS )rh   r   )re   r?   )r!   )r   i)frame_key_setsrT   rU   r     s   z-KeysPage.create_page_keys.<locals>.<listcomp>r   r   zUse a Built-in Key Set)r   r   ri   rV   zUse a Custom Key Set)ri   zDelete Custom Key Set)rV   ri   zSave as New Custom Key Set)r?   r>   )rX   rk   r   rY   rZ   )rX   rk   r   rZ   )rX   rZ   rk   r   )r   )r   r   Z
columnspanr   )r   r   r   )r   r   r   rk   r   T)rX   rZ   rY   rk   )rX   rZ   rY   )rX   rZ   rY   r   )8rO   rb   r   r-  r.  r/  r0  r   var_changed_keyset_sourcekeyset_sourcevar_changed_keybinding
keybindingr"   r   r!   r&   r*   r   r   r   bindingslistr   on_bindingslist_selectr   Zxviewr   r#   get_new_keysbutton_new_keysranger)   set_keys_typeZbuiltin_keyset_oncustom_keyset_onr0   r@  rA  delete_custom_keysbutton_delete_custom_keyssave_as_new_key_setZbutton_save_custom_keyskeys_messagerc   r   r
   r   r   r   r   r   r   r   r   r   r   r   )rQ   rE  Zframe_targetZtarget_titleZscroll_target_yZscroll_target_xZframesrT   )ro  rU   rl  :  s    R
zKeysPage.create_page_keysc          	   C   s   | j tjdddddd t }| j  rtdd}|  | j	|| tdd}|  |s| j
d	 | jd
 q| j	||d  nHtdd}|  | j	|| tdd}|  | j	|t  |   t }| | d S )Nr   Keysr   r   r   )r   r   r   rI  )r*  z- no custom keys -r   )rq  r   r-   r  ZCurrentKeysrx   rJ  r   r@  r   rz  r+  r0  rA  default_keysry  load_keys_list)rQ   rM  rN  keyset_namerT   rT   rU   rm    s,    

zKeysPage.load_key_cfgc             G   s   d}| j  }||krXtddd|kr<tddd|d  tddd| d| jd< n*tddd| tdddd	 d	| jd< | | d S )
N)zIDLE Classic WindowszIDLE Classic UnixzIDLE Classic MaczIDLE Classic OSXr   r  r   r   rO  zNew key set, see HelprV   r;   )r.  rx   r-   r  rr   r   r~  r  )rQ   r   Zold_keysr   rT   rT   rU   r-    s    

z!KeysPage.var_changed_builtin_namec             G   s0   | j  }|dkr,tddd| | | d S )Nz- no custom keys -r   r  r   )r0  rx   rr   r   r  )rQ   r   r   rT   rT   rU   r/    s    
z KeysPage.var_changed_custom_namec             G   s4   | j  }tddd| |r(|   n|   d S )Nr   r  r   )rq  rx   rr   r   r-  r/  )rQ   r   r   rT   rT   rU   rp    s
    

z"KeysPage.var_changed_keyset_sourcec             G   sj   | j  }| j }| jt d }t|rDt	d||| n"t
|}|d }t	d||| d S )Nr   r   Z_cfgBindingsr   )rs  rx   r0  rt  r   splitr-   ZIsCoreBindingrr   r   ZGetExtnNameForEvent)rQ   r   r   Zkey_setr   r   Zext_keybind_sectionrT   rT   rU   rr    s    



zKeysPage.var_changed_keybindingc             C   s\   | j  r,d| jd< d| jd< | jd n,d| jd< | jd d| jd< | jd d S )Nr  r+  r*  )r*  )z	!disabled)rq  rx   r@  rA  r|  r+  rz  )rQ   rT   rT   rU   ry  )  s    




zKeysPage.set_keys_typec             C   sJ  | j t}| j |}| d }| j r:| j }n
| j }t	 }|t
d krt
d | }x|D ]}||  ||< qjW t| }t| d||j}	|	r.| j rd}
| |
}|s| j | | j | d S | | | j | | j ||d |	  | j | | j | | j|	 n| j | | j | d S )Nr   r   zGet New KeyszcYour changes will be saved as a new Custom Key Set. Enter a name for your new Custom Key Set below.z - )rt  r   r   rx   r  rq  r.  r0  r-   ZGetCurrentKeySetrr   r   valuesr/   r^  get_new_keys_namer   r   create_new_key_setdeleter   rs  r   )rQ   
list_indexbinding	bind_nameZcurrent_key_set_nameZcurrent_bindingskey_set_changesr   Zcurrent_key_sequencesnew_keysrW  
new_keysetrT   rT   rU   rv  5  s<    	





zKeysPage.get_new_keysc             C   s,   t ddt dd }t| d||j}|S )NrI  r   r   zNew Custom Key Set)r-   rJ  r2   r^  )rQ   rW  r_  r  rT   rT   rU   r  a  s
    
zKeysPage.get_new_keys_namec             C   s   |  d}|r| | d S )NzNew Key Set Name:)r  r  )rQ   Znew_keys_namerT   rT   rU   r}  i  s    
zKeysPage.save_as_new_key_setc             C   s   | j d d S )N)z	!disabled)rw  r+  )rQ   r   rT   rT   rU   ru  o  s    zKeysPage.on_bindingslist_selectc       
      C   s   | j  r| j }n
| j }t|}i }x.|D ]&}|dd }d|| }|||< q4W |td krtd | }x|D ]}|| ||< q|W | || t	dd}	|	
  | j|	| | j d |   d S )Nrh   r"  r   rI  r   )rq  rx   r.  r0  r-   ZGetCoreKeysjoinrr   save_new_key_setrJ  r   rA  r   r   ry  )
rQ   Znew_key_set_nameZprev_key_set_nameZ	prev_keysr  r   Z
event_namer  r  Zcustom_key_listrT   rT   rU   r  s  s&    




zKeysPage.create_new_key_setc             C   s   d}| j  rd}| j t}t|}t| }|  | j 	dt
 xh|D ]`}d|| }|dd }|td kr|td | krtd | | }| j t
|d |  qPW |r| j | | j | | j | d S )	NFTr   r"  rh   r  r   z - )rt  r   r   r   r-   Z	GetKeySetr   r   r   r  r    r  rr   r   r   r   r   )rQ   r  Zreselectr  keysetZ
bind_namesr  r   rT   rT   rU   r    s&    


zKeysPage.load_keys_listc             C   sN   t jd | s t jd |  x(|D ] }|| }t jd | || q&W d S )Nr   )r-   r   rf  rg  r   )r  r  r   r   rT   rT   rU   r    s
    
zKeysPage.save_new_key_setc             O   s   t j||S )N)r,   rh  )rQ   rd  ri  rT   rT   rU   rh    s    zKeysPage.askyesnoc             C   s   | j  }d}| jd|| | ds&d S | j  td| tdd}|	  |sp| j
d | j|d n| j||d  | jtjd	 d
d | jtjd	 d
dpt  t  | j  | j  |   d S )Nz0Are you sure you wish to delete the key set %r ?zDelete Key Set)rG   r   rI  )r*  z- no custom keys -r   r   r  r   r   )r0  rx   rh  r  rq   rr   rj  r-   rJ  r   rz  r+  rA  r   rq  r   r   r   r.  r  rs   rt   ru   ry  )rQ   r  rk  rN  rT   rT   rU   r{    s*    





zKeysPage.delete_custom_keys)r   r   r   rF   rl  rm  r-  r/  rp  rr  ry  rv  r  r}  ru  r  r  staticmethodr  rh  r{  r   rT   rT   )r{   rU   r_   2  s$    !	,r_   c                   s\   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Z  ZS )r`   c                s    t  | |   |   d S )N)rz   rF   create_page_generalload_general_cfg)rQ   r   )r{   rT   rU   rF     s    zGenPage.__init__c             C   s  t t| d| _t t| d| _t t| d| _t t| d| _t t| d| _t t| d| _	t t
| d| _t t| d| _t t| d	| _t t| d
| _t t| d| _t| dtdd}t| dtdd}t| dtdd}t| dtdd}t|dd}t|dd}t|| jddd| _t|| jddd| _t|dd}t|dd}t|dd}	t|| jdd| _t|dd}
t|| jdd| _t|dd}t|dd}t|d | jd!| _t|dd}t|d"d}t|| jd#d$d%d#| _t|dd}t|d&d}t|| j	d d| _t|d'| jd(| _t|dd}t|d)d}t|| jdd*d| _ t|| jdd+d| _!t|dd}t|d,d}t|| jd-d| _"t|dd}t|d.d}t|| jdd| _#t|dd}t|d/d}t|d-| jd!| _$t|}t|}t%|d0d1t&d2| _'t(|}| j'j)|d3< |j*| j'd4< | j'+d5| j, t-|d6d7d8| j.d9| _/t-|d:d8| j0d;| _1t-|d<d7d8| j2d9| _3|j4t5d0d0t6t7d= |j4t5d0d0t6t7d= |j4t5d0d0t6t7d= |j4t5d0d0t6t7d= |j4t5d0dt8d> |j4t9t:d0d0d? | jj4t;t:d0d0d? | jj4t;t:d0d0d? |j4t5d0dt8d> |j4t9t:d0d0d? | jj4t;t<d@d0d? |
j4t;t<d0dA | jj4t;t<d@d0d? |	j4t;t<d0dA |j4t5d0dt8d> |j4t9t:d0d0d? | jj4t5d@d0dB |j4t5d0dt8d> |j4t9t:d0d0d? | jj4t5d@d0dB |j4t5d0dt8d> |j4t9t:d0dC | jj4t;t<dDd0d? | jj4t5t:dDd0d? |j4t5d0dt8d> |j4t9t:d0d0d? | j!j4t;t:d0d0d? | j j4t;t:d0d0d? |j4t5d0dt8d> |j4t9t:d0d0d? | j"j4t5d@d0dB |j4t5d0dt8d> |j4t9t:d0d0d? | j#j4t5d0d0dB |j4t5d0dt8d> |j4t9t:d0d0d? | j$j4t5d0d0dB |j4t;d0d0t=d> |j4t5d0d0t6t7d= |j4t;t:t=dE | j'j4t9t<t6t7dF | j/j4t5t:d0dA | j1j4t5t:dG | j3j4t5t:d0dA d S )HN)r   Generalzeditor-on-startup)r   r   rE   )r   r   rD   )r   r5   	popupwait)r   r7   r  )r   r7   zflash-delay)r   r7   bell)r   PyShellzauto-squeeze-min-lines)r   r  autosave)r   r8   z	max-width)r   r6   maxlinesrh   z Window Preferences)r?   r   rV   z Editor Preferencesz Shell Preferencesz Additional Help Sources r   )r?   z
At Startup)rV   r   zOpen Edit Window)r   r   rV   zOpen Shell Windowz$Initial Window Size  (in characters)ZWidthrg   )r   rE   ZHeightz%Completions Popup Wait (milliseconds)rf   )rE   r   zParen Match StyleZ
expressionopenerZparensz;Time Match Displayed (milliseconds)
(0 is until next input)zBell on Mismatch)rV   r   zAt Start of Run (F5)  zPrompt to Savez	No PromptzFormat Paragraph Max Widthr  zMax Context Lines :zAuto-Squeeze Min. Lines:r>   T)rD   rj   r   ri   r   z<ButtonRelease-1>ZEditr*  r   )rV   r+  rE   ri   ZAdd)rV   rE   ri   ZRemove)rX   rk   r   rY   rZ   )rX   rk   r   rZ   )rX   r   rk   r   r   )rX   r   r   )rX   rk   r   )rX   r   rk   r   )rX   r   rZ   )rX   r   rY   rZ   )rX   r   )>rO   rb   r	   startup_editr   	win_width
win_heightautocomplete_waitparen_styleflash_delayr   
paren_bellauto_squeeze_min_linesr  format_widthcontext_linesr"   r   r!   r&   r)   Zstartup_editor_onZstartup_shell_onr%   Zwin_width_intZwin_height_intZauto_wait_intr'   Zparen_style_typeZparen_flash_timer$   Zbell_onZsave_ask_onZsave_auto_onZformat_width_intZcontext_intZauto_squeeze_min_lines_intr   r   helplistr*   r   r   r   help_source_selectedr#   helplist_item_editbutton_helplist_edithelplist_item_addZbutton_helplist_addhelplist_item_removebutton_helplist_removerc   r   r
   r   r   r   r   r   r   r   )rQ   Zframe_windowZframe_editorZframe_shellZ
frame_helpZ	frame_runZstartup_titleZframe_win_sizeZwin_size_titleZwin_width_titleZwin_height_titleZframe_autocompleteZauto_wait_titleZframe_paren1Zparen_style_titleZframe_paren2Zparen_time_titleZ
frame_saveZrun_save_titleZframe_formatZformat_width_titleZframe_contextZcontext_titleZframe_auto_squeeze_min_linesZauto_squeeze_min_lines_titleZframe_helplistZframe_helplist_buttonsZscroll_helplistrT   rT   rU   r    s*   B






zGenPage.create_page_generalc          	   C   s`  | j tjddddd | jtjddddd | jtjddd	dd | jtjd
dddd | jtd
dd | jtjd
dddd | j	td
dd | j
tjdddddd | jtjd
dddd | jtjd
dddd | jtjddddd t | _| jdd x"| jD ]}| jt|d  q8W |   d S )Nr   r  zeditor-on-startupr   )r   r   rE   r   rD   r   r5   r  r7   r  zflash-delayr  r  r   )r   r   r8   z	max-widthr6   r  r  zauto-squeeze-min-linesrv   )r  r   r-   r  r  r  r  r  r  r  r  r  r  r  ZGetAllExtraHelpSourcesListuser_helplistr  r  r   r    set_add_delete_state)rQ   Z	help_itemrT   rT   rU   r    s6    











zGenPage.load_general_cfgc             C   s   |    d S )N)r  )rQ   r   rT   rT   rU   r    s    zGenPage.help_source_selectedc             C   sh   | j  dk r(| jd | jd n<| j  rL| jd | jd n| jd | jd d S )Nr   )r*  )z	!disabled)r  sizer  r+  r  r   )rQ   rT   rT   rU   r    s    
zGenPage.set_add_delete_statec             C   s:   t | dj}|r6| j| | jt|d  |   d S )NzNew Help Sourcer   )r3   r^  r  r   r  r   r    update_help_changes)rQ   help_sourcerT   rT   rU   r    s
    zGenPage.helplist_item_addc             C   sx   | j t}| j| }t| d|d |d dj}|rt||krt|| j|< | j | | j ||d  |   | 	  d S )NzEdit Help Sourcer   r   )Zmenuitemfilepath)
r  r   r   r  r3   r^  r  r   r  r  )rQ   
item_indexr  Znew_help_sourcerT   rT   rU   r  %  s    

zGenPage.helplist_item_editc             C   s4   | j t}| j|= | j | |   |   d S )N)r  r   r   r  r  r  r  )rQ   r  rT   rT   rU   r  9  s
    zGenPage.helplist_item_removec             C   sZ   i t d d< xHtdt| jd D ]0}t ddt|d| j|d  d d  q"W d S )Nr   Z	HelpFilesr   ;rh   )rr   rx  lenr  r   r   r  )rQ   ZnumrT   rT   rU   r  D  s
    
zGenPage.update_help_changes)r   r   r   rF   r  r  r  r  r  r  r  r  r   rT   rT   )r{   rU   r`     s    z%r`   c               @   s@   e Zd Zdd Zdd Zdd Zedd Zd	d
 Zdd Z	dS )VarTracec             C   s   g | _ g | _d S )N)untracedtraced)rQ   rT   rT   rU   rF   P  s    	zVarTrace.__init__c             C   s   | j   | j  d S )N)r  clearr  )rQ   rT   rT   rU   r  \  s    
zVarTrace.clearc             C   s*   t |tr| ||}| j||f |S )N)
isinstancetuplemake_callbackr  r   )rQ   r   callbackrT   rT   rU   rb   b  s    
zVarTrace.addc                s    fdd}|S )Nc                 s   t j  f  d S )N)rr   r   rx   )r   )r   r   rT   rU   default_callbackv  s    z0VarTrace.make_callback.<locals>.default_callbackrT   )r   r   r  rT   )r   r   rU   r  s  s    zVarTrace.make_callbackc             C   s:   x4| j r4| j  \}}|d| | j||f qW d S )Nwrite)r  popZ	trace_addr  r   )rQ   r   r  rT   rT   rU   rP   {  s    zVarTrace.attachc             C   sF   x@| j r@| j  \}}|d| d d  | j||f qW d S )Nr  r   r   )r  r  Ztrace_removeZ
trace_infor  r   )rQ   r   r  rT   rT   rU   detach  s    zVarTrace.detachN)
r   r   r   rF   r  rb   r  r  rP   r  rT   rT   rT   rU   r  M  s   r  a7  When you click either the Apply or Ok buttons, settings in this
dialog that are different from IDLE's default are saved in
a .idlerc directory in your home directory. Except as noted,
these changes apply to all versions of IDLE installed on this
machine. [Cancel] only cancels changes made since the last save.
u  
Font sample: This shows what a selection of Basic Multilingual Plane
unicode characters look like for the current font selection.  If the
selected font does not define a character, Tk attempts to find another
font that does.  Substitute glyphs depend on what is available on a
particular system and will not necessarily have the same size as the
font selected.  Line contains 20 characters up to Devanagari, 14 for
Tamil, and 10 for East Asia.

Hebrew and Arabic letters should display right to left, starting with
alef, א and ا.  Arabic digits display left to right.  The
Devanagari and Tamil lines start with digits.  The East Asian lines
are Chinese digits, Chinese Hanzi, Korean Hangul, and Japanese
Hiragana and Katakana.

You can edit the font sample. Changes remain until IDLE is closed.
z
Highlighting:
The IDLE Dark color theme is new in October 2015.  It can only
be used with older IDLE releases if it is saved as a custom
theme, with a different name.
z
Keys:
The IDLE Modern Unix key set is new in June 2016.  It can only
be used with older IDLE releases if it is saved as a custom
key set, with a different name.
a_  
General:

AutoComplete: Popupwait is milliseconds to wait after key char, without
cursor movement, before popping up completion box.  Key char is '.' after
identifier or a '/' (or '\' on Windows) within a string.

FormatParagraph: Max-width is max chars in lines after re-formatting.
Use with paragraphs in both strings and comment blocks.

ParenMatch: Style indicates what is highlighted when closer is entered:
'opener' - opener '({[' corresponding to closer; 'parens' - both chars;
'expression' (default) - also everything in between.  Flash-delay is how
long to highlight if cursor is not moved (0 means forever).

CodeContext: Maxlines is the maximum number of code context lines to
display when Code Context is turned on for an editor window.

Shell Preferences: Auto-Squeeze Min. Lines is the minimum number of lines
of output to automatically "squeeze".
)z
Fonts/TabsrW   r  r  c             C   s.   | sdS yt |  dS  tk
r(   dS X d S )NTF)r   r   )r   rT   rT   rU   r     s    r   c               @   s   e Zd Zdd ZdS )r   c                s   t j| |f|| t| td}|jtttd t| dd|j	dd  jt
ttd |j jd  d  d t   | _ jddtd fd	d
}d|  fdd} d| d S )N)r   )rZ   rX   rY   r      )r?   r  r   rE   )rX   rZ   rY   )ri   )Zwindowr   c                s$      f} jd| d d S )Nz	0 0 %s %s)Zscrollregion)winfo_reqwidthZwinfo_reqheightr   )r   r  )canvasr   rT   rU   _configure_interior  s    z;VerticalScrolledFrame.__init__.<locals>._configure_interiorz<Configure>c                s&       kr" j  d d S )N)rE   )r  Zwinfo_widthZitemconfigure)r   )r  r   interior_idrT   rU   _configure_canvas  s    z9VerticalScrolledFrame.__init__.<locals>._configure_canvas)r!   rF   r*   r   rc   r   r   r   r   r   r   r   r
   r   r   Zxview_movetoZyview_movetor   Zcreate_windowr   r   )rQ   rG   rd  kwZ
vscrollbarr  r  rT   )r  r   r  rU   rF     s     

zVerticalScrolledFrame.__init__N)r   r   r   rF   rT   rT   rT   rU   r     s   r   __main__)r   z#idlelib.idle_test.test_configdialogrh   F)	verbosityexit)run)^Ztkinterr   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    Ztkinter.ttkr!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   Ztkinter.colorchooserZcolorchooserrS  Ztkinter.fontr   r   r,   Zidlelib.configr-   r.   Zidlelib.config_keyr/   Zidlelib.dynoptionr0   Zidlelibr1   Zidlelib.queryr2   r3   Zidlelib.textviewr4   Zidlelib.autocompleter5   Zidlelib.codecontextr6   Zidlelib.parenmatchr7   Zidlelib.paragraphr8   Zidlelib.squeezerr9   rr   r   r:   ry   r^   r\   r_   r`   r  rO   r~   r   r   r   r   Zunittestr   Zidlelib.idle_test.htestr  rT   rT   rT   rU   <module>   sh   4    Q        4  l=+
