o ­=?hQã@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ƒdSdS)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)ÚdarwincCsdtj\}}}}}d||f}|d|f7}|dkr"|d|f7}|S|dkr0|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!ú5/opt/alt/python310/lib64/python3.10/idlelib/editor.pyÚ_sphinx_version&s þr#c@s4eZdZddlmZddlmZmZddlm Z ddl m Z m Z ddl mZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZmZmZmZddl m!Z!ddl"m#Z#e$ %¡Z&dZ'dZ(dZ)dZ*dØdd„Z+dÙdd„Z,dd„Z-dd„Z.dd„Z/dd„Z0dÙdd„Z1gd ¢Z2d!d"„Z3d#d$„Z4d%d&„Z5d'd(„Z6d)d*„Z7dZ8d+d,„Z9d-gZ:d.d/„Z;d0d1„ZdÙd6d7„Z?dÙd8d9„Z@dÙd:d;„ZAdÙdd?„ZCd@dA„ZDdBdC„ZEdÙdDdE„ZFdÙdFdG„ZGdHdI„ZHdJdK„ZIdLdM„ZJdNdO„ZKdPdQ„ZLdRdS„ZMdTdU„ZNdVdW„ZOdXdY„ZPdZd[„ZQd\d]„ZRdÙd^d_„ZSdÙd`da„ZTdÙdbdc„ZUddde„ZVdfdg„ZWdhdi„ZXdjdk„ZYdldm„ZZdndo„Z[dpdq„Z\drds„Z]e^j_e^j`dtZadudv„Zbdwdx„Zcdydz„Zdd{d|„Zed}d~„Zfdd€„Zgdd‚„Zhdƒd„„ZidÙd…d†„Zjd‡dˆ„Zkd‰dŠ„Zld‹dŒ„ZmddŽ„Zndd„Zod‘d’„Zpd“d”„Zqd•d–„ZrdÚd˜d™„Zsdšd›„ZtdÚdœd„ZudždŸ„Zvd d¡„Zwd¢d£„Zxd¤d¥„Zyd¦d§„Zzd¨d©„Z{dªd«„Z|d¬d­„Z}d®d¯„Z~d°d±iZd²d³„Z€dÙd´dµ„ZdÛ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Ë„ZŒdÌdÍ„ZdÎdÏ„ZŽdÐdÑ„ZdÒdÓ„ZdÔ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)Ú ZoomHeightNTc Cs” ddlm}tjdur±tj tjdd¡}tj   d¡r:ddtj dd…}tj  d ¡r.d }n^d }tj ||dd¡}nRtj dd…d krddl } d } dtj›d} z |  | j| ¡} Wntyuz |  | j| ¡} Wn tyrYnwYnwtj | ¡r~| }n tj dkrŒtj tjd¡}tj |¡}tj |¡r§|t_tj dkr¦dtjt_n dtj dd…t_||_|p¸|j}||_t|ƒ|_tj||jd|_} |rØ|j|_|j|j_ni|_i|j_t j!oétj t j!d¡|_"d |_#t$| ƒ|_%} t&| dd|_'}t j(ddddd}ddd d|d!t j(ddd"ddd#œ}t)t*ƒ| fi|¤Ž|_+}|j+|j_,| -¡| .¡|j /d$|j0¡|j 1d%|j2¡t3 4¡r]| 1d%|j2¡| 1d&|j5¡| 1d'|j5¡n| 1d(|j5¡| 1d)t6¡| 1d*t6¡| 1d+t6¡| 1d,|j7¡| 1d-|j8¡| 1d.|j9¡| 1d/|j:¡| 1d0|j;¡| 1d1|j<¡| 1d2|j=¡| 1d3|j>¡| 1d4|j?¡| 1d5|j@¡| 1d6d7d8„¡| 1d9|jA¡| 1d:|jB¡| 1d;|jC¡| 1d<|jD¡| 1d=|jE¡| 1d>|jF¡| 1d?|jG¡| 1d@|jH¡| 1dA|jI¡| 1dB|jJ¡| 1dC|jK¡| L|¡|_M}| 1dD|jN¡| 1dE|jO¡| 1dF|jP¡| 1dG|jQ¡| 1dH|jR¡| 1dI|jS¡| T|¡}| 1dJ|jU¡| 1dK|jV¡| 1dL| Wd¡¡| 1dM| WdN¡¡| 1dO|jX¡| 1dP|jY¡| 1dQ|jZ¡|r±||j|<|r||j[|<| 1dR|j\¡| 1dS|jj]¡| 1dT|j^¡| 1dU|j_¡| 1dV|j`¡| a¡| jbtctddNdW| jedNdNdX| jfdNdNdX|jg|dY<|jhdNdtidZ|jj|d[<t  k|jdd¡|d\<|jhdNdNtidZ| l¡| m¡t j(dd]d^d_d}| |_nd`|_o|jo|_p| q¡trt daƒs|j+dbt _s| t¡dc|_u| v|¡|_w}| x¡|_y}| z|¡|j{|_{|j||_|| }|j~¡| |¡|_€}| |j‚¡dd|_ƒ| „dd¡d|_…d|_†d|_‡|rtj ˆ|¡rˆtj  |¡sˆ| ‰|¡r‡de|_ƒ| Š|¡}| „|¡n| ‹|¡de|_ƒ| Œ¡| ~¡| ¡| Ž¡|j df¡}|rË| ‘dg¡}|durµdh}|dkrÂ| ’¡|dN}||_“t ”|j•¡t–j—|_—t˜j™|_™t˜jš|_š| ›didj¡| ›dkdldmdn¡| ›dodp¡| ›dqdr¡| ›dsdrdtdu¡| œ||j¡}| 1di|jž¡| 1dk|jŸ¡| 1dv|j ¡| 1dw| ¡|¡j¢¡| 1dx| £|¡j¤¡| ¥|¡}| 1dy|j¦¡| 1ds|j§¡||ƒ}| 1dz|j¨¡| 1d{|j©¡| 1d||jª¡| 1d}| «|¡j¬¡| ­|¡|_®}| 1do|j¯¡| 1dq|j°¡| 1d~|j±¡| 1d| ²|¡j³¡|j´r™| µ|¡|_†| 1d€|j†j¶¡n| ·dd‚dƒ¡|j¸rÁ| ¹|¡|_‡t j(ddd„d_dr¸| º¡| 1d…|jº¡dS| ·dd†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/ÚwinÚzSoftware\Python\PythonCore\z\Help\Main Python Documentationrz0Resources/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?ÚpadxZwrapZhighlightthicknessrAZtabstylerGZWM_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"Ú´sz'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.runscriptr8r$Úhelp_urlÚosÚpathÚjoinrÚ base_prefixÚplatformÚcountrÚisdirÚwinregÚwinverÚ QueryValueÚHKEY_CURRENT_USERÚFileNotFoundErrorÚHKEY_LOCAL_MACHINEÚisfileÚnormpathÚflistÚrootÚMenuÚmenubarrZListedToplevelÚtopÚvarsÚ tkinter_varsZ inversedictÚ instance_dictrZuserdirÚrecent_files_pathÚprompt_last_lineÚFrameÚ text_framerr>Ú GetOptionr ZTextrEZfocused_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(ÚundoZ 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-Úuser_input_insert_tagsZautocomplete_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_eventr7Zzoom_height_eventÚallow_code_contextr0Ztoggle_code_context_eventÚupdate_menu_stateÚallow_line_numbersr1Útoggle_line_numbers_event)ÚselfrtÚfilenameÚkeyrur8ZdochomeZpyverZbasepathrlZdocfileZKEYrxrr>rAZ text_optionsrErœÚindentsZ usespacesr´rµr¹Ú is_py_srcr=r_Z autocompleteZ parenmatchZ scriptbindingrÎr!r!r"Ú__init__IsÞ     ÿ ÿ ÿ€ü €  ÿ    € ÿ    ÿÿù           ÿ         €       ÿ  ÿÿÿ ÿ  ÿ ÿzEditorWindow.__init__cCs | ¡dS©N)r¬©rÓrNr!r!r"r‡kó zEditorWindow.handle_winconfigcCs^|j}tt|jj| d¡| d¡gƒƒ}| ¡d|}t|| d¡d d¡}|||_ dS)NZborderrHr<rY)rYÚ0) rEÚsumÚmapÚtkZgetintZcgetZ winfo_widthrÚmeasurerA)rÓrEZ inner_paddingZ pixel_widthZzero_char_widthr!r!r"r¬nsÿÿzEditorWindow.set_widthcCs|j ¡\}}|j |¡dSrK)r¹ZdefaultfilenamertÚnew)rÓrNÚdirnameÚbasenamer!r!r"r£{s zEditorWindow.new_callbackcCs¼|jd@dkr|jdkrdS|j d¡r2|j ddd¡r2|j ddd¡r2t|j d¡ d¡d ƒ}n|j dd¡}tt |ƒƒD] }||d vrInq?t |ƒ}t|j d ¡ d¡d ƒ}||krad}d t |ƒd }|jd @dkry|j  ddd¡nV|j d¡s‡|j  dd ¡n|j |j d¡d|j d ¡¡rŸ|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Ú.rR)ú ú Úinsertzinsert linestart+ÚcÚselú1.0r_ú sel.firstZ my_anchorú<úsel.lastú>rL)ÚstateZkeysymrErÇÚcomparerBÚsplitrÆÚrangeÚlenÚstrÚ tag_removeÚmark_setÚtag_addÚsee)rÓrNZinsertptÚlineZlineatÚdestÚfirstÚlastr!r!r"r¡€sH ÿþ ÿ  ÿ    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)NrRZgrey75)rGZ borderwidthZ backgroundrZ _padding1z )rSrXzCol: ?rüzLn: ?)rSrTz<>z z)r,rxÚ status_barr~rriÚ set_labelZRIGHTr¨ZBOTTOMÚXrEr„Ú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çrXzCol: %srüzLn: %s)rErÇZINSERTrôrr)rÓrNrürXr!r!r"r»sz EditorWindow.set_line_and_column))ÚfileZ_File)ÚeditZ_Edit)ÚformatZF_ormat)ÚrunZ_Run)raZ_Options)rZ_Window)r Z_HelpcCsâ|j}i|_}|jD]'\}}t|ƒ\}}t||›ddƒ}t||d|d||<}|j|||dq t ¡rIt|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?r Z applicationZIDLE)r r=©r rr9z Recent Files)r r r=r )rwrÅÚ menu_specsÚprepstrÚgetattrrvZ add_cascader Z isCarbonTkÚ fill_menusÚrecent_files_menuZinsert_cascaderÇÚENDÚbase_helpmenu_lengthÚreset_help_menu_entries)rÓZmbarrÅr?r r r r=r!r!r"rËs,  ÿÿþ zEditorWindow.createmenubarcCsJ|jd}| d¡}|durd}||jkr| |jd|¡t |¡dS)Nrr_r`rR)rÅrÇrÉÚdeleterZadd_windows_to_menu)rÓr=r_r!r!r"rÊás   zEditorWindow.postwindowsmenucCó|j|}|j||ddS)z$Update label for menu item at index.)r N©rÅÚ entryconfig)rÓr=rÇr Úmenuitemr!r!r"Úupdate_menu_labelëó zEditorWindow.update_menu_labelcCr)z$Update state for menu item at index.©ròNr)rÓr=rÇròrr!r!r"rÐðrzEditorWindow.update_menu_statecGsT|dkrt|dƒ}t| d¡|ƒ| d¡}d}|df}|jj|g|¢RŽdS)zHandle scrollbar.Zmovetorr_ú@0,0ZscrollZunitsrL)ÚfloatÚroundÚ getlinenorEÚyview)rÓrNÚargsZfractionÚlinesr!r!r"r©õs ÿzEditorWindow.handle_yviewc Cs*|j}| d|j›d|j›¡}z| dd|¡o| |dd¡}Wn ty+d}Ynw|s;| ddd ¡| d |¡|jsB|  ¡|j}||_ t j dd …d k}|rY|j d d|jD]%}z|\}} } Wn tynYq\w| durtq\t|| ƒƒ} |j|| dq\| |j|j¡|r“|jj dddS)Nú@ú,rîrårðFrìrír_rêr9r:Zarrow)ZcursorrZibeamrL)rErÇÚxÚyróÚTclErrorrørùÚrmenuÚ make_rmenurNrriZconfigÚ rmenu_specsÚ ValueErrorrZentryconfigureZtk_popupZx_rootZy_root) rÓrNrEZnewdexZ in_selectionr*ZiswinÚitemr Ú eventnameZ verify_stateròr!r!r"r†sB ÿ ÿ    ÿ zEditorWindow.right_menu_event)ZCloserINcCsft|jdd}|jD]#}|d|d}}|dur)|j|fdd„}|j||dq | ¡q ||_dS)Nrr rRcSó| |¡dSrÙ©Úevent_generate©rEr/r!r!r"rV/óz(EditorWindow.make_rmenu..command©r rV)rvrEr,Ú add_commandrÈr*)rÓr*r.r r/rVr!r!r"r+*s   zEditorWindow.make_rmenucCs| ¡SrÙ)Úrmenu_check_copy©rÓr!r!r"Úrmenu_check_cut6szEditorWindow.rmenu_check_cutcCs2z|j d¡}Wn tyYdSw|rdSdS)NrîrbÚnormal©rErÇr))rÓZindxr!r!r"r79s  ÿ zEditorWindow.rmenu_check_copycCs0z |jj d|jd¡WdStyYdSw)Nztk::GetSelectionZ CLIPBOARDrbr:)rErßÚcallr)r8r!r!r"Úrmenu_check_pasteAs  ýÿzEditorWindow.rmenu_check_pastecCót |j¡dS)zHandle Help 'About IDLE' event.rL)r Z AboutDialogrxrÚr!r!r"rŽIs zEditorWindow.about_dialogcCst |jd¡dS)z&Handle Options 'Configure IDLE' event.ZSettingsrL)rZ ConfigDialogrxrÚr!r!r"rOszEditorWindow.config_dialogcCs"|jr|j}n|j}t |¡dS)zHandle Help 'IDLE Help' event.rL)rurxr Z show_idlehelp)rÓrNÚparentr!r!r"rŒUs  zEditorWindow.help_dialogc Csrtjdd…dkr1z t |j¡WdSty0}ztjdt|ƒ|j dWYd}~dSd}~wwt   |j¡dS)Nr9r:úDocument Start Failure©ÚtitleÚmessager?rL) rrireÚ startfilerdÚOSErrorrrËr÷rEÚ webbrowserÚopen)rÓrNÚwhyr!r!r"r_sû ÿ€û zEditorWindow.python_docscCó|j d¡dS)Nz<>rL©rEr2rÚr!r!r"rˆjó zEditorWindow.cutcCs |j d¡sdS|j d¡dS)Nrìz<>rL)rEZ tag_rangesr2rÚr!r!r"r‰ns  zEditorWindow.copycCs|j d¡|j d¡dS)Nz <>rêrL)rEr2rûrÚr!r!r"rŠuó  zEditorWindow.pastecCs.|j ddd¡|j dd¡|j d¡dS)Nrìrízend-1crêrL)rErúrùrûrÚr!r!r"r‘zs zEditorWindow.select_allcCs |j ddd¡|j d¡dS)Nrìrír_rêrL)rErørûrÚr!r!r"r’€s 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-1ccsD|jd@dkr zˆdƒˆdˆˆƒWdStyYdSwdS)NrFrrîrê)ròr)rM©Ú edge_indexZ edges_tableZself_text_indexZself_text_mark_setr!r"Ú move_at_edges ÿüz.move_at_edge)rErÇrù)rÓrNrOr!rMr"rž…s z&EditorWindow.move_at_edge_if_selectioncCrI)Nz rLrJrÚr!r!r"rŸ™rKzEditorWindow.del_word_leftcCrI)NzrLrJrÚr!r!r"r rKzEditorWindow.del_word_rightcCr>rK)rÚfindrErÚr!r!r"r“¡rKzEditorWindow.find_eventcCr>rK)rZ find_againrErÚr!r!r"r”¥rKzEditorWindow.find_again_eventcCr>rK)rZfind_selectionrErÚr!r!r"r–©rKz!EditorWindow.find_selection_eventcCst |j|j|j¡dSrK)r rEr¹rtrÚr!r!r"r•­sz EditorWindow.find_in_files_eventcCst |j¡dSrK)rrErÚr!r!r"r—±rKzEditorWindow.replace_eventcCsT|j}t |dd¡j}|dur(| ddd¡| d|›d¡| d¡| ¡dS) Nz Go To Linez/Enter a positive integer ('big' = end of file):rìrír_rêú.0rL)rErZGotoÚresultrørùrûr)rÓrNrEÚlinenor!r!r"r˜µsþü zEditorWindow.goto_line_eventcCspz |j dd¡ ¡}Wn tyd}Ynwt |jdd|¡j}|dur6|jr0|j |¡|S|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) rErÆÚstripr)rZ ModuleNamerRrtrGr¹rÀ)rÓr?Ú file_pathr!r!r"Ú open_moduleÃs$ ÿüü  ÿzEditorWindow.open_modulecCó | ¡dSrK)rVrÚr!r!r"rÛózEditorWindow.open_module_eventcCsJ|jj}|jjdkr |s| ¡}|durdSddlm}| |j|¡dS)NZPyShellEditorWindowrLr)Úbrowser) r¹rÔÚ __class__Ú__name__rVÚidlelibrYZ ModuleBrowserru)rÓrNrÔrYr!r!r"r¤ßs ÿ z EditorWindow.open_module_browsercCsddlm}| |j¡dS)Nr)Ú pathbrowserrL)r\r]Z PathBrowserru)rÓrNr]r!r!r"r¥êrLzEditorWindow.open_path_browsercCs&ddl}tjddg}|j|dddS)Nrz-cz,from turtledemo.__main__ import main; main()F)ÚshellrL)Ú subprocessrÚ executableÚPopen)rÓrNr_Úcmdr!r!r"r¦ïsþzEditorWindow.open_turtle_democCsV|dur'|dkr)|j dd|¡|j ddd¡|j ddd¡| ¡dSdSdS)Nrrêz%d.0rìrír_z insert +1l)rErùrørúÚcenter)rÓrSr!r!r"Úgotolineøs  üzEditorWindow.gotolinecCs`|rtj |¡r dStj tj |¡¡\}}tj |¡tvr dS|j dd¡}|  d¡o/d|vS)NTríz 1.0 lineendz#!Zpython) rerfrkÚsplitextrãÚnormcaserrErÆÚ startswith)rÓrÔÚbaseZextrür!r!r"rÁÿszEditorWindow.ispythonsourcecCs |jr|j |¡d|_dSdSrÙ)rtZunregister_maybe_terminater8r!r!r"Ú close_hooks  þzEditorWindow.close_hookcCs ||_dSrÙ)ri)rÓrir!r!r"Úset_close_hook ó zEditorWindow.set_close_hookcCs2|jr |j |¡| ¡|j |¡| ¡dSrÙ)rtZfilename_changed_editr¸rxZupdate_windowlist_registryrÂr8r!r!r"rºs    z!EditorWindow.filename_change_hookcCsD|jrdS| |jj¡r| ¡|_|jr |jj|j|jddSdS)N)ÚfilterZafter)r¼rÁr¹rÔr&r´Zinsertfilterafterrµr8r!r!r"Ú _addcolorizers ÿzEditorWindow._addcolorizercCs,|jsdS|j ¡|j |j¡d|_dSrÙ)r¼Z removecolorsr´Z removefilterr8r!r!r"Ú _rmcolorizer s   zEditorWindow._rmcolorizercCsL| ¡| ¡t |j¡|jdur|j ¡|jdur$|j ¡dSdS)zUpdate the color themeN) rnrmr$r'rEr½Zupdate_highlight_colorsr¾Z update_colorsr8r!r!r"rÂ's    ÿzEditorWindow.ResetColorizerÚ_cCsp| d|¡| |¡}|r||jvr| d|d|¡d| |¡kr)| d|¡n| d|d¡| |¡dS)NZERRORz wordstartÚ rêz+1c)rúrÆÚ IDENTCHARSrùrû)rÓrEÚposÚcharr!r!r"Úcolorize_syntax_error6s  z"EditorWindow.colorize_syntax_errorcCs4tjddddd}|sd|jd<dStj|jd<dS) z&Update the cursor blink configuration.r@r$z cursor-blinkr[rCrr]N)rr€rEr\)rÓZ cursorblinkr!r!r"r²As ÿz EditorWindow.update_cursor_blinkcCsN|jdur |j ¡|jdur|j ¡t |jdd¡}||jd<| ¡dS)z.Update the text widgets' font if it is changedNr@r$rY)r½Z update_fontr¾rr«rurEr¬)rÓZnew_fontr!r!r"Ú ResetFontKs      zEditorWindow.ResetFontcCs|t ¡|j_}| ¡D]\}}|jj|g|¢RŽq | ¡D]}t |¡}|r;| ¡D]\}}|jj|g|¢RŽq,qdS)z/Remove the keybindings before they are changed.N) rÚGetCurrentKeySetr+Údefault_keydefsÚitemsrEZ event_deleteÚget_standard_extension_namesÚGetExtensionBindings)rÓÚkeydefsrNÚkeylistÚ extensionNameÚxkeydefsr!r!r"ÚRemoveKeybindings\s  €üzEditorWindow.RemoveKeybindingsc Cs>t ¡|j_}| ¡| ¡D]}t |¡}|r| |¡qi}|jjD]!}i||d<|dD]}|rE|d||dt|dƒd<q1q%|j D]R}|j |}|  t ¡}|dur[qJ|d7}t d|ƒD]7} |  | ¡dkr›| | d¡} | r›| | d¡} d} ||vr| ||vr||| } | r›t|| ƒ} |j| | dqdqJdS) z-Update the keybindings after they are changedrrRNrVÚ acceleratorr r;)r€)rrvr+rwr‚ryrzÚmenudefsrrÅrÇrrõrDZ entrycgetÚget_acceleratorr) rÓr{r}r~Z menuEventDictr=r.Z menubarItemr_rÇZaccelZitemNamerNr!r!r"ÚApplyKeybindingshsH   €    €þ        €õùzEditorWindow.ApplyKeybindingscCs"|jstjddddd|_dSdS)zCUpdate the indentwidth if changed and not using tabs in this windowr@rZz num-spacesrBrCN)r­rr€r¯r8r!r!r"r°Œs   ÿÿz#EditorWindow.set_notabs_indentwidthcCs|t ¡}|jd}| t¡}||jkr| |jd|¡|r7| ¡|D]}| |d¡}|j |d|dq$||jd<dS)z3Update the additional help entries on the Help menur rRrr5N) rZGetAllExtraHelpSourcesListrÅrÇrrrrÈÚ"_EditorWindow__extra_help_callbackr6)rÓZ help_listZhelpmenuZhelpmenu_lengthÚentryrbr!r!r"r“s   z$EditorWindow.reset_help_menu_entriescó|f‡fdd„ }|S)zCCreate a callback with the helpfile value frozen at definition timec s„| d¡s tj |¡}tjdd…dkr;zt |¡WdSty:}ztj dt |ƒˆj dWYd}~dSd}~wwt   |¡dS)N)ZwwwZhttpr9r:r@rA)rgrerfrsrrirDrErrËr÷rErFrG)ÚhelpfilerHr8r!r"Údisplay_extra_help¦s   ÿ€ÿz>EditorWindow.__extra_help_callback..display_extra_helpr!)rÓr‡rˆr!r8r"Z__extra_help_callback¤s z"EditorWindow.__extra_help_callbackc sÚg}|j}|r)tj |¡r)t|dddd }| ¡}Wdƒn1s$wY|rBtj |¡d}||vr<| |¡| d|¡g‰|D]}d|vsVtj |dd …¡s[ˆ  |¡qF‡fd d „|Dƒ}d }|dt |ƒ…}|r»zt|d ddd }|  |¡Wdƒn1sŠwYWn*t yº}zt |jddƒs°d|j_tjdd|›d|jdWYd}~nd}~ww|jjD]+} | j} |  dt¡t|ƒD]\} } |  ¡} |  | ¡} | j|| d| | ddqÎq¿dS)z/Load and update the recent files list and menusÚrÚutf_8r)r*ÚerrorsNrprúr`csg|]}|ˆvr|‘qSr!r!)Ú.0rf©Z bad_pathsr!r"Ú Æsz9EditorWindow.update_recent_files_list..Z1234567890ABCDEFGHIJKÚwÚrecentfiles_messageFTz IDLE Warningz)Cannot save Recent Files list to disk. z Select OK to continue.rArè)r rVr )r|rerfr¿rGÚ readlinesÚabspathÚremoverêÚappendröÚ writelinesrErrur‘rÚ showwarningrErxr{rrrÚ enumerateÚrstripÚ#_EditorWindow__recent_file_callbackr6)rÓÚnew_fileZrf_listrUZ rf_list_filerfZulcharsZrf_fileÚerrÚinstancer=ÚiÚ file_nameÚcallbackr!rŽr"róslÿ þ   €ÿ þ€ÿü€ý   þýýz%EditorWindow.update_recent_files_listcr†)Ncsˆjj|ddS)N)ZeditFile)r¹rG)Z fn_closurer8r!r"Úopen_recent_fileâsz=EditorWindow.__recent_file_callback..open_recent_filer!)rÓrŸr¡r!r8r"Z__recent_file_callbackász#EditorWindow.__recent_file_callbackcCs‚| ¡}| ¡}|r|r|d|t}n |r|}n|r|}nd}|p&|p&|}| ¡s3d|}d|}|j |¡|j |¡dS)Nz - Úuntitledz*%s*z*%s)Ú short_titleÚ long_titleÚ _py_versionÚ get_savedrxZwm_titleZ wm_iconname)rÓZshortZlongrBZiconr!r!r"r¸æs  zEditorWindow.saved_change_hookcCs |j ¡SrÙ)rµr¦r8r!r!r"r¦ørkzEditorWindow.get_savedcCs|j |¡dSrÙ)rµÚ set_saved)rÓÚflagr!r!r"r§ûszEditorWindow.set_savedcCs|j ¡dSrÙ)rµÚ reset_undor8r!r!r"r©þr4zEditorWindow.reset_undocCs|jj}|r tj |¡SdS)Nr¢)r¹rÔrerfrã)rÓrÔr!r!r"r£szEditorWindow.short_titlecCs |jjpdS)Nr;)r¹rÔr8r!r!r"r¤rÛzEditorWindow.long_titlecCrWrK)rcrÚr!r!r"r‹rXz EditorWindow.center_insert_eventrêcCsH|j}| ¡\}}| |¡}||}td||dƒ}| t|ƒ¡dS)NrRr<)rEÚgetwindowlinesr!Úmaxr"r)rÓÚmarkrErxÚbotrSrGZnewtopr!r!r"rc s   zEditorWindow.centercCsN|j}| d¡}| d¡}||kr#| ¡dkr#t|dƒ}||d}||fS)Nrz@0,65535rRrG)rEr!Z winfo_heightrB)rÓrErxr­rGr!r!r"rªs    zEditorWindow.getwindowlinescCs|j}tt| |¡ƒƒSrÙ)rErBrrÇ)rÓr¬rEr!r!r"r!szEditorWindow.getlinenocCs(|j ¡}t d|¡}ttt| ¡ƒƒS)zReturn (width, height, x, y)z(\d+)x(\d+)\+(-?\d+)\+(-?\d+))rxZ wm_geometryÚreÚmatchÚlistrÞrBÚgroups)rÓZgeomÚmr!r!r"Ú get_geometry"s  zEditorWindow.get_geometrycCrWrK)rƒrÚr!r!r"r…(rXzEditorWindow.close_eventcCsH|jr"| ¡s|j ¡dkr|j ¡|j ¡|j ¡|j ¡SdS)Nr:)r¹r¦rxròZ deiconifyÚlowerZliftÚ maybesaver8r!r!r"rµ,s    úzEditorWindow.maybesavecCs8z| ¡}t|ƒdkr| ¡|WStyYdSw)NZcancel)rµr÷Ú_closeÚAttributeError)rÓZreplyr!r!r"rƒ5s  ÿzEditorWindow.closecCs”|jjr |j|jjdt |j¡| ¡|j ¡d|_d|_|j r,|j  ¡d|_ d|_ d|_ |j  ¡d|_ |j  ¡|jrH| ¡dSdS)N)r›)r¹rÔrÃrZunregister_callbackrÊÚunload_extensionsrƒrµr¼rErzr´rxZdestroyrir8r!r!r"r¶>s$      þzEditorWindow._closecCsi|_| ¡dSrÙ)Ú extensionsÚload_standard_extensionsr8r!r!r"rÄRs zEditorWindow.load_extensionscCs0t|j ¡ƒD] }t|dƒr| ¡qi|_dS)Nrƒ)r°r¹Úvaluesr±rƒ)rÓÚinsr!r!r"r¸Vs  € zEditorWindow.unload_extensionscCs@| ¡D]}z| |¡Wqtdt|ƒƒt ¡YqdS)NzFailed to load extension)ryÚload_extensionÚprintÚreprÚ tracebackÚ print_exc)rÓr?r!r!r"rº\s  ûz%EditorWindow.load_standard_extensionscCs tjddS)NT)Z editor_only)rZ GetExtensionsr8r!r!r"rydrÛz)EditorWindow.get_standard_extension_namesZZzDummyZzzdummyc CsN|j ||¡}zz tjd|td}Wnttfy#t |¡}YnwWn ty2td|ƒ‚wt||ƒ}t   |¡}t |dƒrI|  |j |¡||ƒ}||j|<|r£| |¡|D]I}| dd¡}|dd…dkry|dd…}|dd…dksk|d d…d kr|dd …}|d d…d ks|d }t ||ƒr¢|j |t||ƒ¡q[dSdS) Nrç)Úpackagez Failed to import extension: rú-rorRrïr`rñZ_event)ÚextfilesrÆÚ importlibÚ import_moduleÚ __package__Ú ImportErrorÚ TypeErrorr¾rrrzr±rrr¹r‚rrEr„) rÓr?ZfnameÚmodÚclsr{r¼ZveventZ methodnamer!r!r"r½ksDÿ€  þ       ÿ ÿ €özEditorWindow.load_extensioncCsH|dur|jj}|j}||_| ¡D]\}}|r!|j|g|¢RŽqdSrÙ)r+rwrEr{rxrÌ)rÓr{rErNr|r!r!r"r‚‡s€þzEditorWindow.apply_bindingsc Csê|dur|jj}|dur|jj}|j}|j}|D]Z\}}| |¡}|s$q|D]K}|s/| ¡q&|\} } | dd…dk} | rC| dd…} t| ƒ\} } t|| ƒ} || fdd„}| rh|  | t ¡}|j | | || |dq&|j | | || dq&qdS)zAdd appropriate entries to the menus and submenus Menus that are absent or None in self.menudict are ignored. NrRú!cSr0rÙr1r3r!r!r"rV©r4z(EditorWindow.fill_menus..command)r r rVr€Zvariable)r r rVr€) r+rrwrÅrErÆrÈrr‚Ú get_var_objZ BooleanVarZadd_checkbuttonr6)rÓrr{rÅrEZmnameZ entrylistr=r…r r/Z checkbuttonr r€rVÚvarr!r!r"rs@       þþîüzEditorWindow.fill_menuscCs"| |¡}|r | ¡}|St|ƒ‚rÙ)rÍrÆÚ NameError)rÓr?rÎÚvaluer!r!r"Úgetvarµs zEditorWindow.getvarcCs&| ||¡}|r| |¡dSt|ƒ‚rÙ)rÍrªrÏ)rÓr?rÐÚvartyperÎr!r!r"Úsetvar½s zEditorWindow.setvarcCs,|j |¡}|s|r||jƒ|j|<}|SrÙ)rzrÆrE)rÓr?rÒrÎr!r!r"rÍÄs zEditorWindow.get_var_objcCs(|jr|j d|¡pd|j |¡vSdS)NZTODOÚSTRINGrR)r¼rEÚ tag_prevrangeZ tag_names)rÓZ text_indexr!r!r"Úis_char_in_stringÔs ÿzEditorWindow.is_char_in_stringcCs8z|j d¡}|j d¡}||fWStyYdSw)Nrîrð©NNr;)rÓrþrÿr!r!r"Úget_selection_indicesàs    ÿz"EditorWindow.get_selection_indicescCs|jdpt}t|ƒS)NÚtabs)rEÚTK_TABWIDTH_DEFAULTrB)rÓZcurrentr!r!r"Úget_tk_tabwidthëszEditorWindow.get_tk_tabwidthc CsF|j}| ¡|kr!|j dd|dd|jd|¡}|j|ddSdS)NrYràz -displayofÚn)rÙ)rErÛrßr<ZmasterZ configure)rÓZ newtabwidthrEZpixelsr!r!r"Úset_tk_tabwidthñs þûzEditorWindow.set_tk_tabwidthcCsP|r |r | ¡}d|krdkrnn||_|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 CsD|j}| ¡\}}|r|r| ||¡| d|¡dS| dd¡}|dkr9| ddd¡r3| d¡dS| ¡dS|dd vrF| d¡dS|j}t|  |¡ƒ}|d ksVJ‚|d |j |j }d } |dd…}| d } t|  |¡ƒ}||ks~|dd vrnqc|  ¡| d | d¡||krœ|  dd|||j ¡| ¡dS)NrêrLrær;rñríz insert-1cr`ú rrRTz insert-%dcrè)rErØrrùrÆróZbellr®röÚ expandtabsr¯r¶rêrÍr·) rÓrNrErþrÿÚcharsr®ZhaveZwantZ ncharsdeletedr!r!r"r™sH     ÿ    ûÿz"EditorWindow.smart_backspace_eventc Cs|j}| ¡\}}| ¡zm|r1|r1t|ƒt|ƒkr%|j |¡W| ¡S| ||¡| d|¡|  dd¡}t ||j ƒ\}}|t |ƒkrN|  ||j¡n!|jrTd}nt | |j ¡ƒ}|j} d| || }| d||j¡| d¡W| ¡dS| ¡w)NrêrærérèrL)rErØr¶Ú index2linerœrr·rrùrÆÚget_line_indentr®röÚ reindent_tor¯r­ràrêrÍrû) rÓrNrErþrÿÚprefixÚrawZ effectiveZpadrÜr!r!r"r›0s.    í    zEditorWindow.smart_indent_eventc CsJ|j}| ¡\}}| ¡zŒ|r|r| ||¡| d|¡| dd¡}dt|ƒ}}||krD||dvrD|d7}||krD||dvs6||kr\| dd|j¡W|  d¡|  ¡dS|d|…}d}|r~|d dvr~|dd …}|d7}|r~|d dvsl|rˆ| d |d¡| d¡dvr›| d¡| d¡dvs| dd|j¡t |  d¡ƒ} t  |j|j¡} |jsí|jD],} t| | dƒ} t| ƒd } | | d¡}|  |¡|  | | ¡¡}|dusâ| dkränq¸|  |pêd¡n| d d¡}|rú|d} nd } | | d¡}|  |¡|  d¡|  ¡}|t jkrk|t jkrnB|t jkr,| d||j¡n3|t jkr:| |   ¡¡n%|t j!krX|  "¡dkrP| d||j¡n| |  #¡¡nJd|fƒ‚W|  d¡|  ¡dS|  $¡}| d||j¡|  %¡r‚| &|¡n |r|  '¡r| (|¡W|  d¡|  ¡dS|  d¡|  ¡w)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ßrRrprLNr`zinsert - %d charsrQZconsolerízbogus continuation type %r))rErØr¶rrùrÆrörêrÍrûr·rârÇrZParserr¯r®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ÓrNrErþrÿrüržrÜÚindentÚlnor(ÚcontextZstartatZ startatindexZrawtextZbodr‰rër!r!r"ršSs¤    ÿÿ U  « þ ÿ    ÿÿ          ÿ ÷      ÿ 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_funccCs.|jrt||jƒ\}}d|d|Sd|S)Nrérè)r­Údivmodr®)rÓrÜZntabsZnspacesr!r!r"Ú _make_blanksÛszEditorWindow._make_blankscCsN|j}| ¡| ddd¡r| dd¡|r!| d| |¡|j¡| ¡dS)Nræz!=rê)rEr¶rórrêrîrÍr·)rÓrXrEr!r!r"räås ÿ zEditorWindow.reindent_tocCsVt|j|jƒ ¡\}}|r#|r#t||jƒ\}}t||jƒ\}}||Sd}}||S©Nr)ÚIndentSearcherrEr®rrã)rÓZopenerZindentedræZ indentsmallZ indentlarger!r!r"rÞôsÿzEditorWindow.guess_indentcCsN|jdurdS|jjr|j ¡d}n|j ¡d}|jdd|›dddS)NZShowZHiderarcz Line Numbers)r=rÇr )r¾Zis_shownZ hide_sidebarZ show_sidebarr)rÓrNZ menu_labelr!r!r"rÒýs    ÿz&EditorWindow.toggle_line_numbers_event)NNNNrÙ)rêr×)T)“r[Ú __module__Ú __qualname__Zidlelib.percolatorr%Zidlelib.colorizerr&r'Z idlelib.undor(Zidlelib.iomenur)r*r\r+Zidlelib.statusbarr,Zidlelib.autocompleter-Zidlelib.autoexpandr.Zidlelib.calltipr/Zidlelib.codecontextr0Zidlelib.sidebarr1Zidlelib.formatr2r3r4r5Zidlelib.parenmatchr6Zidlelib.zoomheightr7rÚgetfilesystemencodingZfilesystemencodingrdrÏrÑrÍrØr‡r¬r£r¡r§rrrrÊrrÐr©r*r†r,r+r9r7r=rŽrrŒrrˆr‰rŠr‘r’ržrŸr r“r”r–r•r—r˜rVrr¤r¥r¦rdrÁrirjrºrmrnrÂÚstringZ ascii_lettersZdigitsrqrtr²rurrƒr°rr„rÃršr¸r¦r§r©r£r¤r‹rcrªr!r³r…rµrƒr¶rÄr¸rºryrÄr½r‚rrÑrÓrÍrÖrØrÛrÝr»r™r›ršrçrîrärÞrÒr!r!r!r"r$2sú             $ +    %þ                 $ .    ÿ  %      +#x  r$cCs tt|ƒƒSrÙ)rBr)rÇr!r!r"râ rÛrâ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¯r_röÚgrouprà)rür®r²r!r!r"rãs rãc@s8eZdZdd„Zdd„Zejejdfdd„Zdd „Z d S) rðcCs(||_||_d|_|_d|_|_dSrï)rEr®ržÚfinishedÚ blkopenlineÚ indentedline)rÓrEr®r!r!r"rØ!s zIndentSearcher.__init__cCsL|jrdS|jd}|_t|ƒd}|j |dd¡rdS|j ||d¡S)Nr;rRrQz>=r_z lineend+1c)r÷ržr¿rErórÆ)rÓržr¬r!r!r"Úreadline's zIndentSearcher.readline)ÚclassÚdefÚforÚifÚtryÚwhilec CsJ|jrdS||kr||vr||_dS||kr!|jr#||_d|_dSdSdS)NrR)r÷rørù) rÓrDÚtokenÚstartr_rüÚINDENTÚNAMEZOPENERSr!r!r"Ú tokeneater0s  þzIndentSearcher.tokeneaterc Csltj}|jt_z$zt |j¡}|D]}|j|ŽqWn tjtfy&YnwW|t_n|t_w|j|j fSrÙ) ÚtokenizeÚtabsizer®Úgenerate_tokensrúrÚ TokenErrorÚ SyntaxErrorrørù)rÓZ save_tabsizeÚtokensrr!r!r"r<s  ÿý€ zIndentSearcher.runN) r[rñròrØrúrrrrrr!r!r!r"rðs  ý rðcCs6| d¡}|dkr|d|…||dd…}||fS)NrorrR)rP)Úsržr!r!r"rNs rú[ú]ú/)Z bracketleftZ bracketrightZslashcCs´| |¡}|rt ¡r|dvrdS|d}t ddd„|¡}t ddd„|¡}t d d|¡}t d d |¡}t d d |¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}|S)N>rQrJrPr;rz-[a-z]\bcSs | ¡ ¡SrÙ)röÚupper©r²r!r!r"rOgs z!get_accelerator..z\b\w+\bcSst | ¡| ¡¡SrÙ)ÚkeynamesrÆrörr!r!r"rOhszKey-ZCancelz Ctrl-BreakzControl-zCtrl-rÃú+z>s~                     d  4 ý    û