a  ze@sddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Tddl m Z ddlmZddl mZddl mZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddl m!Z!ddlm"Z"dZ#de$Z%ejdkZ&ddZ'GdddZ(ddZ)e*dZ+ddZ,Gd d!d!Z-d"d#Z.d$d%d&d'Z/d(d)Z0d*d+Z1d,d-Z2e3d.krdd/l4m5Z5e5d0d1d2d3dd4l6m7Z7e7e2dS)5N)*)Font) Scrollbar) simpledialog) messagebox)idleConf) configdialog)grep)help) help_about)macosx)MultiCallCreator)pyparse)query)replace)search) wheel_event)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)majorminormicrolevelserialreleaser B/opt/bitninja-python-dojo/embedded/lib/python3.9/idlelib/editor.py_sphinx_version%s r"c@s<eZdZddlmZddlmZmZddlm Z ddl m Z m Z ddl mZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZmZmZmZddl m!Z!ddl"m#Z#ddl$m%Z%e&'Z(dZ)dZ*dZ+dddZ,dddZ-ddZ.ddZ/ddZ0ddZ1ddd Z2gd!Z3d"d#Z4d$d%Z5d&d'Z6d(d)Z7d*d+Z8dZ9d,d-Z:d.gZ;d/d0Zd5d6Z?dd7d8Z@dd9d:ZAdd;d<ZBdd=d>ZCd?d@ZDdAdBZEdCdDZFddEdFZGddGdHZHdIdJZIdKdLZJdMdNZKdOdPZLdQdRZMdSdTZNdUdVZOdWdXZPdYdZZQd[d\ZRd]d^ZSdd_d`ZTddadbZUddcddZVdedfZWdgdhZXdidjZYdkdlZZdmdnZ[dodpZ\dqdrZ]dsdtZ^e_j`e_jaduZbdvdwZcdxdyZddzd{Zed|d}Zfd~dZgddZhddZiddZjdddZkddZlddZmddZnddZoddZpddZqddZrddZsdddZtddZudddZvddZwddZxddZyddZzddZ{ddZ|ddZ}ddZ~ddZddiZddZdddZdddZddZdddZdddZddZdd„ZddĄZddƄZdddȄZddʄZdd̄Zdd΄ZddЄZdd҄ZddԄZddքZddd؄ZdS) EditorWindowr) Percolator)ColorDelegator color_config) UndoDelegator) IOBindingencoding)mainmenu)MultiStatusBar) AutoComplete) AutoExpand)Calltip) CodeContext) LineNumbers)FormatParagraph FormatRegionIndentsRstrip) ParenMatch)Squeezer) ZoomHeightNTc CsL ddlm}tjdurtjtjdd}tj drvddtj dd}tj d r^d }qd }tj||dd}nVtj ddd krtjtjdd t } tj| r| }ntj dkrtjtjd}tj|}tj|r|t_tj dkrdtjt_ndtj ddt_||_|p*|j}||_t||_tj||jd|_} |rl|j|_|j|j_ni|_i|j_tjotjtjd|_d|_t| |_ } t!| dd|_"} tj#ddddd} dddd| d tj#ddd!ddd"}t$t%| fi||_&}|j&|j_'|(|)|j*d#|j+|j,d$|j-t./rx|,d$|j-|,d%|j0|,d&|j0n|,d'|j0|,d(t1|,d)t1|,d*t1|,d+|j2|,d,|j3|,d-|j4|,d.|j5|,d/|j6|,d0|j7|,d1|j8|,d2|j9|,d3|j:|,d4|j;|,d5d6d7|,d8|j<|,d9|j=|,d:|j>|,d;|j?|,d<|j@|,d=|jA|,d>|jB|,d?|jC|,d@|jD|,dA|jE|,dB|jF|G||_H}|,dC|jI|,dD|jJ|,dE|jK|,dF|jL|,dG|jM|,dH|jN|O|}|,dI|jP|,dJ|jQ|,dK|Rd|,dL|RdM|,dN|jS|,dO|jT|,dP|jU|r ||j|<|r||jV|<|,dQ|jW|,dR|jjX|,dS|jY|,dT|jZ|,dU|j[|\| j]t^t_dMdV| j`dMdMdW| jadMdMdW|jb| dX<| jcdMdtddY| je|dZ<tf|jdd|d[<|jcdMdMtddY|g|htj#dd\d]d^d}| |_id_|_j|jj|_k|ltmtd`s|j&dat_n|odb|_p|q||_r}|s|_t}|u||jv|_v|jw|_w|x|jy|z||_{}|||j}dc|_~|dcd|_d|_d|_|rtj|rtj |s||rdd|_~||}||n||dd|_~||y|||jde}|rT|df}|dur(dg}|dkrB||dM}||_t|jtj|_tj|_tj|_|dhdi|djdkdldm|dndo|dpdq|drdqdsdt||}|,dh|j|,dj|j|,du|j|,dv||j|,dw||j||}|,dx|j|,dr|j||}|,dy|j|,dz|j|,d{|j|,d|||j|||_}|,dn|j|,dp|j|,d}|j|,d~||j|jr|||_|,d|jjn|ddd|j r:|||_tj#dddd^d r*||,d|jn|ddddS)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)namemainr#widthinttypetextZnoneZ wordprocessorheight)r@padxwrapZhighlightthicknessrBZtabstylerHZWM_DELETE_WINDOW<>zz<2>z<3>z z z z z<>z<>z <>z<>z<>z<>z<>z<><>z<>cSsdSNbreakr eventr r r!z'EditorWindow.__init__..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<>)sidefillexpand)Zweightcommand)rowcolumnZstickyZyscrollcommandfontIndentz use-spacesboolrblink_off_time insertofftime)2ii@KLFTrendz<>z z<>zzzz<>zz<>zz<>zzz<>z<>z<>z<>z<>z<>z<>z <>z<>z<>z<>optionsz *ode*ontextdisabledzline-numbers-defaultz<> *ine*umbers)Zidlelib.runscriptr8r#help_urlospathjoinr base_prefixplatformcountrisdirr"isfilenormpathflistrootMenumenubarrZListedTopleveltopvars tkinter_varsZ inversedict instance_dictrZuserdirrecent_files_pathprompt_last_lineFrame text_framerr? GetOptionr TextrFZfocused_widget createmenubarapply_bindingsprotocolclosebind close_eventr ZisAquaTkright_menu_eventrhandle_winconfigcutcopypastecenter_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_eventr2fregionindent_region_eventZdedent_region_eventZcomment_region_eventZuncomment_region_eventZtabify_region_eventZuntabify_region_eventr3Ztoggle_tabs_eventZchange_indentwidth_eventmove_at_edge_if_selection del_word_leftdel_word_right home_callbackdict new_callbackZclose_all_callbackopen_module_browseropen_path_browseropen_turtle_demoset_status_barpackZLEFTZBOTHZ rowconfigureZcolumnconfigure handle_yviewZgridZNSEWsetGetFontZ focus_set set_widthusetabstabwidth indentwidthset_notabs_indentwidthhasattrr_update_cursor_blinknum_context_linesr$perr'undo insertfilterundo_block_startundo_block_stopZset_saved_change_hooksaved_change_hookr(ioZset_filename_change_hookfilename_change_hookZ good_loadset_indentation_paramscolor code_context line_numbersexistsloadfileispythonsourceZ set_filenameResetColorizerupdate_recent_files_listload_extensionsmenudictgetindex add_separator wmenu_endZregister_callbackpostwindowsmenurZ askintegerrZaskyesno showerror event_addr,Zautocomplete_eventZtry_open_completions_eventZforce_open_completions_eventr-Zexpand_word_eventr1Zformat_paragraph_eventr5Zflash_paren_eventZparen_closed_eventZcheck_module_eventZrun_module_eventZrun_custom_eventr4Z do_rstripr.ctipZtry_open_calltip_eventZrefresh_calltip_eventZforce_open_calltip_eventr7Zzoom_height_eventallow_code_contextr/Ztoggle_code_context_eventupdate_menu_stateallow_line_numbersr0toggle_line_numbers_event)selfrqfilenamekeyrrr8ZdochomeZpyverZbasepathZchmfilerur|r?rBZ text_optionsrFrindentsZ usespacesrrr is_py_srcr=rbZ autocompleteZ parenmatchZ scriptbindingrr r r!__init__Hs                                                  zEditorWindow.__init__cCs |dSN)rrrPr r r!r`szEditorWindow.handle_winconfigcCs^|j}tt|jj|d|dg}|d|}t||ddd}|||_ dS)NZborderrIr<r\)r\0) rFsummaptkZgetintZcgetZ winfo_widthrmeasurerB)rrFZ inner_paddingZ pixel_widthZzero_char_widthr r r!rcszEditorWindow.set_widthcCs|j\}}|j|dSrM)rZdefaultfilenamerqnew)rrPdirnamebasenamer r r!rps zEditorWindow.new_callbackcCs|jd@dkr|jdkrdS|jdrd|jdddrd|jdddrdt|jddd }n8|jdd}tt |D]}||d vr~qq~t |}t|jd dd }||krd}d t |d }|jd @dkr|j dddn|jds|j dd n@|j|jdd|jd rB|j ddn|j dd|j|}|jd}|j|d|r||}}|j ddd|j d|||j d ||jd dS)NrZHomeZiomark<=zinsert lineendinsert linestart.rU)  insertzinsert linestart+csel1.0rb sel.firstZ my_anchor<sel.last>rN)stateZkeysymrFrcomparerCsplitrrangelenstr tag_removemark_settag_addsee)rrPZinsertptlineZlineatdestfirstlastr r r!rusF       zEditorWindow.home_callbackcCs||j|_t|jdddd}tjdkr<|jjddtd|jjdd td|jjd d td|jjt t d |jt t d |j d |j |j d dd|j |j dS)NrUZgrey75)rHZ borderwidthZ backgroundrZ _padding1z )rVr[zCol: ?rzLn: ?)rVrWz<>z z)r+ru status_barr{rrl set_labelZRIGHTrZBOTTOMXrFrset_line_and_columnrZ after_idle)rsepr r r!rs zEditorWindow.set_status_barcCs>|jtd\}}|jdd||jdd|dS)Nrr[zCol: %srzLn: %s)rFrZINSERTrrr)rrPrr[r r r!rsz EditorWindow.set_line_and_column))fileZ_File)editZ_Edit)formatZF_ormat)runZ_Run)rdZ_Options)rZ_Window)r Z_HelpcCs|j}i|_}|jD]N\}}t|\}}t||dd}t||d|d||<}|j|||dqtrt|ddd|d<}|jd|d | t|jdd |_ |jd j d d d|j d|jd t |_|dS)NZ_menu_postcommandr)r@tearoff postcommand)labelr= underlineZapple)r@rZ applicationZIDLE)r r=rrr:z Recent Files)r r r=r )rtr menu_specsprepstrgetattrrsZ add_cascader Z isCarbonTk fill_menusrecent_files_menuZinsert_cascaderENDbase_helpmenu_lengthreset_help_menu_entries)rZmbarrr@r r rr=r r r!rs,  zEditorWindow.createmenubarcCsJ|jd}|d}|dur d}||jkr<||jd|t|dS)NrrbrcrU)rrrdeleterZadd_windows_to_menu)rr=rbr r r!rs   zEditorWindow.postwindowsmenucCs|j|}|j||ddS)z$Update label for menu item at index.)r Nr entryconfig)rr=rr menuitemr r r!update_menu_labels zEditorWindow.update_menu_labelcCs|j|}|j||ddS)z$Update state for menu item at index.rNr)rr=rrrr r r!rs zEditorWindow.update_menu_statecGsT|dkr         zEditorWindow.right_menu_event)CloserKNcCsft|jdd}|jD]F}|d|d}}|durR|j|fdd}|j||dq|q||_dS)Nrr rUcSs||dSrevent_generaterFr+r r r!rY$sz(EditorWindow.make_rmenu..commandr rY)rsrFr( add_commandrr&)rr&r*r r+rYr r r!r's  zEditorWindow.make_rmenucCs|Sr)rmenu_check_copyrr r r!rmenu_check_cut+szEditorWindow.rmenu_check_cutcCs6z|jd}Wnty$YdS0|r.dSdSdS)NrrenormalrFrr%)rZindxr r r!r2.s  zEditorWindow.rmenu_check_copycCs6z|jjd|jdWnty,YdS0dSdS)Nztk::GetSelectionZ CLIPBOARDrer5)rFrcallr%r3r r r!rmenu_check_paste6s  zEditorWindow.rmenu_check_pastecCst|jdS)zHandle Help 'About IDLE' event.rN)r Z AboutDialogrurr r r!r>s zEditorWindow.about_dialogcCst|jddS)z&Handle Options 'Configure IDLE' event.ZSettingsrN)rZ ConfigDialogrurr r r!rDszEditorWindow.config_dialogcCs"|jr|j}n|j}t|dS)zHandle Help 'IDLE Help' event.rN)rrrur Z show_idlehelp)rrPparentr r r!rJs  zEditorWindow.help_dialogc Csptjdddkr`zt|jWqlty\}z"tjdt||j dWYd}~qld}~00n t |jdS)Nr:r;Document Start Failuretitlemessager9rN) rrlrh startfilergOSErrorrrrrF webbrowseropen)rrPwhyr r r!rTs  zEditorWindow.python_docscCs|jddS)Nz<>rNrFr.rr r r!r_s zEditorWindow.cutcCs |jdsdS|jddS)Nrz<>rN)rFZ tag_rangesr.rr r r!rcs  zEditorWindow.copycCs|jd|jddS)Nz <>rrN)rFr.rrr r r!rjs  zEditorWindow.pastecCs.|jddd|jdd|jddS)Nrrzend-1crrN)rFrrrrr r r!ros zEditorWindow.select_allcCs |jddd|jddS)NrrrbrrN)rFrrrr r r!rus 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. )z sel.first+1cz sel.last-1ccs@|jd@dkr.move_at_edge)rFrr)rrErFr rDr!rzs z&EditorWindow.move_at_edge_if_selectioncCs|jddS)Nz rNrCrr r r!rs zEditorWindow.del_word_leftcCs|jddS)NzrNrCrr r r!rs zEditorWindow.del_word_rightcCst|jdSrM)rfindrFrr r r!rs zEditorWindow.find_eventcCst|jdSrM)rZ find_againrFrr r r!rs zEditorWindow.find_again_eventcCst|jdSrM)rZfind_selectionrFrr r r!rs z!EditorWindow.find_selection_eventcCst|j|j|jdSrM)r rFrrqrr r r!rsz EditorWindow.find_in_files_eventcCst|jdSrM)rrFrr r r!rs zEditorWindow.replace_eventcCsT|j}t|ddj}|durP|ddd|d|d|d|dS) Nz Go To Linez/Enter a positive integer ('big' = end of file):rrrbr.0rN)rFrZGotoresultrrrr)rrPrFlinenor r r!rs zEditorWindow.goto_line_eventcCsnz|jdd}Wnty,d}Yn0t|jdd|j}|durj|jr^|j|n |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. rrr>z Open ModulezAEnter the name of a Python module to search on sys.path and open:N) rFrstripr%rZ ModuleNamerIrqrArr)rr@ file_pathr r r! open_modules   zEditorWindow.open_modulecCs |dSrM)rMrr r r!rszEditorWindow.open_module_eventcCsJ|jj}|jjdkr|s,|}|dur,dSddlm}||j|dS)NZPyShellEditorWindowrNr)browser) rr __class____name__rMidlelibrNZ ModuleBrowserrr)rrPrrNr r r!rs  z EditorWindow.open_module_browsercCsddlm}||jdS)Nr) pathbrowserrN)rQrRZ PathBrowserrr)rrPrRr r r!rs  zEditorWindow.open_path_browsercCs&ddl}tjddg}|j|dddS)Nrz-cz,from turtledemo.__main__ import main; main()F)shellrN) subprocessr executablePopen)rrPrTcmdr r r!rszEditorWindow.open_turtle_democCsN|durJ|dkrJ|jdd||jddd|jddd|dS)Nrrz%d.0rrrbz insert +1l)rFrrrcenter)rrJr r r!gotolines zEditorWindow.gotolinecCs`|rtj|rdStjtj|\}}tj|dvr@dS|jdd}|do^d|vS)NT)z.pyz.pywrz 1.0 lineendz#!Zpython) rhrirnsplitextrnormcaserFr startswith)rrbaseextrr r r!rszEditorWindow.ispythonsourcecCs|jr|j|d|_dSr)rqZunregister_maybe_terminater3r r r! close_hooks zEditorWindow.close_hookcCs ||_dSr)r_)rr_r r r!set_close_hookszEditorWindow.set_close_hookcCs2|jr|j|||j||dSr)rqZfilename_changed_editrruZupdate_windowlist_registryrr3r r r!rs   z!EditorWindow.filename_change_hookcCsV|jr dS||jjr"||_|jrR|j|j|j|j|j|jdSr) rrrrr%r removefilterrrr3r r r! _addcolorizer s zEditorWindow._addcolorizercCs,|js dS|j|j|jd|_dSr)rZ removecolorsrrar3r r r! _rmcolorizers  zEditorWindow._rmcolorizercCsH||t|j|jdur0|j|jdurD|jdS)zUpdate the color themeN) rcrbr#r&rFrZupdate_highlight_colorsrZ update_colorsr3r r r!rs    zEditorWindow.ResetColorizer_cCsp|d|||}|r6||jvr6|d|d|d||krR|d|n|d|d||dS)NERRORz wordstart rz+1c)rr IDENTCHARSrr)rrFposcharr r r!colorize_syntax_error-s  z"EditorWindow.colorize_syntax_errorcCs2tjddddd}|s"d|jd<n tj|jd<dS) z&Update the cursor blink configuration.rAr#z cursor-blinkr^rDrr`N)rr}rFr_)rZ cursorblinkr r r!r8s  z EditorWindow.update_cursor_blinkcCsN|jdur|j|jdur(|jt|jdd}||jd<|dS)z.Update the text widgets' font if it is changedNrAr#r\)rZ update_fontrrrrrrFr)rZnew_fontr r r! ResetFontBs     zEditorWindow.ResetFontcCs|t|j_}|D]\}}|jj|g|Rq|D]8}t|}|r>|D]\}}|jj|g|RqXq>dS)z/Remove the keybindings before they are changed.N) rGetCurrentKeySetr*default_keydefsitemsrFZ event_deleteget_standard_extension_namesGetExtensionBindings)rkeydefsrPkeylist extensionNamexkeydefsr r r!RemoveKeybindingsSs  zEditorWindow.RemoveKeybindingsc CsBt|j_}||D]}t|}|r ||q i}|jjD]B}i||d<|dD](}|rb|d||dt|dd<qbqJ|j D]}|j |}| t }|durq|d7}t d|D]r} | | dkr|| d} | r|| d} d} ||vr| ||vr||| } | rt|| } |j| | dqqdS) z-Update the keybindings after they are changedrrUNrY acceleratorr r>)rv)rrlr*rmrrorpmenudefsr rrrrrEZ entrycgetget_acceleratorr) rrqrsrtZ menuEventDictr=r*Z menubarItemrbrZaccelZitemNamerPr r r!ApplyKeybindings_s<      $        zEditorWindow.ApplyKeybindingscCs|jstjddddd|_dS)zCUpdate the indentwidth if changed and not using tabs in this windowrAr]z num-spacesrCrDN)rrr}rr3r r r!rs z#EditorWindow.set_notabs_indentwidthcCs|t}|jd}|t}||jkr8||jd||rn||D]$}||d}|j |d|dqH||jd<dS)z3Update the additional help entries on the Help menur rUrr0N) rZGetAllExtraHelpSourcesListrrrrrr"_EditorWindow__extra_help_callbackr1)rZ help_listZhelpmenuZhelpmenu_lengthentryrWr r r!rs   z$EditorWindow.reset_help_menu_entriescs|ffdd }|S)zCCreate a callback with the helpfile value frozen at definition timec s|dstj|}tjdddkrtzt|Wq~typ}z"tj dt |j dWYd}~q~d}~00n t |dS)N)Zwwwhttpr:r;r:r;)r\rhrirprrlr>r?rrrrFr@rA)helpfilerBr3r r!display_extra_helps   z>EditorWindow.__extra_help_callback..display_extra_helpr )rr}r~r r3r!Z__extra_help_callbacks z"EditorWindow.__extra_help_callbackc sg}|j}|rRtj|rRt|dddd}|}Wdn1sH0Y|rtj|d}||vrx|||d|g|D]*}d|vstj|dd s |qfd d |D}d }|dt |}|r~z@t|d ddd}| |Wdn1s0YWnXt y|}z>t |jddshd|j_tjdd|d|jdWYd}~n d}~00|jjD]Z} | j} | dtt|D]8\} } | } | | } | j|| d| | ddqqdS)z/Load and update the recent files list and menusrutf_8r)r)errorsNrfrrccsg|]}|vr|qSr r ).0riZ bad_pathsr r! rRz9EditorWindow.update_recent_files_list..Z1234567890ABCDEFGHIJKwrecentfiles_messageFTz IDLE Warningz)Cannot save Recent Files list to disk. z Select OK to continue.r;r)r rYr )ryrhrirrA readlinesabspathremoverappendr writelinesr?rrrrr showwarningrFrurxrrr enumeraterstrip#_EditorWindow__recent_file_callbackr1)rnew_fileZrf_listrLZ rf_list_fileriZulcharsZrf_fileerrinstancer=i file_namecallbackr rr!rs\&   .   z%EditorWindow.update_recent_files_listcs|ffdd }|S)Ncsjj|ddS)N)ZeditFile)rrA)Z fn_closurer3r r!open_recent_filesz=EditorWindow.__recent_file_callback..open_recent_filer )rrrr r3r!Z__recent_file_callbacksz#EditorWindow.__recent_file_callbackcCs|}|}|r*|r*|d|t}n|r4|}n|r>|}nd}|pL|pL|}|sfd|}d|}|j||j|dS)Nz - untitledz*%s*z*%s) short_title long_title _py_version get_savedruZwm_titleZ wm_iconname)rZshortlongr<Ziconr r r!rs  zEditorWindow.saved_change_hookcCs |jSr)rrr3r r r!rszEditorWindow.get_savedcCs|j|dSr)r set_saved)rflagr r r!rszEditorWindow.set_savedcCs|jdSr)r reset_undor3r r r!rszEditorWindow.reset_undocCs|jj}|rtj|SdS)Nr)rrrhrir)rrr r r!rszEditorWindow.short_titlecCs |jjp dS)Nr>)rrr3r r r!rszEditorWindow.long_titlecCs |dSrM)rXrr r r!rsz EditorWindow.center_insert_eventrcCsH|j}|\}}||}||}td||d}|t|dS)NrUr<)rFgetwindowlinesrmaxrr)rmarkrFrubotrJrHZnewtopr r r!rXs   zEditorWindow.centercCsN|j}|d}|d}||krF|dkrFt|d}||d}||fS)Nrz@0,65535rUrH)rFrZ winfo_heightrC)rrFrurrHr r r!r s    zEditorWindow.getwindowlinescCs|j}tt||Sr)rFrCrr)rrrFr r r!rszEditorWindow.getlinenocCs(|j}td|}ttt|S)zReturn (width, height, x, y)z(\d+)x(\d+)\+(-?\d+)\+(-?\d+))ruZ wm_geometryrematchlistrrCgroups)rZgeommr r r! get_geometrys  zEditorWindow.get_geometrycCs |dSrM)rrr r r!rszEditorWindow.close_eventcCsH|jrD|s:|jdkr&|j|j|j|jSdS)Nr5)rrrurZ deiconifylowerZlift maybesaver3r r r!r#s   zEditorWindow.maybesavecCs:z"|}t|dkr||WSty4Yn0dS)Ncancel)rr_closeAttributeError)rZreplyr r r!r,s  zEditorWindow.closecCs|jjr|j|jjdt|j||jd|_d|_|j rX|j d|_ d|_ d|_ |j d|_ |j |jr|dS)N)r)rrrrZunregister_callbackrunload_extensionsrrrrFrwrruZdestroyr_r3r r r!r5s"     zEditorWindow._closecCsi|_|dSr) extensionsload_standard_extensionsr3r r r!rIszEditorWindow.load_extensionscCs0t|jD]}t|dr|qi|_dS)Nr)rrvaluesrr)rinsr r r!rMs  zEditorWindow.unload_extensionscCsD|D]6}z||Wqtdt|tYq0qdS)NzFailed to load extension)roload_extensionprintrepr traceback print_exc)rr@r r r!rSs  z%EditorWindow.load_standard_extensionscCs tjddS)NT)Z editor_only)rZ GetExtensionsr3r r r!ro[sz)EditorWindow.get_standard_extension_namesZZzDummyZzzdummyc Cs6|j||}z.command)r r rYrvvariable)r r rYrv) r*rwrmrrFrrr rx get_var_objZ BooleanVarZadd_checkbuttonr1)rrwrqrrFZmnameZ entrylistr=r{r r+Z checkbuttonr rvrYvarr r r!rs<       zEditorWindow.fill_menuscCs&||}|r|}|St|dSr)rr NameError)rr@rvaluer r r!getvars  zEditorWindow.getvarcCs(|||}|r||nt|dSr)rrr)rr@rvartyperr r r!setvars  zEditorWindow.setvarcCs,|j|}|s(|r(||j|j|<}|Sr)rwrrF)rr@rrr r r!rs zEditorWindow.get_var_objcCs,|jr$|jd|p"d|j|vSdSdS)NZTODOSTRINGrU)rrF tag_prevrangeZ tag_names)rZ text_indexr r r!is_char_in_strings zEditorWindow.is_char_in_stringcCs<z"|jd}|jd}||fWSty6YdS0dS)Nrr)NNr6)rrrr r r!get_selection_indicess     z"EditorWindow.get_selection_indicescCs|jdp t}t|S)Ntabs)rFTK_TABWIDTH_DEFAULTrC)rcurrentr r r!get_tk_tabwidthszEditorWindow.get_tk_tabwidthc CsB|j}||kr>|jdd|dd|jd|}|j|ddS)Nr\rz -displayofn)r)rFrrr7ZmasterZ configure)rZ newtabwidthrFZpixelsr r r!set_tk_tabwidths zEditorWindow.set_tk_tabwidthcCsP|r@|r@|}d|kr$dkr.nn||_|j|jkr@d|_||jdS)Nr<rF) guess_indentrrrr)rrZguessrr r r!rs z#EditorWindow.set_indentation_paramsc CsP|j}|\}}|r6|r6||||d|dS|dd}|dkrp|dddrd|dn|dS|dd vr|ddS|j}t| |}|d ksJ|d |j |j }d } ||j krАq|dd}| d } t| |}||ks|dd vrqq| |d | d||krD| dd |||dS)NrrNrr>rrz insert-1crc rrUz insert-%dcr)rFrrrrrZbellrr expandtabsrrzrrr) rrPrFrrcharsrZhaveZwantZ ncharsdeletedr r r!rsB           z"EditorWindow.smart_backspace_eventc Cs|j}|\}}|z|rb|rbt|t|krJ|j|W|S||||d|| dd}t ||j \}}|t |kr| ||jn>|jrd}n&t ||j }|j} d| || }|d||dW|dS|0dS)NrrrrrN)rFrr index2linerrrrrrget_line_indentrr reindent_torrrrr) rrPrFrrprefixrawZ effectiveZpadrr r r!r(s4        zEditorWindow.smart_indent_eventc Cs.|j}|\}}|z|r>|r>||||d||dd}dt|}}||krv||dvrv|d7}qX||kr|ddW|d| dS|d|}d}|r|d dvr||j kr|dd }|d7}q|r|d |d|ddvr|dq|ddt | d} t |j|j} |j s|jD]`} t| | d} t| d } || d}| || || }|dus| dkrJqqJ| |pdn@|d d}|r|d} nd } || d}| || d| }|t jkr|t jkr n|t jkr:|d|nh|t jkrV|| nL|t j kr| !dkr~|d|n|| "ndsJd|fW|d| dS| #}|d|| $r|%|n|r| &r|'|W|d| dS|d| 0dS)aInsert a newline and indentation after Enter keypress event. Properly position the cursor on the new line based on information from the current line. This takes into account if the current line is a shell prompt, is empty, has selected text, contains a block opener, contains a block closer, is a continuation line, or is inside a string. rrrrrUrfrNNrczinsert - %d charsrHZconsolerzbogus continuation type %r)(rFrrrrrrrrrrzrrrZParserrrrrrZset_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_closerr)rrPrFrrrrrindentlnor$contextZstartatZ startatindexZrawtextZbodrrr r r!rKs       T                            z%EditorWindow.newline_and_indent_eventcCs||jfdd}|S)NcSs||d|S)Nz+%dcr )offsetZ _startindexZ_icisr r r!innersz6EditorWindow._build_char_in_string_func..inner)r)rZ startindexrr r r!rs z'EditorWindow._build_char_in_string_funccCs2|jr&t||j\}}d|d|Sd|SdS)Nrr)rdivmodr)rrZntabsZnspacesr r r! _make_blanksszEditorWindow._make_blankscCsJ|j}||dddr(|dd|r>|d|||dS)Nrz!=r)rFrrrrrr)rr[rFr r r!rs zEditorWindow.reindent_tocCsPt|j|j\}}|r@|r@t||j\}}t||j\}}nd}}||SNr)IndentSearcherrFrrr)ropenerZindentedrZ indentsmallZ indentlarger r r!rs zEditorWindow.guess_indentcCsN|jdurdS|jjr&|jd}n|jd}|jdd|dddS)NZShowZHiderdrfz Line Numbers)r=rr )rZis_shownZ hide_sidebarZ show_sidebarr)rrPZ menu_labelr r r!rs   z&EditorWindow.toggle_line_numbers_event)NNNN)N)N)N)N)N)N)N)N)N)N)N)N)r)r)N)NN)N)N)T)N)rP __module__ __qualname__Zidlelib.percolatorr$Zidlelib.colorizerr%r&Z idlelib.undor'Zidlelib.iomenur(r)rQr*Zidlelib.statusbarr+Zidlelib.autocompleter,Zidlelib.autoexpandr-Zidlelib.calltipr.Zidlelib.codecontextr/Zidlelib.sidebarr0Zidlelib.formatr1r2r3r4Zidlelib.parenmatchr5Zidlelib.squeezerr6Zidlelib.zoomheightr7rgetfilesystemencodingZfilesystemencodingrgrrrrrrrrrr rrrrrr&rr(r'r4r2r8rrrrrrrrrrrrrrrrrrrMrrrrrYrr_r`rrbrcrstring ascii_lettersdigitsrgrjrrkruryrrrzrrrrrrrrrrXrrrrrrrrrrrorrrrrrrrrrrrrrrrrrrrr r r r!r#1s               +    %              $ .     %     ,#v  r#cCs tt|Sr)rCr)rr r r!rsrz[ \t]*cCs$t|}|t||fS)zReturn a line's indentation as (# chars, effective # of spaces). The effective # of spaces is the length after properly "expanding" the tabs into spaces, as done by str.expandtabs(tabwidth). )_line_indent_rerrbrgroupr)rrrr r r!rs rc@s8eZdZddZddZejejdfddZdd Z d S) rcCs(||_||_d|_|_d|_|_dSr)rFrrfinished blkopenline indentedline)rrFrr r r!rs zIndentSearcher.__init__cCsL|jr dS|jd}|_t|d}|j|ddr:dS|j||dS)Nr>rUrHz>=rbz lineend+1c)rrrrFrr)rrrr r r!readlines zIndentSearcher.readline)classdefforiftrywhilec Cs>|jrn2||kr ||vr ||_n||kr:|jr:||_d|_dS)NrU)rrr) rrEtokenstartrbrINDENTNAMEZOPENERSr r r! tokeneater%szIndentSearcher.tokeneaterc Csltj}|jt_zHz$t|j}|D]}|j|q"WntjtfyLYn0W|t_n|t_0|j|j fSr) tokenizetabsizergenerate_tokensrr TokenError SyntaxErrorrr)rZ save_tabsizetokensrr r r!r1s zIndentSearcher.runN) rPrrrrrrrrrr r r r!rs  rcCs6|d}|dkr.|d|||dd}||fS)NrdrrU)rG)srr r r!r Cs r []/)Z bracketleftZ bracketrightZslashcCs||}|rtr"|dvr"dS|d}tddd|}tddd|}td d|}td d |}td d |}tdd|}tdd|}tdd|}tdd|}|S)N>rLrTrSr>rz-[a-z]\bcSs |Sr)rupperrr r r!rQ\rRz!get_accelerator..z\b\w+\bcSst||Sr)keynamesrrr r r r!rQ]rRzKey-ZCancelz Ctrl-BreakzControl-zCtrl-r+z>sx                    Z  4