PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  pY;@s}ddlZddlZddlZddlZddlZddlZddlZddlZddlTddl j Z ddl j ZddlZddlZddlmZddlmZddlmZddlmZddlmZddlmZdd lmZdd lmZmZmZdd lmZdd lmZd Z dej!Z"ddZ#Gddde$Z%e%Z&Gddde$Z'ddZ(ddZ)ddl*Z*e*Z+[*Gddde$Z,ddZ-dddd d!d"iZ.d#d$Z/d%d&Z0d'd(Z1e2d)kryddl3Z3e3j4d*d+d,d-d.dd/l5m6Z6e6e1dS)0N)*)MultiCallCreator) WindowList) SearchDialog) GrepDialog) ReplaceDialog)PyParse)idleConf) aboutDialogtextView configDialog) macosxSupport)helpz (%s)cCstj\}}}}}d||f}|d|f7}|dkrY|d|f7}n$|dkr}|d|d|f7}|S)zYFormat sys.version_info to produce the Sphinx version string used to install the chm docsz%s%sz%s candidatezrc%sfinalr)sys version_info)majorminormicrolevelserialreleaser+/opt/python35/lib/python3.5/EditorWindow.py_sphinx_versions  rc@sReZdZddZdddZddZdd Zdd d ZdS) HelpDialogcCsd|_d|_dS)N)parentdlg)selfrrr__init__-s zHelpDialog.__init__NcCsUddl}|jdtdd|jdkr>|j||rQ|j|dS)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 rNzEditorWindow.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)warningswarnDeprecationWarningr show_dialog nearwindow)r rnearwrrrdisplay1s    zHelpDialog.displaycCsr||_tjjtjjtjjtd}tj|d|dd|_ }|j d|j ddS)Nzhelp.txtZHelpZmodalFz +) rospathjoinabspathdirname__file__r Z view_filerbinddestroy)r rfnrrrrr'Cs -"zHelpDialog.show_dialogcCs\|j}|jd|jdf}|j|jd||j|jdS)N z=+%d+%d)rZ winfo_rootxZ winfo_rootyZwithdrawZgeometry deiconifylift)r r)rgeomrrrr(Is     zHelpDialog.nearwindowcCsd|_d|_dS)N)rr)r Zevrrrr4Ts zHelpDialog.destroy)__name__ __module__ __qualname__r!r+r'r(r4rrrrr+s    rc@seZdZddlmZddlmZmZddlm Z ddl m Z m Z ddl mZddlmZddlmZejZd Zd d d d d d Zd d ZddZddZddZd ddZdddddddgZd$d%Zd&d'Zd Z d(d)Z!dgZ"d,d-Z#d.d/Z$d0d1Z%d2d3Z&d d4d5Z'd d6d7Z(d d8d9Z)d d:d;Z*d<d=Z+d>d?Z,d@dAZ-d dBdCZ.d dDdEZ/dFdGZ0dHdIZ1dJdKZ2dLdMZ3dNdOZ4dPdQZ5dRdSZ6dTdUZ7dVdWZ8d dXdYZ9d dZd[Z:d d\d]Z;d d^d_Z<d`daZ=dbdcZ>dddeZ?dfdgZ@dhdiZAdjdkZBdldmZCdndoZDeEjFeEjGdpZHdqdrZIdsdtZJdudvZKdwdxZLdydzZMd{d|ZNd}d~ZOd ddZPddZQddZRddZSddZTddZUddZVddZWddZXdddZYddZZdddZ[ddZ\ddZ]ddZ^ddZ_ddZ`ddZaddZbddZcddZdddZed ddZfd d ddZgddZhd ddZid ddZjddZkddZlddZmddZndddZoddZpddZqddZrddZsddZtddZuddZvddZwddZxddZyddZzddZ{ddZ|ddZ}ddZ~ddZddZddZd S) EditorWindowr) Percolator)ColorDelegator color_config) UndoDelegator) IOBindingencoding)Bindings)Toplevel)MultiStatusBarNcCs tjdkr|tjjtjdd}tjjdrddtj dd}tjj drrd}qd }tjj||dd}n}tjddd krtjjtjdd t }tjj |r|}n'tjd krtjjtjd }tjj |}tjj |rb|t_tjd kr|dtjt_ndtj ddt_||_|p|j}||_y tjWntk rdt_YnXt||_tj|d|j|_} |r|j|_|j|j_ni|_i|j_tjjtjd|_t| |_} t | dd|_!} tj"ddddd|_#ddddddd d!d|j#d"tj"ddd"ddi} t$d#krd$| d%| 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|jNd!| j-dK|jNdL| j-dM|jO| j-dN|jP| j-dO|jQ|r||j|<|rn||jR|<| j-dP|jS| j-dQ|jjT| j-dR|jU| j-dS|jV| j-dT|jW|jX| jY| dU<| jZdVt[dWt\| j]| dX>> menuzrecent-files.lstnamevbarmainr=widthtypeinttextZpadxwrapZnoneZhighlightthicknessrheightg!@Z wordprocessorZtabstyleZWM_DELETE_WINDOWz<>zz<2>z<3>z<>z<>z <>z<>z<>z<>z<>z<>z<>z<>cSsdS)Nbreakr)eventrrrsz'EditorWindow.__init__..z<>z<>z<>z<>z<>z<>z <>z <>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>zzz<>z<>z<>z<>z<>z<>z<>z<>commandsidefillZyscrollcommandfontexpandIndentz use-spacesboolrF2@KLTwindowsend)rarbrc)r=help_urlr-r.r/r base_prefixplatformcountrisdirrisfilenormpathflistrootps1AttributeErrorMenumenubarrZListedTopleveltopvars tkinter_varsZ inversedict instance_dictr Z GetUserCfgDirrecent_files_pathFrame text_frameZ ScrollbarrM GetOptionrOZ TkVersionrZTextrRZfocused_widget createmenubarapply_bindingsprotocolcloser3 close_eventr ZisAquaTkright_menu_eventcutcopypastecenter_insert_event help_dialog python_docs about_dialog config_dialog open_module select_allremove_selection find_eventfind_again_eventfind_in_files_eventfind_selection_event replace_eventgoto_line_eventsmart_backspace_eventnewline_and_indent_eventsmart_indent_eventindent_region_eventdedent_region_eventcomment_region_eventuncomment_region_eventtabify_region_eventuntabify_region_eventtoggle_tabs_eventchange_indentwidth_eventmove_at_edge_if_selection del_word_leftdel_word_right home_callbackdict new_callbackZclose_all_callbackopen_class_browseropen_path_browseropen_turtle_demoset_status_baryviewpackRIGHTYsetGetFontZLEFTZBOTHZTOPZ focus_setusetabstabwidth indentwidthset_notabs_indentwidthcontext_use_ps1num_context_linesr>perrAundo insertfilterundo_block_startundo_block_stopZset_saved_change_hooksaved_change_hookrBioZset_filename_change_hookfilename_change_hookZ good_loadset_indentation_paramscolorexistsloadfileispythonsourceZ set_filenameResetColorizerupdate_recent_files_listload_extensionsmenudictgetindex add_separator wmenu_endZregister_callbackpostwindowsmenu tkMessageBoxaskyesnotkSimpleDialog askinteger showerror)r rnfilenamekeyroZdochomeZpyverZbasepathZchmfilertrzrMZ text_optionsrRZ usespacesrrr is_py_srcrKrerrrr!gs<                                     %              zEditorWindow.__init__cCst|trty|j|j}WnLtk rsy|j|j}Wn!tk rn|jd}YnXYnXtjdd|S)z3Return filename as BMP unicode so diplayable in Tk.z iso8859-1u [𐀀-􏿿]u�) isinstancebytesdecodefilesystemencodingUnicodeDecodeErrorrCresub)r rrrr_filename_to_unicode@s  z!EditorWindow._filename_to_unicodecCs)|jj\}}|jj|dS)NrV)rZdefaultfilenamernnew)r rWr1basenamerrrrOszEditorWindow.new_callbackcCss|jd@dkr&|jdkr&dS|jjdr|jjdddr|jjdddrt|jjdjdd }nO|jjdd}x7tt |D]}||dkrPqWt |}t|jjd jdd }||krd}d t |d}|jd @dkrV|jj dddn|jjds~|jj dd nY|jj|jjdd|jjd r|jj ddn|jj dd|jj|}|jjd}|jj|d|r ||}}|jj ddd|jj d|||jj d ||jjd dS)NrZHomeZiomarkz<=zinsert lineendzinsert linestart.rY  insertzinsert linestart+cselz1.0rez sel.firstZ my_anchorrV)rr)stateZkeysymrRrcomparerQsplitrrangelenstr tag_removemark_settag_addsee)r rWZinsertptlineZlineatdestfirstlastrrrrTs@"( %  zEditorWindow.home_callbackcCs|j|j|_t|jdddddd}tjdkr^|jjddd t|jjd d d t|jjd d d t|jjd t dt |jd t dt |j j d|j |j jddd|j j|j dS)NrUrYZ borderwidthZ backgroundZgrey75rJZ _padding1z r[columnzCol: ?rzLn: ?r\z<>z z)rFrt status_barryrri set_labelrrZBOTTOMXrRr3set_line_and_column event_addZ after_idle)r seprrrrs!  zEditorWindow.set_status_barcCsS|jjtjd\}}|jjdd||jjdd|dS)NrrzCol: %srzLn: %s)rRrZINSERTrrr)r rWrrrrrrs!z EditorWindow.set_line_and_columnfile_Fileedit_EditformatF_ormatrun_Runoptions_Optionsrd_Windowr_HelpcCs2|j}i|_}xe|jD]Z\}}t|\}}t|d|dd||<}|jd|d|d|q Wtjrt|dddd|d<}|jdd d||jt|jdd|_ |jd j d dd ddd|j |jd j t |_ |jdS)NrLtearoffrlabelrK underlineZappleZ applicationZIDLErrHz Recent Filesr)rsr menu_specsprepstrrrZ add_cascader Z isCarbonTk fill_menusrecent_files_menuZinsert_cascaderENDbase_helpmenu_lengthreset_help_menu_entries)r ZmbarrrLrrrKrrrr|s"       zEditorWindow.createmenubarcCse|jd}|jd}|dkr.d}||jkrT|j|jd|tj|dS)NrdrerYrf)rrrdeleterZadd_windows_to_menu)r rKrerrrrs  zEditorWindow.postwindowsmenuc Cs |jjdd|j|jf|js6|j|j}||_tjdddk}|rz|jj ddxp|j D]e}y|\}}}Wnt k rwYnX|dkrqt ||}|j |d|qW|j|j|j|r|jj dddS) Nrz@%d,%drHrIZcursorZarrowrZibeam)rRrxyrmenu make_rmenurWrriconfig rmenu_specs ValueErrorgetattrZentryconfigureZtk_popupZx_rootZy_root) r rWrZiswinitemr eventnameZ verify_staterrrrrs(#      zEditorWindow.right_menu_eventClose<>cCst|jdd}xj|jD]_}|d|d}}|dk rt|j|dd}|jd|d|q|jqW||_dS)NrrrYcSs|j|dS)N)event_generate)rRrrrrrZsz(EditorWindow.make_rmenu..commandrrZ)rrrRr add_commandrr)r rrrrrZrrrrs zEditorWindow.make_rmenucCs |jS)N)rmenu_check_copy)r rrrrmenu_check_cutszEditorWindow.rmenu_check_cutc CsAy|jjd}Wntk r.dSYnX|r9dSdSdS)Nz sel.firstdisablednormal)rRrTclError)r Zindxrrrrs   zEditorWindow.rmenu_check_copyc CsAy |jjjd|jdWntk r8dSYnXdSdS)Nztk::GetSelectionZ CLIPBOARDr!r")rRtkcallr#)r rrrrmenu_check_pastes    zEditorWindow.rmenu_check_pastecCstj|jddS)zHandle Help 'About IDLE' event.z About IDLEN)r Z AboutDialogrt)r rWrrrrszEditorWindow.about_dialogcCstj|jddS)z&Handle Options 'Configure IDLE' event.ZSettingsN)r Z ConfigDialogrt)r rWrrrrszEditorWindow.config_dialogcCs/|jr|j}n |j}tj|dS)zHandle Help 'IDLE Help' event.N)rortrZ show_idlehelp)r rWrrrrrs   zEditorWindow.help_dialogcCstjdddkr}ytj|jWqtk ry}z*tjdddt|d|j WYdd}~XqXnt j |jdS)NrHrItitlezDocument Start FailuremessagerrV) rrir- startfilergOSErrorrrrrR webbrowseropen)r rWwhyrrrrs,zEditorWindow.python_docscCs|jjddS)Nz<>rV)rRr)r rWrrrrszEditorWindow.cutcCs*|jjdsdS|jjddS)Nrz<>rV)rRZ tag_rangesr)r rWrrrrszEditorWindow.copycCs$|jjd|jjddS)Nz <>rrV)rRrr)r rWrrrr&szEditorWindow.pastecCs=|jjddd|jjdd|jjddS)Nrz1.0zend-1crrV)rRrrr)r rWrrrr+szEditorWindow.select_allcCs*|jjddd|jjddS)Nrz1.0rer)rRrr)r rWrrrr1szEditorWindow.remove_selectioncs=|jj|jjdfdd}|S)zCursor move begins at start or end of selection When a left/right cursor key is pressed create and return to Tkinter a function which causes a cursor move from the associated edge of the selection. sel.first+1c sel.last-1cc sK|jd@dkrGyddWntk rFYnXdS)NrSrz sel.firstr)rr#)rW) edge_index edges_tableself_text_indexself_text_mark_setrr move_at_edge@s   z.move_at_edge)r.r/)rRrr)r r0r4r)r0r1r2r3rr5s   z&EditorWindow.move_at_edge_if_selectioncCs|jjddS)Nz rV)rRr)r rWrrrrIszEditorWindow.del_word_leftcCs|jjddS)NzrV)rRr)r rWrrrrMszEditorWindow.del_word_rightcCstj|jdS)NrV)rfindrR)r rWrrrrQszEditorWindow.find_eventcCstj|jdS)NrV)rZ find_againrR)r rWrrrrUszEditorWindow.find_again_eventcCstj|jdS)NrV)rZfind_selectionrR)r rWrrrrYsz!EditorWindow.find_selection_eventcCs tj|j|j|jdS)NrV)rZgreprRrrn)r rWrrrr]sz EditorWindow.find_in_files_eventcCstj|jdS)NrV)rreplacerR)r rWrrrraszEditorWindow.replace_eventcCsp|j}tjddd|}|dkr1dS|dkrK|jdS|jdd||jddS)NZGotozGo to line number:rrVrrz%d.0)rRrrbellrr)r rWrRlinenorrrres     zEditorWindow.goto_line_eventc!Csy|jjdd}Wntk r3d}Yn X|j}tjddd|jd|}|rs|j}|s}dSytjj|}WnNt t fk r}z(t j dt |d|jdSWYdd}~XnX|dkr t j dd d|jdSt|jtjjsBt j dd d|jdSy|jj|}Wn/tk rt j dd d|jdSYnX|jr|jj|n|jj||S) Nz sel.firstzsel.lastZModulezAEnter the name of a Python module to search on sys.path and open:r initialvaluez Import errorzmodule not foundznot a source-based modulez$loader does not support get_filename)rRrr#striprZ askstring importlibutil find_specr ImportErrorrrrrloaderabc SourceLoader get_filenamerqrnr,rr)r rWrLspecmsgZ file_pathrrrrqsH             zEditorWindow.open_modulecCs|jj}|jjdko!|s@|j}|dkr@dStjj|\}}tjj|\}}ddl m }|j |j ||gdS)NZPyShellEditorWindowr) ClassBrowser) rr __class__r:rr-r.rsplitextidlelibrFrn)r rWrheadtailbaseextrFrrrrs   zEditorWindow.open_class_browsercCs$ddlm}|j|jdS)Nr) PathBrowser)rIrNrn)r rWrNrrrrszEditorWindow.open_path_browsercCs5ddl}tjddg}|j|dddS)Nrz-cz,from turtledemo.__main__ import main; main()shellF) subprocessr executablePopen)r rWrPcmdrrrrs   zEditorWindow.open_turtle_democCsi|dk re|dkre|jjdd||jjddd|jjddd|jdS)Nrrz%d.0rz1.0rez insert +1l)rRrrrcenter)r r8rrrgotolines zEditorWindow.gotolinecCs| stjj|rdStjjtjj|\}}tjj|dkr]dS|jjdd}|jdod|kS) NT.py.pywz1.0z 1.0 lineendz#!python)rVrW) r-r.rkrHrnormcaserRr startswith)r rrLrMrrrrrs$zEditorWindow.ispythonsourcecCs&|jr"|jj|d|_dS)N)rnZunregister_maybe_terminate)r rrr close_hooks zEditorWindow.close_hookcCs ||_dS)N)r[)r r[rrrset_close_hookszEditorWindow.set_close_hookcCsA|jr|jj||j|jj||jdS)N)rnZfilename_changed_editrrtZupdate_windowlist_registryr)r rrrrs   z!EditorWindow.filename_change_hookcCsw|jr dS|j|jjr1|j|_|jrs|jj|j|jj|j|jj|jdS)N) rrrrr?r removefilterrr)r rrr _addcolorizers  zEditorWindow._addcolorizercCs:|js dS|jj|jj|jd|_dS)N)rZ removecolorsrr])r rrr _rmcolorizers   zEditorWindow._rmcolorizercCs(|j|jtj|jdS)zUpdate the color themeN)r_r^r=r@rR)r rrrrs  zEditorWindow.ResetColorizer_cCs|jd||j|}|rK||jkrK|jd|d|d|j|krs|jd|n|jd|d|j|dS)NERRORz wordstart rz+1c)rr IDENTCHARSrr)r rRposcharrrrcolorize_syntax_errorsz"EditorWindow.colorize_syntax_errorcCs#tj|jdd|jdEditorWindow.__extra_help_callback..display_extra_helpr)r rzr{r)r rZ__extra_help_callbackGs z"EditorWindow.__extra_help_callbackcsmg}tjj|jrOt|jddddd}|j}WdQRX|rtjj|d}||kr|j||jd|gxD|D]<}d |kstjj|dd rj |qWfd d |D}d }|dt |}y9t|jddddd}|j |WdQRXWnxt k r}zXt |jddsd|j_tjdddd|jt|d|jWYdd}~XnXx|jjD]}|j} | jdtxlt|D]^\} } | j} |j| } |j| } | jd|| d| d| ddqWqWdS)z/Load and update the recent files list and menusrrCutf_8errorsr6NrbrrYcs"g|]}|kr|qSrr).0r.) bad_pathsrr gs z9EditorWindow.update_recent_files_list..Z1234567890ABCDEFGHIJKr*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.rrrrZrrf)r-r.rrxr, readlinesr0removerappendr writelinesr*rrorr showwarningrrrRrtrwr rr  enumeraterstrip#_EditorWindow__recent_file_callbackr)r new_fileZrf_listZ rf_list_filer.ZulcharsZrf_fileerrinstancerKi file_nameZ ufile_namecallbackr)rrrVsL   )   z%EditorWindow.update_recent_files_listcs|fdd}|S)Ncsjjd|dS)NZeditFile)rr,)Z fn_closure)r rropen_recent_filesz=EditorWindow.__recent_file_callback..open_recent_filer)r rrr)r rZ__recent_file_callbacksz#EditorWindow.__recent_file_callbackcCs|j}|j}|r9|r9|d|t}n$|rH|}n|rW|}nd}|pl|pl|}|jsd|}d|}|jj||jj|dS)Nz - Untitledz*%s*z*%s) short_title long_title _py_version get_savedrtZwm_titleZ wm_iconname)r Zshortlongr'Ziconrrrrs        zEditorWindow.saved_change_hookcCs |jjS)N)rr)r rrrrszEditorWindow.get_savedcCs|jj|dS)N)r set_saved)r flagrrrrszEditorWindow.set_savedcCs|jjdS)N)r reset_undo)r rrrrszEditorWindow.reset_undocCs:|jj}|r'tjj|}nd}|j|S)Nr)rrr-r.rr)r rrrrrs  zEditorWindow.short_titlecCs|j|jjpdS)Nr9)rrr)r rrrrszEditorWindow.long_titlecCs|jdS)N)rT)r rWrrrrsz EditorWindow.center_insert_eventrcCsb|j}|j\}}|j|}||}td||d}|jt|dS)NrYr#)rRgetwindowlines getlinenomaxrfloat)r markrRrtbotr8rUZnewtoprrrrTs   zEditorWindow.centercCsm|j}|jd}|jd}||krc|jdkrct|d}||d}||fS)Nz@0,0z@0,65535rYrU)rRrZ winfo_heightrQ)r rRrtrrUrrrrs zEditorWindow.getwindowlinescCs"|j}tt|j|S)N)rRrQrr)r rrRrrrrs zEditorWindow.getlinenocCs:|jj}tjd|}ttt|jS)zReturn (width, height, x, y)z(\d+)x(\d+)\+(-?\d+)\+(-?\d+))rtZ wm_geometryrmatchlistmaprQgroups)r r9mrrr get_geometryszEditorWindow.get_geometrycCs|jdS)N)r)r rWrrrrszEditorWindow.close_eventcCsb|jr^|jsQ|jjdkr7|jj|jj|jj|jjSdS)Nr")rrrtrr7lowerr8 maybesave)r rrrrs     zEditorWindow.maybesavecCs,|j}t|dkr(|j|S)Ncancel)rr_close)r Zreplyrrrrs  zEditorWindow.closecCs|jjr"|jd|jjtj|j|j|jjd|_d|_|j r}|j jdd|_ d|_ d|_ |j jd|_ |j j|jr|jdS)NrF)rrrrZunregister_callbackrunload_extensionsrrrrRrvrrtr4r[)r rrrrs"             zEditorWindow._closecCsi|_|jdS)N) extensionsload_standard_extensions)r rrrrs zEditorWindow.load_extensionscCsFx6t|jjD]}t|dr|jqWi|_dS)Nr)rrvalueshasattrr)r insrrrrszEditorWindow.unload_extensionsc CsTxM|jD]?}y|j|Wq tdt|tjYq Xq WdS)NzFailed to load extension)rkload_extensionprintrepr traceback print_exc)r rLrrrrs z%EditorWindow.load_standard_extensionscCstjddS)NZ editor_onlyT)r Z GetExtensions)r rrrrksz)EditorWindow.get_standard_extension_namescCsyKytjd|dt}Wn'ttfk rItj|}YnXWn"tk rotd|YnXt||}tj|}t |dr|j |j |||}||j |<|r|j |x|D]}|jdd}x*|dddkr'|dd}qWx*|d dd krT|dd }q+W|d }t ||r|jj|t||qWdS) Nrpackagez Failed to import extension: rs-r`rYrrZ_eventrfrf)r< import_module __package__r? TypeErrorrrr rlrr rsrr}r6rRr3)r rLmodclsrmrZveventZ methodnamerrrr s2       zEditorWindow.load_extensioncCsa|dkr|jj}|j}||_x0|jD]"\}}|r7|j||q7WdS)N)rDrirRrmrjr)r rmrRrWrnrrrr}&s    zEditorWindow.apply_bindingsc Csi|dkr|jj}|dkr0|jj}|j}|j}x |D]\}}|j|}|smqIx|D]}|s|jqt|\} } | dddk} | r| dd} t| \} } t|| } || dd}| r;|j | t }|j d| d| d|d | d |qt|j d| d| d|d | qtWqIWdS) zAdd appropriate entries to the menus and submenus Menus that are absent or None in self.menudict are ignored. NrY!cSs|j|dS)N)r)rRrrrrrZHsz(EditorWindow.fill_menus..commandrrrZrrvariable) rDrsrirrRrrr rt get_var_objZ BooleanVarZadd_checkbuttonr)r rsrmrrRZmnameZ entrylistrKrwrrZ checkbuttonrrrrZvarrrrr /s8           zEditorWindow.fill_menuscCs5|j|}|r%|j}|St|dS)N)rr NameError)r rLrvaluerrrgetvarTs  zEditorWindow.getvarcCs8|j||}|r(|j|n t|dS)N)rrr)r rLrvartyperrrrsetvar\szEditorWindow.setvarcCs=|jj|}| r9|r9||j|j|<}|S)N)rvrrR)r rLrrrrrrcs zEditorWindow.get_var_objcCs<|jr4|jjd|p3d|jj|kSdSdS)NZTODOSTRINGrY)rrR tag_prevrangeZ tag_names)r Z text_indexrrris_char_in_stringss zEditorWindow.is_char_in_stringc CsOy2|jjd}|jjd}||fSWntk rJdSYnXdS)Nz sel.firstzsel.last)NN)rRrr#)r rrrrrget_selection_indicess  z"EditorWindow.get_selection_indicescCs|jdpt}t|S)Ntabs)rRTK_TABWIDTH_DEFAULTrQ)r currentrrrget_tk_tabwidthszEditorWindow.get_tk_tabwidthcCs[|j}|j|krW|jjdd|dd|jd|}|jd|dS)Nr]Zmeasurez -displayofnr)rRrr$r%ZmasterZ configure)r Z newtabwidthrRZpixelsrrrset_tk_tabwidths    zEditorWindow.set_tk_tabwidthTcCsl|rX|rX|j}d|ko/dknr=||_|j|jkrXd|_|j|jdS)Nr#rF) guess_indentrrrr)r rZguessrrrrrs    z#EditorWindow.set_indentation_paramsc Cs|j}|j\}}|rK|rK|j|||jd|dS|jdd}|dkr|jdddr|jdn |jdS|dd kr|jddS|j}t|j |}|d|j |j }|j rt j jd d} nd} d } x]|| kr1P|dd}| d} t|j |}||ks||dd kr$Pq$W|j|jd | d||kr|jdd |||jdS)NrrVzinsert linestartr9rz1.0z insert-1crYz rbrz insert-%dcrrfrfrfrf)rRrrrrrr7rr expandtabsrrrrprrrr) r rWrRrrcharsrZhaveZwantlast_line_of_promptZ ncharsdeletedrrrrsH            z"EditorWindow.smart_backspace_eventc CsE|j}|j\}}|jz|ry|ryt|t|krY|j|S|j|||jd||jdd}t||j \}}|t |kr|j ||j nU|j rd}n3t |j|j }|j } d| || }|jd||jddSWd|jXdS)Nrzinsert linestartrrrV)rRrr index2linerrrr classifywsrr reindent_torrrrrr) r rWrRrrprefixraw effectiveZpadrrrrrs,        zEditorWindow.smart_indent_eventc Cs|j}|j\}}|jz|rT|rT|j|||jd||jdd}dt|}}x*||kr||dkr|d}q|W||kr|jdddS|d|}d}tj j dd } x@|r4|d dkr4|| kr4|dd}|d}qW|rO|jd|dx&|jddkrw|jdqRW|jddt |j d} t j|j|j} |jsax|jD]} t| | d} t| d }|j|d}| j|| j|j|j|}|dk sF| dkrPqW| j|pZdnW|jd d}|r|d}nd }|j|d}| j|| jd| j}|t jkrz|t jkrn|t jkr|jd|no|t jkr,|j| j nJ|t j!krv| j"dkr`|jd|qv|j| j#ndS| j$}|jd|| j%r|j&|n|r| j'r|j(|dSWd|j)d|j*XdS)Nrzinsert linestartrz rYrbrVzinsert - %d charsz.0Zconsolez1.0rfrfrf)+rRrrrrrrrrrprrrrZParserrrrrrrZset_strZfind_good_parse_start_build_char_in_string_funcZset_lorZget_continuation_typeZC_NONEZC_STRING_FIRST_LINEZC_STRING_NEXT_LINESZ C_BRACKETrZcompute_bracket_indentZ C_BACKSLASHZget_num_lines_in_stmtZcompute_backslash_indentZget_base_indent_stringZis_block_openerrZis_block_closerrrr)r rWrRrrrrrindentrlnorcontextZstartatZ startatindexZrawtextZbodr|rrrrrs    %          z%EditorWindow.newline_and_indent_eventcCs||jdd}|S)NcSs||d|S)Nz+%dcr)offsetZ _startindexZ_icisrrrinnercsz6EditorWindow._build_char_in_string_func..inner)r)r Z startindexrrrrrbsz'EditorWindow._build_char_in_string_funcc Cs|j\}}}}xptt|D]\}||}|r+t||j\}} | |j} |j| ||d||Zidlelib.ColorDelegatorr?r@Zidlelib.UndoDelegatorrAZidlelib.IOBindingrBrCrIrDtkinterrEZidlelib.MultiStatusBarrFrgetfilesystemencodingrrgr!rrrrrr r|rrrrrr rr&rrrrrrrrrrrrrrrrrrrrrrrUrr[r\rr^r_rstring ascii_lettersdigitsrcrfrgrqrurrrvrrrrrrrrrrTrrrrrrrrrrrkrr}r rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr=[s     +                      +         $   .                  %    0 # k      r=cCstt|S)N)rQr)rrrrrsrcCstd}}x]|D]U}|dkr:|d}|d}q|dkre|d}||d|}qPqW||fS)NrrrYrr)srrrZchrrrrs       rc@sOeZdZddZddZejejdd d Zd dZ dS)rcCs6||_||_d|_|_d|_|_dS)Nr)rRrrfinished blkopenline indentedline)r rRrrrrr!0s  zIndentSearcher.__init__cCsd|jr dS|jd}|_t|d}|jj|ddrMdS|jj||dS)Nr9rYz.0z>=rez lineend+1c)rrrrRrr)r rrrrrreadline6s zIndentSearcher.readlineclassdefforiftrywhilec Cs[|jr nK||kr0||kr0||_n'||krW|jrW||_d|_dS)NrY)rrr) r rPtokenstartrerINDENTNAMEZOPENERSrrr tokeneater?s   zIndentSearcher.tokeneatercCstj}|jt_zVy4tj|j}x|D]}|j|q4WWntjtfk riYnXWd|t_X|j|j fS)N) _tokenizetabsizergenerate_tokensrr TokenError SyntaxErrorrr)r Z save_tabsizetokensrrrrrKs     zIndentSearcher.runN)rrrrrr) r:r;r<r!rrrrrrrrrrr)s    rcCsG|jd}|dkr=|d|||dd}||fS)Nr`rrY)r5)rrrrrr ]s "r Z bracketleft[Z bracketright]Zslash/cCs |j|}| s.tjr2|dkr2dS|d}tjddd|}tjd d d|}tjd d|}tjd d |}tjdd|}tjdd|}tjdd|}tjdd|}tjdd|}|S)N<> <><>r9rz-[a-z]\bcSs|jjS)N)groupupper)rrrrrXvsz!get_accelerator..z\b\w+\bcSstj|j|jS)N)keynamesrr)rrrrrXwszKey-ZCancelz Ctrl-BreakzControl-zCtrl-rr,z>rrr)rr Z isCocoaTkrr)rmrrnrrrrrtls"  rtcCsF|j}|jddd|jddd|jddddS) NZtcl_wordBreakAfterza brrZ tcl_wordcharsz [a-zA-Z0-9_]Ztcl_nonwordcharsz [^a-zA-Z0-9_])r$r%)ror$rrr fixwordbreakss rcCsx|}t|tjddr3tjd}nd}tj|dtd|d|}|jjd|jdS)NrYrorz<>) rrargvr ZsetupAppr=rRr3r)rrorrrrr_editor_windows r__main__zidlelib.idle_test.test_editor verbosityr#exitF)r)7r<Z importlib.abcimportlib.utilr-rirrrrZtkinter.simpledialogZ simpledialogrZtkinter.messageboxZ messageboxrrr+Zidlelib.MultiCallrrIrrrrrZidlelib.configHandlerr r r r r rrZpython_versionrrobjectrZ helpDialogr=rrtokenizerrr rrtrrr:ZunittestrNZidlelib.idle_test.htestrrrrrsf            -   4