3 2a@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)Nz%s%sz%s candidatezrc%sfinalr)sys version_info)majorminormicrolevelserialreleaser+/opt/alt/python36/lib64/python3.6/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)r9ZpadxwrapZhighlightthicknessr;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)rGrHexpandIndentz use-spacesboolrF2@KLTrendz<>z z<>zzzz<>zz<>zz<>zzz<>z<>z<>z<>z<>z<>z <>z<>z<>z<>z<>)rMrNrO)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`rgr8Z text_optionsr>Z usespacesrrr is_py_srcr6rPZ autocompleteZ parenmatchZ scriptbindingZctipZsqueezerrrr__init__As                                              zEditorWindow.__init__cCsnt|tr`y|j|j}WnDtk r^y|j|j}Wntk rX|jd}YnXYnXtjdd|S)Nz iso8859-1u [𐀀-􏿿]u�) isinstancebytesdecodefilesystemencodingUnicodeDecodeErrorr%resub)rrrrr_filename_to_unicodeDs z!EditorWindow._filename_to_unicodecCs|jj\}}|jj|dS)NrB)rZdefaultfilenamer\new)rrCdirnamebasenamerrrrSs 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.rE  insertzinsert linestart+cselz1.0rPz sel.firstZ my_anchorrB)rr)stateZkeysymr>rcomparer<splitrrangelenstr tag_removemark_settag_addsee)rrCZinsertptlineZlineatdestfirstlastrrrrXs@      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)NrEZgrey75)r@Z borderwidthZ backgroundrZ _padding1z )rGcolumnzCol: ?rzLn: ?)rGrHz<>z z)r'r` status_barrfrrW set_labelrrZBOTTOMXr>rlset_line_and_columnrZ after_idle)rseprrrrs zEditorWindow.set_status_barcCs>|jjtjd\}}|jjdd||jjdd|dS)NrrzCol: %srzLn: %s)r>rZINSERTrrr)rrCrrrrrrsz 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)rZmbarrr9rrr6rrrris"   zEditorWindow.createmenubarcCsJ|jd}|jd}|dkr d}||jkr<|j|jd|tj|dS)NrrPrErQ)rrrdeleterZadd_windows_to_menu)rr6rPrrrrs   zEditorWindow.postwindowsmenucGsR|dkryview)rrCargsZfractionlinesrrrrs  zEditorWindow.handle_yviewcCs@tj|jdktj|jdki}||jr*dnd}|jj|ddS)Nrrr?rrB)Z EventTypeZ MouseWheelZdeltaZButtonZnumr=r>Z yview_scroll)rrCZuprrrrros 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)rZibeamrB)r>rxyrmenu make_rmenurCrrWconfig rmenu_specs ValueErrorgetattrZentryconfigureZtk_popupZx_rootZy_root) rrCr Ziswinitemr eventnameZ verify_staterrrrrns*  zEditorWindow.right_menu_eventClose<>cCsjt|jdd}xP|jD]F}|d|d}}|dk rT|j|fdd}|j||dq|jqW||_dS)Nr)rrEcSs|j|dS)N)event_generate)r>rrrrrFsz(EditorWindow.make_rmenu..command)rrF)r^r>r add_commandrr )rr rrrrFrrrr 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)NrB)rZ AboutDialogr`)rrCrrrrvs zEditorWindow.about_dialogcCstj|jddS)NZSettingsrB)rZ ConfigDialogr`)rrCrrrrw$szEditorWindow.config_dialogcCs"|jr|j}n|j}tj|dS)NrB)r]r`rZ show_idlehelp)rrCparentrrrrt*s  zEditorWindow.help_dialogcCsntjdddkr^ytj|jWqjtk rZ}ztjdt||j dWYdd}~XqjXn t j |jdS)Nr3r4zDocument Start Failure)titlemessager rB) rrWrS startfilerROSErrorrrrr> webbrowseropen)rrCwhyrrrru4s$ zEditorWindow.python_docscCs|jjddS)Nz<>rB)r>r)rrCrrrrp?s zEditorWindow.cutcCs |jjdsdS|jjddS)Nrz<>rB)r>Z tag_rangesr)rrCrrrrqCs  zEditorWindow.copycCs|jjd|jjddS)Nz <>rrB)r>rr)rrCrrrrrJs  zEditorWindow.pastecCs.|jjddd|jjdd|jjddS)Nrz1.0zend-1crrB)r>rrr)rrCrrrryOs zEditorWindow.select_allcCs |jjddd|jjddS)Nrz1.0rPrrB)r>rr)rrCrrrrzUs zEditorWindow.remove_selectioncs*|jj|jjdfdd}|S)N sel.first+1c sel.last-1cc sB|jd@dkr>yddWntk r<YnXdS)Nr?rz sel.firstr)rr)rC) 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 rB)r>r)rrCrrrrns zEditorWindow.del_word_leftcCs|jjddS)NzrB)r>r)rrCrrrrrs zEditorWindow.del_word_rightcCstj|jdS)NrB)rfindr>)rrCrrrr{vs zEditorWindow.find_eventcCstj|jdS)NrB)rZ find_againr>)rrCrrrr|zs zEditorWindow.find_again_eventcCstj|jdS)NrB)rZfind_selectionr>)rrCrrrr~~s z!EditorWindow.find_selection_eventcCstj|j|j|jdS)NrB)rr>rr\)rrCrrrr}sz EditorWindow.find_in_files_eventcCstj|jdS)NrB)r r>)rrCrrrrs zEditorWindow.replace_eventcCsT|j}tjdd|d}|dkr"dS|dkr6|jdS|jdd||jddS)NZGotozGo to line number:)r rBrrz%d.0)r>rrbellrr)rrCr>linenorrrrs  zEditorWindow.goto_line_eventc Cspy|jjddj}Wntk r.d}YnXtj|jdd|j}|dk rl|jr`|jj|n |j j ||S)Nz sel.firstzsel.lastr7z Open ModulezAEnter the name of a Python module to search on sys.path and open:) r>rstriprr Z ModuleNameresultr\r&rr)rr9Z file_pathrrr open_modules  zEditorWindow.open_modulecCs |jdS)NrB)r4)rrCrrrrxszEditorWindow.open_module_eventcCsJ|jj}|jjdko|s,|j}|dkr,dSddlm}|j|j|dS)NZPyShellEditorWindowrBr)browser) rr __class____name__r4idlelibr5Z ModuleBrowserr])rrCrr5rrrrs  z EditorWindow.open_module_browsercCsddlm}|j|jdS)Nr) pathbrowserrB)r8r9Z PathBrowserr])rrCr9rrrrs  zEditorWindow.open_path_browsercCs&ddl}tjddg}|j|dddS)Nrz-cz,from turtledemo.__main__ import main; main()F)shellrB) subprocessr executablePopen)rrCr;cmdrrrrs zEditorWindow.open_turtle_democCsN|dk rJ|dkrJ|jjdd||jjddd|jjddd|jdS)Nrrz%d.0rz1.0rPz insert +1l)r>rrrcenter)rr1rrrgotolines zEditorWindow.gotolinecCsb| stjj|rdStjjtjj|\}}tjj|dkrBdS|jjdd}|jdo`d|kS) NT.py.pywz1.0z 1.0 lineendz#!python)rArB) rSrTrYsplitextrnormcaser>r startswith)rrbaseZextrrrrrszEditorWindow.ispythonsourcecCs|jr|jj|d|_dS)N)r\Zunregister_maybe_terminate)rrrr close_hooks zEditorWindow.close_hookcCs ||_dS)N)rH)rrHrrrset_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 removecolorsrrJ)rrrr _rmcolorizers  zEditorWindow._rmcolorizercCs |j|jtj|jdS)N)rLrKrr"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)Nr:rrI)rrr]r>)rrrr ResetFontszEditorWindow.ResetFontcCstj|j_}x&|jD]\}}|jj|f|qWxF|jD]:}tj|}|rBx&|jD]\}}|jj|f|q^WqBWdS)N) rGetCurrentKeySetr&default_keydefsitemsr>Z event_deleteget_standard_extension_namesGetExtensionBindings)rkeydefsrCkeylist 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)NrrErF acceleratorrr7)r^)rrTr&rUrjrWrXmenudefsrrrrrr=Z entrycgetget_acceleratorZ entryconfig) rrYr[r\Z menuEventDictr6rZ menubarItemrPrZaccelZitemNamerCrrrApplyKeybindings#s<  (        zEditorWindow.ApplyKeybindingscCs|jstjddddd|_dS)Nr:rKz num-spacesr<)r=)rrrhr)rrrrrGs z#EditorWindow.set_notabs_indentwidthcCstj}|jd}|jt}||jkr8|j|jd||rr|jx,|D]$}|j|d}|j |d|dqJW||jd<dS)NrrEr)rrF) rZGetAllExtraHelpSourcesListrrrrrr"_EditorWindow__extra_help_callbackr)rZ help_listZhelpmenuZhelpmenu_lengthentryr>rrrrNs    z$EditorWindow.reset_help_menu_entriescs|ffdd }|S)Ncs|jdstjj|}tjdddkrrytj|Wq|tk rn}ztj dt |j dWYdd}~Xq|Xn t j |dS)Nwwwhttpr3r4zDocument Start Failure)r!r"r )rdre)rFrSrTr[rrWr#r$rrrr>r%r&)helpfiler')rrrdisplay_extra_helpas  $z>EditorWindow.__extra_help_callback..display_extra_helpr)rrfrgr)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 |jd dsBd|j_tjdd|jt||jdWYdd}~XnXxt|jjD]h}|j} | jdtxNt|D]B\} } | j} |j| } |j| } | j|| d| | ddq~Wq^WdS)Nrutf_8r )r%errorsrNrrEcsg|]}|kr|qSrr).0rT) 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"r r)rrFrrQ)rSrTrrdr& readlinesabspathremoverappendr writelinesr$rr]rpr showwarningrrr>r`rcrrr enumeraterstrip#_EditorWindow__recent_file_callbackr)rnew_fileZrf_listZ rf_list_filerTZulcharsZrf_fileerrinstancer6i file_nameZ ufile_namecallbackr)rmrrnsL        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)rrrSrTrr)rrrrrrs zEditorWindow.short_titlecCs|j|jjpdS)Nr7)rrr)rrrrrszEditorWindow.long_titlecCs |jdS)NrB)r?)rrCrrrrssz EditorWindow.center_insert_eventrcCsH|j}|j\}}|j|}||}td||d}|jt|dS)NrEr5)r>getwindowlinesrmaxrr)rmarkr>r`botr1r@Znewtoprrrr?s   zEditorWindow.centercCsN|j}|jd}|jd}||krF|jdkrFt|d}||d}||fS)Nz@0,0z@0,65535rEr@)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)Nz(\d+)x(\d+)\+(-?\d+)\+(-?\d+))r`Z wm_geometryrmatchlistmapr<groups)rZgeommrrr get_geometrys  zEditorWindow.get_geometrycCs |jdS)NrB)rk)rrCrrrrmszEditorWindow.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)rZreplyrrrrks zEditorWindow.closecCs|jjr|j|jjdtj|j|j|jjd|_d|_|j rZ|j jdd|_ d|_ d|_ |j jd|_ |j j|jr|jdS)N)rzF)rrrrZunregister_callbackrunload_extensionsrkrrr>rbrr`ZdestroyrH)rrrrrs"     zEditorWindow._closecCsi|_|jdS)N) extensionsload_standard_extensions)rrrrrszEditorWindow.load_extensionscCs4x(t|jjD]}t|dr|jqWi|_dS)Nrk)rrvalueshasattrrk)rinsrrrrs  zEditorWindow.unload_extensionsc CsHxB|jD]6}y|j|Wq tdt|tjYq Xq WdS)NzFailed to load extension)rWload_extensionprintrepr traceback print_exc)rr9rrrrs z%EditorWindow.load_standard_extensionscCs tjddS)NT)Z editor_only)rZ GetExtensions)rrrrrW"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_-rMrErrZ_eventrQrQ)extfilesr importlib import_module __package__ ImportError TypeErrorrrrrXrrr_rrjr r>rl) rr9ZfnamemodclsrYrZveventZ methodnamerrrr)s4         zEditorWindow.load_extensioncCsJ|dkr|jj}|j}||_x(|jD]\}}|r&|j|f|q&WdS)N)r&rUr>rYrVr)rrYr>rCrZrrrrjEszEditorWindow.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)NrE!cSs|j|dS)N)r)r>rrrrrFgsz(EditorWindow.fill_menus..command)rrrFr^variable)rrrFr^) r&r_rUrr>rrrr` get_var_objZ BooleanVarZadd_checkbuttonr)rr_rYrr>ZmnameZ entrylistr6rcrrZ checkbuttonrr^rFvarrrrrNs8        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)rbrr>)rr9rrrrrrs  zEditorWindow.get_var_objcCs,|jr$|jjd|p"d|jj|kSdSdS)NZTODOSTRINGrE)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)NrIZmeasurez -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 CsB|j}|j\}}|r6|r6|j|||jd|dS|jdd}|dkrp|jdddrd|jdn|jdS|d d kr|jddS|j}t|j |}|d|j |j }d } xH||j krP|dd}| d} t|j |}||kp|dd krPqW|j |jd | d||kr6|j dd |||jdS)NrrBzinsert linestartr7rz1.0z insert-1crEz rz insert-%dcrrQrQrQ)r>rrrrrr0rr expandtabsrrerrr) rrCr>rrcharsrZhaveZwantZ ncharsdeletedrrrrsB          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 linestartrrrB)r>rr index2linerrrr classifywsrr reindent_torrrrrr) rrCr>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 jkrnn|t jkr6|jd|nT|t jkrR|j| jn8|t jkr| j dkrz|jd|n|j| j!ndS| j"}|jd|| j#r|j$|n|r| j%r|j&|dS|j'd|j(XdS)Nrzinsert linestartrz rErNrBzinsert - %d charsz.0Zconsolez1.0rQrQ))r>rrrrrrrrerrr 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_indentZget_base_indent_stringZis_block_openerrZis_block_closerrrr)rrCr>rrrr}rindentZlnor contextZstartatZ startatindexZrawtextZbodrhrrrrrs                              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)NrB) get_regionrrrrr _make_blanks set_region) rrCheadtailrrrPrrrrrrrs z EditorWindow.indent_region_eventc Cs|j\}}}}xZtt|D]J}||}|rt||j\}} t| |jd} |j| ||d||<qW|j||||dS)NrrB) rrrrrrrrr) rrCrrrrrPrrrrrrrsz EditorWindow.dedent_region_eventcCsR|j\}}}}x,tt|dD]}||}d|||<q"W|j||||dS)NrEz##rB)rrrr)rrCrrrrrPrrrrrs z!EditorWindow.comment_region_eventcCs|j\}}}}xdtt|D]T}||}|s0q|dddkrN|dd}n|dddkrj|dd}|||<qW|j||||dS)Nr5z##rE#rB)rrrr)rrCrrrrrPrrrrrs  z#EditorWindow.uncomment_region_eventc Cs|j\}}}}|j}|dkr$dSx\tt|D]L}||}|r2t||\} } t| |\} } d| d| || d||<q2W|j||||dS)NrrrB)r _asktabwidthrrrdivmodr) rrCrrrrrrPrrrntabsnspacesrrrrs$z EditorWindow.tabify_region_eventcCs`|j\}}}}|j}|dkr$dSx&tt|D]}||j|||<q2W|j||||dS)NrB)rrrrrr)rrCrrrrrrPrrrrsz"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)r rrB)rr)rr)rrr>r)rrCrrrrs  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  initialvalueminvaluemaxvaluerB)rr>rr)rrCrrrrrsz%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 +1crN)r>rrrr)rr>rrrrrrrrrrs     zEditorWindow.get_regioncCsx|j}dj|}||kr$|jdS|jddd|jd||j|j|||j|||j|j d|ddS)NrNrz1.0rPr) r>rUr0rrrrrrr)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)r rrr)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)r7 __module__ __qualname__Zidlelib.percolatorr Zidlelib.colorizerr!r"Z idlelib.undor#Zidlelib.iomenur$r%r8r&Zidlelib.statusbarr'Zidlelib.autocompleter(Zidlelib.autoexpandr)Zidlelib.calltipr*Zidlelib.codecontextr+Zidlelib.paragraphr,Zidlelib.parenmatchr-Zidlelib.rstripr.Zidlelib.squeezerr/Zidlelib.zoomheightr0rgetfilesystemencodingrrRrrrrrrrrirrror rnrr rrrrvrwrtrurprqrrryrzrrrr{r|r~r}rrr4rxrrrr@rrHrIrrKrLrstringZ ascii_lettersdigitsrOrRrSr]rarrrbrryrrrrrrrsr?rrrrmrrkrrrrrWrrrjrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr-s               +                $ .     %     ,#j        rcCs tt|S)N)r<r)rrrrr.srcCs\d}}xJ|D]B}|dkr,|d}|d}q|dkrN|d}||d|}qPqW||fS)NrrrErr)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)Nr7rEz.0z>=rPz lineend+1c)rr}rr>rr)rr}rrrrreadlineQs zIndentSearcher.readlineclassdefforiftrywhilec Cs>|jrn2||kr ||kr ||_n||kr:|jr:||_d|_dS)NrE)rrr) rr=tokenstartrPrINDENTNAMEZOPENERSrrr 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) r7rrrrrrrrrrrrrrDs   rcCs6|jd}|dkr.|d|||dd}||fS)NrMrrE)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)rrrrrDsz!get_accelerator..z\b\w+\bcSstj|j|jS)N)keynamesrr)rrrrrDszKey-ZCancelz Ctrl-BreakzControl-zCtrl-r+z>rrr)rr Z isCocoaTkrr)rYrrZrrrrr`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) NrE)r]r r@rz rN) rrargvr ZsetupApprr>rrr)r r]rrr>r}rrr_editor_windows   r __main__)r:zidlelib.idle_test.test_editorr5F) verbosityexit)r)6Z importlib.abcrimportlib.utilrSrWrrrr%ZtkinterZ tkinter.ttkrZtkinter.simpledialogZ simpledialogrZtkinter.messageboxZ messageboxrZidlelib.configrr8rrrrr Zidlelib.multicallr r r r rrrZpython_versionrrrrobjectrrrrrrr`rr r7Zunittestr:Zidlelib.idle_test.htestrrrrrsn                   4