e f @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-idd6dd 6d!d"6Z.d#d$Z/d%d&Z0d'd(Z1e2d)krZdd*l3m4Z4e4e1ndS)+N)*)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}n|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)majorminormicrolevelserialreleaser9/opt/alt/python34/lib64/python3.4/idlelib/EditorWindow.py_sphinx_versions  rc@sReZdZddZdddZddZdd Zdd d ZdS) HelpDialogcCsd|_d|_dS)N)parentdlg)selfrrr__init__-s zHelpDialog.__init__NcCs[ddl}|jdtdd|jdkrA|j|n|rW|j|ndS)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@seZdZddlmZddlmZddlmZddl m Z m Z m Z ddl mZddlmZddlmZd Zd d d d d d Zd d ZddZddZddZd ddZdddddddgZd$d%Zd&d'Zd Zd(d)ZdgZd,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,dFdGZ-dHdIZ.dJdKZ/dLdMZ0dNdOZ1dPdQZ2dRdSZ3dTdUZ4dVdWZ5d dXdYZ6d dZd[Z7d d\d]Z8d d^d_Z9d`daZ:dbdcZ;dddeZ<dfdgZ=dhdiZ>djdkZ?dldmZ@dndoZAeBjCeBjDdpZEdqdrZFdsdtZGdudvZHdwdxZIdydzZJd{d|ZKd}d~ZLd ddZMddZNddZOddZPddZQddZRddZSddZTddZUdddZVddZWdddZXddZYddZZddZ[ddZ\ddZ]ddZ^ddZ_ddZ`ddZaddZbd ddZcd d ddZdddZed ddZfd ddZgddZhddZiddZjddZkdddZlddZmddZnddZoddZpddZqddZrddZsddZtddZuddZvddZwddZxddZyddZzddZ{ddZ|ddZ}ddZ~d S) EditorWindowr) Percolator)ColorDelegator) UndoDelegator) IOBindingfilesystemencodingencoding)Bindings)Toplevel)MultiStatusBarNcCs tjdkrtjjtjdd}tjjdrddtj dd}tjj drrd}qd }tjj||dd}ntjddd krtjjtjdd t }tjj |r|}qn*tjd krtjjtjd }ntjj |}tjj |rk|t_tjd krdtjt_qqdtj ddt_n||_|p|j}||_y tjWntk rdt_YnXt||_tj|d|j|_} |r$|j|_|j|j_ni|_i|j_tjjtjd|_t| |_} t | dd|_!} tj"ddddd|_#idd6dd6dd6d d!6|j#d6tj"ddd"ddd"6} 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|<|r||jR|>> menuzrecent-files.lstnamevbarmainr=widthtypeinttextZpadxZnoneZwraprZhighlightthicknessheightg!@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)r`rarb)r=help_urlr-r.r/r base_prefixplatformcountrisdirrisfilenormpathflistrootps1AttributeErrorMenumenubarrZListedTopleveltopvars tkinter_varsZ inversedict instance_dictr Z GetUserCfgDirrecent_files_pathFrame text_frameZ ScrollbarrM GetOptionrO TkVersionrZTextrRZfocused_widget createmenubarapply_bindingsZprotocolcloser3 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>perr@undo insertfilterundo_block_startundo_block_stopZset_saved_change_hooksaved_change_hookrAioZset_filename_change_hookfilename_change_hookZ good_loadset_indentation_paramscolorexistsloadfileispythonsourceZ set_filenameResetColorizerupdate_recent_files_listload_extensionsmenudictgetindex add_separator wmenu_endZregister_callbackpostwindowsmenu tkMessageBoxaskyesnotkSimpleDialog askinteger showerror)r rmfilenamekeyrnZdochomeZpyverZbasepathZchmfilersryrMZ text_optionsrRZ usespacesrrr is_py_srcrKrdrrrr!fs>                                     %               zEditorWindow.__init__cCst|trwy|j|j}Wqwtk rsy|j|j}Wn!tk rn|jd}YnXYqwXntjdd|S)z3Return filename as BMP unicode so diplayable in Tk.z iso8859-1u [𐀀-􏿿]u�) isinstancebytesdecoderBUnicodeDecodeErrorrCresub)r rrrr_filename_to_unicode?s  z!EditorWindow._filename_to_unicodecCs)|jj\}}|jj|dS)NrU)rZdefaultfilenamermnew)r rVr1basenamerrrrNszEditorWindow.new_callbackcCs||jd@dkr&|jdkr&dS|jjdr|jjdddr|jjdddrt|jjdjdd }nR|jjdd}x:tt |D]}||dkrPqqWt |}t|jjd jdd }||krd}nd t |d}|jd @dkr\|jj dddn|jjds|jj dd nY|jj|jjdd|jjd r|jj ddn|jj dd|jj|}|jjd}|jj|d|r)||}}n|jj ddd|jj d|||jj d ||jjd dS)NrZHomeZiomarkz<=zinsert lineendzinsert linestart.rX  insertzinsert linestart+cselz1.0rdz sel.firstZ my_anchorrU)rr)stateZkeysymrRrcomparerQsplitrrangelenstr tag_removemark_settag_addsee)r rVZinsertptlineZlineatdestfirstlastrrrrSs@"( %  zEditorWindow.home_callbackcCs|j|j|_t|jdddddd}tjdkra|jjddd tn|jjd d d t|jjd d d t|jjd t dt |jd t dt |j j d|j |j jddd|j j|j dS)NrTrXZ borderwidth backgroundZgrey75rJZ _padding1z rZcolumnzCol: ?rzLn: ?r[z<>z z)rFrs status_barrxrrh set_labelrrZBOTTOMXrRr3set_line_and_column event_addZ after_idle)r seprrrr~s!  zEditorWindow.set_status_barcCsS|jjtjd\}}|jjdd||jjdd|dS)NrrzCol: %srzLn: %s)rRrZINSERTrrr)r rVrrrrrrs!z EditorWindow.set_line_and_columnfile_Fileedit_EditformatF_ormatrun_Runoptions_Optionsrc_Windowr_HelpcCs5|j}i|_}xe|jD]Z\}}t|\}}t|d|dd||<}|jd|d|d|q Wtjrt|dddd|d<}|jdd d|n|jt|jdd|_ |jd j d dd ddd|j |jd j t |_ |jdS)NrLtearoffrlabelrK underlineZappleZ applicationZIDLErrHz Recent Filesr)rrr menu_specsprepstrrqZ add_cascader Z isCarbonTk fill_menusrecent_files_menuZinsert_cascaderENDbase_helpmenu_lengthreset_help_menu_entries)r ZmbarrrLrrrKrrrr|s"       zEditorWindow.createmenubarcCsk|jd}|jd}|dkr1d}n||jkrZ|j|jd|ntj|dS)NrcrdrXre)rrrdeleterZadd_windows_to_menu)r rKrdrrrrs   zEditorWindow.postwindowsmenuc Cs,|jjdd|j|jf|js9|jn|j}||_tjdddk}|r|jj ddnxs|j D]h}y|\}}}Wnt k rwYnX|dkrqnt ||}|j |d|qW|j|j|j|r(|jj ddndS) Nrz@%d,%drHrIcursorZarrowrZibeam)rRrxyrmenu make_rmenurVrrhconfig rmenu_specs ValueErrorgetattrZentryconfigureZtk_popupZx_rootZy_root) r rVrZiswinitemr eventnameZ verify_staterrrrrs(#      zEditorWindow.right_menu_eventClose<>cCst|jdd}xj|jD]_}|d|d}}|dk rt|j|dd}|jd|d|q|jqW||_dS)NrrrXcSs|j|dS)N)event_generate)rRrrrrrYsz(EditorWindow.make_rmenu..commandrrY)rqrRr add_commandrr)r rrrrrYrrrrs 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 AboutDialogrs)r rVrrrrszEditorWindow.about_dialogcCstj|jddS)z&Handle Options 'Configure IDLE' event.ZSettingsN)r Z ConfigDialogrs)r rVrrrrszEditorWindow.config_dialogcCs/|jr|j}n |j}tj|dS)zHandle Help 'IDLE Help' event.N)rnrsrZ show_idlehelp)r rVrrrrrs   zEditorWindow.help_dialogcCstjdddkr}ytj|jWqtk ry}z*tjdddt|d|j WYdd}~XqXnt j |jdS)NrHrItitlezDocument Start FailuremessagerrU) rrhr- startfilerfOSErrorrrrrR webbrowseropen)r rVwhyrrrrs,zEditorWindow.python_docscCs|jjddS)Nz<>rU)rRr)r rVrrrrszEditorWindow.cutcCs*|jjdsdS|jjddS)Nrz<>rU)rRZ tag_rangesr)r rVrrrrszEditorWindow.copycCs$|jjd|jjddS)Nz <>rrU)rRrr)r rVrrrr%szEditorWindow.pastecCs=|jjddd|jjdd|jjddS)Nrz1.0zend-1crrU)rRrrr)r rVrrrr*szEditorWindow.select_allcCs*|jjddd|jjddS)Nrz1.0rdr)rRrr)r rVrrrr0szEditorWindow.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 sN|jd@dkrJyddWqJtk rFYqJXndS)NrSrz sel.firstr)rr#)rV) edge_index edges_tableself_text_indexself_text_mark_setrr move_at_edge?s   z.move_at_edge)r.r/)rRrr)r r0r4r)r0r1r2r3rr4s   z&EditorWindow.move_at_edge_if_selectioncCs|jjddS)Nz rU)rRr)r rVrrrrHszEditorWindow.del_word_leftcCs|jjddS)NzrU)rRr)r rVrrrrLszEditorWindow.del_word_rightcCstj|jdS)NrU)rfindrR)r rVrrrrPszEditorWindow.find_eventcCstj|jdS)NrU)rZ find_againrR)r rVrrrrTszEditorWindow.find_again_eventcCstj|jdS)NrU)rZfind_selectionrR)r rVrrrrXsz!EditorWindow.find_selection_eventcCs tj|j|j|jdS)NrU)rZgreprRrrm)r rVrrrr\sz EditorWindow.find_in_files_eventcCstj|jdS)NrU)rreplacerR)r rVrrrr`szEditorWindow.replace_eventcCsp|j}tjddd|}|dkr1dS|dkrK|jdS|jdd||jddS)NZGotozGo to line number:rrUrrz%d.0)rRrrbellrr)r rVrRlinenorrrrds     zEditorWindow.goto_line_eventc!Csy|jjdd}Wntk r3d}Yn X|j}tjddd|jd|}|rv|j}n|sdSytjj|}WnNt t fk r}z(t j dt |d|jdSWYdd}~XnX|dkrt j dd d|jdSt|jtjjsEt 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_filenamerprmr,rr)r rVrLspecmsgZ file_pathrrrrpsH            zEditorWindow.open_modulecCs|jj}|jjdko!|sC|j}|dkrCdSntjj|\}}tjj|\}}ddl m }|j |j ||gdS)NZPyShellEditorWindowr) ClassBrowser) rr __class__r:rr-r.rsplitextidlelibrFrm)r rVrheadtailbaseextrFrrrrs   zEditorWindow.open_class_browsercCs$ddlm}|j|jdS)Nr) PathBrowser)rIrNrm)r rVrNrrrrszEditorWindow.open_path_browsercCs5ddl}tjddg}|j|dddS)Nrz-cz,from turtledemo.__main__ import main; main()shellF) subprocessr executablePopen)r rVrPcmdrrrrs   zEditorWindow.open_turtle_democCsl|dk rh|dkrh|jjdd||jjddd|jjddd|jndS)Nrrz%d.0rz1.0rdz 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.rjrHrnormcaserRr startswith)r rrLrMrrrrrs$zEditorWindow.ispythonsourcecCs)|jr%|jj|d|_ndS)N)rmZunregister_maybe_terminate)r rrr close_hooks zEditorWindow.close_hookcCs ||_dS)N)r[)r r[rrrset_close_hookszEditorWindow.set_close_hookcCsD|jr|jj|n|j|jj||jdS)N)rmZfilename_changed_editrrsZupdate_windowlist_registryr)r rrrrs   z!EditorWindow.filename_change_hookcCs}|jr dS|j|jjr4|j|_n|jry|jj|j|jj|j|jj|jndS)N) rrrrr?r removefilterrr)r rrr _addcolorizers  zEditorWindow._addcolorizercCs:|js dS|jj|jj|jd|_dS)N)rZ removecolorsrr])r rrr _rmcolorizers   zEditorWindow._rmcolorizerc Cs|j|jtj}tj|d}tj|ddd}tj|d}|jjd|dd|dd|d |dd |dtd kr|jjd |dnd S)zUpdate the color themer"rZfgBgZfgZhiliteZ foregroundrZinsertbackgroundZselectforegroundZselectbackgroundg!@ZinactiveselectbackgroundN)r_r^r Z CurrentThemeZ GetHighlightrRrr{)r ZthemeZ normal_colorsZ cursor_colorZ select_colorsrrrrs          zEditorWindow.ResetColorizer_cCs|jd||j|}|rN||jkrN|jd|d|nd|j|krv|jd|n|jd|d|j|dS)NZERRORz wordstart rz+1c)rr IDENTCHARSrr)r rRposcharrrrcolorize_syntax_errorsz"EditorWindow.colorize_syntax_errorcCs#tj|jdd|jd|D]3}|j|d}|j d|dd|qhWn||jdEditorWindow.__extra_help_callback..display_extra_helpr)r ryrzr)r rZ__extra_help_callbackSs z"EditorWindow.__extra_help_callbackcszg}tjj|jrQt|jddddd}|j}WdQXn|rtjj|d}||kr|j|n|jd|ngxG|D]?}d |kstjj|dd rj |qqWfd d |D}d }|dt |}y8t|jddddd}|j |WdQXWn{t k r}z[t |jddsd|j_tjdddd|jt|d|jnWYdd}~XnXx|jjD]}|j} | jdtxlt|D]^\} } | j} |j| } |j| } | jd|| d| d| ddqWqWdS)z/Load and update the recent files list and menusrrCutf_8errorsr6NrarrXcs"g|]}|kr|qSrr).0r.) bad_pathsrr ss 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.rrrrYrre)r-r.rrwr, readlinesr0removerappendr writelinesr*rrnrr showwarningrrrRrsrvr rr  enumeraterstrip#_EditorWindow__recent_file_callbackr)r new_fileZrf_listZ rf_list_filer.ZulcharsZrf_fileerrinstancerKi file_nameZ ufile_namecallbackr)rrrbsL  )    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|}n|jj||jj|dS)Nz - Untitledz*%s*z*%s) short_title long_title _py_version get_savedrsZwm_titleZ wm_iconname)r ZshortZlongr'Ziconrrrrs        zEditorWindow.saved_change_hookcCs |jjS)N)rr)r rrrrszEditorWindow.get_savedcCs|jj|dS)N)r set_saved)r ZflagrrrrszEditorWindow.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 rVrrrrsz EditorWindow.center_insert_eventrcCsb|j}|j\}}|j|}||}td||d}|jt|dS)NrXr#)rRgetwindowlines getlinenomaxrfloat)r markrRrsbotr8rTZnewtoprrrrTs   zEditorWindow.centercCsp|j}|jd}|jd}||krf|jdkrft|d}||d}n||fS)Nz@0,0z@0,65535rXrT)rRrZ winfo_heightrQ)r rRrsrrTrrrrs 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+))rsZ wm_geometryrmatchlistmaprQgroups)r r9mrrr get_geometryszEditorWindow.get_geometrycCs|jdS)N)r~)r rVrrrrszEditorWindow.close_eventcCsh|jrd|jsW|jjdkr:|jjn|jj|jjn|jjSdS)Nr")rrrsrr7lowerr8 maybesave)r rrrrs   zEditorWindow.maybesavecCs/|j}t|dkr+|jn|S)NZcancel)rr_close)r Zreplyrrrr~s  zEditorWindow.closecCs|jjr%|jd|jjntj|j|j|jjd|_d|_|j r|j jdd|_ nd|_ d|_ |j jd|_ |j j|jr|jndS)NrF)rrrrZunregister_callbackrunload_extensionsr~rrrRrurrsr4r[)r rrrrs"             zEditorWindow._closecCsi|_|jdS)N) extensionsload_standard_extensions)r rrrrs zEditorWindow.load_extensionscCsIx9t|jjD]"}t|dr|jqqWi|_dS)Nr~)rrvalueshasattrr~)r insrrrrszEditorWindow.unload_extensionsc CsTxM|jD]?}y|j|Wq tdt|tjYq Xq WdS)NzFailed to load extension)rjload_extensionprintrepr traceback print_exc)r rLrrrr s z%EditorWindow.load_standard_extensionscCstjddS)NZ editor_onlyT)r Z GetExtensions)r rrrrjsz)EditorWindow.get_standard_extension_namescCsyKytjd|dt}Wn'ttfk rItj|}YnXWn"tk rotd|YnXt||}tj|}t |dr|j |j |n||}||j |<|r|j |x|D]}|jdd}x*|dddkr*|dd}qWx*|d dd krW|dd }q.W|d }t ||r|jj|t||qqWndS) Nrpackagez Failed to import extension: rr-r`rXrrZ_eventrere)r< import_module __package__r? TypeErrorrrr rkrr rrrr}r6rRr3)r rLmodclsrlrZveventZ methodnamerrrrs2       zEditorWindow.load_extensioncCsg|dkr|jj}n|j}||_x3|jD]%\}}|r:|j||q:q:WdS)N)rDrhrRrlrir)r rlrRrVrmrrrr}2s   zEditorWindow.apply_bindingsc Csu|dkr|jj}n|dkr6|jj}n|j}|j}x&|D]\}}|j|}|svqOnx|D]}|s|jq}|\} } | dddk} | r| dd} nt| \} } t|| } || dd}| rG|j | t }|j d| d| d|d | d |q}|j d| d| d|d | q}WqOWdS) zAdd appropriate entries to the menus and submenus Menus that are absent or None in self.menudict are ignored. NrX!cSs|j|dS)N)r)rRrrrrrYTsz(EditorWindow.fill_menus..commandrrrYrqZvariable) rDrrrhrrRrrr rs get_var_objZ BooleanVarZadd_checkbuttonr)r rrrlrrRZmnameZ entrylistrKrvrrZ checkbuttonrrqrYvarrrrr ;s8         zEditorWindow.fill_menuscCs5|j|}|r%|j}|St|dS)N)rr NameError)r rLrvaluerrrgetvar`s  zEditorWindow.getvarcCs8|j||}|r(|j|n t|dS)N)rrr)r rLrvartyperrrrsetvarhszEditorWindow.setvarcCs@|jj|}| r<|r<||j|j|<}n|S)N)rurrR)r rLrrrrrros zEditorWindow.get_var_objcCs<|jr4|jjd|p3d|jj|kSdSdS)NZTODOSTRINGrX)rrR tag_prevrangeZ tag_names)r Z text_indexrrris_char_in_strings 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 Zcurrentrrrget_tk_tabwidthszEditorWindow.get_tk_tabwidthcCs^|j}|j|krZ|jjdd|dd|jd|}|jd|ndS)Nr\Zmeasurez -displayofnr)rRrr$r%ZmasterZ configure)r Z newtabwidthrRZpixelsrrrset_tk_tabwidths    zEditorWindow.set_tk_tabwidthTcCsu|ra|ra|j}d|ko/dknr@||_n|j|jkrad|_qan|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 kst |d|j |j }|j r't jjd d} nd} d } xc|| krFPn|dd}| d} t|j |}||ks|dd kr6Pq6q6W|j|jd | d||kr|jdd ||n|jdS)NrrUzinsert linestartr9rz1.0z insert-1crXz rraz insert-%dcrrererere)rRrrrrrr7rr expandtabsAssertionErrorrrrrorrrr) r rVrRrrcharsrZhaveZwantlast_line_of_promptZ ncharsdeletedrrrrsJ            z"EditorWindow.smart_backspace_eventc CsH|j}|j\}}|jz|r||r|t|t|krY|j|S|j|||jd|n|jdd}t||j \}}|t |kr|j ||j nU|j rd}n3t |j|j }|j } d| || }|jd||jddSWd|jXdS)Nrzinsert linestartrrrU)rRrr index2linerrrr classifywsrr reindent_torrrrrr) r rVrRrrprefixraw effectiveZpadrrrrrs,        zEditorWindow.smart_indent_eventc Cs|j}|j\}}|jz|rW|rW|j|||jd|n|jdd}dt|}}x*||kr||dkr|d}qW||kr|jdddS|d|}d}tj j dd } x@|r7|ddkr7|| kr7|dd}|d}qW|rU|jd|dnx&|jddkr}|jdqXW|jddt |j d} t j|j|j} |jsjx|jD]} t| | d} t| d }|j|d}| j|| j|j|j|}|dk sL| dkrPqqW| j|pcdnW|jd d}|r|d}nd }|j|d}| j|| jd| j}|t jkr|t jkrn|t jkr|jd|n|t jkr5|j| j nc|t j!kr| j"dkri|jd|q|j| j#ndst$d |fdS| j%}|jd|| j&r|j'|n"|r| j(r|j)|ndSWd|j*d|j+XdS)Nrzinsert linestartrz rXrarUzinsert - %d charsz.0Zconsolez1.0zbogus continuation type %rrerere),rRrrrrrrrrrorrrrZParserrrrrrrZset_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_indentrZget_base_indent_stringZis_block_openerrZis_block_closerrrr)r rVrRrrrrrindentrZlnorcontextZstartatZ startatindexZrawtextZbodr{rrrrrs    %         z%EditorWindow.newline_and_indent_eventcCs||jdd}|S)NcSs||d|S)Nz+%dcr)offsetZ _startindexZ_icisrrrinnerosz6EditorWindow._build_char_in_string_func..inner)r)r Z startindexrrrrrnsz'EditorWindow._build_char_in_string_funcc Cs|j\}}}}xstt|D]_}||}|r+t||j\}} | |j} |j| ||d||Zidlelib.ColorDelegatorr?Zidlelib.UndoDelegatorr@Zidlelib.IOBindingrArBrCrIrDtkinterrEZidlelib.MultiStatusBarrFrfr!rrrrrrr|rrrrrr rr&rrrrrrrrrrrrrrrrrrrrrrrUrr[r\rr^r_rstringZ ascii_lettersZdigitsrbrerfrprtrrrurrrrrrrrrrTrrrrrr~rrrrrjrr}r rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr=[s    +                      +         $   .                  %    0 # k      r=cCstt|S)N)rQr)rrrrrsrcCstd}}x]|D]U}|dkr:|d}|d}q|dkre|d}||d|}qPqW||fS)NrrrXrr)srrrZchrrrr$s       rc@sOeZdZddZddZejejdd d Zd dZ dS)rcCs6||_||_d|_|_d|_|_dS)Nr)rRrrfinished blkopenline indentedline)r rRrrrrr!<s  zIndentSearcher.__init__cCsd|jr dS|jd}|_t|d}|jj|ddrMdS|jj||dS)Nr9rXz.0z>=rdz lineend+1c)rrrrRrr)r rrrrrreadlineBs zIndentSearcher.readlineclassdefforiftrywhilec Cs^|jr nN||kr0||kr0||_n*||krZ|jrZ||_d|_ndS)NrX)rrr) r rPtokenstartrdrINDENTNAMEZOPENERSrrr tokeneaterKs   zIndentSearcher.tokeneatercCstj}|jt_zVy4tj|j}x|D]}|j|q4WWntjtfk riYnXWd|t_X|j|j fS)N) _tokenizetabsizergenerate_tokensrr TokenError SyntaxErrorrr)r Z save_tabsizetokensrrrrrWs     zIndentSearcher.runN)zclasszdefzforzifztryzwhile) r:r;r<r!rrrrrrrrrrr5s    rcCsJ|jd}|dkr@|d|||dd}n||fS)Nr`rrX)r5)rrrrrr is %r [Z bracketleft]Z bracketright/ZslashcCs |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)rrrrrWsz!get_accelerator..z\b\w+\bcSstj|j|jS)N)keynamesrr )rrrrrWszKey-ZCancelz Ctrl-BreakzControl-zCtrl-rr,z>r rr )rr Z isCocoaTkrr)rlrrmrrrrrsxs"  rscCsF|j}|jddd|jddd|jddddS) NZtcl_wordBreakAfterza brrZ tcl_wordcharsz [a-zA-Z0-9_]Ztcl_nonwordcharsz [^a-zA-Z0-9_])r$r%)rnr$rrr fixwordbreakss rcCsx|}t|tjddr3tjd}nd}tj|dtd|d|}|jjd|jdS)NrXrnrz<>) rrargvr ZsetupAppr=rRr3r)rrnrrrrr_editor_windows r__main__)r)5r<Z importlib.abcimportlib.utilr-rhrrrrZtkinter.simpledialogZ simpledialogrZtkinter.messageboxZ messageboxrrr+Zidlelib.MultiCallrrIrrrrrZidlelib.configHandlerr r r r r rrZpython_versionrrobjectrZ helpDialogr=rrtokenizerrr r rsrrr:Zidlelib.idle_test.htestrrrrrsd            -   4