s[KdNLddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl ddl m Z ddlmZddl mZddl mZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddl m!Z!ddl"m#Z#ddlm$Z$dZ%dejLzZ'ejdk(Z(dZ)GddZ*dZ+ejXdZ-dZ.GddZ/d Z0d!d"d#d$Z1d%Z2d&Z3d'Z4e5d(k(r dd)l6m7Z7e7d*d+d,-dd.l8m9Z9e9e4yy)/N)*)Font) Scrollbar) simpledialog) messagebox)idleConf) configdialog)grep)help) help_about)macosx)MultiCallCreator)pyparse)query)replace)search) wheel_event) py_extensions)windowz (%s)darwinctj\}}}}}||}||z }|dk(r |d|z }|S|dk7r ||d|z }|S)zYFormat sys.version_info to produce the Sphinx version string used to install the chm docs candidatercfinalr)sys version_info)majorminormicrolevelserialreleases 5/opt/alt/python312/lib64/python3.12/idlelib/editor.py_sphinx_versionr%&sw),)9)9&E5%wG %G Rx=  N ' eAhZx(( NceZdZddlmZddlmZmZddlm Z ddl m Z m Z ddl mZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZmZmZmZddl m!Z!ddl"m#Z#e$jJZ&dZ'dZ(dZ)dZ*dwdZ+dxdZ,dZ-dZ.dZ/dZ0dxdZ1 gdZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9d gZ:d!Z;d"Zdxd%Z?dxd&Z@dxd'ZAdxd(ZBd)ZCd*ZDd+ZEdxd,ZFdxd-ZGd.ZHd/ZId0ZJd1ZKd2ZLd3ZMd4ZNd5ZOd6ZPd7ZQd8ZRdxd9ZSdxd:ZTdxd;ZUd<ZVd=ZWd>ZXd?ZYd@ZZdAZ[dBZ\dCZ]e^je^jzdDzZadEZbdFZcdGZddHZedIZfdJZgdKZhdLZidxdMZjdNZkdOZldPZmdQZndRZodSZpdTZqdUZrdydVZsdWZtdydXZudYZvdZZwd[Zxd\Zyd]Zzd^Z{d_Z|d`Z}daZ~dbdciZddZdxdeZdzdfZdgZdxdhZdxdiZdjZdkZdlZdmZd{dnZdoZdpZdqZdrZdsZdtZduZdxdvZy)| EditorWindowr) Percolator)ColorDelegator color_config) UndoDelegator) IOBindingencoding)mainmenu)MultiStatusBar) AutoComplete) AutoExpand)Calltip) CodeContext) LineNumbers)FormatParagraph FormatRegionIndentsRstrip) ParenMatch) ZoomHeightNTc d"ddlm}tjtj j tjdd}tjjdr`ddtjddzz}tj jd rd }nd }tj j ||dd}ntjddd k(rYddl } d } dtjd} | j| j | } tj j'| rD| }nAtjdk(r.tj j tjd}tj j)|}tj j'|r;|t_tjdk(r|j|jcd?|j|jcd@|j|jcdA|j|jcdB|j|jcdC|j|j|x|_N}|jcdD|j|jcdE|j|jcdF|j|jcdG|j|jcdH|j|jcdI|j|j|}|jcdJ|j|jcdK|j|jcdL|jd|jcdM|jdN|jcdO|j|jcdP|j|jcdQ|j|r||j<|<|r||j|<|jcdR|j|jcdS|j*j|jcdT|j|jcdU|j|jcdV|j|j| jttdNW| jdNdNX| jdNdNX|j|dY<|jdNdtZ|j|d[<tAj|j,dd|d\<|jdNdNtZ|j|jtAjPdd]d^d_}| |_od`|_p|j|_q|jtt@das|jVdbt@_t|jdc|_v|j|x|_x}|jx|_z}|j||j|_||j|_}|j|j|j|x|_}|j|jdd|_|j ddd|_d|_d|_|rtj j|r]tj j|s>|j|rEde|_|j|}|j |n|j|de|_|j|j|j|j|j j#df}|rY|j%dg}|dh}|dk\r|j'|dNz}||_t3j*|j,t.j0|_t2j4|_t2j6|_|j9didj|j9dkdldmdn|j9dodp|j9dqdr|j9dsdrdtdu|j;||j<}|jcdi|j>|jcdk|j@|jcdv|jB|jcdw|jE|jF|jcdx|jI|jJ|jM|}|jcdy|jN|jcds|jP||}|jcdz|jR|jcd{|jT|jcd||jV|jcd}|jY|jZ|j]|x|_}|jcdo|j`|jcdq|jb|jcd~|jd|jcd|jg|jh|jjr@|jm||_|jcd|jjnn|jqddd|jrr_|ju||_tAjPdddd_r|jw|jcd|jvy|jqdddy#t"$r1 | j| j$| } n#t"$rYnwxYwYwxYw)Nr) ScriptBindingDocz index.htmllinuxz python-docs-z%s.%s.%sz/var/www/html/python/z/var/www/html/python/index.htmlz/usr/share/doc/winzSoftware\Python\PythonCore\z\Help\Main Python Documentationrz0Resources/English.lproj/Documentation/index.htmlzfile://zhttps://docs.python.org/%d.%d/)menuzrecent-files.lstvbar)namemainr(widthinttypetextnone wordprocessorheight)rFpadxwraphighlightthicknessrHtabstylerPWM_DELETE_WINDOW<>zz<2>z<3>z x11z z z z<>z<>z <>z<>z<>z<>z<>z<><>z<>cyNbreak)events r$z'EditorWindow.__init__..s'r&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)weightcommand)rowcolumnstickyyscrollcommandfontIndentz 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)idlelib.runscriptr=r(help_urlospathjoinr base_prefixplatformcountrisdirwinregwinver QueryValueHKEY_CURRENT_USERFileNotFoundErrorHKEY_LOCAL_MACHINEisfilenormpathflistrootMenumenubarrListedTopleveltopvars tkinter_vars inversedict instance_dictruserdirrecent_files_pathprompt_last_lineFrame text_framerrE GetOptionrTextrLfocused_widget createmenubarapply_bindingsprotocolclosebind close_eventr isAquaTkright_menu_eventr_windowingsystemhandle_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_eventr7fregionindent_region_eventdedent_region_eventcomment_region_eventuncomment_region_eventtabify_region_eventuntabify_region_eventr8toggle_tabs_eventchange_indentwidth_eventmove_at_edge_if_selection del_word_leftdel_word_right home_callbackdict new_callbackclose_all_callbackopen_module_browseropen_path_browseropen_turtle_demoset_status_barpackLEFTBOTH rowconfigurecolumnconfigure handle_yviewgridNSEWsetGetFont focus_set set_widthusetabstabwidth indentwidthset_notabs_indentwidthhasattrrnupdate_cursor_blinknum_context_linesr)perr,undo insertfilterundo_block_startundo_block_stopset_saved_change_hooksaved_change_hookr-ioset_filename_change_hookfilename_change_hook good_loadset_indentation_paramscolor code_context line_numbersexistsloadfileispythonsource set_filenameResetColorizerupdate_recent_files_listload_extensionsmenudictgetindex add_separator wmenu_endregister_callbackpostwindowsmenur askintegerraskyesno showerror event_addr1user_input_insert_tagsautocomplete_eventtry_open_completions_eventforce_open_completions_eventr2expand_word_eventr6format_paragraph_eventr:flash_paren_eventparen_closed_eventcheck_module_eventrun_module_eventrun_custom_eventr9 do_rstripr3ctiptry_open_calltip_eventrefresh_calltip_eventforce_open_calltip_eventr;zoom_height_eventallow_code_contextr4toggle_code_context_eventupdate_menu_stateallow_line_numbersr5toggle_line_numbers_event)selfrfilenamekeyrr=dochomepyverbasepathrdocfileKEYrrrErH text_optionsrLrindents usespacesrrr is_py_srcrDrq autocomplete parenmatch scriptbindingr s r$__init__zEditorWindow.__init__Js[ 3  (ww||COOULIG||!!'*&c6F6Fr6J)JJ77==!89?G0H ggll8U+0,@Gbq!U*5cjj\:;$//0H0H#NG77>>'*%G)'',,sJLgg&&w/Gww~~g&(/ %<<8+,5 8M8M,ML))I+.+;+;BQ+?*@ % !uzz Dz ..t$,,GG3  % D &+%6%6DHH " "D %'DHH "!)!1!1"6bggll  "476!#',Sz1*$Zf== D""6>7O&'+",,uF  2+D1*M MM D"&))   ,djj9  ($*:*:; ??  II($*:*: ; II*4+@+@ A IIeT22 3 IIeD11 2 .+.  E ) IIlK 0 IIlK 0 -!6!67 )TXX& *dii( +tzz* %t'?'?@ *d../ #T%5%56 "D$5$56 *D,>,>? #T%;%;< "$9: "DOO4 ($*?*?@ *doo. "D$9$9: %t'?'?@ &(A(AB -!3!34 /4#7#78 '(B(BC *4+H+HI $T%<%<=!%!2!24!88 w %w'B'BC %w'B'BC &(D(DE ('*H*HI %w'B'BC ')F)FG,,t$ #W%>%>? *G,L,LM (D::1=> )T;;A>? %t'9'9: &(;(;< )4+=+=> &)E  d #"& 3 II+T->-> ? II-tzz/L/L M II.0H0H I II-t/E/E F II,d.C.C D TQ7!,""1Q"/++Y a$ /!% '' 6>JV  a$ /  &&vx'3&B $}   == ##%x!12&*ii&@H #   ""2..3--// D  $ 5 5#33 ""4#9#9:~~d++" ##D$=$=> ##E*    ww~~h' h0G;;x(%)DN $ 3 3H =I// :)!%    %%' }}  * **U#C{ax""$Ag DN  $ $T%9%9 :'11"++ #-- );7 13H+-E G -/GH ,.GH )+D24M O ((t/J/JK  $l&E&EF ,99 ; .;; = #T__T%:%L%LM (&&t,CC E__T*  #Z%A%AB $j&C&CD%d+  $m&F&FG "M$B$BC "M$B$BC /4;;t#4#>#>?<<-- D ($*E*EF ')C)CD *D,I,IJ #T__T%:%L%LM  " " $ 0 0 6D  II/''AA C  " "9mZ H  " " $ 0 0 6D !!&."8vG..0 II/1O1O P  " "9mZ HW)"("3"3F4M4M47#9, sG7AC5C5 AD/C?ADDAD/D AD(D%AD/D'AD(D(AD/D.AD/c$|jyN)rrr]s r$rzEditorWindow.handle_winconfigms  r&c D|j}tt|jj|j d|j dg}|j d|zz }t||j djd}||z|_ y)NborderrQrCrk)rk0) rLsummaptkgetintcget winfo_widthrmeasurerH)rrL inner_padding pixel_widthzero_char_widths r$rzEditorWindow.set_widthpsyyC81D1561B1DEF &&(1}+<< DIIf- . 6 6s ;  O3 r&ct|jj\}}|jj|yrZ)rdefaultfilenamernew)rr]dirnamebasenames r$rzEditorWindow.new_callback}s, GG335 wr&c|jdzdk7r|jdk(ry|jjdrq|jj dddrT|jj dddr7t |jjdj dd }nI|jjdd}tt|D] }||d vs n t|}t |jjd j dd }||k(rd}d t|zd z}|jd zdk(r|jjdddnQ|jjds|jjdd n|jj |jjdd|jjd r|jjddn|jjdd|jj|}|jjd}|jj |d|r||}}|jjddd|jjd|||jjd ||jjd y)NrHomeiomark<=zinsert lineendinsert linestart.ra)  insertzinsert linestart+csel1.0rq sel.first my_anchor<sel.last>r[)statekeysymrLrcomparerIsplitrrangelenstr tag_removemark_settag_addsee)rr]insertptlinelineatdestfirstlasts r$rzEditorWindow.home_callbacksK KK!O !ellf&< 99??8 $ 99  Xt-= > 99  /x @499??84::3?BCH99==!35EFD!#d),>3-TTYY__X.44S9!<= v H"3x=04 KKMa  II u 599??;/ "";999$$TYY__[%A3%)YY__X%>@II&&{K@II&&{J?IIOOD)E99??;/Dyy  s40!%d II u 5 II  eUD 1 8T* hr&c|j|j|_t|jddd}tj dk(r"|jj ddt|jj dd t|jj d d t|jjtt |jtt |jjd |j|jjd dd|jj|jy)Nragrey75)rP borderwidth backgroundr _padding1z )rbrhzCol: ?rXzLn: ?)rbrcz<>z z)r0r status_barrrr| set_labelRIGHTrBOTTOMXrLrset_line_and_columnr after_idle)rseps r$rzEditorWindow.set_status_bars--dhh7DHHQA(K <<8 # OO % %k6 % F !!(H5!A !!&'!> &q1 f1% 0$2J2JK 5*,= ? T556r&c|jjtjd\}}|jj dd|z|jj dd|zy)Nr@rhzCol: %srXzLn: %s)rLrINSERTrOrbrc)rr]rXrhs r$rgz EditorWindow.set_line_and_columnsTyyv.44S9 f !!(I,>? !!&(T/:r&))file_File)edit_Edit)formatF_ormat)run_Run)rs_Options)r_Window)r _Helpct|j}ix|_}|jD]K\}}t|\}}t ||dd}t ||d|x||<}|j |||Mtjr&t |ddx|d<}|j d | |jt |jd |_ |jd jd dd|j|jdjt|_|jy)aPopulate the menu bar widget for the editor window. Each option on the menubar is itself a cascade-type Menu widget with the menubar as the parent. The names, labels, and menu shortcuts for the menubar items are stored in menu_specs. Each submenu is subsequently populated in fill_menus(), except for 'Recent Files' which is added to the File menu here. Instance variables: menubar: Menu widget containing first level menu items. menudict: Dictionary of {menuname: Menu instance} items. The keys represent the valid menu items for this window and may be a subset of all the menudefs available. recent_files_menu: Menu widget contained within the 'file' menudict. _menu_postcommandNr)rFtearoff postcommand)labelrD underlineapple)rFry applicationIDLE)r{rDryrlr@z Recent Files)r{r|rDr )rr menu_specsprepstrgetattrr add_cascader isCarbonTk fill_menusrecent_files_menuinsert_cascaderENDbase_helpmenu_lengthreset_help_menu_entries)rmbarrrFr{r|rzrDs r$rzEditorWindow.createmenubars6 ||#%% ??KD%&u~ Iu!$4&0A(BDIK$(D!5@%B BHTNT   5ty  I +    -1$W:;.= =H] #d   6  5 !%dllA!> f,,Qn78262H2H - J%)MM&$9$?$?$D! $$&r&c|jd}|jd}|d}||jkDr|j|jdz|t j |y)zSCallback to register window. Only called when Window menu exists. rrqNrrra)rrrdeleteradd_windows_to_menu)rrDrqs r$rzEditorWindow.postwindowsmenus[ }}X&jj ;C   KKq(# .""4(r&cH|j|}|j||y)z$Update label for menu item at index.)r{Nr entryconfig)rrDrr{menuitems r$update_menu_labelzEditorWindow.update_menu_label#==&U%0r&cH|j|}|j||y)z$Update state for menu item at index.rLNr)rrDrrLrs r$rzEditorWindow.update_menu_staterr&c|dk(rCt|d}t|jd|z|jdz }d}|df}|jj|g|y)zHandle scrollbar.movetorrq@0,0scrollunitsr[)floatround getlinenorLyview)rr]argsfractionliness r$rzEditorWindow.handle_yviewsi H T!W~H4>>%08;<^^F+,EE7#D %%r&c |j}|jd|jd|j} |j dd|xr|j |dd}|s%|j ddd |jd ||js|j|j}||_ tjdd d k(}|r|jd |jD]0} |\}} } |  t!|| } |j#|| 2|j%|j&|j(|r|jjdy#t $rd}YwxYw#t$rYwxYw)N@,rGr>rJFrErFrqrCr@rAarrow)cursorribeamr[)rLrxyrNTclErrorrSrTrmenu make_rmenur]rr|config rmenu_specs ValueErrorrentryconfiguretk_popupx_rooty_root) rr]rLnewdex in_selectionriswinitemr{ eventname verify_staterLs r$rzEditorWindow.right_menu_event)styyay%''34 ! LLdFCC<<zB  OOE5% 0 MM(F +zz OO    Ra E)  KKwK '$$D 15.y,#/GD,/1E  e 4% u||U\\2  II  G  ,7 ! L !   s#(E%1E7% E43E47 FF)CloserVNct|jd}|jD]B}|d|d}}|$|j|fd}|j||3|j D||_y)Nrrrac&|j|yr&event_generaterLrs r$rfz(EditorWindow.make_rmenu..commandVs'' 2r&r{rf)rrLr add_commandrr)rrrr{rrfs r$rzEditorWindow.make_rmenuQsoTYY*$$D#AwQ9E !%i3!!w!?##%% r&c"|jSr&)rmenu_check_copyrs r$rmenu_check_cutzEditorWindow.rmenu_check_cut]s$$&&r&cd |jjd}|rdSdS#t$rYywxYw)NrGnormalrtrLrr)rindxs r$rzEditorWindow.rmenu_check_copy`s< 499??;/D $8 3 3  s # //c |jjjd|jdy#t$rYywxYw)Nztk::GetSelection CLIPBOARDrrt)rLr-callrrs r$rmenu_check_pastezEditorWindow.rmenu_check_pastehs?  IILL  0$))[ I  s14 AAcBtj|jy)zHandle Help 'About IDLE' event.r[)r AboutDialogrr's r$rzEditorWindow.about_dialogps txx(r&cDtj|jdy)z&Handle Options 'Configure IDLE' event.Settingsr[)r ConfigDialogrr's r$rzEditorWindow.config_dialogvs !!$((:6r&cx|jr |j}n |j}tj|y)zHandle Help 'IDLE Help' event.r[)rrr show_idlehelp)rr]parents r$rzEditorWindow.help_dialog|s. 99YYFXXF 6"r&c2tjdddk(r! tj|jytj|jy#t $r5}t jdt||jYd}~yd}~wwxYw)Nr@rADocument Start Failuretitlemessagerr[) rr|rx startfilerwOSErrorrrrRrL webbrowseropen)rr]whys r$rzEditorWindow.python_docss~ << u $ 8 T]]+  OODMM *  8$$+CHTYY88  8sA B!+BBc:|jjdy)Nz<>r[rLrr's r$rzEditorWindow.cuts   +r&cr|jjdsy|jjdy)NrEz<>r[)rL tag_rangesrr's r$rzEditorWindow.copys,yy##E*   ,r&cp|jjd|jjdy)Nz <>rCr[)rLrrVr's r$rzEditorWindow.pastes'   - hr&c|jjddd|jjdd|jjdy)NrErFzend-1crCr[)rLrUrTrVr's r$rzEditorWindow.select_alls? %1 8U+ hr&ct|jjddd|jjdy)NrErFrqrCr[)rLrSrVr's r$rzEditorWindow.remove_selections+ UE51 hr&cz|jj|jjdfd}|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-1cct|jdzdk(r ddyy#t$rYywxYw)NrMrrGrC)rLr)r] edge_index edges_tableself_text_indexself_text_mark_sets r$ move_at_edgez.move_at_edgesH aA%#K0&xZ1HI& s + 77)rLrrT)rrrrrrs ` @@@r$rz&EditorWindow.move_at_edge_if_selections4))//!YY//5  r&c:|jjdy)Nz r[rr's r$rzEditorWindow.del_word_lefts   1r&c:|jjdy)Nzr[rr's r$rzEditorWindow.del_word_rights   ,r&cBtj|jyrZ)rfindrLr's r$rzEditorWindow.find_events DIIr&cBtj|jyrZ)r find_againrLr's r$rzEditorWindow.find_again_events$))$r&cBtj|jyrZ)rfind_selectionrLr's r$rz!EditorWindow.find_selection_eventsdii(r&cntj|j|j|jyrZ)r rLrrr's r$rz EditorWindow.find_in_files_events! $))TWWdjj1r&cBtj|jyrZ)rrLr's r$rzEditorWindow.replace_events "r&c|j}tj|ddj}|I|j ddd|j d|d|j d|jy) Nz Go To Linez/Enter a positive integer ('big' = end of file):rErFrqrC.0r[)rLrGotoresultrSrTrVrg)rr]rLlinenos r$rzEditorWindow.goto_line_eventstyyl)&    OOE5% 0 MM(vhbM 2 HHX   $ $ &r&cb |jjddj}t j |jdd|j }|D|jr|jj||S|jj||S#t$rd}YwxYw)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. rGrJrBz Open ModulezAEnter the name of a Python module to search on sys.path and open:) rLrstriprr ModuleNamerrrrr)rrF file_paths r$ open_modulezEditorWindow.open_modules 99==j9??AD$$ =2 f   zz  *  + D s*B B.-B.c$|jyrZ)rr's r$rzEditorWindow.open_module_events r&c|jj}|jjdk(r|s|j }|yddlm}|j|j|y)NPyShellEditorWindowr[r)browser) rr __class____name__ridlelibr ModuleBrowserr)rr]rrs r$rz EditorWindow.open_module_browsersX77##''+@@'')H#dii2r&cFddlm}|j|jy)Nr) pathbrowserr[)r r  PathBrowserr)rr]r s r$rzEditorWindow.open_path_browsers' *r&cXddl}tjddg}|j|dy)Nrz-cz,from turtledemo.__main__ import main; main()F)shellr[) subprocessr executablePopen)rr]rcmds r$rzEditorWindow.open_turtle_demos1~~=? E*r&c|p|dkDrj|jjdd|z|jjddd|jjddd|j yyy)NrrCz%d.0rErFrqz insert +1l)rLrTrSrUcenter)rrs r$gotolinezEditorWindow.gotolinesc  &1* II  x& 9 II u 5 II  eX| < KKM #- r&cv|rtjj|rytjjtjj |\}}tjj |t vry|jjdd}|jdxrd|vS)NTrFz 1.0 lineendz#!python) rxryr~splitextr9normcaserrLr startswith)rrbaseextrXs r$rzEditorWindow.ispythonsource&s277==2GG$$RWW%5%5h%?@ c 77  C M 1yy}}UM2t$9T)99r&cb|jr#|jj|d|_yyr&)runregister_maybe_terminaters r$ close_hookzEditorWindow.close_hook/s' :: JJ 1 1$ 7DJ r&c||_yr&)r!)rr!s r$set_close_hookzEditorWindow.set_close_hook4s $r&c|jr|jj||j|jj ||j yr&)rfilename_changed_editrrupdate_windowlist_registryrrs r$rz!EditorWindow.filename_change_hook7sE :: JJ , ,T 2   ++D1 r&c|jry|j|jjr|j |_|jr2|j j |j|jyy)N)filterafter)rrrrr*rinsertfilterafterrrs r$ _addcolorizerzEditorWindow._addcolorizer>s_ ::    tww// 0,,.DJ :: HH & &djj & J r&c|jsy|jj|jj|jd|_yr&)r removecolorsr removefilterrs r$ _rmcolorizerzEditorWindow._rmcolorizerGs9zz  ! djj) r&c|j|jtj|j|j |j j |j|jjyy)zUpdate the color themeN) r/r+r(r+rLrupdate_highlight_colorsr update_colorsrs r$rzEditorWindow.ResetColorizerNso  !!$)),    (    5 5 7    (    + + - )r&_c0|jd||j|}|r$||jvr|jd|dz|d|j|k(r|jd|n|jd|dz|j |y)NERRORz wordstart rCz+1c)rUr IDENTCHARSrTrV)rrLposchars r$colorize_syntax_errorz"EditorWindow.colorize_syntax_error]s{ Wc"xx} DDOO+ LL# "4c : 488C= MM(C ( MM(C%K 0  r&ctjdddd}|sd|jd<ytj|jd<y) z&Update the cursor blink configuration.rGr(z cursor-blinkrmrJrroN)rrrLrn)r cursorblinks r$rz EditorWindow.update_cursor_blinkhsC((VE )*DIIo &*2)@)@DIIo &r&c|j|jj|j|jjtj|j dd}||j d<|jy)z.Update the text widgets' font if it is changedNrGr(rk)r update_fontrrrrrLr)rnew_fonts r$ ResetFontzEditorWindow.ResetFontrsr    (    ) ) +    (    ) ) +##DIIv~F$ & r&c|tjx|j_}|j D]"\}}|j j |g|$|jD]O}tj|}|s|j D]"\}}|j j |g|$Qy)zgRemove the virtual, configurable keybindings. Leaves the default Tk Text keybindings. N) rGetCurrentKeySetr/default_keydefsitemsrL event_deleteget_standard_extension_namesGetExtensionBindings)rkeydefsr]keylist extensionNamexkeydefss r$RemoveKeybindingszEditorWindow.RemoveKeybindingss 3;2K2K2MM %%mmoNE7 "DII " "5 37 3.!>>@M44]CH&.nn&6NE7*DII**5;7;'7Ar&c tjx|j_}|j |j D]+}tj |}|s|j |-i}|jjD]4}i||d<|dD]"}|s|d||dt|dd<$6|jD]}|j|}|jt}|*|dz }td|D]u} |j| dk(s|j| d} | s-|j| d} d} ||vr| ||vr||| } | sWt|| } |j!| | wy) zeApply the virtual, configurable keybindings. Also update hotkeys to current keyset. rraNrf acceleratorr{rB)rN)rrBr/rCrrFrGmenudefsrrrrrPrK entrycgetget_acceleratorr) rrHrJrK menuEventDictrDr menubarItemrqraccelitemNamer]s r$ApplyKeybindingszEditorWindow.ApplyKeybindingss 3;2K2K2MM % !>>@M44]CH##H-A  MM**D%'M$q' "QBFq'M$q'*747+;A+>? +  ==K==-D**S/C{ 1HCq#99U#y0 NN5-@E#'>>%#A "&-7'=+EE(5k(B8(L $3GU$CE ,,U,F')r&cZ|jstjdddd|_yy)zCUpdate the indentwidth if changed and not using tabs in this windowrGrlz num-spacesrIrJN)rrrrrs r$rz#EditorWindow.set_notabs_indentwidths,||'11&(<7< >D r&cttj}|jd}|jt}||j kDr|j |j dz||rA|j|D],}|j|d}|j|d|.||jd<y)z4Update the additional help entries on the Help menu.r rarrN) rGetAllExtraHelpSourcesListrrrrrr_extra_help_callbackr)r help_listhelpmenuhelpmenu_lengthentryrs r$rz$EditorWindow.reset_help_menu_entriess779 ==("..- T66 6 OOT66:_ M   " " $"//a9$$58S$A#!) fr&c|ffd }|S)z9Return a callback that loads resource (file or web page).cl|jdstjj|}tj dddk(r tj |ytj|y#t$r5}tjdt|jYd}~yd}~wwxYw)N)wwwhttpr@rArr)rrxryrrr|rrrrrRrLrr)helpfilerrs r$display_extra_helpz=EditorWindow._extra_help_callback..display_extra_helps&&777++H5||BQ5(<LL* ) <((/G #C<<+B..B3r\)rresourcerds` r$rZz!EditorWindow._extra_help_callbacks(0 *"!r&cg}|j}|rFtjj|r't |dd5}|j }ddd|rItjj |dz}||vr|j||jd|g}|D]:}d|vs#tjj|ddr*|j|<|Dcgc] }||vs| }}d }|dt|}|r* t |d dd5}|j|ddd|j&j(D]u} | j*} | j-dt.t1|D]C\} } | j3} | j5| }| j7|| dz| z|dEwy#1swYuxYwcc}w#1swYxYw#t$rY} t|jd d s7d |j_t!j"dd| d|j$Yd} ~  d} ~ wwxYw)z/Load and update the recent files list and menusutf_8r)r.errorsNr6rrr1234567890ABCDEFGHIJKwrecentfiles_messageFTz IDLE Warningz)Cannot save Recent Files list to disk. z Select OK to continue.rrA)r{rfr|)rrxryrr readlinesabspathremoverCappendrQ writelinesrrrrlr showwarningrLrrrrr enumeraterstrip#_EditorWindow__recent_file_callbackr)rnew_filerf_listr rf_list_file bad_pathsryulcharsrf_fileerrinstancerDi file_namecallbacks r$rz%EditorWindow.update_recent_files_lists#**  2i&y:=I&002: wwx047H7"x( NN1h ' Dt|277>>$q*#=  &%,EGDt9/D4GE)!CL)  *)S#*9>AH&&w/>..H--D KK3  )' 2 9%,,. #::9E  wqzC'7)'C)1+,!.!3/=::F >> *tyy*?G48DII1**!%%(E*9!9 $yy * *sHG' G1G G G+G G GG I)AH==Ic|ffd }|S)Nc>jj|y)N)editFile)rr) fn_closurers r$open_recent_filez=EditorWindow.__recent_file_callback..open_recent_files GGLL*L -r&r\)rrrs` r$__recent_file_callbackz#EditorWindow.__recent_file_callbacks(1 .r&c|j}|j}|r&|r$tjs|dz|ztz}n |r|}n|r|}nd}|xs|xs|}|j s d|z}d|z}|j j||j j|tjrH|j jd||j jd|j yy)Nz - untitledz*%s*z*%sz -titlepathz -modified) short_title long_titler isCocoaTk _py_version get_savedrwm_title wm_iconname wm_attributes)rshortlongricons r$rzEditorWindow.saved_change_hooks  "  T&"2"2"4EMD(;6E E EE%%~~UNE4>#88>>#X-HH&&(  77$$& & r&c |j}t|dk7r|j|S#t$rYywxYw)Ncancel)rrR_closeAttributeError)rreplys r$rzEditorWindow.closels? NN$E5zX% L   s /2 >>cP|jjr&|j|jjtj|j |j |jjd|_d|_|jr!|jjd|_ d|_ d|_ |jjd|_ |jj|jr|jyy)N)rv)rrrrunregister_callbackrunload_extensionsrrrrLrrrdestroyr!rs r$rzEditorWindow._closeus 77    ) )4773C3C ) D""4#7#78     :: JJ   DJ     ?? OO  r&c2i|_|jyr&) extensionsload_standard_extensionsrs r$rzEditorWindow.load_extensionss %%'r&ct|jjD]}t|ds|j !i|_y)Nr)rrvaluesrr)rinss r$rzEditorWindow.unload_extensionss:..01CsG$ 2r&c|jD]} |j|y#tdt|t j YExYw)NzFailed to load extension)rFload_extensionprintrepr traceback print_exc)rrFs r$rz%EditorWindow.load_standard_extensionssJ557D &##D)8 &0$t*=##%s )+Ac.tjdS)NT) editor_only)r GetExtensionsrs r$rFz)EditorWindow.get_standard_extension_namess%%$77r&ZzDummyzzdummyc|jj||} tjd|zt}t||}tj|}t|dr|j|j|||}||j|<|r|j||D]x}|j!dd}|dddk(r|dd}|dddk(r|d dd k(r|dd }|d dd k(r|d z}t||sS|j"j%|t||zyy#t t f$rtj|}YwxYw#t $rtd|wxYw) Nr@)packagez Failed to import extension: rO-r3rarIrrrK_event)extfilesr importlib import_module __package__ ImportError TypeErrorrrrrGrrrOrrrrLr) rrFfnamemodclsrHrvevent methodnames r$rzEditorWindow.load_extensionsz !!$-  5--cEk;O c4 //5 3 # OOCLL' 2$i #     (!#^^C5  !n+!+ABJ!!n+ o,!+CRJ!o,'(2 3 +IINN673 +CD"  + 5--e4 5  2D 9  s#D//$EEEEE1c||jj}|j}||_|j D]\}}|s |j |g|y)z"Add events with keys to self.text.N)r/rCrLrHrDr)rrHrLr]rIs r$rzEditorWindow.apply_bindingssP ?mm33Gyy %mmoNE7u/w/.r&c ||jj}||jj}|j}|j}|D]\}}|j |}|s|D]}||j |\} } | dddk(} | r| dd} t| \} } t|| } || fd}| r-|j| t}|j| | || |y|j| | || y)zFill in dropdown menus used by this window. Items whose name begins with '!' become checkbuttons. Other names indicate commands. None becomes a separator. Nra!c&|j|yr&rrs r$rfz(EditorWindow.fill_menus..commands++I6r&)r{r|rfrNvariable)r{r|rfrN) r/rOrCrrLrrrrQ get_var_obj BooleanVaradd_checkbuttonr)rrOrHrrLmname entrylistrDr^r{r checkbuttonr|rNrfvars r$rzEditorWindow.fill_menuss  }}--H ?mm33G==yy ( E9<<&D"=&&(',$E9#(!9#3K" %ab '.u~$Iu"1'9"EK%)Y7""..y*E,,5I$+%(-*((u 185@)B%# !)r&cb|j|}|r|j}|St|r&)rr NameError)rrFrvalues r$getvarzEditorWindow.getvars/t$ GGIELD/ !r&cd|j||}|r|j|yt|r&)rrr)rrFrvartypers r$setvarzEditorWindow.setvars,tW-  GGEND/ !r&c|jj|}|s#|r!||jx|j|<}|S)z:Return a tkinter variable instance for the event. )rrrL)rrrrs r$rzEditorWindow.get_var_objsB##I.w181C CD  i (3 r&c|jr;|jjd|xsd|jj|vSy)NTODOSTRINGra)rrL tag_prevrange tag_names)r text_indexs r$is_char_in_stringzEditorWindow.is_char_in_stringsE ::99**6:>?tyy22:>> ?r&c |jjd}|jjd}||fS#t$rYywxYw)NrGrJNNr)rr[r\s r$get_selection_indicesz"EditorWindow.get_selection_indicessG IIOOK0E99??:.D$;   s9< AAcF|jdxst}t|S)Ntabs)rLTK_TABWIDTH_DEFAULTrI)rcurrents r$get_tk_tabwidthzEditorWindow.get_tk_tabwidth&s ))F#:':7|r&c |j}|j|k7rC|jjdd|dd|jd|z}|j |yy)Nrkr1z -displayofn)r)rLrr-rmaster configure)r newtabwidthrLpixelss r$set_tk_tabwidthzEditorWindow.set_tk_tabwidth,s^yy    ![ 0WW\\&)T&\". "% "35F NNN ' 1r&c|rG|rE|j}d|cxkrdkr nn||_|j|jk7rd|_|j |jy)NrCrF) guess_indentrrrr)rr guessr~s r$rz#EditorWindow.set_indentation_params7sS !!#AA{{#$ 4==0$  T]]+r&c|j}|j\}}|r'|r%|j|||jd|y|j dd}|dk(r6|j dddr|jdy|j y|dd vr|jdy|j}t|j|}|d kDsJ|d z |jz|jz}d } |dd}| d z} t|j|}||ks|dd vrn2|j|jd | zd||kr#|jdd ||z z|j|jy)NrCr[r?rBrKrFz insert-1crr rraz insert-%dcrA)rLrrrTrrNbellrrQ expandtabsrrrCrr) rr]rLr[r\charsrhavewant ncharsdeleteds r$rz"EditorWindow.smart_backspace_event@syy002 t T KKt $ MM(E *+X6 B;||Hc51 K(  "IU " KK $==5##H-.axxd...$2B2BB #2JE)A-Mu''12Dt|uRy5   L=0(; $; KK#"533 5 r&c$|j}|j\}}|j |rh|rft|t|k7r+|jj ||j S|j|||jd||jdd}t||j\}}|t|k(r|j||jzng|jrd}n;t|j!|j}|j} d| || zz z}|j#d||j$|j'd |j y#|j wxYw)NrCr?rBrAr[)rLrr index2linerrrrrTrget_line_indentrrQ reindent_torrrrCrrV) rr]rLr[r\prefixraw effectivepadrs r$rzEditorWindow.smart_indent_eventksRyy002 t  #e$ 4(88<<;;EB(  "' E4( h.XX0(;F,VT]]CNCc&k!  T-=-=!=><<C #F$5$5dmm$D EI((AY]!23C Hc4+F+FG HHX   "D "s5E=7C4E==Fc |j}|j\}}|j |r&|r$|j|||j d||j dd}dt |}}||kr||dvr|dz }||kr||dvr||k(r@|jdd|j |jd|jy|d|}d}|r|d dvr|dd }|dz }|r|d dvr|r|jd |zd|j ddvr%|jd|j ddvr%|jdd|jt|jd} tj|j|j } |j"s|j$D]k} t'| | z d} t)| d z} |j | d}| j+|| j-|j/| }|| dk(skn| j1xsdnP|j3d d}|r|d} nd } |j | d}| j+|| j1d| j5}|tj6k7r |tj8k(rn|tj:k(r|jd||jn|tj<k(r |j?| jAnn|tjBk(rQ| jEdkDr|jd||jn*|j?| jGn Jd| |jd|jy| jI}|jd||j| jKr|jM|n#|r!| jOr|jQ| |jd|jy#|jd|jwxYw)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. rCr?rr rar6r[Nrrzinsert - %d charsrconsolerFzbogus continuation type ))rLrrrrTrrQrCrrVrrrrParserrrrrrrset_codefind_good_parse_start_build_char_in_string_funcset_lorget_continuation_typeC_NONEC_STRING_FIRST_LINEC_STRING_NEXT_LINES C_BRACKETrcompute_bracket_indent C_BACKSLASHget_num_lines_in_stmtcompute_backslash_indentget_base_indent_stringis_block_openerris_block_closerr)rr]rLr[r\rXr~rindentlnorcontextstartat startatindexrawtextbodrrDs r$rz%EditorWindow.newline_and_indent_events%yy002 t e # E4( h.88.9Dc$iqAa%DGu,Qa%DGu,Av . 779j HHX   "k"1XFA48u,CRyQ48u, /!3X>((8$- H%((8$- KK$(C(C DTZZ12Ct//?A((#55G!#-3G#'=4#7L"hh|X>GJJw'11 ;;LIKC'Q, 6"&&y(;#$Q4L#(L((<: 7# '')AGNN"333'555KK&$2M2MN'+++ $$Q%=%=%?@'--- ..014 Hf$($?$?A(()C)C)EF> 8>>1 HHX   "--/F KK&$*E*E F  "''.A--/**51 HHX   " HHX   "s4A$Q"Q#Q?AQC#Q2E3QA2Q#Rc&||jfd}|S)Nc||d|zzS)Nz+%dcr\)offset _startindex_iciss r$innerz6EditorWindow._build_char_in_string_func..innersv67 7r&)r)r startindexr;s r$r z'EditorWindow._build_char_in_string_funcs&0.. 8 r&cl|jr$t||j\}}d|zd|zzSd|zS)NrBrA)rdivmodr)rrntabsnspacess r$ _make_blankszEditorWindow._make_blankss9 <<#At}}5NE7%<#-/ /7Nr&c|j}|j|jdddr|jdd|r,|j d|j ||j |jy)Nr?z!=rC)rLrrNrrCrArr)rrhrLs r$rzEditorWindow.reindent_to sjyy  <<*D( ; KK*H 5  KK$"3"3F";33 5 r&ct|jj\}}|r9|r7t||j\}}t||j\}}||z Sdx}}||z SNr)IndentSearcherrLrrrr)ropenerindentedr indentsmall indentlarges r$r zEditorWindow.guess_indent/sq)$))488: h.vt}}E C.xG C[(()* )K+[((r&c|jy|jjr|jjd}n|jjd}|j dd|dy)NShowHidersruz Line Numbers)rDrr{)ris_shown hide_sidebar show_sidebarr)rr] menu_labels r$rz&EditorWindow.toggle_line_numbers_event8sp    $     % %    * * ,J    * * ,J I](2|=%A  Cr&)NNNNr&)rCr)T)r  __module__ __qualname__idlelib.percolatorr)idlelib.colorizerr*r+ idlelib.undor,idlelib.iomenur-r.r r/idlelib.statusbarr0idlelib.autocompleter1idlelib.autoexpandr2idlelib.calltipr3idlelib.codecontextr4idlelib.sidebarr5idlelib.formatr6r7r8r9idlelib.parenmatchr:idlelib.zoomheightr;rgetfilesystemencodingfilesystemencodingrwrrrr$rrrrrrgrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr!r#rr+r/rstring ascii_lettersdigitsr7r:rr@rLrVrrrZrrurrrrrrrrrrrrrrrrrrrFrrrrrrrrrrrrrrrr rArr rr\r&r$r(r(3s->*2 01-'/+MM--2224H!aIF  4 )V7 ; &J#'J )1 1  E!J ,K '4      ( 0  : %K .%% 5;J A" <&GP>)" ",.\ F6%"F&",* '(( &8 9 HE80$BL""$ (,)V!#Fq#p ) Cr&r(c*tt|Sr&)rIr)rs r$rrFs uU| r&z[ \t]*ctj|}|jt|j j |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_rerrqrQgroupr)rXrrs r$rrKs; d#A 557C ,,X67 77r&cXeZdZdZdZdZejejdfdZ dZ y)rEz4Manage initial indent guess, returned by run method.cJ||_dx|_|_dx|_|_yrD)rLr~finished blkopenline indentedline)rrLs r$r$zIndentSearcher.__init__Xs' !""/334,r&c|jry|jdzx}|_t|dz}|jj |ddry|jj ||dzS)NrBrarz>=rqz lineend+1c)rkr~rrLrNr)rr~rs r$readlinezIndentSearcher.readline]s` ==VVaZDFAw~ 99  T4 /yy}}T4-#788r&)classdefforifrtrywhilewithc |jry||k(r ||vr||_y||k(r|jr||_d|_yyy)Nra)rkrlrm) rrKtokenstartrqrXINDENTNAMEOPENERSs r$ tokeneaterzIndentSearcher.tokeneaterfsI ==  T\ew.#D  V^ 0 0 $D DM!1^r&c tj|j}|D]}|j| |j |jfS#tjt f$rY3wxYw)ztReturn 2 lines containing block opener and and indent. Either the indent line or both may be None. )tokenizegenerate_tokensror} TokenError SyntaxErrorrlrm)rtokensrxs r$rrzIndentSearcher.runssk  --dmmr_rXr`rBrz-[a-z]\bc>|jjSr&)rhupperrs r$r^z!get_accelerator..saggioo&7r&z\b\w+\bcftj|j|jSr&)keynamesrrhrs r$r^z!get_accelerator..sX\\!'')QWWY%Gr&zKey-Cancelz Ctrl-BreakzControl-zCtrl-r+z>616 A {7;A zGKA vr1A xq)A z7A&A sCA tS!A sBA sBA Hr&c|j}|jddd|jddd|jdddy) Ntcl_wordBreakAfterza brr tcl_wordcharsz\wtcl_nonwordcharsz\W)r-r)rr-s r$ fixwordbreaksrs? BGG %+GGE?E*GGE%u-r&c@|}t|tjddrtjd}nd}tj|dt ||}|j }d|d<tdD]&}|jdd|zt|zdz(y) Nra)rr rPrCz r6) rrargvr setupAppr(rLrPrCrR)rrrrnrLr~s r$_editor_windowrs D$ xx|88A; OOD$ TH 5D 99DDN 2Y Hd1fs1vo45r&__main__)rGzidlelib.idle_test.test_editorrCF) verbosityexit)rr): importlib.abcrimportlib.utilrxr|rrbrrrrtkinter tkinter.fontr tkinter.ttkrrridlelib.configrr r r r r r idlelib.multicallrrrrr idlelib.treer idlelib.utilrrrpython_versionrrr%r(rcompilergrrErrrQrrr unittestrGidlelib.idle_test.htestrrr\r&r$rs  ! # .$&///11  ! PCPCf0"**Y'8*3*3^$   ( V. 6& z (AEB+ r&