a XC?hÅã@sðddlZddlZddlZddlZddlZddlZddlZddlZddl 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(dd„Z)Gdd„dƒZ*dd„Z+e ,d¡Z-dd „Z.Gd!d"„d"ƒZ/d#d$„Z0d%d&d'd(œZ1d)d*„Z2d+d,„Z3d-d.„Z4e5d/krìdd0l6m7Z7e7d1d2d3d4dd5l8m9Z9e9e4ƒdS)6éN)Ú*)ÚFont)Ú Scrollbar)Ú simpledialog)Ú messagebox)ÚidleConf)Ú configdialog)Úgrep)Úhelp)Ú help_about)Úmacosx)ÚMultiCallCreator)Úpyparse)Úquery)Úreplace)Úsearch)Ú wheel_event)Ú py_extensions)Úwindowéz (%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%sÚfinalr)ÚsysÚ version_info)ÚmajorÚminorÚmicroÚlevelÚserialÚrelease©r!ú3/opt/alt/python39/lib64/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+dÙdd„Z,dÚdd„Z-dd„Z.dd„Z/dd„Z0dd„Z1dÛdd „Z2gd!¢Z3d"d#„Z4d$d%„Z5d&d'„Z6d(d)„Z7d*d+„Z8dZ9d,d-„Z:d.gZ;d/d0„Zd5d6„Z?dÜd7d8„Z@dÝd9d:„ZAdÞd;d<„ZBdßd=d>„ZCd?d@„ZDdAdB„ZEdCdD„ZFdàdEdF„ZGdádGdH„ZHdIdJ„ZIdKdL„ZJdMdN„ZKdOdP„ZLdQdR„ZMdSdT„ZNdUdV„ZOdWdX„ZPdYdZ„ZQd[d\„ZRd]d^„ZSdâd_d`„ZTdãdadb„ZUdädcdd„ZVdedf„ZWdgdh„ZXdidj„ZYdkdl„ZZdmdn„Z[dodp„Z\dqdr„Z]dsdt„Z^e_j`e_jaduZbdvdw„Zcdxdy„Zddzd{„Zed|d}„Zfd~d„Zgd€d„Zhd‚dƒ„Zid„d…„Zjdåd†d‡„Zkdˆd‰„ZldŠd‹„ZmdŒd„ZndŽd„Zodd‘„Zpd’d“„Zqd”d•„Zrd–d—„Zsdæd™dš„Ztd›dœ„Zudçddž„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 CsL ddlm}tjdurtj 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%ƒ| fi|¤Ž|_&}|j&|j_'| (¡| )¡|j *d#|j+¡|j ,d$|j-¡t. /¡rx| ,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¡}|rT| Œdf¡}|dur(dg}|dkrB| ¡|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² r:| ³|¡|_‚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@ÚpadxZwrapZhighlightthicknessrBZtabstylerHZWM_DELETE_WINDOWú<>zz<2>z<3>z z z z z<>z<>z <>z<>z<>z<>z<>z<>ú<>z<>cSsdS©NÚbreakr!©Úeventr!r!r"Úªóz'EditorWindow.__init__..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 *ode*ontextÚdisabledzline-numbers-defaultz<>ú *ine*umbers)µZidlelib.runscriptr9r$Ú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 ÚTextrFZfocused_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_eventr3ÚfregionÚindent_region_eventZdedent_region_eventZcomment_region_eventZuncomment_region_eventZtabify_region_eventZuntabify_region_eventr4Ztoggle_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Úhasattrr^Ú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ÚpostwindowsmenurZ 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_eventÚallow_code_contextr0Ztoggle_code_context_eventÚupdate_menu_stateÚallow_line_numbersr1Útoggle_line_numbers_event)ÚselfrpÚfilenameÚkeyrqr9ZdochomeZpyverZbasepathZchmfilertr{r?rBZ text_optionsrFr™ÚindentsZ usespacesr±r²r·Ú is_py_srcr=raZ autocompleteZ parenmatchZ scriptbindingrËr!r!r"Ú__init__IsÀ     ÿ ÿ   ÿ   ÿ   ÿÿù            ÿ                ÿ  ÿ ÿÿ ÿ  ÿ ÿzEditorWindow.__init__cCs | ¡dS©N)r©©rÐrOr!r!r"r„aszEditorWindow.handle_winconfigcCs^|j}tt|jj| d¡| d¡gƒƒ}| ¡d|}t|| d¡d d¡}|||_ dS)NZborderrIr<r[)r[Ú0) rFÚsumÚmapÚtkZgetintZcgetZ winfo_widthrÚmeasurerB)rÐrFZ inner_paddingZ pixel_widthZzero_char_widthr!r!r"r©dsÿÿzEditorWindow.set_widthcCs|j ¡\}}|j |¡dSrL)r·ZdefaultfilenamerpÚnew)rÐrOÚdirnameÚbasenamer!r!r"r qs zEditorWindow.new_callbackcCsÂ|jd@dkr|jdkrdS|j d¡rd|j ddd¡rd|j ddd¡rdt|j d¡ d¡d ƒ}n8|j dd¡}tt |ƒƒD]}||d vr~qœq~t |ƒ}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 ¡¡rB|j  dd¡n|j  dd¡|j |¡}|j d¡}|j |d|¡r„||}}|j  ddd¡|j  d||¡|j  d |¡|j d ¡dS)NérZHomeZiomarkú<=zinsert lineendúinsert linestartÚ.rT)ú ú Úinsertzinsert linestart+ÚcÚselú1.0raú sel.firstZ my_anchorú<úsel.lastú>rM)ÚstateZkeysymrFrÅÚcomparerCÚsplitrÄÚrangeÚlenÚstrÚ tag_removeÚmark_setÚtag_addÚsee)rÐrOZinsertptÚlineZlineatÚdestÚfirstÚlastr!r!r"ržvsF ÿþ  ÿ    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)NrTZgrey75)rHZ borderwidthZ backgroundrZ _padding1z )rUrZzCol: ?røzLn: ?)rUrVz<>z z)r,rtÚ status_barrzrrkÚ set_labelZRIGHTr¥ZBOTTOMÚXrFrÚset_line_and_columnrÊZ after_idle)rÐÚsepr!r!r"r¤¡s ÿzEditorWindow.set_status_barcCs>|j t¡ d¡\}}|j dd|¡|j dd|¡dS)NrãrZzCol: %srøzLn: %s)rFrÅZINSERTrðrürý)rÐrOrørZr!r!r"rÿ±sz EditorWindow.set_line_and_column))ÚfileZ_File)ÚeditZ_Edit)ÚformatZF_ormat)ÚrunZ_Run)rcZ_Options)rZ_Window)r Z_HelpcCsâ|j}i|_}|jD]N\}}t|ƒ\}}t||›ddƒ}t||d|d||<}|j|||dqt ¡r’t|ddd|d<}|jd|d |  ¡t|jdd |_ |jd j d d d|j d|jd  t ¡|_| ¡dS)NZ_menu_postcommandr)r@ÚtearoffÚ postcommand)Úlabelr=Ú underlineZapple)r@rZ applicationZIDLE)rr=©rrr:z Recent Files)rrr=r )rsrÃÚ menu_specsÚprepstrÚgetattrrrZ add_cascader Z isCarbonTkÚ fill_menusÚrecent_files_menuZinsert_cascaderÅÚENDÚbase_helpmenu_lengthÚreset_help_menu_entries)rÐZmbarrÃr@rrrr=r!r!r"r~Ás,  ÿÿþzEditorWindow.createmenubarcCsJ|jd}| d¡}|dur d}||jkr<| |jd|¡t |¡dS)NrrarbrT)rÃrÅrÇÚdeleterZadd_windows_to_menu)rÐr=rar!r!r"rÈ×s   zEditorWindow.postwindowsmenucCs|j|}|j||ddS)z$Update label for menu item at index.)rN©rÃÚ entryconfig)rÐr=rÅrÚmenuitemr!r!r"Úupdate_menu_labelás zEditorWindow.update_menu_labelcCs|j|}|j||ddS)z$Update state for menu item at index.©rîNr)rÐr=rÅrîrr!r!r"rÍæs zEditorWindow.update_menu_statecGsT|dkr ÿ        zEditorWindow.right_menu_event)ZCloserJNcCsft|jdd}|jD]F}|d|d}}|durR|j|fdd„}|j||dq| ¡q||_dS)Nrr rTcSs| |¡dSrÖ©Úevent_generate©rFr)r!r!r"rX%sz(EditorWindow.make_rmenu..command©rrX)rrrFr&Ú add_commandrÆr$)rÐr$r(rr)rXr!r!r"r% s  zEditorWindow.make_rmenucCs| ¡SrÖ)Úrmenu_check_copy©rÐr!r!r"Úrmenu_check_cut,szEditorWindow.rmenu_check_cutcCs6z|j d¡}Wnty$YdS0|r.dSdSdS)NrêrdÚnormal©rFrÅr#)rÐZindxr!r!r"r//s  zEditorWindow.rmenu_check_copycCs6z|jj d|jd¡Wnty,YdS0dSdS)Nztk::GetSelectionZ CLIPBOARDrdr2)rFrÛÚcallr#r0r!r!r"Úrmenu_check_paste7s  zEditorWindow.rmenu_check_pastecCst |j¡dS)zHandle Help 'About IDLE' event.rM)r Z AboutDialogrtr×r!r!r"r‹?s zEditorWindow.about_dialogcCst |jd¡dS)z&Handle Options 'Configure IDLE' event.ZSettingsrM)rZ ConfigDialogrtr×r!r!r"rŒEszEditorWindow.config_dialogcCs"|jr|j}n|j}t |¡dS)zHandle Help 'IDLE Help' event.rM)rqrtr Z show_idlehelp)rÐrOÚparentr!r!r"r‰Ks  zEditorWindow.help_dialogc Csptjdd…dkr`zt |j¡Wqlty\}z"tjdt|ƒ|j dWYd}~qld}~00n t   |j¡dS)Nr:r;úDocument Start Failure©ÚtitleÚmessager6rM) rrkrgÚ startfilerfÚOSErrorrrÉrórFÚ webbrowserÚopen)rÐrOÚwhyr!r!r"rŠUs ÿ zEditorWindow.python_docscCs|j d¡dS)Nz<>rM©rFr+r×r!r!r"r…`s zEditorWindow.cutcCs |j d¡sdS|j d¡dS)Nrèz<>rM)rFZ tag_rangesr+r×r!r!r"r†ds  zEditorWindow.copycCs|j d¡|j d¡dS)Nz <>rærM)rFr+r÷r×r!r!r"r‡ks  zEditorWindow.pastecCs.|j ddd¡|j dd¡|j d¡dS)Nrèrézend-1crærM)rFrörõr÷r×r!r!r"rŽps zEditorWindow.select_allcCs |j ddd¡|j d¡dS)NrèrérarærM)rFrôr÷r×r!r!r"rvs zEditorWindow.remove_selectioncs*|jj‰|jj‰d‰‡‡‡‡fdd„}|S)zèCursor 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)rFrÅrõ)rÐrBrCr!rAr"r›{s z&EditorWindow.move_at_edge_if_selectioncCs|j d¡dS)Nz rMr@r×r!r!r"rœs zEditorWindow.del_word_leftcCs|j d¡dS)NzrMr@r×r!r!r"r“s zEditorWindow.del_word_rightcCst |j¡dSrL)rÚfindrFr×r!r!r"r—s zEditorWindow.find_eventcCst |j¡dSrL)rZ find_againrFr×r!r!r"r‘›s zEditorWindow.find_again_eventcCst |j¡dSrL)rZfind_selectionrFr×r!r!r"r“Ÿs z!EditorWindow.find_selection_eventcCst |j|j|j¡dSrL)r rFr·rpr×r!r!r"r’£sz EditorWindow.find_in_files_eventcCst |j¡dSrL)rrFr×r!r!r"r”§s zEditorWindow.replace_eventcCsT|j}t |dd¡j}|durP| ddd¡| d|›d¡| d¡| ¡dS) Nz Go To Linez/Enter a positive integer ('big' = end of file):rèréraræú.0rM)rFrZGotoÚresultrôrõr÷rÿ)rÐrOrFÚlinenor!r!r"r•«sþ zEditorWindow.goto_line_eventcCsnz|j dd¡ ¡}Wnty,d}Yn0t |jdd|¡j}|durj|jr^|j |¡n |j   |¡|S)z¯Get 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. rêrìr>z Open ModulezAEnter the name of a Python module to search on sys.path and open:N) rFrÄÚstripr#rZ ModuleNamerFrpr>r·r¾)rÐr@Ú file_pathr!r!r"Ú open_module¹s  ü zEditorWindow.open_modulecCs | ¡dSrL)rJr×r!r!r"rÑszEditorWindow.open_module_eventcCsJ|jj}|jjdkr|s,| ¡}|dur,dSddlm}| |j|¡dS)NZPyShellEditorWindowrMr)Úbrowser) r·rÑÚ __class__Ú__name__rJÚidlelibrKZ ModuleBrowserrq)rÐrOrÑrKr!r!r"r¡Õs ÿ z EditorWindow.open_module_browsercCsddlm}| |j¡dS)Nr)Ú pathbrowserrM)rNrOZ PathBrowserrq)rÐrOrOr!r!r"r¢às  zEditorWindow.open_path_browsercCs&ddl}tjddg}|j|dddS)Nrz-cz,from turtledemo.__main__ import main; main()F)ÚshellrM)Ú subprocessrÚ executableÚPopen)rÐrOrQÚcmdr!r!r"r£åsþzEditorWindow.open_turtle_democCsN|durJ|dkrJ|j dd|¡|j ddd¡|j ddd¡| ¡dS)Nrræz%d.0rèréraz insert +1l)rFrõrôröÚcenter)rÐrGr!r!r"Úgotolineîs zEditorWindow.gotolinecCs`|rtj |¡rdStj tj |¡¡\}}tj |¡tvr@dS|j dd¡}|  d¡o^d|vS)NTréz 1.0 lineendz#!Zpython) rgrhrmÚsplitextrßÚnormcaserrFrÄÚ startswith)rÐrÑÚbaseZextrør!r!r"r¿õszEditorWindow.ispythonsourcecCs|jr|j |¡d|_dSrÖ)rpZunregister_maybe_terminater0r!r!r"Ú close_hookþs zEditorWindow.close_hookcCs ||_dSrÖ)r[)rÐr[r!r!r"Úset_close_hookszEditorWindow.set_close_hookcCs2|jr|j |¡| ¡|j |¡| ¡dSrÖ)rpZfilename_changed_editr¶rtZupdate_windowlist_registryrÀr0r!r!r"r¸s   z!EditorWindow.filename_change_hookcCsV|jr dS| |jj¡r"| ¡|_|jrR|j |j¡|j |j¡|j |j¡dSrÖ) rºr¿r·rÑr&r±Ú removefilterr²r³r0r!r!r"Ú _addcolorizer s zEditorWindow._addcolorizercCs,|js dS|j ¡|j |j¡d|_dSrÖ)rºZ removecolorsr±r]r0r!r!r"Ú _rmcolorizers  zEditorWindow._rmcolorizercCsH| ¡| ¡t |j¡|jdur0|j ¡|jdurD|j ¡dS)zUpdate the color themeN) r_r^r$r'rFr»Zupdate_highlight_colorsr¼Z update_colorsr0r!r!r"rÀs    zEditorWindow.ResetColorizerÚ_cCsp| d|¡| |¡}|r6||jvr6| d|d|¡d| |¡krR| d|¡n| d|d¡| |¡dS)NZERRORz wordstartÚ ræz+1c)rörÄÚ IDENTCHARSrõr÷)rÐrFÚposÚcharr!r!r"Úcolorize_syntax_error.s  z"EditorWindow.colorize_syntax_errorcCs2tjddddd}|s"d|jd<n tj|jd<dS) z&Update the cursor blink configuration.rAr$z cursor-blinkr]rDrr_N)rr|rFr^)rÐZ cursorblinkr!r!r"r¯9s ÿ z EditorWindow.update_cursor_blinkcCsN|jdur|j ¡|jdur(|j ¡t |jdd¡}||jd<| ¡dS)z.Update the text widgets' font if it is changedNrAr$r[)r»Z update_fontr¼rr¨rqrFr©)rÐZnew_fontr!r!r"Ú ResetFontCs     zEditorWindow.ResetFontcCs|t ¡|j_}| ¡D]\}}|jj|g|¢RŽq| ¡D]8}t |¡}|r>| ¡D]\}}|jj|g|¢RŽqXq>dS)z/Remove the keybindings before they are changed.N) rÚGetCurrentKeySetr+Údefault_keydefsÚitemsrFZ event_deleteÚget_standard_extension_namesÚGetExtensionBindings)rÐÚkeydefsrOÚkeylistÚ extensionNameÚxkeydefsr!r!r"ÚRemoveKeybindingsTs  zEditorWindow.RemoveKeybindingsc CsBt ¡|j_}| ¡| ¡D]}t |¡}|r | |¡q i}|jjD]B}i||d<|dD](}|rb|d||dt|dƒd<qbqJ|j D]¨}|j |}|  t ¡}|dur¶q”|d7}t d|ƒD]r} |  | ¡dkrÈ| | d¡} | rÈ| | d¡} d} ||vr| ||vr||| } | rÈt|| ƒ} |j| | dqÈq”dS) z-Update the keybindings after they are changedrrTNrXÚ acceleratorrr>)rq)rrgr+rhrrjrkÚmenudefsr rÃrÅrrñrEZ entrycgetÚget_acceleratorr) rÐrlrnroZ menuEventDictr=r(Z menubarItemrarÅZaccelZitemNamerOr!r!r"ÚApplyKeybindings`s<      $        zEditorWindow.ApplyKeybindingscCs|jstjddddd|_dS)zCUpdate the indentwidth if changed and not using tabs in this windowrAr\z num-spacesrCrDN)rªrr|r¬r0r!r!r"r­„s ÿ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 rTrr-N) rZGetAllExtraHelpSourcesListrÃrÅrrrrÆÚ"_EditorWindow__extra_help_callbackr.)rÐZ help_listZhelpmenuZhelpmenu_lengthÚentryrTr!r!r"r‹s   z$EditorWindow.reset_help_menu_entriescs|f‡fdd„ }|S)zCCreate a callback with the helpfile value frozen at definition timec s‚| d¡stj |¡}tjdd…dkrtzt |¡Wq~typ}z"tj dt |ƒˆj dWYd}~q~d}~00n t   |¡dS)N)ZwwwZhttpr:r;r7r8)rYrgrhrorrkr;r<rrÉrórFr=r>)Úhelpfiler?r0r!r"Údisplay_extra_helpžs   ÿz>EditorWindow.__extra_help_callback..display_extra_helpr!)rÐrwrxr!r0r"Z__extra_help_callbackœs z"EditorWindow.__extra_help_callbackc sæg}|j}|rRtj |¡rRt|dddd}| ¡}Wdƒn1sH0Y|r„tj |¡d}||vrx| |¡| d|¡g‰|D]*}d|vs¬tj |dd …¡sŒˆ  |¡qŒ‡fd d „|Dƒ}d }|dt |ƒ…}|r~z@t|d ddd}|  |¡Wdƒn1s0YWnXt y|}z>t |jddƒshd|j_tjdd|›d|jdWYd}~n d}~00|jjD]Z} | j} |  dt¡t|ƒD]8\} } |  ¡} |  | ¡} | j|| d| | ddq¤q†dS)z/Load and update the recent files list and menusÚrÚutf_8r)r*ÚerrorsNrarúrbcsg|]}|ˆvr|‘qSr!r!)Ú.0rh©Z bad_pathsr!r"Ú ¾rQz9EditorWindow.update_recent_files_list..Z1234567890ABCDEFGHIJKÚwÚrecentfiles_messageFTz IDLE Warningz)Cannot save Recent Files list to disk. z Select OK to continue.r8rä)rrXr)rxrgrhr½r>Ú readlinesÚabspathÚremoveræÚappendròÚ writelinesr<r rqrrÚ showwarningrFrtrwrrrÚ enumerateÚrstripÚ#_EditorWindow__recent_file_callbackr.)rÐÚnew_fileZrf_listrIZ rf_list_filerhZulcharsZrf_fileÚerrÚinstancer=ÚiÚ file_nameÚcallbackr!r~r"rÁ«s\ÿ&   ÿ.ÿü   þz%EditorWindow.update_recent_files_listcs|f‡fdd„ }|S)Ncsˆjj|ddS)N)ZeditFile)r·r>)Z fn_closurer0r!r"Úopen_recent_fileÚsz=EditorWindow.__recent_file_callback..open_recent_filer!)rÐrr‘r!r0r"Z__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_savedrtZwm_titleZ wm_iconname)rÐZshortZlongr9Ziconr!r!r"r¶Þs  zEditorWindow.saved_change_hookcCs |j ¡SrÖ)r²r–r0r!r!r"r–ðszEditorWindow.get_savedcCs|j |¡dSrÖ)r²Ú set_saved)rÐÚflagr!r!r"r—ószEditorWindow.set_savedcCs|j ¡dSrÖ)r²Ú reset_undor0r!r!r"r™öszEditorWindow.reset_undocCs|jj}|rtj |¡SdS)Nr’)r·rÑrgrhrß)rÐrÑr!r!r"r“ùszEditorWindow.short_titlecCs |jjp dS)Nr>)r·rÑr0r!r!r"r”ýszEditorWindow.long_titlecCs | ¡dSrL)rUr×r!r!r"rˆsz EditorWindow.center_insert_eventræcCsH|j}| ¡\}}| |¡}||}td||dƒ}| t|ƒ¡dS)NrTr<)rFÚgetwindowlinesrÚmaxrr)rÐÚmarkrFrtÚbotrGrHZnewtopr!r!r"rUs   zEditorWindow.centercCsN|j}| d¡}| d¡}||krF| ¡dkrFt|dƒ}||d}||fS)Nrz@0,65535rTrH)rFrZ winfo_heightrC)rÐrFrtrrHr!r!r"rš s    zEditorWindow.getwindowlinescCs|j}tt| |¡ƒƒSrÖ)rFrCrrÅ)rÐrœrFr!r!r"rszEditorWindow.getlinenocCs(|j ¡}t d|¡}ttt| ¡ƒƒS)zReturn (width, height, x, y)z(\d+)x(\d+)\+(-?\d+)\+(-?\d+))rtZ wm_geometryÚreÚmatchÚlistrÚrCÚgroups)rÐZgeomÚmr!r!r"Ú get_geometrys  zEditorWindow.get_geometrycCs | ¡dSrL)r€r×r!r!r"r‚ szEditorWindow.close_eventcCsH|jrD| ¡s:|j ¡dkr&|j ¡|j ¡|j ¡|j ¡SdS)Nr2)r·r–rtrîZ deiconifyÚlowerZliftÚ maybesaver0r!r!r"r¥$s   zEditorWindow.maybesavecCs:z"| ¡}t|ƒdkr| ¡|WSty4Yn0dS)NZcancel)r¥róÚ_closeÚAttributeError)rÐZreplyr!r!r"r€-s  zEditorWindow.closecCs|jjr|j|jjdt |j¡| ¡|j ¡d|_d|_|j rX|j  ¡d|_ d|_ d|_ |j  ¡d|_ |j  ¡|jrŒ| ¡dS)N)r‹)r·rÑrÁrZunregister_callbackrÈÚunload_extensionsr€r²rºrFrvr±rtZdestroyr[r0r!r!r"r¦6s"     zEditorWindow._closecCsi|_| ¡dSrÖ)Ú extensionsÚload_standard_extensionsr0r!r!r"rÂJszEditorWindow.load_extensionscCs0t|j ¡ƒD]}t|dƒr| ¡qi|_dS)Nr€)r r©Úvaluesr®r€)rÐÚinsr!r!r"r¨Ns  zEditorWindow.unload_extensionscCsD| ¡D]6}z| |¡Wqtdt|ƒƒt ¡Yq0qdS)NzFailed to load extension)rjÚload_extensionÚprintÚreprÚ tracebackÚ print_exc)rÐr@r!r!r"rªTs  z%EditorWindow.load_standard_extensionscCs tjddS)NT)Z editor_only)rZ GetExtensionsr0r!r!r"rj\sz)EditorWindow.get_standard_extension_namesZZzDummyZzzdummyc Cs6|j ||¡}z.command)rrrXrqZvariable)rrrXrq) r+rrrhrÃrFrÄrÆr rsÚ get_var_objZ BooleanVarZadd_checkbuttonr.)rÐrrrlrÃrFZmnameZ entrylistr=rvrr)Z checkbuttonrrqrXÚvarr!r!r"r ˆs<       þþzEditorWindow.fill_menuscCs&| |¡}|r| ¡}|St|ƒ‚dSrÖ)r½rÄÚ NameError)rÐr@r¾Úvaluer!r!r"Úgetvar­s  zEditorWindow.getvarcCs(| ||¡}|r| |¡nt|ƒ‚dSrÖ)r½r§r¿)rÐr@rÀÚvartyper¾r!r!r"Úsetvarµs  zEditorWindow.setvarcCs,|j |¡}|s(|r(||jƒ|j|<}|SrÖ)rvrÄrF)rÐr@rÂr¾r!r!r"r½¼s zEditorWindow.get_var_objcCs,|jr$|j d|¡p"d|j |¡vSdSdS)NZTODOÚSTRINGrT)rºrFÚ tag_prevrangeZ tag_names)rÐZ text_indexr!r!r"Úis_char_in_stringÌs ÿzEditorWindow.is_char_in_stringcCs<z"|j d¡}|j d¡}||fWSty6YdS0dS)Nrêrì)NNr3)rÐrúrûr!r!r"Úget_selection_indicesØs     z"EditorWindow.get_selection_indicescCs|jdp t}t|ƒS)NÚtabs)rFÚTK_TABWIDTH_DEFAULTrC)rÐZcurrentr!r!r"Úget_tk_tabwidthãszEditorWindow.get_tk_tabwidthc CsB|j}| ¡|kr>|j dd|dd|jd|¡}|j|ddS)Nr[rÜz -displayofÚn)rÈ)rFrÊrÛr4ZmasterZ configure)rÐZ newtabwidthrFZpixelsr!r!r"Úset_tk_tabwidthés þzEditorWindow.set_tk_tabwidthcCsP|r@|r@| ¡}d|kr$dkr.nn||_|j|jkr@d|_| |j¡dS)Nr<rF)Ú guess_indentr¬r«rªrÌ)rÐrÔZguessrŽr!r!r"r¹ôs z#EditorWindow.set_indentation_paramsc CsP|j}| ¡\}}|r6|r6| ||¡| d|¡dS| dd¡}|dkrp| ddd¡rd| d¡n| ¡dS|dd vrŠ| d¡dS|j}t|  |¡ƒ}|d ksªJ‚|d |j |j }d } ||j krÐq|dd…}| d } t|  |¡ƒ}||ks|dd vrÂqqÂ|  ¡| d | d¡||krD|  dd ||¡| ¡dS)NrærMrâr>ríréz insert-1crbú rrTz insert-%dcrä)rFrÇrrõrÄrïZbellr«ròÚ expandtabsr¬ryr´rærµ) rÐrOrFrúrûÚcharsr«ZhaveZwantZ ncharsdeletedr!r!r"r–ýsB           z"EditorWindow.smart_backspace_eventc Cs|j}| ¡\}}| ¡zÖ|rb|rbt|ƒt|ƒkrJ|j |¡W| ¡S| ||¡| d|¡|  dd¡}t ||j ƒ\}}|t |ƒkrœ|  ||j¡n>|jr¨d}n&t | |j ¡ƒ}|j} d| || }| d|¡| d¡W| ¡dS| ¡0dS)NrærârårärM)rFrÇr´Ú index2liner™ršrµrrõrÄÚget_line_indentr«ròÚ reindent_tor¬rªrÏrær÷) rÐrOrFrúrûÚprefixÚrawZ effectiveZpadrËr!r!r"r˜)s4  ì      þzEditorWindow.smart_indent_eventc Cs.|j}| ¡\}}| ¡zø|r>|r>| ||¡| d|¡| dd¡}dt|ƒ}}||krv||dvrv|d7}qX||kr¢| dd¡W| d¡|  ¡dS|d|…}d}|râ|d dvrâ||j krâ|dd …}|d7}q²|rö| d |d¡| d¡dvr| d¡qö| dd¡t |  d¡ƒ} t  |j|j¡} |j s¾|jD]`} t| | dƒ} t| ƒd } | | d¡}|  |¡|  | | ¡¡}|dus¢| dkrJq¬qJ|  |p¸d¡n@| 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| |  "¡¡nds¢Jd|fƒ‚W| d¡|  ¡dS|  #¡}| d|¡|  $¡rä| %|¡n|rþ|  &¡rþ| '|¡W| d¡|  ¡dS| d¡|  ¡0dS)a…Insert 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. rærârrÎrTrarMNrbzinsert - %d charsrEZconsolerézbogus continuation type %r)(rFrÇr´rrõrÄròrær÷rµryrÑrÅrZParserr¬r«r°r›r¯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_openerr˜Zis_block_closerr–)rÐrOrFrúrûrørŽrËÚindentÚlnor"ÚcontextZstartatZ startatindexZrawtextZbodryrçr!r!r"r—Lsž       T «         ÿ            ò     ýÿ z%EditorWindow.newline_and_indent_eventcCs||jfdd„}|S)NcSs||d|ƒS)Nz+%dcr!)ÚoffsetZ _startindexZ_icisr!r!r"ÚinnerÃsz6EditorWindow._build_char_in_string_func..inner)rÆ)rÐZ startindexrÛr!r!r"rÖÂsÿ z'EditorWindow._build_char_in_string_funccCs2|jr&t||jƒ\}}d|d|Sd|SdS)Nrårä)rªÚdivmodr«)rÐrËZntabsZnspacesr!r!r"Ú _make_blanksÒszEditorWindow._make_blankscCsJ|j}| ¡| ddd¡r(| dd¡|r>| d| |¡¡| ¡dS)Nrâz!=ræ)rFr´rïrrærÝrµ)rÐrZrFr!r!r"rÓÜs zEditorWindow.reindent_tocCsPt|j|jƒ ¡\}}|r@|r@t||jƒ\}}t||jƒ\}}nd}}||S©Nr)ÚIndentSearcherrFr«rrÒ)rÐZopenerZindentedrÕZ indentsmallZ indentlarger!r!r"rÍês zEditorWindow.guess_indentcCsN|jdurdS|jjr&|j ¡d}n|j ¡d}|jdd|›dddS)NZShowZHidercrez Line Numbers)r=rÅr)r¼Zis_shownZ hide_sidebarZ show_sidebarr)rÐrOZ menu_labelr!r!r"rÏó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)”rMÚ __module__Ú __qualname__Zidlelib.percolatorr%Zidlelib.colorizerr&r'Z idlelib.undor(Zidlelib.iomenur)r*rNr+Zidlelib.statusbarr,Zidlelib.autocompleter-Zidlelib.autoexpandr.Zidlelib.calltipr/Zidlelib.codecontextr0Zidlelib.sidebarr1Zidlelib.formatr2r3r4r5Zidlelib.parenmatchr6Zidlelib.squeezerr7Zidlelib.zoomheightr8rÚgetfilesystemencodingZfilesystemencodingrfrÌrÎrÕr„r©r ržr¤rÿr r~rÈrrÍr¦r$rƒr&r%r1r/r5r‹rŒr‰rŠr…r†r‡rŽrr›rœrrr‘r“r’r”r•rJrr¡r¢r£rVr¿r[r\r¸r^r_rÀÚstringZ ascii_lettersZdigitsrbrer¯rfrprtr­rrurÁrŠr¶r–r—r™r“r”rˆrUršrr£r‚r¥r€r¦rÂr¨rªrjr´r­rr rÁrÃr½rÆrÇrÊrÌr¹r–r˜r—rÖrÝrÓrÍrÏr!r!r!r"r$2sø               +    %þ              $ .    ÿ %     ,#v  r$cCs tt|ƒƒSrÖ)rCr)rÅr!r!r"rÑsrÑz[ \t]*cCs$t |¡}| ¡t| ¡ |¡ƒfS)zÌReturn 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_rerŸraròÚgrouprÏ)rør«r¢r!r!r"rÒs rÒc@s8eZdZdd„Zdd„Zejejdfdd„Zdd „Z d S) rßcCs(||_||_d|_|_d|_|_dSrÞ)rFr«rŽÚfinishedÚ blkopenlineÚ indentedline)rÐrFr«r!r!r"rÕs zIndentSearcher.__init__cCsL|jr dS|jd}|_t|ƒd}|j |dd¡r:dS|j ||d¡S)Nr>rTrEz>=raz lineend+1c)rærŽr¯rFrïrÄ)rÐrŽrœr!r!r"Úreadlines zIndentSearcher.readline)ÚclassÚdefÚforÚifÚtryÚwhilec Cs>|jrn2||kr ||vr ||_n||kr:|jr:||_d|_dS)NrT)rærçrè) rÐrEÚtokenÚstartrarøÚINDENTÚNAMEZOPENERSr!r!r"Ú tokeneater&szIndentSearcher.tokeneaterc Csltj}|jt_zHz$t |j¡}|D]}|j|Žq"WntjtfyLYn0W|t_n|t_0|j|j fSrÖ) ÚtokenizeÚtabsizer«Úgenerate_tokensrérôÚ TokenErrorÚ SyntaxErrorrçrè)rÐZ save_tabsizeÚtokensrðr!r!r"r2s zIndentSearcher.runN) rMràrárÕrérõròrórôrr!r!r!r"rßs ý rßcCs6| d¡}|dkr.|d|…||dd…}||fS)Nr`rrT)rD)ÚsrŽr!r!r"r Ds r ú[ú]ú/)Z bracketleftZ bracketrightZslashcCs´| |¡}|rt ¡r"|dvr"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>rKrSrRr>rz-[a-z]\bcSs | ¡ ¡SrÖ)råÚupper©r¢r!r!r"rP]rQz!get_accelerator..z\b\w+\bcSst | ¡| ¡¡SrÖ)ÚkeynamesrÄrårr!r!r"rP^rQzKey-ZCancelz Ctrl-BreakzControl-zCtrl-r³ú+z>sz                     Z  4 ý