3  f@sddlZddlZddlZddlZddlZddlZddlZddlZddl Tddl m Z ddl j ZddljZddlmZddlmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlm Z dZ!dej"Z#e$jdkZ%ddZ&Gddde'Z(ddZ)ddZ*Gddde'Z+ddZ,dd d!d"Z-d#d$Z.d%d&Z/d'd(Z0e1d)krdd*l2m3Z3e3d+d,d-d.dd/l4m5Z5e5e0dS)0N)*) Scrollbar)idleConf) configdialog)grep)help) help_about)macosx)MultiCallCreator)pyparse)query)replace)search)windowz (%s)darwincCsbtj\}}}}}d||f}|d|f7}|dkrB|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)majorminormicrolevelserialreleaser3/opt/alt/python36/lib64/python3.6/idlelib/editor.py_sphinx_version!s rc@seZdZddlmZddlmZmZddlm Z ddl m Z m Z ddl mZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlm Z ddl!m"Z"e#j$Z%dZ&dddZ'ddZ(ddZ)ddZ*ddZ+dddZ,dddddddgZ-d,d-Z.d.d/Z/d0d1Z0d2d3Z1dZ2d4d5Z3dgZ4d8d9Z5d:d;Z6dd?Z8dd@dAZ9ddBdCZ:ddDdEZ;ddFdGZdLdMZ?ddNdOZ@ddPdQZAdRdSZBdTdUZCdVdWZDdXdYZEdZd[ZFd\d]ZGd^d_ZHd`daZIdbdcZJdddeZKdfdgZLddhdiZMddjdkZNddldmZOdndoZPdpdqZQdrdsZRdtduZSdvdwZTdxdyZUdzd{ZVd|d}ZWeXjYeXjZd~Z[ddZ\ddZ]ddZ^ddZ_ddZ`ddZaddZbdddZcddZdddZeddZfddZgddZhddZiddZjddZkd ddZlddZmd ddZnddZoddZpddZqddZrddZsddZtddZuddZvddZwddiZxddZyd ddZzd ddZ{ddZ|d ddÄZ}dddńZ~ddDŽZddɄZdd˄Zdd̈́ZdddЄZdd҄ZddԄZddքZdd؄ZddڄZdd܄ZddބZddZddZddZddZddZddZddZddZddZddZddZdS( EditorWindowr) Percolator)ColorDelegator color_config) UndoDelegator) IOBindingencoding)mainmenu)MultiStatusBar) AutoComplete) AutoExpand)Calltip) CodeContext)FormatParagraph) ParenMatch)Rstrip)Squeezer) ZoomHeightNc Csnddlm}tjdkrtjjtjdd}tj j drvddtj dd}tjj d r^d }qd }tjj||dd}nVtj ddd krtjjtjdd t } tjj| r| }ntj dkrtjjtjd}tjj|}tjj|r|t_tj dkrdtjt_ndtj ddt_||_|p*|j}||_t||_tj||jd|_} |rl|j|_|j|j_ni|_i|j_tjjtjd|_d|_t| |_ } t!| dd|_"} tj#ddddd|_$dddd|j$d tj#ddd!ddd"} t%t&| f| |_'}|j'|j_(|j)|j*|jj+d#|j,|jj-d$|j.t/j0rp|j-d$|j.|j-d%|j1|j-d&|j1n|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|jjU|j-dR|jV|j-dS|jW|j-dT|jX|jY|jZ| dU<| j[t\t]dV| j^|dW<tj_|jdd|dX<| j[t`tadLdY|j[tbtadLdY|jctj#ddZd[d\d}| |_dd]|_e|je|_f|jgd^|_hd}|_i|jj||_k}|jl|_m}|jn||jo|_o|jp|_p|jq|jr|js||_t}|ju|jvd^|_w|jxd^d|_y|rjtjjz|rZtjj | rZ|j{|rjdb|_w|j||}|jx|n|j}|db|_w|j~|jr|j|j|jjdc}|r|jdd}|dkrd~}|dkr|j|dL}||_tj|jtj|_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||jdS)Nr) ScriptBindingZDocz index.htmllinuxz python-docs-z%s.%s.%sz/var/www/html/python/z/var/www/html/python/index.htmlz/usr/share/doc/winz Python%s.chmrz0Resources/English.lproj/Documentation/index.htmlzfile://zhttps://docs.python.org/%d.%d/)menuzrecent-files.lstvbar)namemainrwidthint)typetextZnoneZ wordprocessorheight)r9ZpadxZwrapZhighlightthicknessr;Ztabstyler@ZWM_DELETE_WINDOWz<>zz<2>z<3>z z z 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<>command)sidefillZyscrollcommandfont)rFrGexpandIndentz use-spacesboolrF2@KLTrendz<>z z<>zzzz<>zz<>zz<>zzz<>z<>z<>z<>z<>z<>z <>z<>z<>z<>z<>)rLrMrN)Zidlelib.runscriptr1rhelp_urlospathjoinr base_prefixplatformcountrisdirrisfilenormpathflistrootMenumenubarrZListedTopleveltopvars tkinter_varsZ inversedict instance_dictrZuserdirrecent_files_pathprompt_last_lineFrame text_framerr8 GetOptionr;r ZTextr>Zfocused_widget createmenubarapply_bindingsZprotocolclosebind close_eventr ZisAquaTkright_menu_event mousescrollcutcopypastecenter_insert_event help_dialog python_docs about_dialog config_dialogopen_module_event 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_module_browseropen_path_browseropen_turtle_demoset_status_bar handle_yviewpackRIGHTYsetGetFontZLEFTZBOTHZTOPZ focus_setusetabstabwidth indentwidthset_notabs_indentwidthcontext_use_ps1num_context_linesr perr#undo insertfilterundo_block_startundo_block_stopZset_saved_change_hooksaved_change_hookr$ioZset_filename_change_hookfilename_change_hookZ good_loadset_indentation_paramscolorexistsloadfileispythonsourceZ set_filenameResetColorizerupdate_recent_files_listload_extensionsmenudictgetindex add_separator wmenu_endZregister_callbackpostwindowsmenu tkMessageBoxaskyesnotkSimpleDialog askinteger showerror event_addr(Zautocomplete_eventZtry_open_completions_eventZforce_open_completions_eventr)Zexpand_word_eventr,Zformat_paragraph_eventr-Zflash_paren_eventZparen_closed_eventZcheck_module_eventZrun_module_eventr.Z do_rstripr*Ztry_open_calltip_eventZrefresh_calltip_eventZforce_open_calltip_eventr0Zzoom_height_eventr+Ztoggle_code_context_eventr/Zsqueeze_current_text_event)selfr[filenamekeyr\r1ZdochomeZpyverZbasepathZchmfiler_rfr8Z text_optionsr>Z usespacesrrr is_py_srcr6rOZ autocompleteZ parenmatchZ scriptbindingZctipZsqueezerrrr__init__As                                              zEditorWindow.__init__cCsnt|tr`y|j|j}WnDtk r^y|j|j}Wntk rX|jd}YnXYnXtjdd|S)z3Return filename as BMP unicode so diplayable in Tk.z iso8859-1u [𐀀-􏿿]u�) isinstancebytesdecodefilesystemencodingUnicodeDecodeErrorr%resub)rrrrr_filename_to_unicodeDs z!EditorWindow._filename_to_unicodecCs|jj\}}|jj|dS)NrA)rZdefaultfilenamer[new)rrBdirnamebasenamerrrrSs zEditorWindow.new_callbackcCs|jd@dkr|jdkrdS|jjdrd|jjdddrd|jjdddrdt|jjdjdd }n:|jjdd}x*tt |D]}||dkrPqWt |}t|jjd jdd }||krd}d t |d}|jd @dkr|jj dddn|jjds|jj dd n@|jj|jjdd|jjd rD|jj ddn|jj dd|jj|}|jjd}|jj|d|r||}}|jj ddd|jj d|||jj d ||jjd dS)NrZHomeZiomarkz<=zinsert lineendzinsert linestart.rD  insertzinsert linestart+cselz1.0rOz sel.firstZ my_anchorrA)rr)stateZkeysymr>rcomparer<splitrrangelenstr tag_removemark_settag_addsee)rrBZinsertptlineZlineatdestfirstlastrrrrXs@      zEditorWindow.home_callbackcCs|j|j|_t|jdddd}tjdkr<|jjddtd|jjdd td|jjd d td|jjt t d |jt t d |j j d |j |j jd dd|j j|j dS)NrDZgrey75)r@Z borderwidthZ backgroundrZ _padding1z )rFcolumnzCol: ?rzLn: ?)rFrGz<>z z)r'r_ status_barrerrV set_labelrrZBOTTOMXr>rkset_line_and_columnrZ after_idle)rseprrrrs zEditorWindow.set_status_barcCs>|jjtjd\}}|jjdd||jjdd|dS)NrrzCol: %srzLn: %s)r>rZINSERTrrr)rrBrrrrrrsz EditorWindow.set_line_and_columnfile_Fileedit_EditformatF_ormatrun_Runoptions_Optionsr_Windowr_HelpcCs|j}i|_}xD|jD]:\}}t|\}}t||dd||<}|j|||dqWtjrt|ddd|d<}|jd|d|jt|jdd|_ |jd j d d d|j d |jd j t |_ |jdS)Nr)r9tearoff)labelr6 underlineZappleZ applicationZIDLE)rr6)rrr3z Recent Files)rrr6r)r^r menu_specsprepstrr]Z add_cascader Z isCarbonTk fill_menusrecent_files_menuZinsert_cascaderENDbase_helpmenu_lengthreset_help_menu_entries)rZmbarrr9rrr6rrrrhs"   zEditorWindow.createmenubarcCsJ|jd}|jd}|dkr d}||jkr<|j|jd|tj|dS)NrrOrDrP)rrrdeleterZadd_windows_to_menu)rr6rOrrrrs   zEditorWindow.postwindowsmenucGsR|dkryview)rrBargsZfractionlinesrrrrs  zEditorWindow.handle_yviewcCs@tj|jdktj|jdki}||jr*dnd}|jj|ddS)aHandle 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. rrr?rrA)Z EventTypeZ MouseWheelZdeltaZButtonZnumr=r>Z yview_scroll)rrBZuprrrrrns zEditorWindow.mousescrollc Cs|jjdd|j|jf|js(|j|j}||_tjdddk}|rX|jj ddxX|j D]N}y|\}}}Wnt k rw`YnX|dkrq`t ||}|j ||dq`W|j|j|j|r|jj ddd S) Nrz@%d,%dr3r4Zarrow)Zcursor)rZibeamrA)r>rxyrmenu make_rmenurBrrVconfig rmenu_specs ValueErrorgetattrZentryconfigureZtk_popupZx_rootZy_root) rrBr Ziswinitemr eventnameZ verify_staterrrrrms*  zEditorWindow.right_menu_eventClose<>cCsjt|jdd}xP|jD]F}|d|d}}|dk rT|j|fdd}|j||dq|jqW||_dS)Nr)rrDcSs|j|dS)N)event_generate)r>rrrrrEsz(EditorWindow.make_rmenu..command)rrE)r]r>r add_commandrr )rr rrrrErrrr s  zEditorWindow.make_rmenucCs|jS)N)rmenu_check_copy)rrrrrmenu_check_cut szEditorWindow.rmenu_check_cutc Cs6y|jjd}Wntk r$dSX|r.dSdSdS)Nz sel.firstdisablednormal)r>rTclError)rZindxrrrrs zEditorWindow.rmenu_check_copyc Cs6y|jjjd|jdWntk r,dSXdSdS)Nztk::GetSelectionZ CLIPBOARDrr)r>tkcallr)rrrrrmenu_check_pastes zEditorWindow.rmenu_check_pastecCstj|jdS)zHandle Help 'About IDLE' event.rA)rZ AboutDialogr_)rrBrrrrus zEditorWindow.about_dialogcCstj|jddS)z&Handle Options 'Configure IDLE' event.ZSettingsrA)rZ ConfigDialogr_)rrBrrrrv$szEditorWindow.config_dialogcCs"|jr|j}n|j}tj|dS)zHandle Help 'IDLE Help' event.rA)r\r_rZ show_idlehelp)rrBparentrrrrs*s  zEditorWindow.help_dialogcCsntjdddkr^ytj|jWqjtk rZ}ztjdt||j dWYdd}~XqjXn t j |jdS)Nr3r4zDocument Start Failure)titlemessagerrA) rrVrR startfilerQOSErrorrrrr> webbrowseropen)rrBwhyrrrrt4s$ zEditorWindow.python_docscCs|jjddS)Nz<>rA)r>r)rrBrrrro?s zEditorWindow.cutcCs |jjdsdS|jjddS)Nrz<>rA)r>Z tag_rangesr)rrBrrrrpCs  zEditorWindow.copycCs|jjd|jjddS)Nz <>rrA)r>rr)rrBrrrrqJs  zEditorWindow.pastecCs.|jjddd|jjdd|jjddS)Nrz1.0zend-1crrA)r>rrr)rrBrrrrxOs zEditorWindow.select_allcCs |jjddd|jjddS)Nrz1.0rOrrA)r>rr)rrBrrrryUs zEditorWindow.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 sB|jd@dkr>yddWntk r<YnXdS)Nr?rz sel.firstr)rr)rB) edge_index edges_tableself_text_indexself_text_mark_setrr move_at_edgees z.move_at_edge)r'r()r>rr)rr)r-r)r)r*r+r,rrZs z&EditorWindow.move_at_edge_if_selectioncCs|jjddS)Nz rA)r>r)rrBrrrrns zEditorWindow.del_word_leftcCs|jjddS)NzrA)r>r)rrBrrrrrs zEditorWindow.del_word_rightcCstj|jdS)NrA)rfindr>)rrBrrrrzvs zEditorWindow.find_eventcCstj|jdS)NrA)rZ find_againr>)rrBrrrr{zs zEditorWindow.find_again_eventcCstj|jdS)NrA)rZfind_selectionr>)rrBrrrr}~s z!EditorWindow.find_selection_eventcCstj|j|j|jdS)NrA)rr>rr[)rrBrrrr|sz EditorWindow.find_in_files_eventcCstj|jdS)NrA)r r>)rrBrrrr~s zEditorWindow.replace_eventcCsT|j}tjdd|d}|dkr"dS|dkr6|jdS|jdd||jddS)NZGotozGo to line number:)rrArrz%d.0)r>rrbellrr)rrBr>linenorrrrs  zEditorWindow.goto_line_eventc Cspy|jjddj}Wntk r.d}YnXtj|jdd|j}|dk rl|jr`|jj|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.firstzsel.lastr7z Open ModulezAEnter the name of a Python module to search on sys.path and open:N) r>rstriprr Z ModuleNameresultr[r%rr)rr9Z file_pathrrr open_modules  zEditorWindow.open_modulecCs |jdS)NrA)r3)rrBrrrrwszEditorWindow.open_module_eventcCsJ|jj}|jjdko|s,|j}|dkr,dSddlm}|j|j|dS)NZPyShellEditorWindowrAr)browser) rr __class____name__r3idlelibr4Z ModuleBrowserr\)rrBrr4rrrrs  z EditorWindow.open_module_browsercCsddlm}|j|jdS)Nr) pathbrowserrA)r7r8Z PathBrowserr\)rrBr8rrrrs  zEditorWindow.open_path_browsercCs&ddl}tjddg}|j|dddS)Nrz-cz,from turtledemo.__main__ import main; main()F)shellrA) subprocessr executablePopen)rrBr:cmdrrrrs zEditorWindow.open_turtle_democCsN|dk rJ|dkrJ|jjdd||jjddd|jjddd|jdS)Nrrz%d.0rz1.0rOz insert +1l)r>rrrcenter)rr0rrrgotolines zEditorWindow.gotolinecCsb| stjj|rdStjjtjj|\}}tjj|dkrBdS|jjdd}|jdo`d|kS) NT.py.pywz1.0z 1.0 lineendz#!python)r@rA) rRrSrXsplitextrnormcaser>r startswith)rrbaseZextrrrrrszEditorWindow.ispythonsourcecCs|jr|jj|d|_dS)N)r[Zunregister_maybe_terminate)rrrr close_hooks zEditorWindow.close_hookcCs ||_dS)N)rG)rrGrrrset_close_hookszEditorWindow.set_close_hookcCs2|jr|jj||j|jj||jdS)N)r[Zfilename_changed_editrr_Zupdate_windowlist_registryr)rrrrrs   z!EditorWindow.filename_change_hookcCsV|jr dS|j|jjr"|j|_|jrR|jj|j|jj|j|jj|jdS)N) rrrrr!r removefilterrr)rrrr _addcolorizers zEditorWindow._addcolorizercCs,|js dS|jj|jj|jd|_dS)N)rZ removecolorsrrI)rrrr _rmcolorizers  zEditorWindow._rmcolorizercCs |j|jtj|jdS)zUpdate the color themeN)rKrJrr"r>)rrrrrszEditorWindow.ResetColorizer_cCsp|jd||j|}|r6||jkr6|jd|d|d|j|krR|jd|n|jd|d|j|dS)NZERRORz wordstart rz+1c)rr IDENTCHARSrr)rr>poscharrrrcolorize_syntax_errors  z"EditorWindow.colorize_syntax_errorcCstj|jdd|jd<dS)z.Update the text widgets' font if it is changedr:rrHN)rrr\r>)rrrr ResetFontszEditorWindow.ResetFontcCstj|j_}x&|jD]\}}|jj|f|qWxF|jD]:}tj|}|rBx&|jD]\}}|jj|f|q^WqBWdS)z/Remove the keybindings before they are changed.N) rGetCurrentKeySetr&default_keydefsitemsr>Z event_deleteget_standard_extension_namesGetExtensionBindings)rkeydefsrBkeylist extensionNamexkeydefsrrrRemoveKeybindingss zEditorWindow.RemoveKeybindingsc CsVtj|j_}|jx(|jD]}tj|}|r"|j|q"Wi}xR|jjD]F}i||d<x4|dD](}|rj|d||dt|dd<qjWqPWx|j D]}|j |}|j t }|dkrq|d7}xt d|D]r} |j | dkr|j| d} | r|j| d} d} ||kr.| ||kr.||| } | rt|| } |j| | dqWqWdS) z-Update the keybindings after they are changedrrDNrE acceleratorrr7)r])rrSr&rTrirVrWmenudefsrrrrrr=Z entrycgetget_acceleratorZ entryconfig) rrXrZr[Z menuEventDictr6rZ menubarItemrOrZaccelZitemNamerBrrrApplyKeybindings#s<  (        zEditorWindow.ApplyKeybindingscCs|jstjddddd|_dS)zCUpdate the indentwidth if changed and not using tabs in this windowr:rJz num-spacesr<)r=N)rrrgr)rrrrrGs z#EditorWindow.set_notabs_indentwidthcCstj}|jd}|jt}||jkr8|j|jd||rr|jx,|D]$}|j|d}|j |d|dqJW||jd<dS)z3Update the additional help entries on the Help menurrDr)rrEN) rZGetAllExtraHelpSourcesListrrrrrr"_EditorWindow__extra_help_callbackr)rZ help_listZhelpmenuZhelpmenu_lengthentryr=rrrrNs    z$EditorWindow.reset_help_menu_entriescs|ffdd }|S)zCCreate a callback with the helpfile value frozen at definition timecs|jdstjj|}tjdddkrrytj|Wq|tk rn}ztj dt |j dWYdd}~Xq|Xn t j |dS)Nwwwhttpr3r4zDocument Start Failure)r r!r)rcrd)rErRrSrZrrVr"r#rrrr>r$r%)helpfiler&)rrrdisplay_extra_helpas  $z>EditorWindow.__extra_help_callback..display_extra_helpr)rrerfr)rrZ__extra_help_callback_s z"EditorWindow.__extra_help_callbackcsg}tjj|jr8t|jdddd}|j}WdQRX|rjtjj|d}||kr^|j||jd|gx4|D],}d|kstjj|dd rtj |qtWfd d |D}d }|dt |}y,t|jd ddd}|j |WdQRXWn\t k rR}z>t |jddsBd|j_tjdd|jt||jdWYdd}~XnXxt|jjD]h}|j} | jdtxNt|D]B\} } | j} |j| } |j| } | j|| d| | ddq~Wq^WdS)z/Load and update the recent files list and menusrutf_8r )r%errorsNrMrrDcsg|]}|kr|qSrr).0rS) bad_pathsrr sz9EditorWindow.update_recent_files_list..Z1234567890ABCDEFGHIJKwrecentfilelist_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!rr)rrErrP)rRrSrrcr% readlinesabspathremoverappendr writelinesr#rr\ror showwarningrrr>r_rbrrr enumeraterstrip#_EditorWindow__recent_file_callbackr)rnew_fileZrf_listZ rf_list_filerSZulcharsZrf_fileerrinstancer6i file_nameZ ufile_namecallbackr)rlrrnsL        z%EditorWindow.update_recent_files_listcs|ffdd }|S)Ncsjj|ddS)N)ZeditFile)rr%)Z fn_closure)rrropen_recent_filesz=EditorWindow.__recent_file_callback..open_recent_filer)rr}rr)rrZ__recent_file_callbacksz#EditorWindow.__recent_file_callbackcCs|j}|j}|r*|r*|d|t}n|r4|}n|r>|}nd}|pL|pL|}|jsfd|}d|}|jj||jj|dS)Nz - Untitledz*%s*z*%s) short_title long_title _py_version get_savedr_Zwm_titleZ wm_iconname)rZshortZlongr Ziconrrrrs  zEditorWindow.saved_change_hookcCs |jjS)N)rr)rrrrrszEditorWindow.get_savedcCs|jj|dS)N)r set_saved)rflagrrrrszEditorWindow.set_savedcCs|jjdS)N)r reset_undo)rrrrrszEditorWindow.reset_undocCs(|jj}|rtjj|}nd}|j|S)Nr)rrrRrSrr)rrrrrrs zEditorWindow.short_titlecCs|j|jjpdS)Nr7)rrr)rrrrrszEditorWindow.long_titlecCs |jdS)NrA)r>)rrBrrrrrsz EditorWindow.center_insert_eventrcCsH|j}|j\}}|j|}||}td||d}|jt|dS)NrDr5)r>getwindowlinesrmaxrr)rmarkr>r_botr0r@Znewtoprrrr>s   zEditorWindow.centercCsN|j}|jd}|jd}||krF|jdkrFt|d}||d}||fS)Nz@0,0z@0,65535rDr@)r>rZ winfo_heightr<)rr>r_rr@rrrrs    zEditorWindow.getwindowlinescCs|j}tt|j|S)N)r>r<rr)rrr>rrrrszEditorWindow.getlinenocCs(|jj}tjd|}ttt|jS)zReturn (width, height, x, y)z(\d+)x(\d+)\+(-?\d+)\+(-?\d+))r_Z wm_geometryrmatchlistmapr<groups)rZgeommrrr get_geometrys  zEditorWindow.get_geometrycCs |jdS)NrA)rj)rrBrrrrlszEditorWindow.close_eventcCsH|jrD|js:|jjdkr&|jj|jj|jj|jjSdS)Nr)rrr_rZ deiconifylowerZlift maybesave)rrrrrs   zEditorWindow.maybesavecCs |j}t|dkr|j|S)NZcancel)rr_close)rZreplyrrrrjs zEditorWindow.closecCs|jjr|j|jjdtj|j|j|jjd|_d|_|j rZ|j jdd|_ d|_ d|_ |j jd|_ |j j|jr|jdS)N)ryF)rrrrZunregister_callbackrunload_extensionsrjrrr>rarr_ZdestroyrG)rrrrrs"     zEditorWindow._closecCsi|_|jdS)N) extensionsload_standard_extensions)rrrrrszEditorWindow.load_extensionscCs4x(t|jjD]}t|dr|jqWi|_dS)Nrj)rrvalueshasattrrj)rinsrrrrs  zEditorWindow.unload_extensionsc CsHxB|jD]6}y|j|Wq tdt|tjYq Xq WdS)NzFailed to load extension)rVload_extensionprintrepr traceback print_exc)rr9rrrrs z%EditorWindow.load_standard_extensionscCs tjddS)NT)Z editor_only)rZ GetExtensions)rrrrrV"sz)EditorWindow.get_standard_extension_namesZZzDummyZzzdummyc CsF|jj||}y>ytjd|td}Wn"ttfk rHtj|}YnXWn tk rltd|YnXt||}t j |}t |dr|j |j |||}||j|<|rB|j|x|D]|}|jdd}x |dddkr|dd}qWx"|d dd kr|dd }qW|d }t ||r|jj|t||qWdS) Nr)packagez Failed to import extension: r^-rLrDrrZ_eventrPrP)extfilesr importlib import_module __package__ ImportError TypeErrorrrrrWrrr^rrir r>rk) rr9ZfnamemodclsrXrZveventZ methodnamerrrr)s4         zEditorWindow.load_extensioncCsJ|dkr|jj}|j}||_x(|jD]\}}|r&|j|f|q&WdS)N)r&rTr>rXrUr)rrXr>rBrYrrrriEszEditorWindow.apply_bindingsc Cs|dkr|jj}|dkr |jj}|j}|j}x|D]\}}|j|}|sJq2x|D]}|sb|jqP|\} } | dddk} | r| dd} t| \} } t|| } || fdd}| r|j | t }|j | | || |dqP|j | | || dqPWq2WdS)zAdd appropriate entries to the menus and submenus Menus that are absent or None in self.menudict are ignored. NrD!cSs|j|dS)N)r)r>rrrrrEgsz(EditorWindow.fill_menus..command)rrrEr]Zvariable)rrrEr]) r&r^rTrr>rrrr_ get_var_objZ BooleanVarZadd_checkbuttonr)rr^rXrr>ZmnameZ entrylistr6rbrrZ checkbuttonrr]rEvarrrrrNs8        zEditorWindow.fill_menuscCs&|j|}|r|j}|St|dS)N)rr NameError)rr9rvaluerrrgetvarss  zEditorWindow.getvarcCs(|j||}|r|j|nt|dS)N)rrr)rr9rvartyperrrrsetvar{s  zEditorWindow.setvarcCs.|jj|}| r*|r*||j|j|<}|S)N)rarr>)rr9rrrrrrs  zEditorWindow.get_var_objcCs,|jr$|jjd|p"d|jj|kSdSdS)NZTODOSTRINGrD)rr> tag_prevrangeZ tag_names)rZ text_indexrrris_char_in_stringszEditorWindow.is_char_in_stringc Cs:y |jjd}|jjd}||fStk r4dSXdS)Nz sel.firstzsel.last)NN)r>rr)rrrrrrget_selection_indicess   z"EditorWindow.get_selection_indicescCs|jdp t}t|S)Ntabs)r>TK_TABWIDTH_DEFAULTr<)rZcurrentrrrget_tk_tabwidthszEditorWindow.get_tk_tabwidthcCsB|j}|j|kr>|jjdd|dd|jd|}|j|ddS)NrHZmeasurez -displayofn)r)r>rrrZmasterZ configure)rZ newtabwidthr>Zpixelsrrrset_tk_tabwidths   zEditorWindow.set_tk_tabwidthTcCsP|r@|r@|j}d|ko"dknr.||_|j|jkr@d|_|j|jdS)Nr5rF) guess_indentrrrr)rrZguessr|rrrrs z#EditorWindow.set_indentation_paramsc CsP|j}|j\}}|r6|r6|j|||jd|dS|jdd}|dkrp|jdddrd|jdn|jdS|d d kr|jddS|j}t|j |}|d kst |d|j |j }d } xJ||j krP|dd}| d} t|j |}||ks|dd krPqW|j |jd | d||krD|jdd |||jdS)NrrAzinsert linestartr7rz1.0z insert-1crDz rz insert-%dcrrPrPrP)r>rrrrrr/rr expandtabsAssertionErrorrrdrrr) rrBr>rrcharsrZhaveZwantZ ncharsdeletedrrrrsD           z"EditorWindow.smart_backspace_eventc Cs|j}|j\}}|jz|rV|rVt|t|kr>|j|S|j|||jd||jdd}t||j \}}|t |kr|j ||j n>|j rd}n&t |j|j }|j } d| || }|jd||jddS|jXdS)Nrzinsert linestartrrrA)r>rr index2linerrrr classifywsrr reindent_torrrrrr) rrBr>rrprefixraw effectiveZpadrrrrrs,        zEditorWindow.smart_indent_eventc Cs|j}|j\}}|jz|r>|r>|j|||jd||jdd}dt|}}x ||krx||dkrx|d}qZW||kr|jdddS|d|}d}x2|r|d dkr||jkr|dd}|d}qW|r|jd|dx|jddkr|jdqW|jddt |j d} t j |j |j} |jsxj|jD]`} t| | d} t| d } |j| d}| j|| j|j|j| }|dk s| dkrDPqDW| j|pdn@|jd d}|r|d} nd } |j| d}| j|| jd| j}|t jkr|t jkrn|t jkr6|jd|nh|t jkrR|j| jnL|t jkr| j dkrz|jd|n|j| j!ndst"d |fdS| j#}|jd|| j$r|j%|n|r| j&r|j'|dS|j(d|j)XdS)Nrzinsert linestartrz rDrMrAzinsert - %d charsz.0Zconsolez1.0zbogus continuation type %rrPrP)*r>rrrrrrrrdrrr ZParserrrrrrrZset_codeZfind_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)rrBr>rrrr|rindentZlnor contextZstartatZ startatindexZrawtextZbodrgrrrrrs                              z%EditorWindow.newline_and_indent_eventcCs||jfdd}|S)NcSs||d|S)Nz+%dcr)offsetZ _startindexZ_icisrrrinner}sz6EditorWindow._build_char_in_string_func..inner)r)rZ startindexrrrrr|sz'EditorWindow._build_char_in_string_funcc Csz|j\}}}}xTtt|D]D}||}|rt||j\}} | |j} |j| ||d||<qW|j||||dS)NrA) get_regionrrrrr _make_blanks set_region) rrBheadtailrrrOrrrrrrrs z EditorWindow.indent_region_eventc Cs|j\}}}}xZtt|D]J}||}|rt||j\}} t| |jd} |j| ||d||<qW|j||||dS)NrrA) rrrrrrrrr) rrBrrrrrOrrrrrrrsz EditorWindow.dedent_region_eventcCsR|j\}}}}x,tt|dD]}||}d|||<q"W|j||||dS)NrDz##rA)rrrr)rrBrrrrrOrrrrrs z!EditorWindow.comment_region_eventcCs|j\}}}}xdtt|D]T}||}|s0q|dddkrN|dd}n|dddkrj|dd}|||<qW|j||||dS)Nr5z##rD#rA)rrrr)rrBrrrrrOrrrrrs  z#EditorWindow.uncomment_region_eventc Cs|j\}}}}|j}|dkr$dSx\tt|D]L}||}|r2t||\} } t| |\} } d| d| || d||<q2W|j||||dS)NrrrA)r _asktabwidthrrrdivmodr) rrBrrrrrrOrrrntabsnspacesrrrrs$z EditorWindow.tabify_region_eventcCs`|j\}}}}|j}|dkr$dSx&tt|D]}||j|||<q2W|j||||dS)NrA)rrrrrr)rrBrrrrrrOrrrrsz"EditorWindow.untabify_region_eventcCsF|jddd |jdd|jdd |jd rB|j |_d |_d S)Nz Toggle tabsz Turn tabs onoffz? Indent width will be remains atz 8.z! Note: a tab is always 8 columns)rrrA)rr)rr)rrr>r)rrBrrrrs  zEditorWindow.toggle_tabs_eventcCs:|jdd|j|jddd}|r6||jkr6|j r6||_dS)Nz Indent widthz6New indent width (2-16) (Always use 8 when using tabs)r5)r initialvalueminvaluemaxvaluerA)rr>rr)rrBrrrrrsz%EditorWindow.change_indentwidth_eventcCsn|j}|j\}}|r8|r8|j|d}|j|d}n|jd}|jd}|j||}|jd}||||fS)Nz linestartz-1c lineend +1czinsert linestartzinsert lineend +1crM)r>rrrr)rr>rrrrrrrrrrs     zEditorWindow.get_regioncCsx|j}dj|}||kr$|jdS|jddd|jd||j|j|||j|||j|j d|ddS)NrMrz1.0rOr) r>rTr/rrrrrrr)rrrrrr>newcharsrrrrs    zEditorWindow.set_regioncCs2|jr&t||j\}}d|d|Sd|SdS)Nrr)rrr)rrrrrrrrszEditorWindow._make_blankscCsJ|j}|j|jdddr(|jdd|r>|jd|j||jdS)Nzinsert linestartz!=r)r>rrrrrr)rrr>rrrr s zEditorWindow.reindent_tocCs|jdd|j|jdddS)Nz Tab widthzColumns per tab? (2-16)r5r)rrrr)rr>r)rrrrrszEditorWindow._asktabwidthcCsPt|j|jj\}}|r@|r@t||j\}}t||j\}}nd}}||S)Nr)IndentSearcherr>rrr)ropenerZindentedrZ indentsmallZ indentlargerrrr$s zEditorWindow.guess_indent)NNNN)N)rr)rr)rr)rr)rr)rr)rr)rrN)N)N)N)N)N)N)N)N)N)N)r)r)N)NN)N)N)T)r6 __module__ __qualname__Zidlelib.percolatorr Zidlelib.colorizerr!r"Z idlelib.undor#Zidlelib.iomenur$r%r7r&Zidlelib.statusbarr'Zidlelib.autocompleter(Zidlelib.autoexpandr)Zidlelib.calltipr*Zidlelib.codecontextr+Zidlelib.paragraphr,Zidlelib.parenmatchr-Zidlelib.rstripr.Zidlelib.squeezerr/Zidlelib.zoomheightr0rgetfilesystemencodingrrQrrrrrrrrhrrrnr rmrr rrrrurvrsrtrorprqrxryrrrrzr{r}r|r~rr3rwrrrr?rrGrHrrJrKrstringZ ascii_lettersZdigitsrNrQrRr\r`rrrarrxrrrrrrrrr>rrrrlrrjrrrrrVrrrirrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr-s               +                $ .     %     ,#j        rcCs tt|S)N)r<r)rrrrr.srcCs\d}}xJ|D]B}|dkr,|d}|d}q|dkrN|d}||d|}qPqW||fS)NrrrDrr)srrrZchrrrr6s  rc@s8eZdZddZddZejejdfd d Zd dZ dS)rcCs(||_||_d|_|_d|_|_dS)Nr)r>rr|finished blkopenline indentedline)rr>rrrrrKs zIndentSearcher.__init__cCsL|jr dS|jd}|_t|d}|jj|ddr:dS|jj||dS)Nr7rDz.0z>=rOz lineend+1c)rr|rr>rr)rr|rrrrreadlineQs zIndentSearcher.readlineclassdefforiftrywhilec Cs>|jrn2||kr ||kr ||_n||kr:|jr:||_d|_dS)NrD)rrr) rr=tokenstartrOrINDENTNAMEZOPENERSrrr tokeneaterZszIndentSearcher.tokeneatercCsltj}|jt_zHy(tj|j}x|D]}|j|q$WWntjtfk rRYnXWd|t_X|j|j fS)N) tokenizetabsizergenerate_tokensrr TokenError SyntaxErrorrr)rZ save_tabsizetokensrrrrrfs   zIndentSearcher.runN)rrrrrr) r6rrrrrrrrrrrrrrDs   rcCs6|jd}|dkr.|d|||dd}||fS)NrLrrD)r.)rr|rrrrxs r[]/)Z bracketleftZ bracketrightZslashcCs|j|}| s tjr$|dkr$dS|d}tjddd|}tjd d d|}tjd d|}tjd d |}tjdd|}tjdd|}tjdd|}tjdd|}tjdd|}|S)N<> <><>r7rz-[a-z]\bcSs |jjS)N)groupupper)rrrrrCsz!get_accelerator..z\b\w+\bcSstj|j|jS)N)keynamesrr)rrrrrCszKey-ZCancelz Ctrl-BreakzControl-zCtrl-r+z>rrr)rr Z isCocoaTkrr)rXrrYrrrrr_s" r_cCs4|j}|jddd|jddd|jddddS) NZtcl_wordBreakAfterza brrZ tcl_wordcharsz\wZtcl_nonwordcharsz\W)rr)r\rrrr fixwordbreakssrcCs|}t|tjddr&tjd}nd}tj|dt||d}|j}d|d<x,tdD] }|jdd|t |dqZWdS) NrD)r\r r@rz rM) rrargvr ZsetupApprr>rrr)rr\rrr>r|rrr_editor_windows   r__main__)r:zidlelib.idle_test.test_editorr5F) verbosityexit)r)6Z importlib.abcrimportlib.utilrRrVrrrr$ZtkinterZ tkinter.ttkrZtkinter.simpledialogZ simpledialogrZtkinter.messageboxZ messageboxrZidlelib.configrr7rrrrr Zidlelib.multicallr r r r rrrZpython_versionrrrrobjectrrrrrrr_rrr6Zunittestr:Zidlelib.idle_test.htestrrrrrsn                   4