B y®d›ú‹Kã@sèddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Tddl m Z ddlmZddlmZddlmZddlmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lm Z dd lm!Z!ddlm"Z"ddlm#Z#ddl$m%Z%ddlm&Z&dZ'de (¡Z)ejdkZ*dd„Z+Gdd„de,ƒZ-dd„Z.e /d¡Z0dd„Z1Gdd„de,ƒZ2d d!„Z3d"d#d$d%œZ4d&d'„Z5d(d)„Z6d*d+„Z7e8d,krädd-l9m:Z:e:d.d/d0d1dd2l;md;d<„Z?dâd=d>„Z@dãd?d@„ZAdädAdB„ZBdådCdD„ZCdEdF„ZDdGdH„ZEdIdJ„ZFdædKdL„ZGdçdMdN„ZHdOdP„ZIdQdR„ZJdSdT„ZKdUdV„ZLdWdX„ZMdYdZ„ZNd[d\„ZOd]d^„ZPd_d`„ZQdadb„ZRdcdd„ZSdèdedf„ZTdédgdh„ZUdêdidj„ZVdkdl„ZWdmdn„ZXdodp„ZYdqdr„ZZdsdt„Z[dudv„Z\dwdx„Z]dydz„Z^e_j`e_jad{Zbd|d}„Zcd~d„Zdd€d„Zed‚dƒ„Zfd„d…„Zgd†d‡„Zhdˆd‰„ZidŠd‹„ZjdëdŒd„ZkdŽd„Zldd‘„Zmd’d“„Znd”d•„Zod–d—„Zpd˜d™„Zqdšd›„Zrdœd„ZsdìdŸd „Ztd¡d¢„Zudíd£d¤„Zvd¥d¦„Zwd§d¨„Zxd©dª„Zyd«d¬„Zzd­d®„Z{d¯d°„Z|d±d²„Z}d³d´„Z~dµd¶„Zd·d¸iZ€d¹dº„Zdîd»d¼„Z‚dïd½d¾„Zƒd¿dÀ„Z„dðdÁd„Z…dñdÃdÄ„Z†dÅdÆ„Z‡dÇdÈ„ZˆdÉdÊ„Z‰dËdÌ„ZŠdòdÍd΄Z‹dÏdЄZŒdÑdÒ„ZdÓdÔ„ZŽdÕdÖ„Zd×dØ„ZdÙdÚ„Z‘dÛdÜ„Z’dódÝdÞ„Z“dS)ôÚ EditorWindowr)Ú Percolator)ÚColorDelegatorÚ color_config)Ú UndoDelegator)Ú IOBindingÚencoding)Úmainmenu)ÚMultiStatusBar)Ú AutoComplete)Ú AutoExpand)ÚCalltip)Ú CodeContext)Ú LineNumbers)ÚFormatParagraphÚ FormatRegionÚIndentsÚRstrip)Ú ParenMatch)ÚSqueezer)Ú ZoomHeightNTc CsH ddlm}tjdkrtj tjdd¡}tj   d¡rvddtj dd…}tj  d ¡r^d }qÌd }tj ||dd¡}nVtj dd…d kr²tj tjdd t ƒ¡} tj | ¡rÌ| }ntj dkrÌtj tjd¡}tj |¡}tj |¡r|t_tj dkrdtjt_ndtj dd…t_||_|p*|j}||_t|ƒ|_tj||jd|_} |rl|j|_|j|j_ni|_i|j_tjotj tjd¡|_d|_t| ƒ|_ } t!| dd|_"} tj#ddddd} dddd| d tj#ddd!ddd"œ}t$t%ƒ| f|Ž|_&}|j&|j_'| (¡| )¡|j *d#|j+¡|j ,d$|j-¡t. /¡rt| ,d$|j-¡| ,d%|j0¡| ,d&|j0¡n| ,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<t f|jdd¡|d[<|jcdMdMtddY| g¡| h¡tj#dd\d]d^d}| |_id_|_j|jj|_k| l¡tmtd`ƒsð|j&dat_n| o¡db|_p| q|¡|_r}| s¡|_t}| u|¡|jv|_v|jw|_w| x|jy¡| z|¡|_{}| ||j}¡dc|_~| dc¡d|_€d|_d|_‚|rÚtj ƒ|¡rÊtj  |¡sÊ| „|¡rÚdd|_~| …|¡}| |¡n| †|¡dd|_~| ‡¡| y¡| ˆ¡| ‰¡|jŠ ‹de¡}|rP| Œdf¡}|dkr$dg}|dkr>| ¡|dM}||_Žt |j¡t‘j’|_’t“j”|_”t‘j•|_•| –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­¡|j®rè| ¯|¡|_| ,d|jj°¡n| ±d€dd‚¡|j² r6| ³|¡|_‚tj#dddƒd^d r&| ´¡| ,d„|j´¡n| ±d€d…d‚¡dS)†Nr)Ú ScriptBindingZDocz index.htmlZlinuxz python-docs-z%s.%s.%séz/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.lstÚÚvbar)ÚnameÚmainr!ÚwidthÚint)ÚtypeÚtextéZnoneZ wordprocessorÚheight)r=ÚpadxÚwrapZhighlightthicknessr?ZtabstylerDZWM_DELETE_WINDOWz<>zz<2>z<3>z z z z z<>z<>z <>z<>z<>z<>z<>z<>z<>z<>cSsdS)NÚbreakr)ÚeventrrrÚ©óz'EditorWindow.__init__..z<>z<>z<>z<>z<>z<>z <>z <>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>zzéz<>z<>z<>z<>z<>z<>z<>z<>)ÚsideÚfillÚexpand)ZweightÚcommand)ÚrowÚcolumnZstickyZyscrollcommandÚfontÚIndentz use-spacesÚboolrÚblink_off_timeÚ insertofftime)é2iôi@KLFTrÚendéÿÿÿÿz<>z z<>zzzz<>zz<>zz<>zzz<>z<>z<>z<>z<>z<>z<>z <>z<>z<>z<>Úoptionsz *Code ContextÚdisabledzline-numbers-defaultz<>z *Line Numbers)µZidlelib.runscriptr6r!Úhelp_urlÚosÚpathÚjoinrÚ base_prefixÚplatformÚcountrÚisdirr ÚisfileÚnormpathÚflistÚrootÚMenuÚmenubarrZListedToplevelÚtopÚvarsÚ tkinter_varsZ inversedictÚ instance_dictrZuserdirÚrecent_files_pathÚprompt_last_lineÚFrameÚ text_framerr<Ú GetOptionr ZTextrBZfocused_widgetÚ createmenubarÚapply_bindingsZprotocolÚcloseÚbindÚ close_eventr ZisAquaTkÚright_menu_eventrÚhandle_winconfigÚcutÚcopyÚpasteÚcenter_insert_eventÚ help_dialogÚ python_docsÚ about_dialogÚ config_dialogÚopen_module_eventÚ select_allÚremove_selectionÚ find_eventÚfind_again_eventÚfind_in_files_eventÚfind_selection_eventÚ replace_eventÚgoto_line_eventÚsmart_backspace_eventÚnewline_and_indent_eventÚsmart_indent_eventr0ÚfregionÚindent_region_eventZdedent_region_eventZcomment_region_eventZuncomment_region_eventZtabify_region_eventZuntabify_region_eventr1Ztoggle_tabs_eventZchange_indentwidth_eventÚmove_at_edge_if_selectionÚ del_word_leftÚdel_word_rightÚ home_callbackÚdictÚ new_callbackZclose_all_callbackÚopen_module_browserÚopen_path_browserÚopen_turtle_demoÚset_status_barÚpackZLEFTZBOTHZ rowconfigureZcolumnconfigureÚ handle_yviewZgridZNSEWÚsetÚGetFontZ focus_setÚ set_widthÚusetabsÚtabwidthÚ indentwidthÚset_notabs_indentwidthÚhasattrrUÚupdate_cursor_blinkÚnum_context_linesr"Úperr%ÚundoÚ insertfilterÚundo_block_startÚundo_block_stopZset_saved_change_hookÚsaved_change_hookr&ÚioZset_filename_change_hookÚfilename_change_hookZ good_loadÚset_indentation_paramsÚcolorÚ code_contextÚ line_numbersÚexistsÚloadfileÚispythonsourceZ set_filenameÚResetColorizerÚupdate_recent_files_listÚload_extensionsÚmenudictÚgetÚindexÚ add_separatorÚ wmenu_endZregister_callbackÚpostwindowsmenuÚ tkMessageBoxZaskyesnoÚtkSimpleDialogZ askintegerÚ showerrorÚ event_addr*Zautocomplete_eventZtry_open_completions_eventZforce_open_completions_eventr+Zexpand_word_eventr/Zformat_paragraph_eventr3Zflash_paren_eventZparen_closed_eventZcheck_module_eventZrun_module_eventZrun_custom_eventr2Z do_rstripr,ÚctipZtry_open_calltip_eventZrefresh_calltip_eventZforce_open_calltip_eventr5Zzoom_height_eventÚallow_code_contextr-Ztoggle_code_context_eventÚupdate_menu_stateÚallow_line_numbersr.Útoggle_line_numbers_event)ÚselfrfÚfilenameÚkeyrgr6ZdochomeZpyverZbasepathZchmfilerjrqr<r?Z text_optionsrBrŽÚindentsZ usespacesr¦r§r¬Ú is_py_srcr:rXZ autocompleteZ parenmatchZ scriptbindingrÂrrrÚ__init__Hs¢                                                     zEditorWindow.__init__cCs | ¡dS)N)rž)rÇrHrrrry`szEditorWindow.handle_winconfigcCs^|j}tt|jj| d¡| d¡gƒƒ}| ¡d|}t|| d¡d d¡}|||_ dS)NZborderrEr9rR)rRÚ0) rBÚsumÚmapÚtkZgetintZcgetZ winfo_widthrÚmeasurer?)rÇrBZ inner_paddingZ pixel_widthZzero_char_widthrrrržcs zEditorWindow.set_widthcCs|j ¡\}}|j |¡dS)NrG)r¬ZdefaultfilenamerfÚnew)rÇrHÚdirnameÚbasenamerrrr•ps zEditorWindow.new_callbackcCsÄ|jd@dkr|jdkrdS|j d¡rd|j ddd¡rd|j ddd¡rdt|j d¡ d¡d ƒ}n:|j dd¡}x*tt |ƒƒD]}||d kr€Pq€Wt |ƒ}t|j d ¡ d¡d ƒ}||krÄd}d t |ƒd }|jd @dkrô|j  ddd¡n²|j d¡s|j  dd ¡n@|j |j d¡d|j d ¡¡rD|j  dd¡n|j  dd¡|j |¡}|j d¡}|j |d|¡r†||}}|j  ddd¡|j  d||¡|j  d |¡|j d ¡dS)NérZHomeZiomarkz<=zinsert lineendzinsert linestartÚ.rK)ú ú Úinsertzinsert linestart+ÚcÚselz1.0rXz sel.firstZ my_anchorúrG)ÚstateZkeysymrBrºÚcomparer@Úsplitr¹ÚrangeÚlenÚstrÚ tag_removeÚmark_setÚtag_addÚsee)rÇrHZinsertptÚlineZlineatÚdestÚfirstÚlastrrrr“us@      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)NrKZgrey75)rDZ borderwidthZ backgroundrZ _padding1z )rLrQzCol: ?rèzLn: ?)rLrMz<>z z)r)rjÚ status_barrprraÚ set_labelZRIGHTršZBOTTOMÚXrBrvÚset_line_and_columnrÁZ after_idle)rÇÚseprrrr™ s zEditorWindow.set_status_barcCs>|j t¡ d¡\}}|j dd|¡|j dd|¡dS)NrÖrQzCol: %srèzLn: %s)rBrºZINSERTràrìrí)rÇrHrèrQrrrrï°sz EditorWindow.set_line_and_column)ÚfileZ_File)ÚeditZ_Edit)ÚformatZF_ormat)ÚrunZ_Run)rZZ_Options)rZ_Window)rZ_HelpcCsÒ|j}i|_}xD|jD]:\}}t|ƒ\}}t||dd||<}|j|||dqWt ¡r‚t|ddd|d<}|jd|d| ¡t|jdd|_ |jd j d d d|j d |jd   t ¡|_ | ¡dS)Nr)r=Útearoff)Úlabelr:Ú underlineZappleZ applicationZIDLE)rör:)rõrñr7z Recent Files)rör÷r:r)rir¸Ú menu_specsÚprepstrrhZ add_cascader Z isCarbonTkÚ fill_menusÚrecent_files_menuZinsert_cascaderºÚENDÚbase_helpmenu_lengthÚreset_help_menu_entries)rÇZmbarr¸r=rör÷r:rrrrsÀs"   zEditorWindow.createmenubarcCsJ|jd}| d¡}|dkr d}||jkr<| |jd|¡t |¡dS)NrrXrYrK)r¸rºr¼ÚdeleterZadd_windows_to_menu)rÇr:rXrrrr½Ôs   zEditorWindow.postwindowsmenucCs|j|}|j||ddS)N)rö)r¸Ú entryconfig)rÇr:rºröÚmenuitemrrrÚupdate_menu_labelÞs zEditorWindow.update_menu_labelcCs|j|}|j||ddS)N)rÞ)r¸r)rÇr:rºrÞrrrrrÄãs zEditorWindow.update_menu_statecGsR|dkr>NcCsjt|jdd}xP|jD]F}|d|d}}|dk rT|j|fdd„}|j||dq| ¡qW||_dS)Nr)rõrKcSs| |¡dS)N)Úevent_generate)rBrrrrrO"sz(EditorWindow.make_rmenu..command)rörO)rhrBrÚ add_commandr»r)rÇrrrörrOrrrrs  zEditorWindow.make_rmenucCs| ¡S)N)Úrmenu_check_copy)rÇrrrÚrmenu_check_cut)szEditorWindow.rmenu_check_cutcCs6y|j d¡}Wntk r$dSX|r.dSdSdS)Nz sel.firstr[Únormal)rBrºr )rÇZindxrrrr,s zEditorWindow.rmenu_check_copycCs6y|jj d|jd¡Wntk r,dSXdSdS)Nztk::GetSelectionZ CLIPBOARDr[r)rBrÐÚcallr )rÇrrrÚrmenu_check_paste4s zEditorWindow.rmenu_check_pastecCst |j¡dS)NrG)r Z AboutDialogrj)rÇrHrrrr€<s zEditorWindow.about_dialogcCst |jd¡dS)NZSettingsrG)rZ ConfigDialogrj)rÇrHrrrrBszEditorWindow.config_dialogcCs"|jr|j}n|j}t |¡dS)NrG)rgrjrZ show_idlehelp)rÇrHÚparentrrrr~Hs  zEditorWindow.help_dialogc Csntjdd…dkr^yt |j¡Wqjtk rZ}ztjdt|ƒ|j dWdd}~XYqjXn t   |j¡dS)Nr7r8zDocument Start Failure)ÚtitleÚmessagerrG) rrar]Ú startfiler\ÚOSErrorr¾rÀrãrBÚ webbrowserÚopen)rÇrHÚwhyrrrrRs$ zEditorWindow.python_docscCs|j d¡dS)Nz<>rG)rBr)rÇrHrrrrz]s zEditorWindow.cutcCs |j d¡sdS|j d¡dS)NrÛz<>rG)rBZ tag_rangesr)rÇrHrrrr{as  zEditorWindow.copycCs|j d¡|j d¡dS)Nz <>rÙrG)rBrrç)rÇrHrrrr|hs  zEditorWindow.pastecCs.|j ddd¡|j dd¡|j d¡dS)NrÛz1.0zend-1crÙrG)rBrærårç)rÇrHrrrrƒms zEditorWindow.select_allcCs |j ddd¡|j d¡dS)NrÛz1.0rXrÙrG)rBrärç)rÇrHrrrr„ss zEditorWindow.remove_selectioncs*|jj‰|jj‰d‰‡‡‡‡fdd„}|S)N)z sel.first+1cz sel.last-1ccsB|jd@dkr>yˆdƒˆdˆˆƒWntk r<YnXdS)NrCrz sel.firstrÙ)rÞr )rH)Ú edge_indexÚ edges_tableÚself_text_indexÚself_text_mark_setrrÚ move_at_edgeƒs z.move_at_edge)rBrºrå)rÇr$r(r)r$r%r&r'rrxs z&EditorWindow.move_at_edge_if_selectioncCs|j d¡dS)Nz rG)rBr)rÇrHrrrr‘Œs zEditorWindow.del_word_leftcCs|j d¡dS)NzrG)rBr)rÇrHrrrr’s zEditorWindow.del_word_rightcCst |j¡dS)NrG)rÚfindrB)rÇrHrrrr…”s zEditorWindow.find_eventcCst |j¡dS)NrG)rZ find_againrB)rÇrHrrrr†˜s zEditorWindow.find_again_eventcCst |j¡dS)NrG)rZfind_selectionrB)rÇrHrrrrˆœs z!EditorWindow.find_selection_eventcCst |j|j|j¡dS)NrG)rrBr¬rf)rÇrHrrrr‡ sz EditorWindow.find_in_files_eventcCst |j¡dS)NrG)rrB)rÇrHrrrr‰¤s zEditorWindow.replace_eventcCsT|j}t |dd¡j}|dk rP| ddd¡| d|›d¡| d¡| ¡dS) Nz Go To Linez/Enter a positive integer ('big' = end of file):rÛz1.0rXrÙz.0rG)rBr ZGotoÚresulträrårçrï)rÇrHrBÚlinenorrrrЍs zEditorWindow.goto_line_eventcCspy|j dd¡ ¡}Wntk r.d}YnXt |jdd|¡j}|dk rl|jr`|j |¡n |j   |¡|S)Nz sel.firstzsel.lastr;z Open ModulezAEnter the name of a Python module to search on sys.path and open:) rBr¹Ústripr r Z ModuleNamer*rfr"r¬r³)rÇr=Ú file_pathrrrÚ open_module¶s  zEditorWindow.open_modulecCs | ¡dS)NrG)r.)rÇrHrrrr‚ÎszEditorWindow.open_module_eventcCsJ|jj}|jjdkr|s,| ¡}|dkr,dSddlm}| |j|¡dS)NZPyShellEditorWindowrGr)Úbrowser) r¬rÈÚ __class__Ú__name__r.Úidlelibr/Z ModuleBrowserrg)rÇrHrÈr/rrrr–Òs  z EditorWindow.open_module_browsercCsddlm}| |j¡dS)Nr)Ú pathbrowserrG)r2r3Z PathBrowserrg)rÇrHr3rrrr—Ýs  zEditorWindow.open_path_browsercCs&ddl}tjddg}|j|dddS)Nrz-cz,from turtledemo.__main__ import main; main()F)ÚshellrG)Ú subprocessrÚ executableÚPopen)rÇrHr5Úcmdrrrr˜âs zEditorWindow.open_turtle_democCsN|dk rJ|dkrJ|j dd|¡|j ddd¡|j ddd¡| ¡dS)NrrÙz%d.0rÛz1.0rXz insert +1l)rBråräræÚcenter)rÇr+rrrÚgotolineës zEditorWindow.gotolinecCs`|rtj |¡rdStj tj |¡¡\}}tj |¡dkr@dS|j dd¡}| d¡o^d|kS)NT)z.pyz.pywz1.0z 1.0 lineendz#!Zpython) r]r^rcÚsplitextrÔÚnormcaserBr¹Ú startswith)rÇrÈÚbaseZextrèrrrr´òszEditorWindow.ispythonsourcecCs|jr|j |¡d|_dS)N)rfZunregister_maybe_terminate)rÇrrrÚ close_hookûs zEditorWindow.close_hookcCs ||_dS)N)r?)rÇr?rrrÚset_close_hookszEditorWindow.set_close_hookcCs2|jr|j |¡| ¡|j |¡| ¡dS)N)rfZfilename_changed_editr«rjZupdate_windowlist_registryrµ)rÇrrrr­s   z!EditorWindow.filename_change_hookcCsV|jr dS| |jj¡r"| ¡|_|jrR|j |j¡|j |j¡|j |j¡dS)N) r¯r´r¬rÈr#r¦Ú removefilterr§r¨)rÇrrrÚ _addcolorizer s zEditorWindow._addcolorizercCs,|js dS|j ¡|j |j¡d|_dS)N)r¯Z removecolorsr¦rA)rÇrrrÚ _rmcolorizers  zEditorWindow._rmcolorizercCsH| ¡| ¡t |j¡|jdk r0|j ¡|jdk rD|j ¡dS)N) rCrBr!r$rBr°Zupdate_highlight_colorsr±Z update_colors)rÇrrrrµs    zEditorWindow.ResetColorizerÚ_cCsp| d|¡| |¡}|r6||jkr6| d|d|¡d| |¡krR| d|¡n| d|d¡| |¡dS)NZERRORz wordstartÚ rÙz+1c)rær¹Ú IDENTCHARSrårç)rÇrBÚposÚcharrrrÚcolorize_syntax_error+s  z"EditorWindow.colorize_syntax_errorcCs2tjddddd}|s"d|jd<n tj|jd<dS)Nr>r!z cursor-blinkrT)rArrV)rrrrBrU)rÇZ cursorblinkrrrr¤6s  z EditorWindow.update_cursor_blinkcCsN|jdk r|j ¡|jdk r(|j ¡t |jdd¡}||jd<| ¡dS)Nr>r!rR)r°Z update_fontr±rrrgrBrž)rÇZnew_fontrrrÚ ResetFont@s     zEditorWindow.ResetFontcCs„t ¡|j_}x&| ¡D]\}}|jj|f|žŽqWxF| ¡D]:}t |¡}|rBx&| ¡D]\}}|jj|f|žŽq^WqBWdS)N) rÚGetCurrentKeySetr(Údefault_keydefsÚitemsrBZ event_deleteÚget_standard_extension_namesÚGetExtensionBindings)rÇÚkeydefsrHÚkeylistÚ extensionNameÚxkeydefsrrrÚRemoveKeybindingsQs zEditorWindow.RemoveKeybindingsc CsVt ¡|j_}| ¡x(| ¡D]}t |¡}|r"| |¡q"Wi}xR|jjD]F}i||d<x4|dD](}|rj|d||dt|dƒd<qjWqPWx¶|j D]¬}|j |}|  t ¡}|dkrÄq¢|d7}x€t d|ƒD]r} |  | ¡dkrØ| | d¡} | rØ| | d¡} d} ||kr.| ||kr.||| } | rØt|| ƒ} |j| | dqØWq¢WdS)NrrKrOÚ acceleratorrör;)rU)rrKr(rLrtrNrOÚmenudefsrùr¸rºrürárAZ entrycgetÚget_acceleratorr) rÇrPrRrSZ menuEventDictr:rZ menubarItemrXrºZaccelZitemNamerHrrrÚApplyKeybindings]s<  (        zEditorWindow.ApplyKeybindingscCs|jstjddddd|_dS)Nr>rSz num-spacesr@)rA)rŸrrrr¡)rÇrrrr¢s z#EditorWindow.set_notabs_indentwidthcCs€t ¡}|jd}| t¡}||jkr8| |jd|¡|rr| ¡x,|D]$}| |d¡}|j |d|dqJW||jd<dS)NrrKr)rörO) rZGetAllExtraHelpSourcesListr¸rºrürýrÿr»Ú"_EditorWindow__extra_help_callbackr)rÇZ help_listZhelpmenuZhelpmenu_lengthÚentryr8rrrrþˆs    z$EditorWindow.reset_help_menu_entriescs|f‡fdd„ }|S)Nc s€| d¡stj |¡}tjdd…dkrryt |¡Wq|tk rn}ztj dt |ƒˆj dWdd}~XYq|Xn t   |¡dS)N)ZwwwZhttpr7r8zDocument Start Failure)rrr)r=r]r^rerrarr r¾rÀrãrBr!r")Úhelpfiler#)rÇrrÚdisplay_extra_help›s  $z>EditorWindow.__extra_help_callback..display_extra_helpr)rÇr[r\r)rÇrZ__extra_help_callback™s z"EditorWindow.__extra_help_callbackc sÆg}|j}|r>tj |¡r>t|dddd}| ¡}WdQRX|rptj |¡d}||krd| |¡| d|¡g‰x2|D]*}d|ksštj |dd…¡szˆ  |¡qzW‡fd d „|Dƒ}d }|dt |ƒ…}|rVy*t|d ddd}|  |¡WdQRXWnVt k rT}z6t |jd dƒsDd|j_tjdd|›d|jdWdd}~XYnXxj|jjD]^} | j} |  dt¡xDt|ƒD]8\} } |  ¡} |  | ¡} | j|| d| | ddq€Wq`WdS)NÚrÚutf_8r)r'ÚerrorsrErúrYcsg|]}|ˆkr|‘qSrr)Ú.0r^)Ú bad_pathsrrú »sz9EditorWindow.update_recent_files_list..Z1234567890ABCDEFGHIJKÚwÚrecentfiles_messageFTz IDLE Warningz)Cannot save Recent Files list to disk. z Select OK to continue.)rrrr×)rörOr÷)rnr]r^r²r"Ú readlinesÚabspathÚremoverÙÚappendrâÚ writelinesr rrgrer¾Ú showwarningrBrjrmrûrÿrüÚ enumerateÚrstripÚ#_EditorWindow__recent_file_callbackr)rÇÚnew_fileZrf_listr-Z rf_list_filer^ZulcharsZrf_fileÚerrÚinstancer:ÚiÚ file_nameÚcallbackr)rbrr¶¨sL        z%EditorWindow.update_recent_files_listcs|f‡fdd„ }|S)Ncsˆjj|ddS)N)ZeditFile)r¬r")Z fn_closure)rÇrrÚopen_recent_file×sz=EditorWindow.__recent_file_callback..open_recent_filer)rÇrsrur)rÇrZ__recent_file_callbackÖsz#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_savedrjZwm_titleZ wm_iconname)rÇZshortZlongrZiconrrrr«Ûs  zEditorWindow.saved_change_hookcCs |j ¡S)N)r§rz)rÇrrrrzíszEditorWindow.get_savedcCs|j |¡dS)N)r§Ú set_saved)rÇÚflagrrrr{ðszEditorWindow.set_savedcCs|j ¡dS)N)r§Ú reset_undo)rÇrrrr}ószEditorWindow.reset_undocCs|jj}|rtj |¡SdS)Nrv)r¬rÈr]r^rÔ)rÇrÈrrrrwöszEditorWindow.short_titlecCs |jjp dS)Nr;)r¬rÈ)rÇrrrrxúszEditorWindow.long_titlecCs | ¡dS)NrG)r9)rÇrHrrrr}ýsz EditorWindow.center_insert_eventrÙcCsH|j}| ¡\}}| |¡}||}td||dƒ}| t|ƒ¡dS)NrKr9)rBÚgetwindowlinesrÚmaxrr)rÇÚmarkrBrjÚbotr+rDZnewtoprrrr9s   zEditorWindow.centercCsN|j}| d¡}| d¡}||krF| ¡dkrFt|dƒ}||d}||fS)Nz@0,0z@0,65535rKrD)rBrZ winfo_heightr@)rÇrBrjrrDrrrr~ s    zEditorWindow.getwindowlinescCs|j}tt| |¡ƒƒS)N)rBr@rrº)rÇr€rBrrrrszEditorWindow.getlinenocCs(|j ¡}t d|¡}ttt| ¡ƒƒS)Nz(\d+)x(\d+)\+(-?\d+)\+(-?\d+))rjZ wm_geometryÚreÚmatchÚlistrÏr@Úgroups)rÇZgeomÚmrrrÚ get_geometrys  zEditorWindow.get_geometrycCs | ¡dS)NrG)ru)rÇrHrrrrwszEditorWindow.close_eventcCsH|jrD| ¡s:|j ¡dkr&|j ¡|j ¡|j ¡|j ¡SdS)Nr)r¬rzrjrÞZ deiconifyÚlowerZliftÚ maybesave)rÇrrrr‰!s   zEditorWindow.maybesavecCs:y | ¡}t|ƒdkr| ¡|Stk r4YnXdS)NZcancel)r‰rãÚ_closeÚAttributeError)rÇZreplyrrrru*s zEditorWindow.closecCs|jjr|j|jjdt |j¡| ¡|j ¡d|_d|_|j rX|j  ¡d|_ d|_ d|_ |j  ¡d|_ |j  ¡|jrŒ| ¡dS)N)ro)r¬rÈr¶rZunregister_callbackr½Úunload_extensionsrur§r¯rBrlr¦rjZdestroyr?)rÇrrrrŠ3s"     zEditorWindow._closecCsi|_| ¡dS)N)Ú extensionsÚload_standard_extensions)rÇrrrr·GszEditorWindow.load_extensionscCs4x(t|j ¡ƒD]}t|dƒr| ¡qWi|_dS)Nru)r„rÚvaluesr£ru)rÇÚinsrrrrŒKs  zEditorWindow.unload_extensionscCsHxB| ¡D]6}y| |¡Wq tdt|ƒƒt ¡Yq Xq WdS)NzFailed to load extension)rNÚload_extensionÚprintÚreprÚ tracebackÚ print_exc)rÇr=rrrrŽQs z%EditorWindow.load_standard_extensionscCs tjddS)NT)Z editor_only)rZ GetExtensions)rÇrrrrNYsz)EditorWindow.get_standard_extension_namesZZzDummyZzzdummyc CsF|j ||¡}y>ytjd|td}Wn"ttfk rHt |¡}YnXWn tk rltd|ƒ‚YnXt||ƒ}t   |¡}t |dƒrš|  |j |¡||ƒ}||j|<|rB| |¡x„|D]|}| dd¡}x |dd…dkrò|dd…}qÔWx"|d d…d kr|dd …}qöW|d }t ||ƒrÂ|j |t||ƒ¡qÂWdS) NrÖ)Úpackagez Failed to import extension: rVú-rDrKrÜrYrÝZ_event)Úextfilesr¹Ú importlibÚ import_moduleÚ __package__Ú ImportErrorÚ TypeErrorr’rrrOr£rúrVrrtrrBrv) rÇr=ZfnameÚmodÚclsrPrZveventZ methodnamerrrr‘`s4         zEditorWindow.load_extensioncCsJ|dkr|jj}|j}||_x(| ¡D]\}}|r&|j|f|žŽq&WdS)N)r(rLrBrPrMrÁ)rÇrPrBrHrQrrrrt|szEditorWindow.apply_bindingsc Csò|dkr|jj}|dkr |jj}|j}|j}xÀ|D]¸\}}| |¡}|sJq2xž|D]–}|sb| ¡qP|\} } | dd…dk} | rŠ| dd…} t| ƒ\} } t|| ƒ} || fdd„}| rÔ|  | t ¡}|j | | || |dqP|j | | || dqPWq2WdS)NrKú!cSs| |¡dS)N)r)rBrrrrrOžsz(EditorWindow.fill_menus..command)rör÷rOrUÚvariable)rör÷rOrU) r(rVrLr¸rBr¹r»rùrWÚ get_var_objZ BooleanVarZadd_checkbuttonr)rÇrVrPr¸rBZmnameZ entrylistr:rZrörZ checkbuttonr÷rUrOÚvarrrrrú…s8        zEditorWindow.fill_menuscCs&| |¡}|r| ¡}|St|ƒ‚dS)N)r¢r¹Ú NameError)rÇr=r£ÚvaluerrrÚgetvarªs  zEditorWindow.getvarcCs(| ||¡}|r| |¡nt|ƒ‚dS)N)r¢rœr¤)rÇr=r¥Úvartyper£rrrÚsetvar²s  zEditorWindow.setvarcCs,|j |¡}|s(|r(||jƒ|j|<}|S)N)rlr¹rB)rÇr=r§r£rrrr¢¹s zEditorWindow.get_var_objcCs,|jr$|j d|¡p"d|j |¡kSdSdS)NZTODOÚSTRINGrK)r¯rBÚ tag_prevrangeZ tag_names)rÇZ text_indexrrrÚis_char_in_stringÉszEditorWindow.is_char_in_stringcCs:y |j d¡}|j d¡}||fStk r4dSXdS)Nz sel.firstzsel.last)NN)rBrºr )rÇrêrërrrÚget_selection_indicesÕs   z"EditorWindow.get_selection_indicescCs|jdp t}t|ƒS)NÚtabs)rBÚTK_TABWIDTH_DEFAULTr@)rÇZcurrentrrrÚget_tk_tabwidthàszEditorWindow.get_tk_tabwidthc CsB|j}| ¡|kr>|j dd|dd|jd|¡}|j|ddS)NrRrÑz -displayofÚn)r­)rBr¯rÐrZmasterZ configure)rÇZ newtabwidthrBZpixelsrrrÚset_tk_tabwidthæs   zEditorWindow.set_tk_tabwidthcCsP|r@|r@| ¡}d|kr$dkr.nn||_|j|jkr@d|_| |j¡dS)Nr9rF)Ú guess_indentr¡r rŸr±)rÇrËZguessrrrrrr®ñs z#EditorWindow.set_indentation_paramsc CsB|j}| ¡\}}|r6|r6| ||¡| d|¡dS| dd¡}|dkrp| ddd¡rd| d¡n| ¡dS|dd krŠ| d¡dS|j}t|  |¡ƒ}|d |j |j }d } xH||j krÄP|dd…}| d } t|  |¡ƒ}||ksú|dd kr¸Pq¸W|  ¡| d | d¡||kr6|  dd ||¡| ¡dS)NrÙrGzinsert linestartr;rÝz1.0z insert-1crYz rKrz insert-%dcr×)rBr¬rÿrår¹rßZbellr râÚ expandtabsr¡ror©rÙrª) rÇrHrBrêrëÚcharsr ZhaveZwantZ ncharsdeletedrrrr‹úsB          z"EditorWindow.smart_backspace_eventc Csì|j}| ¡\}}| ¡zÂ|rX|rXt|ƒt|ƒkr@|j |¡S| ||¡| d|¡| dd¡}t ||j ƒ\}}|t |ƒkr’|  ||j ¡n>|jržd}n&t | |j ¡ƒ}|j } d| || }| d|¡| d¡dS| ¡XdS)NrÙzinsert linestartrØr×rG)rBr¬r©Ú index2linerŽrrÿrår¹Úget_line_indentr râÚ reindent_tor¡rŸr³rÙrçrª) rÇrHrBrêrëÚprefixÚrawZ effectiveZpadr°rrrr&s,        zEditorWindow.smart_indent_eventc Csê|j}| ¡\}}| ¡z´|r>|r>| ||¡| d|¡| dd¡}dt|ƒ}}x ||krx||dkrx|d7}qZW||kr’| dd¡dS|d|…}d}x2|rÔ|ddkrÔ||jkrÔ|dd…}|d7}q¤W|rê| d |d¡x| d¡dkr| d¡qìW| dd¡t |  d¡ƒ} t   |j |j¡} |js¶xf|jD]\} t| | dƒ} t| ƒd } | | d¡}|  |¡|  | | ¡¡}|dk sœ| dkrDPqDW|  |p°d¡n@| d d¡}|rÒ|d} nd } | | d¡}|  |¡|  d¡|  ¡}|t jkrŠ|t jkrnn|t jkr2| d|¡nT|t jkrN| |  ¡¡n8|t jkr†|  ¡dkrv| d|¡n| |   ¡¡ndS|  !¡}| d|¡|  "¡r´| #|¡n|rÎ|  $¡rÎ| %|¡dS| &d¡| '¡XdS) NrÙzinsert linestartrz rKrErGrYzinsert - %d charsz.0Zconsolez1.0)(rBr¬r©rÿrår¹rârÙrorµrºr ZParserr¡r r¥rr“Zset_codeZfind_good_parse_startÚ_build_char_in_string_funcZset_lorªZget_continuation_typeZC_NONEZC_STRING_FIRST_LINEZC_STRING_NEXT_LINESZ C_BRACKETr·Zcompute_bracket_indentZ C_BACKSLASHZget_num_lines_in_stmtZcompute_backslash_indentZget_base_indent_stringZis_block_openerrZis_block_closerr‹rçrª)rÇrHrBrêrërèrrr°ÚindentZlnor ÚcontextZstartatZ startatindexZrawtextZbodr]rÚrrrrŒIs„                               z%EditorWindow.newline_and_indent_eventcCs||jfdd„}|S)NcSs||d|ƒS)Nz+%dcr)ÚoffsetZ _startindexZ_icisrrrÚinnerÀsz6EditorWindow._build_char_in_string_func..inner)r«)rÇZ startindexr¾rrrrº¿sz'EditorWindow._build_char_in_string_funccCs2|jr&t||jƒ\}}d|d|Sd|SdS)NrØr×)rŸÚdivmodr )rÇr°ZntabsZnspacesrrrÚ _make_blanksÏszEditorWindow._make_blankscCsJ|j}| ¡| ddd¡r(| dd¡|r>| d| |¡¡| ¡dS)Nzinsert linestartz!=rÙ)rBr©rßrÿrÙrÀrª)rÇrQrBrrrr·Ùs zEditorWindow.reindent_tocCsPt|j|jƒ ¡\}}|r@|r@t||jƒ\}}t||jƒ\}}nd}}||S)Nr)ÚIndentSearcherrBr rôr¶)rÇÚopenerZindentedr¹Z indentsmallZ indentlargerrrr²çs zEditorWindow.guess_indentcCsN|jdkrdS|jjr&|j ¡d}n|j ¡d}|jdd|›dddS)NZShowZHiderZz *Line Numbersz Line Numbers)r:rºrö)r±Zis_shownZ hide_sidebarZ show_sidebarr)rÇrHZ menu_labelrrrrÆðs   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)”r1Ú __module__Ú __qualname__Zidlelib.percolatorr"Zidlelib.colorizerr#r$Z idlelib.undor%Zidlelib.iomenur&r'r2r(Zidlelib.statusbarr)Zidlelib.autocompleter*Zidlelib.autoexpandr+Zidlelib.calltipr,Zidlelib.codecontextr-Zidlelib.sidebarr.Zidlelib.formatr/r0r1r2Zidlelib.parenmatchr3Zidlelib.squeezerr4Zidlelib.zoomheightr5rÚgetfilesystemencodingZfilesystemencodingr\rÃrÅrÌryržr•r“r™rïrørsr½rrÄr›rrxrrrrrr€rr~rrzr{r|rƒr„rr‘r’r…r†rˆr‡r‰rŠr.r‚r–r—r˜r:r´r?r@r­rBrCrµÚstringZ ascii_lettersÚdigitsrFrIr¤rJrTrXr¢rþrYr¶rnr«rzr{r}rwrxr}r9r~rr‡rwr‰rurŠr·rŒrŽrNr˜r‘rtrúr¦r¨r¢r«r¬r¯r±r®r‹rrŒrºrÀr·r²rÆrrrrr!1s               +   %              $ .     %     ,#v  r!cCs tt|ƒƒS)N)r@r)rºrrrrµþsrµz[ \t]*cCs$t |¡}| ¡t| ¡ |¡ƒfS)N)Ú_line_indent_rerƒrXrâÚgroupr³)rèr r†rrrr¶s r¶c@s8eZdZdd„Zdd„Zejejdfdd„Zdd „Z d S) rÁcCs(||_||_d|_|_d|_|_dS)Nr)rBr rrÚfinishedÚ blkopenlineÚ indentedline)rÇrBr rrrrÌs zIndentSearcher.__init__cCsL|jr dS|jd}|_t|ƒd}|j |dd¡r:dS|j ||d¡S)Nr;rKz.0z>=rXz lineend+1c)rÊrrr“rBrßr¹)rÇrrr€rrrÚreadlines zIndentSearcher.readline)ÚclassÚdefÚforÚifÚtryÚwhilec Cs>|jrn2||kr ||kr ||_n||kr:|jr:||_d|_dS)NrK)rÊrËrÌ) rÇrAÚtokenÚstartrXrèÚINDENTÚNAMEZOPENERSrrrÚ tokeneater#szIndentSearcher.tokeneaterc Csltj}|jt_zHy(t |j¡}x|D]}|j|Žq$WWntjtfk rRYnXWd|t_X|j|j fS)N) ÚtokenizeÚtabsizer Úgenerate_tokensrÍrØÚ TokenErrorÚ SyntaxErrorrËrÌ)rÇZ save_tabsizeÚtokensrÔrrrrô/s   zIndentSearcher.runN) r1rÃrÄrÌrÍrÙrÖr×rØrôrrrrrÁ s   rÁcCs6| d¡}|dkr.|d|…||dd…}||fS)NrDrrK)r))ÚsrrrrrrùAs rùú[ú]ú/)Z bracketleftZ bracketrightZslashcCs´| |¡}|rt ¡r"|dkr"dS|d}t ddd„|¡}t ddd„|¡}t d d|¡}t d d |¡}t d d |¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}|S)N>ú<>ú<>ú <>r;rz-[a-z]\bcSs | ¡ ¡S)N)rÉÚupper)r†rrrrIZrJz!get_accelerator..z\b\w+\bcSst | ¡| ¡¡S)N)Úkeynamesr¹rÉ)r†rrrrI[rJzKey-ZCancelz Ctrl-BreakzControl-zCtrl-r—ú+z>zidlelib.idle_test.test_editorr9F)Ú verbosityÚexit)rô)=Z importlib.abcr™Úimportlib.utilr]rar‚rÆrrÙr”r!ZtkinterZ tkinter.fontrZ tkinter.ttkrZtkinter.simpledialogZ simpledialogr¿Ztkinter.messageboxZ messageboxr¾Zidlelib.configrr2rrrr r Zidlelib.multicallr r r rrZ idlelib.treerrr®Zpython_versionryrr Úobjectr!rµÚcompilerÈr¶rÁrùrçrWrêrîr1Zunittestr>Zidlelib.idle_test.htestrôrrrrÚsv                    X  4