\d XddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Tddl m Z ddlmZddl mZddl mZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddl m!Z!ddl"m#Z#ddlm$Z$dZ%dej&zZ'ejdkZ(dZ)GddZ*dZ+ej,dZ-dZ.GddZ/d Z0d!d"d#d$Z1d%Z2d&Z3d'Z4e5d(kr'dd)l6m7Z7e7d*d+d,-dd.l8m9Z9e9e4dSdS)/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 }|dkr |d|z }n|dkr||d|z }|S)zYFormat sys.version_info to produce the Sphinx version string used to install the chm docs candidatercfinalr)sys version_info)majorminormicrolevelserialreleases ..\python\lib\idlelib\editor.py_sphinx_versionr%&sw),)9&E5%G %zG ===  '  eAh(((( NceZdZddlmZddlmZmZddlm Z ddl m Z m Z ddl mZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZmZmZmZddl m!Z!ddl"m#Z#e$j%Z&dZ'dZ(dZ)dZ*dxdZ+dydZ,dZ-dZ.dZ/dZ0dydZ1 gdZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9d gZ:d!Z;d"Zdyd%Z?dyd&Z@dyd'ZAdyd(ZBd)ZCd*ZDd+ZEdyd,ZFdyd-ZGd.ZHd/ZId0ZJd1ZKd2ZLd3ZMd4ZNd5ZOd6ZPd7ZQd8ZRdyd9ZSdyd:ZTdyd;ZUd<ZVd=ZWd>ZXd?ZYd@ZZdAZ[dBZ\dCZ]e^j_e^j`zdDzZadEZbdFZcdGZddHZedIZfdJZgdKZhdLZidydMZjdNZkdOZldPZmdQZndRZodSZpdTZqdUZrdzdWZsdXZtdzdYZudZZvd[Zwd\Zxd]Zyd^Zzd_Z{d`Z|daZ}dbZ~dcddiZdeZdydfZd{dgZdhZdydiZdydjZdkZdlZdmZdnZd|doZdpZdqZdrZdsZdtZduZdvZdydwZdS)} EditorWindowr) Percolator)ColorDelegator color_config) UndoDelegator) IOBindingencoding)mainmenu)MultiStatusBar) AutoComplete) AutoExpand)Calltip) CodeContext) LineNumbers)FormatParagraph FormatRegionIndentsRstrip) ParenMatch) ZoomHeightNTc !ddlm}tj%tjtjdd}tj drbddtj ddzz}tj d rd }n d }tj||dd}ntj ddd krddl } d } dtjd} | | j| } n=#t"$r0 | | j| } n#t"$rYnwxYwYnwxYwtj| r| }n:tj dkr*tjtjd}tj|}tj|r6|t_tj dkrdtjzt_n!dtj ddzt_||_|p|j}||_t/||_t3j||jx|_} |r|j|_|j|j_ni|_i|j_t@j!o)tjt@j!d|_"d |_#tI| x|_%} tM| dx|_'}tAj(dddd}ddd d|d!tAj(ddd"dd#}tStT| fi|x|_+}|j+|j_,|-|.|j/d$|j0|j1d%|j2tgj4rR|1d%|j2|1d&|j5|1d'|j5n|1d(|j5|1d)tl|1d*tl|1d+tl|1d,|j7|1d-|j8|1d.|j9|1d/|j:|1d0|j;|1d1|j<|1d2|j=|1d3|j>|1d4|j?|1d5|j@|1d6d7|1d8|jA|1d9|jB|1d:|jC|1d;|jD|1d<|jE|1d=|jF|1d>|jG|1d?|jH|1d@|jI|1dA|jJ|1dB|jK|L|x|_M}|1dC|jN|1dD|jO|1dE|jP|1dF|jQ|1dG|jR|1dH|jS|T|}|1dI|jU|1dJ|jV|1dK|Wd|1dL|WdM|1dN|jX|1dO|jY|1dP|jZ|r||j|<|r ||j[|<|1dQ|j\|1dR|jj]|1dS|j^|1dT|j_|1dU|j`|a| bttdMV| edMdMW| fdMdMW|jg|dX<|hdMdtY|jj|dZ<tAjk|jdd|d[<|hdMdMtY|l|mtAj(dd\d]d^}| |_nd_|_o|jo|_p|qtt@d`s|j+dat@_s|tdb|_u|v|x|_w}|xx|_y}|z||j{|_{|j||_||}|j~||x|_}||jdc|_|dcd|_d|_d|_|rtj|rftj |sG||r1dd|_||}||n||dd|_||~|||jde}|rX|df}|dg}|dkr||dMz}||_t3j|jt,j|_t0j|_t0j|_|dhdi|djdkdldm|dndo|dpdq|drdqdsdt|||j}|1dh|j|1dj|j|1du|j|1dv||j|1dw||j||}|1dx|j|1dr|j||}|1dy|j|1dz|j|1d{|j|1d|||j||x|_}|1dn|j|1dp|j|1d}|j|1d~||j|jr;|||_|1d|jjn|ddd|jrc|||_tAj(dddd^r||1d|jdS|ddddS)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 z z z z<>z<>z <>z<>z<>z<>z<>z<><>z<>cdSNbreak)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_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_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_indentwidthhasattrrmupdate_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=dochomepyverbasepathr~docfileKEYrrrErH text_optionsrLrindents usespacesrrr is_py_srcrDrp autocomplete parenmatch scriptbindingr s r$__init__zEditorWindow.__init__Js333333  (w||COULIIG|!!'** L&c6Frr6J)JJ7==!899@?GG0H gll8U+0,@@GGbqb!U** ;cj;;;$//0H#NNGG("("3"3F4M47#9#9,  7>>'**&%G))',,sJLLg&&w//Gw~~g&& A(/ %<8++,5 8M,ML))I+.+;BQB+?*@ % !uz Dzz .t$,GGGG3  ( % D &+%6DH " " "D %'DH "!)!1"6bgll "47676!#',Szz1*$Zf==== D"6>7OOO&'+",uFFF   2+D11*MM MMM D"&)   ,dj999  ($*:;;; ?   3 II($*: ; ; ; II*4+@ A A A IIeT2 3 3 3 3 IIeD1 2 2 2 .+... , ,,, , ,,, -!6777 )TX&&& *di((( +tz*** %t'?@@@ *d./// #T%5666 "D$5666 *D,>??? #T%;<<< "$9$9::: "DO444 ($*?@@@ *do... "D$9::: %t'?@@@ &(ABBB -!3444 /4#7888 '(BCCC *4+HIII $T%<===!%!2!24!8!88 w %w'BCCC %w'BCCC &(DEEE ('*HIII %w'BCCC ')FGGG,,t$$ #W%>??? *G,LMMM (D::1==>>> )T;;A>>??? %t'9::: &(;<<< )4+=>>>  E&)E d # '"& 3 II+T-> ? ? ? II-tz/L M M M II.0H I I I II-t/E F F F II,d.C D D D TQ777!,,,""1Q"///+Y a$ ///!% ' 6>JJV  a$ ///  &vx'3&BBB $}   = ##%%%x!122 A&*i&@H #   """"2...3--/// D  $ 5#3 ""4#9:::~~d+++" ##D$=>>> ##E***     &w~~h'' & h0G0G &;;x((;%)DN $ 3 3H = =I// :::)))!%      %%''' }  **  ;**U##C{axx""$$$Ag DN  $T%9 : : :'1"+ #- );777 13H+-E G G G -/GHHH ,.GHHH )+D24M O O O ((t/JKK  $l&EFFF ,9 ; ; ; .; = = = #T__T%:%:%LMMM (&&t,,C E E E__T**  #Z%ABBB $j&CDDD% d++  $m&FGGG "M$BCCC "M$BCCC /4;;t#4#4#>???<<--- D ($*EFFF ')CDDD *D,IJJJ #T__T%:%:%LMMM  " I $ 0 0 6 6D  II/'A C C C C  " "9mZ H H H  " I $ 0 0 6 6D !&."8vGGG 1..000 II/1O P P P P P  " "9mZ H H H H Hs6/D ED21E2 D?<E>D??EEc.|dSN)rrr\s r$rzEditorWindow.handle_winconfigls r&c h|j}tt|jj|d|dg}|d|zz }t||dd}||z|_ dS)NborderrQrCrj)rj0) rLsummaptkgetintcget winfo_widthrmeasurerH)rrL inner_padding pixel_widthzero_char_widths r$rzEditorWindow.set_widthosyC81D1D1561B1B1DEEFF &&((1}+<< DIIf-- . . . 6 6s ; ;  O3 r&cr|j\}}|j|dSrY)rdefaultfilenamernew)rr\dirnamebasenames r$rzEditorWindow.new_callback|s3 G3355 wwr&c|jdzdkr |jdkrdS|jdry|jdddr]|jdddrAt |jddd }nU|jdd}tt|D]}||d vrnt|}t |jd dd }||krd}d t|zd z}|jd zdkr|j dddnE|jds|j dd n|j|jdd|jd r|j ddn|j dd|j|}|jd}|j|d|r||}}|j ddd|j d|||j d ||jd dS)NrHomeiomark<=zinsert lineendinsert linestart.r`)  insertzinsert linestart+csel1.0rp sel.first my_anchor<sel.last>rZ)statekeysymrLrcomparerIsplitrrangelenstr tag_removemark_settag_addsee)rr\insertptlinelineatdestfirstlasts r$rzEditorWindow.home_callbacks K!O ! !elf&<&<4 9??8 $ $ # 9  Xt-= > > # 9  /x @ @ #49??844::3??BCCHH9==!35EFFD!#d)),, # #>33E4TTY__X..44S99!<== v  H"3x==04 KMa   I u 5 5 5 59??;// @ "";99999$$TY__[%A%A3%)Y__X%>%>@@@I&&{K@@@@I&&{J???IOOD))E9??;//Dy  s400 (!%d I u 5 5 5 I  eUD 1 1 1 8T*** hwr&c||j|_t|jddd}tjdkr"|jddt|jdd t|jd d t|jtt |tt |j d |j |j d dd|j |j dS)Nr`grey75)rP borderwidth backgroundr _padding1z )rargzCol: ?rVzLn: ?)rarbz<>z z)r0r status_barrrr{ set_labelRIGHTrBOTTOMXrLrset_line_and_columnr after_idle)rseps r$rzEditorWindow.set_status_bars$--dh77DHQA(KKK <8 # # O % %k6 % F F F !!(H5!AAA !!&'!>>> &q111 f1%%% 0$2JKKK 5*,= ? ? ? T566666r&c|jtd\}}|jdd|z|jdd|zdS)Nr>rgzCol: %srVzLn: %s)rLrINSERTrMr`ra)rr\rVrgs r$rez EditorWindow.set_line_and_columnsfyv..44S99 f !!(I,>??? !!&(T/:::::r&))file_File)edit_Edit)formatF_ormat)run_Run)rr_Options)r_Window)r _Helpc|j}ix|_}|jD][\}}t|\}}t ||dd}t ||d|x||<}||||\tjr.t |ddx|d<}|d | | t |jd |_ |jd  d dd|j |jd t|_|dS)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)rFrw applicationIDLE)ryrDrwrjr@z Recent Files)ryrzrDr )rr menu_specsprepstrgetattrr add_cascader isCarbonTk fill_menusrecent_files_menuinsert_cascaderENDbase_helpmenu_lengthreset_help_menu_entries)rmbarrrFryrzrxrDs r$rzEditorWindow.createmenubars |#%% ? J JKD%&u~~ Iu!$4(B(B(BDIIK$(D!5@%B%B%B BHTNT   5ty  I I I I     6-1$W:;.=.=.= =H] #d   6  5 5 5 !%dlA!>!>!> f,,Qn78262H - J J J%)M&$9$?$?$D$D! $$&&&&&r&c|jd}|d}|d}||jkr||jdz|t j|dS)zSCallback to register window. Only called when Window menu exists. rrpNrqr`)rrrdeleteradd_windows_to_menu)rrDrps r$rzEditorWindow.postwindowsmenusj }X&jj ;C    KKq(# . . ."4(((((r&cN|j|}|||dS)z$Update label for menu item at index.)ryNr entryconfig)rrDrrymenuitems r$update_menu_labelzEditorWindow.update_menu_label-=&U%00000r&cN|j|}|||dS)z$Update state for menu item at index.rJNr)rrDrrJrs r$rzEditorWindow.update_menu_staterr&c|dkrVt|d}t|d|z|dz }d}|df}|jj|g|RdS)zHandle scrollbar.movetorrp@0,0scrollunitsrZ)floatround getlinenorLyview)rr\argsfractionliness r$rzEditorWindow.handle_yviews~ H  T!W~~H4>>%008;<<^^F++,EE7#D %%%%%wr&c|j}|d|jd|j} |dd|o||dd}n#t $rd}YnwxYw|s-|ddd |d ||js| |j}||_ tj dd d k}|r| d |jD]L} |\}} } n#t$rYwxYw| t!|| } ||| M||j|j|r|j ddS)N@,rEr<rHFrCrDrprAr@rAarrow)cursorribeamrZ)rLrxyrLTclErrorrQrRrmenu make_rmenur\rr{config rmenu_specs ValueErrorrentryconfiguretk_popupx_rooty_root) rr\rLnewdex in_selectionriswinitemry eventname verify_staterJs r$rzEditorWindow.right_menu_event(sy333%'3344 ! LLdFCCC<<zBB L ! ! ! LLL ! , OOE5% 0 0 0 MM(F + + +z  OO      RaR E)  ( KKwK ' ' '$ 5 5D 15.y,,    #/GD,//11E  e 4 4 4 4 u|U\222  - I  G  , , ,ws#.A A,+A,D DD)CloserVNct|jd}|jD]K}|d|d}}|#|j|fd}|||7|L||_dS)Nrr~r`c0||dSr$event_generaterLrs r$rez(EditorWindow.make_rmenu..commandUs'' 22222r&ryre)rrLr add_commandrr)rrrryrres r$rzEditorWindow.make_rmenuPsTY***$ & &D#AwQ9E !%i3333!!w!????##%%%% r&c*|Sr$)rmenu_check_copyrs r$rmenu_check_cutzEditorWindow.rmenu_check_cut\s$$&&&r&cf |jd}|rdndS#t$rYdSwxYw)NrEnormalrsrLrr)rindxs r$rzEditorWindow.rmenu_check_copy_sO 49??;//D $388 3   :: s " 00cv |jjd|jddS#t$rYdSwxYw)Nztk::GetSelection CLIPBOARDrrs)rLr+callrrs r$rmenu_check_pastezEditorWindow.rmenu_check_pastegsQ  IL  0$)[ I I I8   :: s &* 88c8tj|jdS)zHandle Help 'About IDLE' event.rZ)r AboutDialogrr%s r$rzEditorWindow.about_dialogos tx(((wr&c:tj|jddS)z&Handle Options 'Configure IDLE' event.SettingsrZ)r ConfigDialogrr%s r$rzEditorWindow.config_dialogus !$(:666wr&cZ|jr|j}n|j}tj|dS)zHandle Help 'IDLE Help' event.rZ)rrr show_idlehelp)rr\parents r$rzEditorWindow.help_dialog{s4 9 YFFXF 6"""wr&ctjdddkr[ tj|jnY#t $r3}t jdt||j Yd}~n!d}~wwxYwtj |jdS)Nr@rADocument Start FailuretitlemessagerrZ) rr{rw startfilervOSErrorrrrPrL webbrowseropen)rr\whys r$rzEditorWindow.python_docss < u $ $ 8 T]++++ 8 8 8$+CHHTY888888888 8 ODM * * *ws4 A1)A,,A1c:|jddS)Nz<>rZrLrr%s r$rzEditorWindow.cuts   +++wr&cr|jdsdS|jddS)NrCz<>rZ)rL tag_rangesrr%s r$rzEditorWindow.copys:y##E** 4   ,,,wr&cn|jd|jddS)Nz <>rArZ)rLrrTr%s r$rzEditorWindow.pastes1   --- hwr&c|jddd|jdd|jddS)NrCrDzend-1crArZ)rLrSrRrTr%s r$rzEditorWindow.select_allsM %111 8U+++ hwr&cr|jddd|jddS)NrCrDrprArZ)rLrQrTr%s r$rzEditorWindow.remove_selections5 UE5111 hwr&cR|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-1cc|jdzdkr1 dddS#t$rYdSwxYwdS)NrMrrErA)rJr)r\ edge_index edges_tableself_text_indexself_text_mark_sets r$ move_at_edgez.move_at_edgesq aA%%#OK000&&xZ1HIIIIIDD &%s 0 >>)rLrrR)rrrrrrs ` @@@r$rz&EditorWindow.move_at_edge_if_selectionsQ)/!Y/5         r&c:|jddS)Nz rZrr%s r$rzEditorWindow.del_word_lefts   111wr&c:|jddS)NzrZrr%s r$rzEditorWindow.del_word_rights   ,,,wr&c8tj|jdSrY)rfindrLr%s r$rzEditorWindow.find_events DIwr&c8tj|jdSrY)r find_againrLr%s r$rzEditorWindow.find_again_events$)$$$wr&c8tj|jdSrY)rfind_selectionrLr%s r$rz!EditorWindow.find_selection_eventsdi(((wr&cPtj|j|j|jdSrY)r rLrrr%s r$rz EditorWindow.find_in_files_events! $)TWdj111wr&c8tj|jdSrY)rrLr%s r$rzEditorWindow.replace_events """wr&c|j}tj|ddj}|Y|ddd|d|d|d|dS) Nz Go To Linez/Enter a positive integer ('big' = end of file):rCrDrprA.0rZ)rLrGotoresultrQrRrTre)rr\rLlinenos r$rzEditorWindow.goto_line_eventsyl)    OOE5% 0 0 0 MM(vMMM 2 2 2 HHX     $ $ & & &wr&cF |jdd}n#t$rd}YnwxYwt j|jdd|j}|<|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. rErHrBz 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 9==j99??AADD   DDD $ =2    z ,  ****  +++s -0 ??c.|dSrY)rr%s r$rzEditorWindow.open_module_events wr&c|jj}|jjdkr|s|}|dSddlm}||j|dS)NPyShellEditorWindowrZr)browser) rr __class____name__ridlelibr ModuleBrowserr)rr\rrs r$rz EditorWindow.open_module_browsersq7#'+@@@A''))Hw######di222wr&cFddlm}||jdS)Nr) pathbrowserrZ)rr  PathBrowserr)rr\r s r$rzEditorWindow.open_path_browsers/'''''' ***wr&cZddl}tjddg}||ddS)Nrz-cz,from turtledemo.__main__ import main; main()F)shellrZ) subprocessr executablePopen)rr\rcmds r$rzEditorWindow.open_turtle_demos@~=? E***wr&c|r|dkrn|jdd|z|jddd|jddd|dSdSdS)NrrAz%d.0rCrDrpz insert +1l)rLrRrQrScenter)rrs r$gotolinezEditorWindow.gotolines}  &1** I  x& 9 9 9 I u 5 5 5 I  eX| < < < KKMMMMM  **r&c~|rtj|rdStjtj|\}}tj|t vrdS|jdd}| dod|vS)NTrDz 1.0 lineendz#!python) rwrxr}splitextr7normcaserrLr startswith)rrbaseextrVs r$rzEditorWindow.ispythonsource%s 27==22 4G$$RW%5%5h%?%?@@ c 7  C M 1 14y}}UM22t$$9T)99r&cZ|jr#|j|d|_dSdSr$)runregister_maybe_terminaters r$ close_hookzEditorWindow.close_hook.s7 :  J 1 1$ 7 7 7DJJJ  r&c||_dSr$)r)rrs r$set_close_hookzEditorWindow.set_close_hook3s $r&c|jr|j|||j||dSr$)rfilename_changed_editrrupdate_windowlist_registryrrs r$rz!EditorWindow.filename_change_hook6sb : 3 J , ,T 2 2 2     ++D111 r&c|jrdS||jjr||_|jr(|j|j|jdSdS)N)filterafter)rrrrr*rinsertfilterafterrrs r$ _addcolorizerzEditorWindow._addcolorizer=s{ :  F   tw/ 0 0 /,,..DJ : K H & &dj & J J J J J K Kr&c|jsdS|j|j|jd|_dSr$)r removecolorsr removefilterrs r$ _rmcolorizerzEditorWindow._rmcolorizerFsHz  F !!! dj))) r&c||t|j|j|j|j|jdSdS)zUpdate the color themeN) r-r)r(r+rLrupdate_highlight_colorsr update_colorsrs r$rzEditorWindow.ResetColorizerMs  !!$),,,   (   5 5 7 7 7   (   + + - - - - - ) (r&_cb|d|||}|r#||jvr|d|dz|d||kr|d|n|d|dz||dS)NERRORz wordstart rAz+1c)rSr IDENTCHARSrRrT)rrLposchars r$colorize_syntax_errorz"EditorWindow.colorize_syntax_error\s Wc"""xx}}  ;DDO++ LL# "4c : : : 488C== MM(C ( ( ( ( MM(C%K 0 0 0  r&cztjdddd}|s d|jd<dStj|jd<dS) z&Update the cursor blink configuration.rGr(z cursor-blinkrlrJrrnN)rrrLrm)r cursorblinks r$rz EditorWindow.update_cursor_blinkgsW(VEEE  A)*DIo & & &*2)@DIo & & &r&c|j|j|j|jtj|jdd}||jd<|dS)z.Update the text widgets' font if it is changedNrGr(rj)r update_fontrrrrrLr)rnew_fonts r$ ResetFontzEditorWindow.ResetFontqsz   (   ) ) + + +   (   ) ) + + +#DIv~FF$ & r&cRtjx|j_}|D]\}}|jj|g|R|D]E}tj|}|r-|D]\}}|jj|g|RFdS)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;2K2M2MM %%mmoo 4 4NE7 "DI "5 37 3 3 3 3 3!>>@@ < >@@ . .M4]CCH .##H--- M* J JD%'M$q' "Q J JJBFq'M$q'*747+;+;A+>? J = G GK=-D**S//C{ 1HCq# G G99U##y00 NN5-@@EG#'>>%#A#A "&-77'=+EEE(5k(B8(L G$3GU$C$CE ,,U,FFF G G Gr&cR|jstjdddd|_dSdS)zCUpdate the indentwidth if changed and not using tabs in this windowrGrkz num-spacesrIrJN)rrrrrs r$rz#EditorWindow.set_notabs_indentwidthsA| >'1&(<7< > > >D    > >r&ctj}|jd}|t}||jkr||jdz||rQ||D]:}||d}| |d|;||jd<dS)z4Update the additional help entries on the Help menu.r r`rrN) rGetAllExtraHelpSourcesListrrrrrr_extra_help_callbackr)r help_listhelpmenuhelpmenu_lengthentryrs r$rz$EditorWindow.reset_help_menu_entriess799 =("..-- T6 6 6 OOT6:_ M M M  B  " " $ $ $" B B//a99$$58S$AAAA ( fr&c|ffd }|S)z9Return a callback that loads resource (file or web page).cx|dstj|}tjdddkrX tj|dS#t$r4}tj dt|j Yd}~dSd}~wwxYwtj |dS)N)wwwhttpr@rArr)rrwrxrrr{rrrrrPrLrr)helpfilerrs r$display_extra_helpz=EditorWindow._extra_help_callback..display_extra_helps&&77 67++H55|BQB5((<L*****<<<(/G #C<<<<<<<<<<<)))))sA%% B#/)BB#r[)rresourcerbs` r$rXz!EditorWindow._extra_help_callbacks,(0 * * * * * *"!r&cg}|j}|r]tj|r>t |dd5}|}dddn #1swxYwY|rQtj|dz}||vr|||d|g|D]B}d|vs'tj|dds |Cfd |D}d }|dt|}|r t |d dd5}| |dddn #1swxYwYnY#t$rL}t|jd d s,d|j_t!jdd|d|jYd}~nd}~wwxYw|jjD]} | j} | dt.t1|D]R\} } | } | | } | || dz| z| dSdS)z/Load and update the recent files list and menusutf_8r)r.errorsNr4rrqcg|]}|v| Sr[r[).0rx bad_pathss r$ z9EditorWindow.update_recent_files_list..s#EEEDt9/D/D4/D/D/Dr&1234567890ABCDEFGHIJKwrecentfiles_messageFTz IDLE Warningz)Cannot save Recent Files list to disk. z Select OK to continue.rr?)ryrerz)rrwrxrr readlinesabspathremoverAappendrO writelinesrrrrnr showwarningrLrrrrr enumeraterstrip#_EditorWindow__recent_file_callbackr)rnew_filerf_listr rf_list_filerxulcharsrf_fileerrinstancerDi file_namecallbackrjs @r$rz%EditorWindow.update_recent_files_listsL*  3 22 3i&y::: 3=I&0022 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3  (wx0047H7""x((( NN1h ' ' '  ' 'Dt||27>>$qt*#=#=|  &&&EEEEGEEE)!CLL.)  * *)S#*9>>>0AH&&w///000000000000000 * * *ty*?GG*48DI1*!9%(!9!9!9 $y **** *. . .H-D KK3    )' 2 2 . . 9%,,.. #::9EE  wqzC'7)'C)1+,!.... . . .sNAA#&A#.E/E# E/#E''E/*E'+E// G9AGGc|ffd }|S)Nc>j|dS)N)editFile)rr) fn_closurers r$open_recent_filez=EditorWindow.__recent_file_callback..open_recent_files GLL*L - - - - -r&r[)rrrs` r$__recent_file_callbackz#EditorWindow.__recent_file_callbacks*(1 . . . . . .r&cH|}|}|r|r|dz|ztz}n |r|}n|r|}nd}|p|p|}|s d|z}d|z}|j||j|dS)Nz - untitledz*%s*z*%s) short_title long_title _py_version get_savedrwm_title wm_iconname)rshortlongricons r$rzEditorWindow.saved_change_hooks  ""    T EMD(;6EE  EE  EEE%%~~ UNE4|jr|sh|jdkr|j|j|j|jSdS)Nr)rrrrJ deiconifylowerlift maybesavers r$rzEditorWindow.maybesaveYs 7 '>>## 8>>##X--H&&(((    7$$&& &  ' 'r&c |}t|dkr||S#t$rYdSwxYw)Ncancel)rrP_closeAttributeError)rreplys r$rzEditorWindow.closebs[ NN$$E5zzX%% L    DD s)packagez Failed to import extension: rM-r1r`rGrqrI_event)extfilesr importlib import_module __package__ ImportError TypeErrorrrrrErrrMrrrrLr) rrFfnamemodclsrFrvevent methodnames r$rzEditorWindow.load_extensions !!$--  5-cEk;OOO+ 5 5 5-e44 5    2D 9 9 9  c4  /55 3 # # 3 OOCL' 2 2 2c$ii #  E    ( ( (! E E#^^C55  !n++!+ABBJ!!n++ o,,!+CRCJ!o,,'(2 3 ++EINN673 +C+CDDD E E E Es&=A)%A%"A)$A%%A))Bc| |jj}|j}||_|D]\}}|r|j|g|RdS)z"Add events with keys to self.text.N)r/rArLrFrBr)rrFrLr\rGs r$rzEditorWindow.apply_bindingssg ?m3Gy %mmoo 0 0NE7 0u/w//// 0 0r&c | |jj}| |jj}|j}|j}|D]\}}||}|s|D]}|||\} } | dddk} | r | dd} t| \} } t|| } || fd}| r6| | t}| | | || || | | || dS)zFill in dropdown menus used by this window. Items whose name begins with '!' become checkbuttons. Other names indicate commands. None becomes a separator. Nr`!c0||dSr$rrs r$rez(EditorWindow.fill_menus..commands++I66666r&)ryrzrerLvariable)ryrzrerL) r/rMrArrLrrrrO get_var_obj BooleanVaradd_checkbuttonr)rrMrFrrLmname entrylistrDr\ryr checkbuttonrzrLrevars r$rzEditorWindow.fill_menuss  }-H ?m3G=y ( B B E9<<&&D " B B=&&((((',$E9#(!9#3K"* %abb '.u~~$Iu"1'9"E"EK%)Y7777"B"..y*EE,,5I$+%(-****((u 185@)BBBB% B  B Br&cz||}|r|}|St|r$)rr NameError)rrFrvalues r$getvarzEditorWindow.getvars;t$$  "GGIIELD// !r&c~|||}|r||dSt|r$)rrr)rrFrvartypers r$setvarzEditorWindow.setvars>tW--  " GGENNNNND// !r&cv|j|}|s|r||jx|j|<}|S)z:Return a tkinter variable instance for the event. )rrrL)rrrrs r$rzEditorWindow.get_var_objsN##I.. Dw D181C1C CD i (3 r&c|jr7|jd|pd|j|vSdS)NTODOSTRINGr`)rrL tag_prevrange tag_names)r text_indexs r$is_char_in_stringzEditorWindow.is_char_in_stringsL : 9**6:>>?ty22:>>> ?1r&c |jd}|jd}||fS#t$rYdSwxYw)NrErHNNr)rrYrZs r$get_selection_indicesz"EditorWindow.get_selection_indicessY IOOK00E9??:..D$;    :: s7: AAcH|jdpt}t|S)Ntabs)rLTK_TABWIDTH_DEFAULTrI)rcurrents r$get_tk_tabwidthzEditorWindow.get_tk_tabwidths )F#:':7||r&c |j}||krE|jdd|dd|jd|z}||dSdS)Nrjr/z -displayofn)r)rLrr+rmaster configure)r newtabwidthrLpixelss r$set_tk_tabwidthzEditorWindow.set_tk_tabwidth"sry    ! ![ 0 0W\\&)T&\". "% "355F NNN ' ' ' ' ' 1 0r&c|rD|rB|}d|cxkrdkr nn||_|j|jkrd|_||jdS)NrCrF) guess_indentrrrr)rrguessrs r$rz#EditorWindow.set_indentation_params-sv  % %!!##AA{{{{{{{{{#$ 4=00$  T]+++++r&c|j}|\}}|r0|r.||||d|dS|dd}|dkrC|dddr|dn|dS|dd vr|ddS|j}t| |}|d ksJ|d z |j z|j z}d } |dd}| d z} t| |}||ks |dd vrnC| |d | zd||kr"| dd||z z|j |dS)NrArZr=rBrIrDz insert-1crq rr`Tz insert-%dcr?)rLrrrRrrLbellrrO expandtabsrrrArr) rr\rLrYrZcharsrhavewant ncharsdeleteds r$rz"EditorWindow.smart_backspace_event6sy0022 t  T  KKt $ $ $ MM(E * * *7+X66 B;;||Hc511  K(((( 7 "IU " " KK $ $ $7=5##H--..axxxxd..$2BB  #2#JE)A-Mu''1122Dt||uRy55    L=0(;;; $;; KK#"53 5 5 5 wr&cj|j}|\}}| |r||rzt|t|kr.|j||S||||d|| dd}t||j \}}|t|kr| ||jzn_|jrd}n9t||j }|j} d| || zz z}|d||j|d |dS#|wxYw)NrAr=r@r?rZ)rLrr index2linerrrrrRrget_line_indentrrO reindent_torrr rArrT) rr\rLrYrZprefixraw effectivepadrs r$rzEditorWindow.smart_indent_eventasy0022 t  # / /e$$ 4(8(888<;;EBB(  " " " "' E4((( h...XX0(;;F,VT]CCNCc&kk!!  T-=!=>>>><4CC #F$5$5dm$D$D E EI(AY]!23C Hc4+FGGG HHX     " " " " "D " " " "s=FC?FF2c4 |j}|\}}| |r.|r,||||d||dd}dt |}}||kr||dvr|dz }||kr ||dv||krH|dd|j | d| dS|d|}d}|r%|d dvr|dd }|dz }|r |d dv|r|d |zd|ddvr,|d|ddv,|dd|jt| d} tj|j|j} |js|jD]} t'| | z d} t)| d z} || d}| || || }|| dkrn| |pdnc|d d}|r |d} nd } || d}| || d| }|tjkr|tjkrn|tjkr|d||jn|tjkr(|| nz|tj!kr]| "dkr|d||jn5|| #n Jd| | d| dS| $}|d||j| %r|&|n+|r)| 'r|(| | d| dS#| d| wxYw)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. rAr=rr r`r4rZNrqzinsert - %d charsrconsolerDzbogus continuation type ))rLrrrrRrrOrArrTrrrrParserrrrrrrset_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\rLrYrZrVrrindentlnorcontextstartat startatindexrawtextbodrrBs r$rz%EditorWindow.newline_and_indent_eventsy0022 t e # / / E4((( h...88.99Dc$iiqAa%%DGu,,Qa%%DGu,,Avv . 7999j HHX     " " " " "k"1"XFA 48u,,CRCyQ 48u,, ? /!3X>>>((8$$-- H%%%((8$$-- KK$(C D D DTZZ1122Ct/??A( #5G!#-33G#'==4#7L"hh|X>>GJJw'''11 ;;LIIKKC'Q,,+7""""&&y(;;)#$Q4LL#(L((<:: 7### ''))AGN""333'555KK&$2MNNNN'+++ $$Q%=%=%?%?@@@@'--- ..00144 Hf$($?AAAA(()C)C)E)EFFFF>>>>>>> HHX     " " " " "--//F KK&$*E F F F  "" 2''.... 2A--// 2**5111 HHX     " " " " " HHX     " " " "sBS,>LS,;BS,,+Tc||jfd}|S)Nc$||d|zzS)Nz+%dcr[)offset _startindex_iciss r$innerz6EditorWindow._build_char_in_string_func..inners5v677 7r&)r)r startindexr:s r$rz'EditorWindow._build_char_in_string_funcs&&0. 8 8 8 8 r&c`|jr#t||j\}}d|zd|zzSd|zS)Nr@r?)rdivmodr)rrntabsnspacess r$ _make_blankszEditorWindow._make_blanks s= < #At}55NE7%<#-/ /7Nr&c |j}||dddr|dd|r/|d|||j|dS)Nr=z!=rA)rLrrLrrAr@rr)rrgrLs r$rzEditorWindow.reindent_tosy  <<*D( ; ; 6 KK*H 5 5 5  5 KK$"3"3F";";3 5 5 5 r&ct|j\}}|r3|r1t||j\}}t||j\}}ndx}}||z SNr)IndentSearcherrLrprr)ropenerindentedr indentsmall indentlarges r$rzEditorWindow.guess_indent%st)$)4488::  *h *.vt}EE C.xGG C() )K+[((r&c|jdS|jjr|jd}n|jd}|dd|ddS)NShowHiderrrtz Line Numbers)rDrry)ris_shown hide_sidebar show_sidebarr)rr\ menu_labels r$rz&EditorWindow.toggle_line_numbers_event.s   $ F   %   * * , , ,JJ   * * , , ,J I](2%A%A%A  C C C C Cr&)NNNNr$)rAr)T)r __module__ __qualname__idlelib.percolatorr)idlelib.colorizerr*r+ idlelib.undor,idlelib.iomenur-r.rr/idlelib.statusbarr0idlelib.autocompleter1idlelib.autoexpandr2idlelib.calltipr3idlelib.codecontextr4idlelib.sidebarr5idlelib.formatr6r7r8r9idlelib.parenmatchr:idlelib.zoomheightr;rgetfilesystemencodingfilesystemencodingrvrrrr"rrrrrrerrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr!rr)r-rstring ascii_lettersdigitsr5r8rr>rJrTrrrXrrwrrrrrrrrrrrrrrrrrrrDrrrrrrrrrrrrrrrrr@rrrr[r&r$r(r(3s------>>>>>>>>******22222222      000000111111------''''''//////++++++MMMMMMMMMMMM------------2244H!`I`I`I`ID  4 4 4 )))V777 ;;;; &J#'#'#'J ) ) )111 111    E!!!J ,K   '''444         (   0     ::: %%%KKK . . .% 5;J   AAA" < < <&G&G&GP>>>)))" " " ",.,.,.,.\   ###$%%%"""FFF&&&"""",,,,*** '''(((( &&&888 9 HEEE80000$B$B$B$BL"""""""$ (((,,,,)))V!#!#!#Fq#q#q#p ))) C C C C C Cr&r(c:tt|Sr$)rIr)rs r$rr<s uU||  r&z[ \t]*ct|}|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_rerrprOgroupr )rVrrs r$rrAsH d##A 5577C ,,X6677 77r&cFeZdZdZdZdZejejdfdZ dZ dS)rDz4Manage initial indent guess, returned by run method.cL||_dx|_|_dx|_|_dSrC)rLrfinished blkopenline indentedline)rrLs r$r"zIndentSearcher.__init__Ns- !""/334,,,r&c|jrdS|jdzx}|_t|dz}|j|ddrdS|j||dzS)NrBr`rz>=rpz lineend+1c)rjrrrLrLr)rrrs r$readlinezIndentSearcher.readlineSsn = 2VaZDFAww~ 9  T4 / / 2y}}T4-#7888r&)classdefforifrtrywhilewithc ||jrdS||kr ||vr ||_dS||kr|jr||_d|_dSdSdS)Nr`)rjrkrl) rrKtokenstartrprVINDENTNAMEOPENERSs r$ tokeneaterzIndentSearcher.tokeneater\sb =  D T\\ew..#D    V^^ 0^ $D DMMM^^^r&c tj|j}|D] }|j| n#tjt f$rYnwxYw|j|jfS)ztReturn 2 lines containing block opener and and indent. Either the indent line or both may be None. )tokenizegenerate_tokensrnr| TokenError SyntaxErrorrkrl)rtokensrws r$rpzIndentSearcher.runisz  -dm<r^rWr_rBrz-[a-z]\bcN|Sr$)rgupperrs r$r]z!get_accelerator..saggiioo&7&7r&z\b\w+\bct||Sr$)keynamesrrgrs r$r]z!get_accelerator..s$X\\!''))QWWYY%G%Gr&zKey-Cancelz Ctrl-BreakzControl-zCtrl-r+z>61616r A {77;;A zGGKKA vr1A xq))A z7A&&A sCA tS!A sBA sBA Hr&c|j}|ddd|ddd|ddddS) Ntcl_wordBreakAfterza brr tcl_wordcharsz\wtcl_nonwordcharsz\W)r+r)rr+s r$ fixwordbreaksrsU BGG %+++GGE?E***GGE%u-----r&cZ|}t|tjddrtjd}nd}tj|dt ||}|j}d|d<tdD].}|dd|zt|zdz/dS) Nr`)rr rPrAz r4) rrargvr setupAppr(rLrNrArP)rrrrlrLrs r$_editor_windowrs D$ x|8A; OD$ TH 5 5 5D 9DDN 2YY66 Hd1fs1vvo4555566r&__main__)rGzidlelib.idle_test.test_editorrCF) verbosityexit)rp): importlib.abcrimportlib.utilrwr{rrarr~rrtkinter tkinter.fontr tkinter.ttkrrridlelib.configrrr r r r r idlelib.multicallrrrrr idlelib.treer idlelib.utilrrrpython_versionrrr%r(rcompilerfrrDrrrOrrrunittestrGidlelib.idle_test.htestrpr[r&r$rsB  !!!!!! ###### ......$$$$$$&&&&&&//111  !   FCFCFCFCFCFCFCFCR0"*Y''888*3*3*3*3*3*3*3*3^$    ( ( ( V... 6 6 6$ zD (AEBBBB++++++C r&