asda?‰PNG  IHDR ? f ??C1 sRGB ??é gAMA ±? üa pHYs ? ??o¨d GIDATx^íüL”÷e÷Y?a?("Bh?_ò???¢§?q5k?*:t0A-o??¥]VkJ¢M??f?±8\k2íll£1]q?ù???T a bYh@sddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Tddl m Z ddlmZddl mZddl mZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddl m!Z!ddl"m#Z#ddlm$Z$dZ%de&Z'ejdkZ(ddZ)GdddZ*ddZ+e,dZ-dd Z.Gd!d"d"Z/d#d$Z0d%d&d'd(Z1d)d*Z2d+d,Z3d-d.Z4e5d/krdd0l6m7Z7e7d1d2d3d4dd5l8m9Z9e9e4dS)6N)*)Font) Scrollbar) simpledialog) messagebox)idleConf) configdialog)grep)help) help_about)macosx)MultiCallCreator)pyparse)query)replace)search) wheel_event) py_extensions)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!*/usr/local/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)rApadxwrapZhighlightthicknessrCZtabstylerIZWM_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.runscriptr9r$help_urlospathjoinr base_prefixplatformcountrisdirr#isfilenormpathflistrootMenumenubarrZListedTopleveltopvars tkinter_varsZ inversedict instance_dictrZuserdirrecent_files_pathprompt_last_lineFrame text_framerr@ GetOptionr TextrGZfocused_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_eventr3fregionindent_region_eventZdedent_region_eventZcomment_region_eventZuncomment_region_eventZtabify_region_eventZuntabify_region_eventr4Ztoggle_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_eventr2Zformat_paragraph_eventr6Zflash_paren_eventZparen_closed_eventZcheck_module_eventZrun_module_eventZrun_custom_eventr5Z do_rstripr/ctipZtry_open_calltip_eventZrefresh_calltip_eventZforce_open_calltip_eventr8Zzoom_height_eventallow_code_contextr0Ztoggle_code_context_eventupdate_menu_stateallow_line_numbersr1toggle_line_numbers_event)selfrrfilenamekeyrsr9ZdochomeZpyverZbasepathZchmfilervr}r@rCZ text_optionsrGrindentsZ usespacesrrr is_py_srcr>rcZ autocompleteZ parenmatchZ scriptbindingrr!r!r"__init__Is                                                  zEditorWindow.__init__cCs |dSN)rrrQr!r!r"raszEditorWindow.handle_winconfigcCs^|j}tt|jj|d|dg}|d|}t||ddd}|||_ dS)NZborderrJr=r])r]0) rGsummaptkZgetintZcgetZ winfo_widthrmeasurerC)rrGZ inner_paddingZ pixel_widthZzero_char_widthr!r!r"rdszEditorWindow.set_widthcCs|j\}}|j|dSrN)rZdefaultfilenamerrnew)rrQdirnamebasenamer!r!r"rqs 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.rV)  insertzinsert linestart+csel1.0rc sel.firstZ my_anchor<sel.last>rO)stateZkeysymrGrcomparerDsplitrrangelenstr tag_removemark_settag_addsee)rrQZinsertptlineZlineatdestfirstlastr!r!r"rvsF       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)NrVZgrey75)rIZ borderwidthZ backgroundrZ _padding1z )rWr\zCol: ?rzLn: ?)rWrXz<>z z)r,rv status_barr|rrm set_labelZRIGHTrZBOTTOMXrGrset_line_and_columnrZ after_idle)rsepr!r!r"rs zEditorWindow.set_status_barcCs>|jtd\}}|jdd||jdd|dS)Nrr\zCol: %srzLn: %s)rGrZINSERTrrr)rrQrr\r!r!r"rsz EditorWindow.set_line_and_column))fileZ_File)editZ_Edit)formatZF_ormat)runZ_Run)reZ_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)rAtearoff postcommand)labelr> underlineZapple)rArZ applicationZIDLE)r r>rrr;z Recent Files)r r r>r )rur menu_specsprepstrgetattrrtZ add_cascader Z isCarbonTk fill_menusrecent_files_menuZinsert_cascaderENDbase_helpmenu_lengthreset_help_menu_entries)rZmbarrrAr r r r>r!r!r"rs,  zEditorWindow.createmenubarcCsJ|jd}|d}|dur d}||jkr<||jd|t|dS)NrrcrdrV)rrrdeleterZadd_windows_to_menu)rr>rcr!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)CloserLNcCsft|jdd}|jD]F}|d|d}}|durR|j|fdd}|j||dq|q||_dS)Nrr rVcSs||dSrevent_generaterGr,r!r!r"rZ%sz(EditorWindow.make_rmenu..commandr rZ)rtrGr) add_commandrr')rr'r+r r,rZr!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)NrrfnormalrGrr&)rZindxr!r!r"r3/s  zEditorWindow.rmenu_check_copycCs6z|jjd|jdWnty,YdS0dSdS)Nztk::GetSelectionZ CLIPBOARDrfr6)rGrcallr&r4r!r!r"rmenu_check_paste7s  zEditorWindow.rmenu_check_pastecCst|jdS)zHandle Help 'About IDLE' event.rO)r Z AboutDialogrvrr!r!r"r?s zEditorWindow.about_dialogcCst|jddS)z&Handle Options 'Configure IDLE' event.ZSettingsrO)rZ ConfigDialogrvrr!r!r"rEszEditorWindow.config_dialogcCs"|jr|j}n|j}t|dS)zHandle Help 'IDLE Help' event.rO)rsrvr Z show_idlehelp)rrQparentr!r!r"rKs  zEditorWindow.help_dialogc Csptjdddkr`zt|jWqlty\}z"tjdt||j dWYd}~qld}~00n t |jdS)Nr;r<Document Start Failuretitlemessager:rO) rrmri startfilerhOSErrorrrrrG webbrowseropen)rrQwhyr!r!r"rUs  zEditorWindow.python_docscCs|jddS)Nz<>rOrGr/rr!r!r"r`s zEditorWindow.cutcCs |jdsdS|jddS)Nrz<>rO)rGZ tag_rangesr/rr!r!r"rds  zEditorWindow.copycCs|jd|jddS)Nz <>rrO)rGr/rrr!r!r"rks  zEditorWindow.pastecCs.|jddd|jdd|jddS)Nrrzend-1crrO)rGrrrrr!r!r"rps zEditorWindow.select_allcCs |jddd|jddS)NrrrcrrO)rGrrrr!r!r"rvs 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)rGrr)rrFrGr!rEr"r{s z&EditorWindow.move_at_edge_if_selectioncCs|jddS)Nz rOrDrr!r!r"rs zEditorWindow.del_word_leftcCs|jddS)NzrOrDrr!r!r"rs zEditorWindow.del_word_rightcCst|jdSrN)rfindrGrr!r!r"rs zEditorWindow.find_eventcCst|jdSrN)rZ find_againrGrr!r!r"rs zEditorWindow.find_again_eventcCst|jdSrN)rZfind_selectionrGrr!r!r"rs z!EditorWindow.find_selection_eventcCst|j|j|jdSrN)r rGrrrrr!r!r"rsz EditorWindow.find_in_files_eventcCst|jdSrN)rrGrr!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):rrrcr.0rO)rGrZGotoresultrrrr)rrQrGlinenor!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) rGrstripr&rZ ModuleNamerJrrrBrr)rrA file_pathr!r!r" open_modules   zEditorWindow.open_modulecCs |dSrN)rNrr!r!r"rszEditorWindow.open_module_eventcCsJ|jj}|jjdkr|s,|}|dur,dSddlm}||j|dS)NZPyShellEditorWindowrOr)browser) rr __class____name__rNidlelibrOZ ModuleBrowserrs)rrQrrOr!r!r"rs  z EditorWindow.open_module_browsercCsddlm}||jdS)Nr) pathbrowserrO)rRrSZ PathBrowserrs)rrQrSr!r!r"rs  zEditorWindow.open_path_browsercCs&ddl}tjddg}|j|dddS)Nrz-cz,from turtledemo.__main__ import main; main()F)shellrO) subprocessr executablePopen)rrQrUcmdr!r!r"rszEditorWindow.open_turtle_democCsN|durJ|dkrJ|jdd||jddd|jddd|dS)Nrrz%d.0rrrcz insert +1l)rGrrrcenter)rrKr!r!r"gotolines zEditorWindow.gotolinecCs`|rtj|rdStjtj|\}}tj|tvr@dS|jdd}| do^d|vS)NTrz 1.0 lineendz#!Zpython) rirjrosplitextrnormcaserrGr startswith)rrbaseextrr!r!r"rszEditorWindow.ispythonsourcecCs|jr|j|d|_dSr)rrZunregister_maybe_terminater4r!r!r" close_hooks zEditorWindow.close_hookcCs ||_dSr)r`)rr`r!r!r"set_close_hookszEditorWindow.set_close_hookcCs2|jr|j|||j||dSr)rrZfilename_changed_editrrvZupdate_windowlist_registryrr4r!r!r"rs   z!EditorWindow.filename_change_hookcCsV|jr dS||jjr"||_|jrR|j|j|j|j|j|jdSr) rrrrr&r removefilterrrr4r!r!r" _addcolorizer s zEditorWindow._addcolorizercCs,|js dS|j|j|jd|_dSr)rZ removecolorsrrbr4r!r!r" _rmcolorizers  zEditorWindow._rmcolorizercCsH||t|j|jdur0|j|jdurD|jdS)zUpdate the color themeN) rdrcr$r'rGrZupdate_highlight_colorsrZ update_colorsr4r!r!r"rs    zEditorWindow.ResetColorizer_cCsp|d|||}|r6||jvr6|d|d|d||krR|d|n|d|d||dS)NERRORz wordstart rz+1c)rr IDENTCHARSrr)rrGposcharr!r!r"colorize_syntax_error.s  z"EditorWindow.colorize_syntax_errorcCs2tjddddd}|s"d|jd<n tj|jd<dS) z&Update the cursor blink configuration.rBr$z cursor-blinkr_rErraN)rr~rGr`)rZ cursorblinkr!r!r"r9s  z EditorWindow.update_cursor_blinkcCsN|jdur|j|jdur(|jt|jdd}||jd<|dS)z.Update the text widgets' font if it is changedNrBr$r])rZ update_fontrrrrsrGr)rZnew_fontr!r!r" ResetFontCs     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_keydefsitemsrGZ event_deleteget_standard_extension_namesGetExtensionBindings)rkeydefsrQkeylist extensionNamexkeydefsr!r!r"RemoveKeybindingsTs  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 changedrrVNrZ acceleratorr r?)rw)rrmr+rnrrprqmenudefsrrrrrrFZ entrycgetget_acceleratorr) rrrrtruZ menuEventDictr>r+Z menubarItemrcrZaccelZitemNamerQr!r!r"ApplyKeybindings`s<      $        zEditorWindow.ApplyKeybindingscCs|jstjddddd|_dS)zCUpdate the indentwidth if changed and not using tabs in this windowrBr^z num-spacesrDrEN)rrr~rr4r!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 rVrr1N) rZGetAllExtraHelpSourcesListrrrrrr"_EditorWindow__extra_help_callbackr2)rZ help_listZhelpmenuZhelpmenu_lengthentryrXr!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]rirjrqrrmr?r@rrrrGrArB)helpfilerCr4r!r"display_extra_helps   z>EditorWindow.__extra_help_callback..display_extra_helpr!)rr~rr!r4r"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*errorsNrgrrdcsg|]}|vr|qSr!r!).0rjZ bad_pathsr!r" rSz9EditorWindow.update_recent_files_list..Z1234567890ABCDEFGHIJKwrecentfiles_messageFTz IDLE Warningz)Cannot save Recent Files list to disk. z Select OK to continue.r<r)r rZr )rzrirjrrB readlinesabspathremoverappendr writelinesr@rrsrr showwarningrGrvryrrr enumeraterstrip#_EditorWindow__recent_file_callbackr2)rnew_fileZrf_listrMZ rf_list_filerjZulcharsZrf_fileerrinstancer>i file_namecallbackr!rr"rs\&   .   z%EditorWindow.update_recent_files_listcs|ffdd }|S)Ncsjj|ddS)N)ZeditFile)rrB)Z fn_closurer4r!r"open_recent_filesz=EditorWindow.__recent_file_callback..open_recent_filer!)rrrr!r4r"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_savedrvZwm_titleZ wm_iconname)rZshortlongr=Ziconr!r!r"rs  zEditorWindow.saved_change_hookcCs |jSr)rrr4r!r!r"rszEditorWindow.get_savedcCs|j|dSr)r set_saved)rflagr!r!r"rszEditorWindow.set_savedcCs|jdSr)r reset_undor4r!r!r"rszEditorWindow.reset_undocCs|jj}|rtj|SdS)Nr)rrrirjr)rrr!r!r"rszEditorWindow.short_titlecCs |jjp dS)Nr?)rrr4r!r!r"rszEditorWindow.long_titlecCs |dSrN)rYrr!r!r"rsz EditorWindow.center_insert_eventrcCsH|j}|\}}||}||}td||d}|t|dS)NrVr=)rGgetwindowlinesrmaxrr)rmarkrGrvbotrKrIZnewtopr!r!r"rYs   zEditorWindow.centercCsN|j}|d}|d}||krF|dkrFt|d}||d}||fS)Nrz@0,65535rVrI)rGrZ winfo_heightrD)rrGrvrrIr!r!r"r s    zEditorWindow.getwindowlinescCs|j}tt||Sr)rGrDrr)rrrGr!r!r"rszEditorWindow.getlinenocCs(|j}td|}ttt|S)zReturn (width, height, x, y)z(\d+)x(\d+)\+(-?\d+)\+(-?\d+))rvZ wm_geometryrematchlistrrDgroups)rZgeommr!r!r" get_geometrys  zEditorWindow.get_geometrycCs |dSrN)rrr!r!r"r szEditorWindow.close_eventcCsH|jrD|s:|jdkr&|j|j|j|jSdS)Nr6)rrrvrZ deiconifylowerZlift maybesaver4r!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_extensionsrrrrGrxrrvZdestroyr`r4r!r!r"r6s"     zEditorWindow._closecCsi|_|dSr) extensionsload_standard_extensionsr4r!r!r"rJszEditorWindow.load_extensionscCs0t|jD]}t|dr|qi|_dS)Nr)rrvaluesrr)rinsr!r!r"rNs  zEditorWindow.unload_extensionscCsD|D]6}z||Wqtdt|tYq0qdS)NzFailed to load extension)rpload_extensionprintrepr traceback print_exc)rrAr!r!r"rTs  z%EditorWindow.load_standard_extensionscCs tjddS)NT)Z editor_only)rZ GetExtensionsr4r!r!r"rp\sz)EditorWindow.get_standard_extension_namesZZzDummyZzzdummyc Cs6|j||}z.command)r r rZrwvariable)r r rZrw) r+rxrnrrGrrrry get_var_objZ BooleanVarZadd_checkbuttonr2)rrxrrrrGZmnameZ entrylistr>r|r r,Z checkbuttonr rwrZvarr!r!r"rs<       zEditorWindow.fill_menuscCs&||}|r|}|St|dSr)rr NameError)rrArvaluer!r!r"getvars  zEditorWindow.getvarcCs(|||}|r||nt|dSr)rrr)rrArvartyperr!r!r"setvars  zEditorWindow.setvarcCs,|j|}|s(|r(||j|j|<}|Sr)rxrrG)rrArrr!r!r"rs zEditorWindow.get_var_objcCs,|jr$|jd|p"d|j|vSdSdS)NZTODOSTRINGrV)rrG tag_prevrangeZ tag_names)rZ text_indexr!r!r"is_char_in_strings zEditorWindow.is_char_in_stringcCs<z"|jd}|jd}||fWSty6YdS0dS)Nrr)NNr7)rrrr!r!r"get_selection_indicess     z"EditorWindow.get_selection_indicescCs|jdp t}t|S)Ntabs)rGTK_TABWIDTH_DEFAULTrD)rcurrentr!r!r"get_tk_tabwidthszEditorWindow.get_tk_tabwidthc CsB|j}||kr>|jdd|dd|jd|}|j|ddS)Nr]rz -displayofn)r)rGrrr8ZmasterZ configure)rZ newtabwidthrGZpixelsr!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)NrrOrr?rrz insert-1crd rrVz insert-%dcr)rGrrrrrZbellrr expandtabsrr{rrr) rrQrGrrcharsrZhaveZwantZ 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)NrrrrrO)rGrr index2linerrrrrrget_line_indentrr reindent_torrrrr) rrQrGrrprefixrawZ 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. rrrrrVrgrONrdzinsert - %d charsrIZconsolerzbogus continuation type %r)(rGrrrrrrrrrr{rrrZParserrrrrrZset_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)rrQrGrrrrrindentlnor%contextZstartatZ startatindexZrawtextZbodrrr!r!r"rLs       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)rGrrrrrr)rr\rGr!r!r"rs zEditorWindow.reindent_tocCsPt|j|j\}}|r@|r@t||j\}}t||j\}}nd}}||SNr)IndentSearcherrGrrr)ropenerZindentedrZ indentsmallZ indentlarger!r!r"rs zEditorWindow.guess_indentcCsN|jdurdS|jjr&|jd}n|jd}|jdd|dddS)NZShowZHiderergz Line Numbers)r>rr )rZis_shownZ hide_sidebarZ show_sidebarr)rrQZ 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)rQ __module__ __qualname__Zidlelib.percolatorr%Zidlelib.colorizerr&r'Z idlelib.undor(Zidlelib.iomenur)r*rRr+Zidlelib.statusbarr,Zidlelib.autocompleter-Zidlelib.autoexpandr.Zidlelib.calltipr/Zidlelib.codecontextr0Zidlelib.sidebarr1Zidlelib.formatr2r3r4r5Zidlelib.parenmatchr6Zidlelib.squeezerr7Zidlelib.zoomheightr8rgetfilesystemencodingZfilesystemencodingrhrrrrrrrrrr rrrrrr'rr)r(r5r3r9rrrrrrrrrrrrrrrrrrrNrrrrrZrr`rarrcrdrstring ascii_lettersdigitsrhrkrrlrvrzrrr{rrrrrrrrrrYrrrrrrrrrrrprrrrrrrrrrrrrrrrrrrrr!r!r!r"r$2s               +    %              $ .     %     ,#v  r$cCs tt|Sr)rDr)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_rerrcrgroupr)rrrr!r!r"rs rc@s8eZdZddZddZejejdfddZdd Z d S) rcCs(||_||_d|_|_d|_|_dSr)rGrrfinished blkopenline indentedline)rrGrr!r!r"rs zIndentSearcher.__init__cCsL|jr dS|jd}|_t|d}|j|ddr:dS|j||dS)Nr?rVrIz>=rcz lineend+1c)rrrrGrr)rrrr!r!r"readlines zIndentSearcher.readline)classdefforiftrywhilec Cs>|jrn2||kr ||vr ||_n||kr:|jr:||_d|_dS)NrV)rrr) rrFtokenstartrcrINDENTNAMEZOPENERSr!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"r2s zIndentSearcher.runN) rQrrrrrrrrrr!r!r!r"rs  rcCs6|d}|dkr.|d|||dd}||fS)NrerrV)rH)srr!r!r"rDs r[]/)Z bracketleftZ bracketrightZslashcCs||}|rtr"|dvr"dS|d}tddd|}tddd|}td d|}td d |}td d |}tdd|}tdd|}tdd|}tdd|}|S)N>rMrUrTr?rz-[a-z]\bcSs |Sr)rupperrr!r!r"rR]rSz!get_accelerator..z\b\w+\bcSst||Sr)keynamesrrrr!r!r"rR^rSzKey-ZCancelz Ctrl-BreakzControl-zCtrl-r+z>sz                     Z  4