3 § fËã@s²ddlZddlZddlZddlZddlZddlZddlZddlZddl Tddl m Z ddl j ZddljZddlmZddlmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlm Z dZ!dej"ƒZ#e$jdkZ%dd„Z&Gdd„de'ƒZ(dd„Z)dd„Z*Gdd„de'ƒZ+dd„Z,dd d!d"œZ-d#d$„Z.d%d&„Z/d'd(„Z0e1d)k�r®dd*l2m3Z3e3d+d,d-d.�dd/l4m5Z5e5e0ƒdS)0éN)Ú*)Ú Scrollbar)ÚidleConf)Ú configdialog)Úgrep)Úhelp)Ú help_about)Úmacosx)ÚMultiCallCreator)Úpyparse)Úquery)Úreplace)Úsearch)Ú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/python36/lib64/python3.6/idlelib/editor.pyÚ_sphinx_version!s rc@s†eZdZddlmZddlmZmZddlm Z ddl m Z m Z ddl mZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlm Z ddl!m"Z"e#j$ƒZ%dZ&dõdd„Z'dd„Z(dd„Z)dd„Z*dd„Z+dödd„Z,d÷dødùdúdûdüdýgZ-d,d-„Z.d.d/„Z/d0d1„Z0d2d3„Z1dZ2d4d5„Z3dþgZ4d8d9„Z5d:d;„Z6dd?„Z8dÿd@dA„Z9�ddBdC„Z:�ddDdE„Z;�ddFdG„ZdLdM„Z?�ddNdO„Z@�ddPdQ„ZAdRdS„ZBdTdU„ZCdVdW„ZDdXdY„ZEdZd[„ZFd\d]„ZGd^d_„ZHd`da„ZIdbdc„ZJddde„ZKdfdg„ZL�ddhdi„ZM�ddjdk„ZN�ddldm„ZOdndo„ZPdpdq„ZQdrds„ZRdtdu„ZSdvdw„ZTdxdy„ZUdzd{„ZVd|d}„ZWeXjYeXjZd~Z[dd€„Z\d�d‚„Z]dƒd„„Z^d…d†„Z_d‡dˆ„Z`d‰dŠ„Zad‹dŒ„Zb�dd�dŽ„Zcd�d�„Zdd‘d’„Zed“d”„Zfd•d–„Zgd—d˜„Zhd™dš„Zid›dœ„Zjd�dž„Zk�d d d¡„Zld¢d£„Zm�d d¤d¥„Znd¦d§„Zod¨d©„Zpdªd«„Zqd¬d­„Zrd®d¯„Zsd°d±„Ztd²d³„Zud´dµ„Zvd¶d·„Zwd¸d¹iZxdºd»„Zy�d d¼d½„Zz�d d¾d¿„Z{dÀdÁ„Z|�d dÂdÄZ}�ddÄdÅ„Z~dÆdÇ„ZdÈdÉ„Z€dÊdË„Z�dÌdÍ„Z‚�ddÏdЄZƒdÑdÒ„Z„dÓdÔ„Z…dÕdÖ„Z†d×dØ„Z‡dÙdÚ„ZˆdÛdÜ„Z‰dÝdÞ„ZŠdßdà„Z‹dádâ„ZŒdãdä„Z�dådæ„ZŽdçdè„Z�dédê„Z�dëdì„Z‘dídî„Z’dïdð„Z“dñdò„Z”dódô„Z•dS(Ú EditorWindowr)Ú Percolator)ÚColorDelegatorÚ color_config)Ú UndoDelegator)Ú IOBindingÚencoding)Úmainmenu)ÚMultiStatusBar)Ú AutoComplete)Ú AutoExpand)ÚCalltip)Ú CodeContext)ÚFormatParagraph)Ú ParenMatch)ÚRstrip)ÚSqueezer)Ú ZoomHeightNc Csnddlm}tjdk�rtjjtjddƒ}tj j dƒrvddtj dd…}tjj d ƒr^d }qÌd }tjj||ddƒ}nVtj dd…d kr²tjjtjdd t ƒƒ} tjj| ƒrÌ| }ntj dkrÌtjjtjdƒ}tjj|ƒ}tjj|ƒ�r|t_tj dk�rdtjt_ndtj dd…t_||_|�p*|j}||_t|ƒ|_tj||jd�|_} |�rl|j|_|j|j_ni|_i|j_tjjtjdƒ|_d|_t| ƒ|_ } t!| dd�|_"} tj#ddddd�|_$dddd|j$d tj#ddd!dd�d"œ} t%t&ƒ| f| Ž|_'}|j'|j_(|j)ƒ|j*ƒ|jj+d#|j,ƒ|jj-d$|j.ƒt/j0ƒ�rp|j-d$|j.ƒ|j-d%|j1ƒ|j-d&|j1ƒn|j-d'|j1ƒ|j-d(|j2ƒ|j-d)|j2ƒ|j-d*|j2ƒ|j-d+|j3ƒ|j-d,|j4ƒ|j-d-|j5ƒ|j-d.|j6ƒ|j-d/|j7ƒ|j-d0|j8ƒ|j-d1|j9ƒ|j-d2|j:ƒ|j-d3|j;ƒ|j-d4d5d6„ƒ|j-d7|j<ƒ|j-d8|j=ƒ|j-d9|j>ƒ|j-d:|j?ƒ|j-d;|j@ƒ|j-d<|jAƒ|j-d=|jBƒ|j-d>|jCƒ|j-d?|jDƒ|j-d@|jEƒ|j-dA|jFƒ|j-dB|jGƒ|j-dC|jHƒ|j-dD|jIƒ|j-dE|jJƒ|j-dF|jKƒ|j-dG|jLƒ|j-dH|jMƒ|j-dI|jNƒ|j-dJ|jOdƒƒ|j-dK|jOdLƒƒ|j-dM|jPƒ|j-dN|jQƒ|j-dO|jRƒ|�rö||j|<|�r®||jS|<|j-dP|jTƒ|j-dQ|jjUƒ|j-dR|jVƒ|j-dS|jWƒ|j-dT|jXƒ|jYƒ|jZ| dU<| j[t\t]dV�| j^|dW<tj_|jddƒ|dX<| j[t`tadLdY�|j[tbtadLdY�|jcƒtj#ddZd[d\d�}| |_dd]|_e|je|_f|jgƒd^|_hd}|_i|jj|ƒ|_k}|jlƒ|_m}|jn|ƒ|jo|_o|jp|_p|jq|jrƒ|js|ƒ|_t}|ju|jvƒd^|_w|jxd^ƒd|_y|�rjtjjz|ƒ�rZtjj |ƒ �rZ|j{|ƒ�rjdb|_w|j||ƒ}|jx|ƒn|j}|ƒdb|_w|j~ƒ|jrƒ|jƒ|j€ƒ|j�j‚dcƒ}|�rà|jƒddƒ}|dk�r´d~}|dk�rÎ|j„ƒ|dL}||_…tj†|j‡ƒtˆj‰|_‰tŠj‹|_‹tˆjŒ|_Œ|j�dedfƒ|j�dgdhdidjƒ|j�dkdlƒ|j�dmdnƒ|j�dodndpdqƒ|jŽ|ƒ}|j-de|j�ƒ|j-dg|j�ƒ|j-dr|j‘ƒ|j-ds|j’|ƒj“ƒ|j-dt|j”|ƒj•ƒ|j–|ƒ}|j-du|j—ƒ|j-do|j˜ƒ||ƒ}|j-dv|j™ƒ|j-dw|jšƒ|j-dx|j›|ƒjœƒ|j�|ƒ}|j-dk|jžƒ|j-dm|jŸƒ|j-dy|j ƒ|j-dz|j¡|ƒj¢ƒ|j-d{|j£|ƒj¤ƒ|j¥|ƒ}|j-d||j¦ƒdS)Nr)Ú ScriptBindingZDocz index.htmlÚlinuxz 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)r9ZpadxZwrapZhighlightthicknessr;Ztabstyler@ZWM_DELETE_WINDOWz<>zz<2>z<3>z z z z<>z<>z <>z<>z<>z<>z<>z<>z<>z<>cSsdS)NÚbreakr)ÚeventrrrÚ¡sz'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<>Úcommand)ÚsideÚfillZyscrollcommandÚfont)rFrGÚexpandÚIndentz use-spacesÚboolrFé2éôé@KLTrÚendz<>z z<>zzzz<>zz<>zz<>zzz<>z<>z<>z<>z<>z<>z <>z<>z<>z<>z<>)rLrMrNéÿÿÿÿ)§Zidlelib.runscriptr1rÚ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_framerr8Ú GetOptionr;r ZTextr>Zfocused_widgetÚ createmenubarÚapply_bindingsZprotocolÚcloseÚbindÚ close_eventr ZisAquaTkÚright_menu_eventÚ mousescrollÚ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_eventÚindent_region_eventÚdedent_region_eventÚcomment_region_eventÚuncomment_region_eventÚtabify_region_eventÚuntabify_region_eventÚtoggle_tabs_eventÚchange_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Ú handle_yviewÚpackÚRIGHTÚYÚsetÚGetFontZLEFTZBOTHZTOPZ focus_setÚusetabsÚtabwidthÚ indentwidthÚset_notabs_indentwidthÚcontext_use_ps1Ú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ÚexistsÚloadfileÚispythonsourceZ set_filenameÚResetColorizerÚupdate_recent_files_listÚload_extensionsÚmenudictÚgetÚindexÚ add_separatorÚ wmenu_endZregister_callbackÚpostwindowsmenuÚ tkMessageBoxÚaskyesnoÚtkSimpleDialogÚ askintegerÚ showerrorÚ event_addr(Zautocomplete_eventZtry_open_completions_eventZforce_open_completions_eventr)Zexpand_word_eventr,Zformat_paragraph_eventr-Zflash_paren_eventZparen_closed_eventZcheck_module_eventZrun_module_eventr.Z do_rstripr*Ztry_open_calltip_eventZrefresh_calltip_eventZforce_open_calltip_eventr0Zzoom_height_eventr+Ztoggle_code_context_eventr/Zsqueeze_current_text_event)Úselfr[ÚfilenameÚkeyr\r1ZdochomeZpyverZbasepathZchmfiler_rfr8Z text_optionsr>Z usespacesr¡r¢r§Ú is_py_srcr6rOZ autocompleteZ parenmatchZ scriptbindingZctipZsqueezerrrrÚ__init__As€                                              zEditorWindow.__init__cCsnt|tƒr`y|j|jƒ}WnDtk r^y|j|jƒ}Wntk rX|jdƒ}YnXYnXtjdd|ƒS)z3Return filename as BMP unicode so diplayable in Tk.z iso8859-1u [ð�€€-ô�¿¿]u�)Ú isinstanceÚbytesÚdecodeÚfilesystemencodingÚUnicodeDecodeErrorr%ÚreÚsub)r½r¾rrrÚ_filename_to_unicodeDs z!EditorWindow._filename_to_unicodecCs|jjƒ\}}|jj|ƒdS)NrA)r§Zdefaultfilenamer[Únew)r½rBÚdirnameÚbasenamerrrr�Ss zEditorWindow.new_callbackcCsÄ|jd@dkr|jdkrdS|jjdƒrd|jjdddƒrd|jjdddƒrdt|jjdƒjdƒd ƒ}n:|jjddƒ}x*tt |ƒƒD]}||dkr€Pq€Wt |ƒ}t|jjd ƒjdƒd ƒ}||krÄd}d t |ƒd}|jd @dkrô|jj dddƒn²|jjdƒ�s|jj dd ƒn@|jj|jjdƒd|jjd ƒƒ�rD|jj ddƒn|jj ddƒ|jj|ƒ}|jjdƒ}|jj|d|ƒ�r†||}}|jj dddƒ|jj d||ƒ|jj d |ƒ|jjd ƒdS)NérZHomeZiomarkz<=zinsert lineendzinsert linestartÚ.rDú ú Úinsertzinsert linestart+ÚcÚselz1.0rOz sel.firstZ my_anchorúrA)rÏrÐ)ÚstateZkeysymr>r³Úcomparer<Úsplitr²ÚrangeÚlenÚstrÚ tag_removeÚmark_setÚtag_addÚsee)r½rBZinsertptÚlineZlineatÚdestÚfirstÚlastrrrrŽXs@      zEditorWindow.home_callbackcCs°|j|jƒ|_t|jdddd�}tjdkr<|jjddtd�|jjdd td�|jjd d td�|jjt t d �|jt t d �|j j d |j ƒ|j jd ddƒ|j j|j ƒdS)NrDZgrey75)r@Z borderwidthZ backgroundrZ _padding1z )rFÚcolumnzCol: ?ràzLn: ?)rFrGz<>z z)r'r_Ú status_barrerrVÚ set_labelr—r–ZBOTTOMÚXr>rkÚset_line_and_columnr¼Z after_idle)r½Úseprrrr”ƒs zEditorWindow.set_status_barcCs>|jjtƒjdƒ\}}|jjdd|ƒ|jjdd|ƒdS)NrÎräzCol: %sràzLn: %s)r>r³ZINSERTrØråræ)r½rBràrärrrrè“sz EditorWindow.set_line_and_columnÚfileÚ_FileÚeditÚ_EditÚformatÚF_ormatÚrunÚ_RunÚoptionsÚ_OptionsrÚ_WindowrÚ_HelpcCsÒ|j}i|_}xD|jD]:\}}t|ƒ\}}t||dd�||<}|j|||d�qWtjƒr‚t|ddd�|d<}|jd|d�|jƒt|jdd�|_ |jd j d d d|j d �|jd j t ƒ|_ |jƒdS)Nr)r9Útearoff)Úlabelr6Ú underlineZappleZ applicationZIDLE)r÷r6)rörêr3z Recent Files)r÷rør6r)r^r±Ú menu_specsÚprepstrr]Z add_cascader Z isCarbonTkÚ fill_menusÚrecent_files_menuZinsert_cascader³ÚENDÚbase_helpmenu_lengthÚreset_help_menu_entries)r½Zmbarr±r9r÷rør6rrrrh£s"   zEditorWindow.createmenubarcCsJ|jd}|jdƒ}|dkr d}||jkr<|j|jd|ƒtj|ƒdS)NrrOrDrP)r±r³rµÚdeleterZadd_windows_to_menu)r½r6rOrrrr¶·s   zEditorWindow.postwindowsmenucGsR|dkrÚyview)r½rBÚargsZfractionÚlinesrrrr•Ás  zEditorWindow.handle_yviewcCs@tj|jdktj|jdki}||jr*dnd}|jj|dƒdS)ašHandle scrollwheel event. For wheel up, event.delta = 120*n on Windows, -1*n on darwin, where n can be > 1 if one scrolls fast. Flicking the wheel generates up to maybe 20 events with n up to 10 or more 1. Macs use wheel down (delta = 1*n) to scroll up, so positive delta means to scroll up on both systems. X-11 sends Control-Button-4 event instead. rrÍr?rrAéûÿÿÿ)Z EventTypeZ MouseWheelZdeltaZButtonZnumr=r>Z yview_scroll)r½rBZuprrrrrnÌs zEditorWindow.mousescrollc CsØ|jjdd|j|jfƒ|js(|jƒ|j}||_tjdd…dk}|rX|jj dd�xX|j D]N}y|\}}}Wnt k rˆw`YnX|dkr”q`t ||ƒƒ}|j ||d�q`W|j|j|jƒ|rÔ|jj dd�d S) NrÑz@%d,%dr3r4Zarrow)Zcursor)rÖZibeamrA)r>rÝÚxÚyÚrmenuÚ make_rmenurBrrVÚconfigÚ rmenu_specsÚ ValueErrorÚgetattrZentryconfigureZtk_popupZx_rootZy_root) r½rBr ZiswinÚitemr÷Ú eventnameZ verify_staterÖrrrrmßs*  zEditorWindow.right_menu_eventÚCloseú<>cCsjt|jdd�}xP|jD]F}|d|d}}|dk rT|j|fdd„}|j||d�q|jƒqW||_dS)Nr)rörDcSs|j|ƒdS)N)Úevent_generate)r>rrrrrEsz(EditorWindow.make_rmenu..command)r÷rE)r]r>rÚ add_commandr´r )r½r rr÷rrErrrr ÿs  zEditorWindow.make_rmenucCs|jƒS)N)Úrmenu_check_copy)r½rrrÚrmenu_check_cut szEditorWindow.rmenu_check_cutc Cs6y|jjdƒ}Wntk r$dSX|r.dSdSdS)Nz sel.firstÚdisabledÚnormal)r>r³ÚTclError)r½Zindxrrrrs zEditorWindow.rmenu_check_copyc Cs6y|jjjd|jdƒWntk r,dSXdSdS)Nztk::GetSelectionZ CLIPBOARDrr)r>ÚtkÚcallr)r½rrrÚrmenu_check_pastes zEditorWindow.rmenu_check_pastecCstj|jƒdS)zHandle Help 'About IDLE' event.rA)rZ AboutDialogr_)r½rBrrrrus zEditorWindow.about_dialogcCstj|jdƒdS)z&Handle Options 'Configure IDLE' event.ZSettingsrA)rZ ConfigDialogr_)r½rBrrrrv$szEditorWindow.config_dialogcCs"|jr|j}n|j}tj|ƒdS)zHandle Help 'IDLE Help' event.rA)r\r_rZ show_idlehelp)r½rBÚparentrrrrs*s  zEditorWindow.help_dialogcCsntjdd…dkr^ytj|jƒWqjtk rZ}ztjdt|ƒ|j d�WYdd}~XqjXn t j |jƒdS)Nr3r4zDocument Start Failure)ÚtitleÚmessagerrA) rrVrRÚ startfilerQÚOSErrorr·r»rÛr>Ú webbrowserÚopen)r½rBÚwhyrrrrt4s$ zEditorWindow.python_docscCs|jjdƒdS)Nz<>rA)r>r)r½rBrrrro?s zEditorWindow.cutcCs |jjdƒsdS|jjdƒdS)NrÓz<>rA)r>Z tag_rangesr)r½rBrrrrpCs  zEditorWindow.copycCs|jjdƒ|jjdƒdS)Nz <>rÑrA)r>rrß)r½rBrrrrqJs  zEditorWindow.pastecCs.|jjdddƒ|jjddƒ|jjdƒdS)NrÓz1.0zend-1crÑrA)r>rÞrÝrß)r½rBrrrrxOs zEditorWindow.select_allcCs |jjdddƒ|jjdƒdS)NrÓz1.0rOrÑrA)r>rÜrß)r½rBrrrryUs 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. ú sel.first+1cú sel.last-1cc sB|jd@dkr>yˆdƒˆdˆˆƒWntk r<YnXdS)Nr?rz sel.firstrÑ)rÖr)rB)Ú edge_indexÚ edges_tableÚself_text_indexÚself_text_mark_setrrÚ move_at_edgees z.move_at_edge)r'r()r>r³rÝ)r½r)r-r)r)r*r+r,rr‹Zs z&EditorWindow.move_at_edge_if_selectioncCs|jjdƒdS)Nz rA)r>r)r½rBrrrrŒns zEditorWindow.del_word_leftcCs|jjdƒdS)NzrA)r>r)r½rBrrrr�rs zEditorWindow.del_word_rightcCstj|jƒdS)NrA)rÚfindr>)r½rBrrrrzvs zEditorWindow.find_eventcCstj|jƒdS)NrA)rZ find_againr>)r½rBrrrr{zs zEditorWindow.find_again_eventcCstj|jƒdS)NrA)rZfind_selectionr>)r½rBrrrr}~s z!EditorWindow.find_selection_eventcCstj|j|j|jƒdS)NrA)rr>r§r[)r½rBrrrr|‚sz EditorWindow.find_in_files_eventcCstj|jƒdS)NrA)r r>)r½rBrrrr~†s zEditorWindow.replace_eventcCsT|j}tjdd|d�}|dkr"dS|dkr6|jƒdS|jdd|ƒ|jdƒdS)NZGotozGo to line number:)rrArrÑz%d.0)r>r¹rºÚbellrÝrß)r½rBr>ÚlinenorrrrŠs  zEditorWindow.goto_line_eventc Cspy|jjddƒjƒ}Wntk r.d}YnXtj|jdd|ƒj}|dk rl|jr`|jj|ƒn |j 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. z sel.firstzsel.lastr7z Open ModulezAEnter the name of a Python module to search on sys.path and open:N) r>r²Ústriprr Z ModuleNameÚresultr[r%r§r¬)r½r9Z file_pathrrrÚ open_module—s  zEditorWindow.open_modulecCs |jƒdS)NrA)r3)r½rBrrrrw¯szEditorWindow.open_module_eventcCsJ|jj}|jjdko|s,|jƒ}|dkr,dSddlm}|j|j|ƒdS)NZPyShellEditorWindowrAr)Úbrowser) r§r¾Ú __class__Ú__name__r3Úidlelibr4Z ModuleBrowserr\)r½rBr¾r4rrrr‘³s  z EditorWindow.open_module_browsercCsddlm}|j|jƒdS)Nr)Ú pathbrowserrA)r7r8Z PathBrowserr\)r½rBr8rrrr’¾s  zEditorWindow.open_path_browsercCs&ddl}tjddg}|j|dd�dS)Nrz-cz,from turtledemo.__main__ import main; main()F)ÚshellrA)Ú subprocessrÚ executableÚPopen)r½rBr:Úcmdrrrr“Ãs zEditorWindow.open_turtle_democCsN|dk rJ|dkrJ|jjdd|ƒ|jjdddƒ|jjdddƒ|jƒdS)NrrÑz%d.0rÓz1.0rOz insert +1l)r>rÝrÜrÞÚcenter)r½r0rrrÚgotolineÌs zEditorWindow.gotolinecCsb| stjj|ƒrdStjjtjj|ƒƒ\}}tjj|ƒdkrBdS|jjddƒ}|jdƒo`d|kS) NTú.pyú.pywz1.0z 1.0 lineendz#!Úpython)r@rA) rRrSrXÚsplitextrÌÚnormcaser>r²Ú startswith)r½r¾ÚbaseZextràrrrr­ÓszEditorWindow.ispythonsourcecCs|jr|jj|ƒd|_dS)N)r[Zunregister_maybe_terminate)r½rrrÚ close_hookÜs zEditorWindow.close_hookcCs ||_dS)N)rG)r½rGrrrÚset_close_hookászEditorWindow.set_close_hookcCs2|jr|jj|ƒ|jƒ|jj|ƒ|jƒdS)N)r[Zfilename_changed_editr¦r_Zupdate_windowlist_registryr®)r½rrrr¨äs   z!EditorWindow.filename_change_hookcCsV|jr dS|j|jjƒr"|jƒ|_|jrR|jj|jƒ|jj|jƒ|jj|jƒdS)N) rªr­r§r¾r!r¡Ú removefilterr¢r£)r½rrrÚ _addcolorizerës zEditorWindow._addcolorizercCs,|js dS|jjƒ|jj|jƒd|_dS)N)rªZ removecolorsr¡rI)r½rrrÚ _rmcolorizerös  zEditorWindow._rmcolorizercCs |jƒ|jƒtj|jƒdS)zUpdate the color themeN)rKrJrr"r>)r½rrrr®ýszEditorWindow.ResetColorizerÚ_cCsp|jd|ƒ|j|ƒ}|r6||jkr6|jd|d|ƒd|j|ƒkrR|jd|ƒn|jd|dƒ|j|ƒdS)NZERRORz wordstartÚ rÑz+1c)rÞr²Ú IDENTCHARSrÝrß)r½r>ÚposÚcharrrrÚcolorize_syntax_errors  z"EditorWindow.colorize_syntax_errorcCstj|jddƒ|jd<dS)z.Update the text widgets' font if it is changedr:rrHN)rršr\r>)r½rrrÚ ResetFontszEditorWindow.ResetFontcCs„tjƒ|j_}x&|jƒD]\}}|jj|f|žŽqWxF|jƒD]:}tj|ƒ}|rBx&|jƒD]\}}|jj|f|žŽq^WqBWdS)z/Remove the keybindings before they are changed.N) rÚGetCurrentKeySetr&Údefault_keydefsÚitemsr>Z event_deleteÚget_standard_extension_namesÚGetExtensionBindings)r½ÚkeydefsrBÚkeylistÚ extensionNameÚxkeydefsrrrÚRemoveKeybindingss zEditorWindow.RemoveKeybindingsc CsVtjƒ|j_}|jƒx(|jƒD]}tj|ƒ}|r"|j|ƒq"Wi}xR|jjD]F}i||d<x4|dD](}|rj|d||dt|dƒd<qjWqPWx¶|j D]¬}|j |}|j t ƒ}|dkrÄq¢|d7}x€t d|ƒD]r} |j | ƒdkrØ|j| dƒ} | rØ|j| dƒ} d} ||k�r.| ||k�r.||| } | rØt|| ƒ} |j| | d�qØWq¢WdS) z-Update the keybindings after they are changedrrDNrEÚ acceleratorr÷r7)r])rrSr&rTrirVrWÚmenudefsrúr±r³rýrÙr=Z entrycgetÚget_acceleratorZ entryconfig) r½rXrZr[Z menuEventDictr6rZ menubarItemrOr³ZaccelZitemNamerBrrrÚApplyKeybindings#s<  (        zEditorWindow.ApplyKeybindingscCs|jstjddddd�|_dS)zCUpdate the indentwidth if changed and not using tabs in this windowr:rJz num-spacesr<)r=N)r›rrgr�)r½rrrržGs z#EditorWindow.set_notabs_indentwidthcCs€tjƒ}|jd}|jtƒ}||jkr8|j|jd|ƒ|rr|jƒx,|D]$}|j|dƒ}|j |d|d�qJW||jd<dS)z3Update the additional help entries on the Help menurrDr)r÷rEN) rZGetAllExtraHelpSourcesListr±r³rýrþrr´Ú"_EditorWindow__extra_help_callbackr)r½Z help_listZhelpmenuZhelpmenu_lengthÚentryr=rrrrÿNs    z$EditorWindow.reset_help_menu_entriescs|f‡fdd„ }|S)zCCreate a callback with the helpfile value frozen at definition timecs€|jdƒstjj|ƒ}tjdd…dkrrytj|ƒWq|tk rn}ztj dt |ƒˆj d�WYdd}~Xq|Xn t j |ƒdS)NÚwwwÚhttpr3r4zDocument Start Failure)r r!r)rcrd)rErRrSrZrrVr"r#r·r»rÛr>r$r%)Úhelpfiler&)r½rrÚdisplay_extra_helpas  $z>EditorWindow.__extra_help_callback..display_extra_helpr)r½rerfr)r½rZ__extra_help_callback_s z"EditorWindow.__extra_help_callbackcsÎg}tjj|jƒr8t|jdddd��}|jƒ}WdQRX|rjtjj|ƒd}||kr^|j|ƒ|jd|ƒg‰x4|D],}d|ks–tjj|dd…ƒ rtˆj |ƒqtW‡fd d „|Dƒ}d }|dt |ƒ…}y,t|jd ddd��}|j |ƒWdQRXWn\t k �rR}z>t |jddƒ�sBd|j_tjdd|jt|ƒƒ|jd�WYdd}~XnXxt|jjD]h}|j} | jdtƒxNt|ƒD]B\} } | jƒ} |j| ƒ} |j| ƒ} | j|| d| | dd��q~W�q^WdS)z/Load and update the recent files list and menusÚrÚutf_8r )r%ÚerrorsNrMrúrDcsg|]}|ˆkr|‘qSrr)Ú.0rS)Ú bad_pathsrrú sz9EditorWindow.update_recent_files_list..Z1234567890ABCDEFGHIJKÚwÚrecentfilelist_error_displayedFTz IDLE Warningz|Cannot update File menu Recent Files list. Your operating system says: %s Select OK and IDLE will continue without updating.)r r!rrÏ)r÷rErørP)rRrSr«rcr%Ú readlinesÚabspathÚremoverÑÚappendrÚÚ writelinesr#rr\ror·Ú showwarningrÉrÛr>r_rbrürrýÚ enumerateÚrstripÚ#_EditorWindow__recent_file_callbackr)r½Únew_fileZrf_listZ rf_list_filerSZulcharsZrf_fileÚerrÚinstancer6ÚiÚ file_nameZ ufile_nameÚcallbackr)rlrr¯nsL        z%EditorWindow.update_recent_files_listcs|f‡fdd„ }|S)Ncsˆjj|d�dS)N)ZeditFile)r§r%)Z fn_closure)r½rrÚopen_recent_file�sz=EditorWindow.__recent_file_callback..open_recent_filer)r½r}rr)r½rZ__recent_file_callbackœsz#EditorWindow.__recent_file_callbackcCs‚|jƒ}|jƒ}|r*|r*|d|t}n|r4|}n|r>|}nd}|pL|pL|}|jƒsfd|}d|}|jj|ƒ|jj|ƒdS)Nz - ÚUntitledz*%s*z*%s)Ú short_titleÚ long_titleÚ _py_versionÚ get_savedr_Zwm_titleZ wm_iconname)r½ZshortZlongr Ziconrrrr¦¡s  zEditorWindow.saved_change_hookcCs |jjƒS)N)r¢r„)r½rrrr„³szEditorWindow.get_savedcCs|jj|ƒdS)N)r¢Ú set_saved)r½Úflagrrrr…¶szEditorWindow.set_savedcCs|jjƒdS)N)r¢Ú reset_undo)r½rrrr‡¹szEditorWindow.reset_undocCs(|jj}|rtjj|ƒ}nd}|j|ƒS)Nr€)r§r¾rRrSrÌrÉ)r½r¾rrrr�¼s zEditorWindow.short_titlecCs|j|jjpdƒS)Nr7)rÉr§r¾)r½rrrr‚ÅszEditorWindow.long_titlecCs |jƒdS)NrA)r>)r½rBrrrrrÉsz EditorWindow.center_insert_eventrÑcCsH|j}|jƒ\}}|j|ƒ}||}td||dƒ}|jt|ƒƒdS)NrDr5)r>ÚgetwindowlinesrÚmaxrr)r½Úmarkr>r_Úbotr0r@Znewtoprrrr>Ís   zEditorWindow.centercCsN|j}|jdƒ}|jdƒ}||krF|jƒdkrFt|dƒ}||d}||fS)Nz@0,0z@0,65535rDr@)r>rZ winfo_heightr<)r½r>r_r‹r@rrrrˆÕs    zEditorWindow.getwindowlinescCs|j}tt|j|ƒƒƒS)N)r>r<rr³)r½rŠr>rrrrßszEditorWindow.getlinenocCs(|jjƒ}tjd|ƒ}ttt|jƒƒƒS)zReturn (width, height, x, y)z(\d+)x(\d+)\+(-?\d+)\+(-?\d+))r_Z wm_geometryrÇÚmatchÚlistÚmapr<Úgroups)r½ZgeomÚmrrrÚ get_geometryãs  zEditorWindow.get_geometrycCs |jƒdS)NrA)rj)r½rBrrrrlészEditorWindow.close_eventcCsH|jrD|jƒs:|jjƒdkr&|jjƒ|jjƒ|jjƒ|jjƒSdS)Nr)r§r„r_rÖZ deiconifyÚlowerZliftÚ maybesave)r½rrrr“ís   zEditorWindow.maybesavecCs |jƒ}t|ƒdkr|jƒ|S)NZcancel)r“rÛÚ_close)r½Zreplyrrrrjös zEditorWindow.closecCs’|jjr|j|jjd�tj|jƒ|jƒ|jjƒd|_d|_|j rZ|j jdƒd|_ d|_ d|_ |j jƒd|_ |j jƒ|jrŽ|jƒdS)N)ryF)r§r¾r¯rZunregister_callbackr¶Úunload_extensionsrjr¢rªr>rar¡r_ZdestroyrG)r½rrrr”üs"     zEditorWindow._closecCsi|_|jƒdS)N)Ú extensionsÚload_standard_extensions)r½rrrr°szEditorWindow.load_extensionscCs4x(t|jjƒƒD]}t|dƒr|jƒqWi|_dS)Nrj)r�r–ÚvaluesÚhasattrrj)r½Úinsrrrr•s  zEditorWindow.unload_extensionsc CsHxB|jƒD]6}y|j|ƒWq tdt|ƒƒtjƒYq Xq WdS)NzFailed to load extension)rVÚload_extensionÚprintÚreprÚ tracebackÚ print_exc)r½r9rrrr—s z%EditorWindow.load_standard_extensionscCs tjdd�S)NT)Z editor_only)rZ GetExtensions)r½rrrrV"sz)EditorWindow.get_standard_extension_namesZZzDummyZzzdummyc CsF|jj||ƒ}y>ytjd|td�}Wn"ttfk rHtj|ƒ}YnXWn tk rltd|ƒ‚YnXt||ƒ}t j |ƒ}t |dƒrš|j |j |ƒ||ƒ}||j|<|�rB|j|ƒx„|D]|}|jddƒ}x |dd…dkrò|dd…}qÔWx"|d d…d k�r|dd …}qöW|d }t ||ƒrÂ|jj|t||ƒƒqÂWdS) NrÎ)Úpackagez Failed to import extension: r^ú-rLrDrÔrÕZ_eventrPrP)Úextfilesr²Ú importlibÚ import_moduleÚ __package__Ú ImportErrorÚ TypeErrorrœrrrWr™rûr^r–rir r>rk) r½r9ZfnameÚmodÚclsrXršZveventZ methodnamerrrr›)s4         zEditorWindow.load_extensioncCsJ|dkr|jj}|j}||_x(|jƒD]\}}|r&|j|f|žŽq&WdS)N)r&rTr>rXrUr¼)r½rXr>rBrYrrrriEszEditorWindow.apply_bindingsc Csò|dkr|jj}|dkr |jj}|j}|j}xÀ|D]¸\}}|j|ƒ}|sJq2xž|D]–}|sb|jƒqP|\} } | dd…dk} | rŠ| dd…} t| ƒ\} } t|| ƒ} || fdd„}| rÔ|j | t ƒ}|j | | || |d�qP|j | | || d�qPWq2WdS)zAdd appropriate entries to the menus and submenus Menus that are absent or None in self.menudict are ignored. NrDú!cSs|j|ƒdS)N)r)r>rrrrrEgsz(EditorWindow.fill_menus..command)r÷rørEr]Zvariable)r÷rørEr]) r&r^rTr±r>r²r´rúr_Ú get_var_objZ BooleanVarZadd_checkbuttonr)r½r^rXr±r>ZmnameZ entrylistr6rbr÷rZ checkbuttonrør]rEÚvarrrrrûNs8        zEditorWindow.fill_menuscCs&|j|ƒ}|r|jƒ}|St|ƒ‚dS)N)r«r²Ú NameError)r½r9r¬ÚvaluerrrÚgetvarss  zEditorWindow.getvarcCs(|j||ƒ}|r|j|ƒnt|ƒ‚dS)N)r«r™r­)r½r9r®Úvartyper¬rrrÚsetvar{s  zEditorWindow.setvarcCs.|jj|ƒ}| r*|r*||jƒ|j|<}|S)N)rar²r>)r½r9r°r¬rrrr«‚s  zEditorWindow.get_var_objcCs,|jr$|jjd|ƒp"d|jj|ƒkSdSdS)NZTODOÚSTRINGrD)rªr>Ú tag_prevrangeZ tag_names)r½Z text_indexrrrÚis_char_in_string’szEditorWindow.is_char_in_stringc Cs:y |jjdƒ}|jjdƒ}||fStk r4dSXdS)Nz sel.firstzsel.last)NN)r>r³r)r½rârãrrrÚget_selection_indicesžs   z"EditorWindow.get_selection_indicescCs|jdp t}t|ƒS)NÚtabs)r>ÚTK_TABWIDTH_DEFAULTr<)r½ZcurrentrrrÚget_tk_tabwidth©szEditorWindow.get_tk_tabwidthcCsB|j}|jƒ|kr>|jjdd|dd|jd|ƒ}|j|d�dS)NrHZmeasurez -displayofÚn)r¶)r>r¸rrZmasterZ configure)r½Z newtabwidthr>ZpixelsrrrÚset_tk_tabwidth¯s   zEditorWindow.set_tk_tabwidthTcCsP|r@|r@|jƒ}d|ko"dknr.||_|j|jkr@d|_|j|jƒdS)Nr5rF)Ú guess_indentr�rœr›rº)r½rÀZguessr|rrrr©ºs z#EditorWindow.set_indentation_paramsc CsB|j}|jƒ\}}|r6|r6|j||ƒ|jd|ƒdS|jddƒ}|dkrp|jdddƒrd|jdƒn|jƒdS|d d krŠ|jdƒdS|j}t|j |ƒƒ}|d|j |j }d } xH||j krÄP|dd…}| d} t|j |ƒƒ}||kpø|dd kr¸Pq¸W|j ƒ|jd | dƒ||k�r6|j dd ||ƒ|jƒdS)NrÑrAzinsert linestartr7rÕz1.0z insert-1crDz rz insert-%dcrÏrPrPrP)r>rµrrÝr²r×r/rœrÚÚ expandtabsr�rdr¤rÑr¥) r½rBr>rârãÚcharsrœZhaveZwantZ ncharsdeletedrrrr€ÃsB          z"EditorWindow.smart_backspace_eventc Csê|j}|jƒ\}}|jƒzÀ|rV|rVt|ƒt|ƒkr>|j|ƒS|j||ƒ|jd|ƒ|jddƒ}t||j ƒ\}}|t |ƒkr�|j ||j ƒn>|j rœd}n&t |j|j ƒƒ}|j } d| || }|jd|ƒ|jdƒdS|jƒXdS)NrÑzinsert linestartrÐrÏrA)r>rµr¤Ú index2linerƒrrÝr²Ú classifywsrœrÚÚ reindent_tor�r›r¼rÑrßr¥) r½rBr>rârãÚprefixÚrawÚ effectiveZpadr¹rrrr‚ïs,        zEditorWindow.smart_indent_eventc Csî|j}|jƒ\}}|jƒ�z¸|r>|r>|j||ƒ|jd|ƒ|jddƒ}dt|ƒ}}x ||krx||dkrx|d}qZW||kr’|jddƒdS|d|…}d}x2|rÔ|d dkrÔ||jkrÔ|dd …}|d}q¤W|rê|jd|dƒx|jdƒdk�r|jdƒqìW|jddƒt |j dƒƒ} t j |j |jƒ} |j�sºxj|jD]`} t| | dƒ} t| ƒd } |j| dƒ}| j|ƒ| j|j|j| ƒƒ}|dk �s | dk�rDP�qDW| j|�p´dƒn@|jd dƒ}|�rÖ|d} nd } |j| dƒ}| j|ƒ| jdƒ| jƒ}|t jk�rŽ|t jk�rnn|t jk�r6|jd|ƒnT|t jk�rR|j| jƒƒn8|t jk�rŠ| j ƒdk�rz|jd|ƒn|j| j!ƒƒndS| j"ƒ}|jd|ƒ| j#ƒ�r¸|j$|ƒn|�rÒ| j%ƒ�rÒ|j&|ƒdS|j'dƒ|j(ƒXdS)NrÑzinsert linestartrz rDrMrAzinsert - %d charsz.0Zconsolez1.0rPrP))r>rµr¤rrÝr²rÚrÑrdr¾r³r ZParserr�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ßr¥)r½rBr>rârãràr|r¹ÚindentZlnor ÚcontextZstartatZ startatindexZrawtextZbodrgrÒrrrr�s†                              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_funcc Csz|jƒ\}}}}xTtt|ƒƒD]D}||}|rt||jƒ\}} | |j} |j| ƒ||d…||<qW|j||||ƒdS)NrA)Ú get_regionrÙrÚr¿rœr�Ú _make_blanksÚ set_region) r½rBÚheadÚtailr½rrOràrÂrÃrrrrƒ‚s z EditorWindow.indent_region_eventc Cs€|jƒ\}}}}xZtt|ƒƒD]J}||}|rt||jƒ\}} t| |jdƒ} |j| ƒ||d…||<qW|j||||ƒdS)NrrA) rÉrÙrÚr¿rœr‰r�rÊrË) r½rBrÌrÍr½rrOràrÂrÃrrrr„�sz EditorWindow.dedent_region_eventcCsR|jƒ\}}}}x,tt|ƒdƒD]}||}d|||<q"W|j||||ƒdS)NrDz##rA)rÉrÙrÚrË)r½rBrÌrÍr½rrOràrrrr…˜s z!EditorWindow.comment_region_eventcCsŠ|jƒ\}}}}xdtt|ƒƒD]T}||}|s0q|dd…dkrN|dd…}n|dd…dkrj|dd…}|||<qW|j||||ƒdS)Nr5z##rDú#rA)rÉrÙrÚrË)r½rBrÌrÍr½rrOràrrrr† s  z#EditorWindow.uncomment_region_eventc Cs–|jƒ\}}}}|jƒ}|dkr$dSx\tt|ƒƒD]L}||}|r2t||ƒ\} } t| |ƒ\} } d| d| || d…||<q2W|j||||ƒdS)NrÐrÏrA)rÉÚ _asktabwidthrÙrÚr¿ÚdivmodrË) r½rBrÌrÍr½rrœrOràrÂrÃÚntabsÚnspacesrrrr‡®s$z EditorWindow.tabify_region_eventcCs`|jƒ\}}}}|jƒ}|dkr$dSx&tt|ƒƒD]}||j|ƒ||<q2W|j||||ƒdS)NrA)rÉrÏrÙrÚr¼rË)r½rBrÌrÍr½rrœrOrrrrˆ»sz"EditorWindow.untabify_region_eventcCsF|jddd |jdd|jdd |jd �rB|j |_d |_d S)Nz Toggle tabsz Turn tabs ÚonÚoffz? Indent width úwill beú remains atz 8.z! Note: a tab is always 8 columns)rrrA)rÓrÔ)rÕrÖ)r¸r›r>r�)r½rBrrrr‰Äs  zEditorWindow.toggle_tabs_eventcCs:|jdd|j|jddd�}|r6||jkr6|j r6||_dS)Nz Indent widthz6New indent width (2-16) (Always use 8 when using tabs)r5é)rÚ initialvalueÚminvalueÚmaxvaluerA)rºr>r�r›)r½rBrÊrrrrŠÚsz%EditorWindow.change_indentwidth_eventcCsn|j}|jƒ\}}|r8|r8|j|dƒ}|j|dƒ}n|jdƒ}|jdƒ}|j||ƒ}|jdƒ}||||fS)Nz linestartz-1c lineend +1czinsert linestartzinsert lineend +1crM)r>rµr³r²rØ)r½r>rârãrÌrÍr½rrrrrÉæs     zEditorWindow.get_regioncCsx|j}dj|ƒ}||kr$|jƒdS|jdddƒ|jd|ƒ|jƒ|j||ƒ|j||ƒ|jƒ|j d|dƒdS)NrMrÓz1.0rOrÑ) r>rTr/rÜrÝr¤rrÑr¥rÞ)r½rÌrÍr½rr>ÚnewcharsrrrrËós    zEditorWindow.set_regioncCs2|jr&t||jƒ\}}d|d|Sd|SdS)NrÐrÏ)r›rÐrœ)r½r¹rÑrÒrrrrÊszEditorWindow._make_blankscCsJ|j}|jƒ|jdddƒr(|jddƒ|r>|jd|j|ƒƒ|jƒdS)Nzinsert linestartz!=rÑ)r>r¤r×rrÑrÊr¥)r½rär>rrrrÀ s zEditorWindow.reindent_tocCs|jdd|j|jddd�S)Nz Tab widthzColumns per tab? (2-16)r5r×)rrØrÙrÚ)rºr>r�)r½rrrrÏszEditorWindow._asktabwidthcCsPt|j|jƒjƒ\}}|r@|r@t||jƒ\}}t||jƒ\}}nd}}||S)Nr)ÚIndentSearcherr>rœrðr¿)r½ÚopenerZindentedrÂZ indentsmallZ indentlargerrrr»$s zEditorWindow.guess_indent)NNNN)N)rêrë)rìrí)rîrï)rðrñ)ròró)rrô)rrõ)rrN)N)N)N)N)N)N)N)N)N)N)rÑ)rÑ)N)NN)N)N)T)–r6Ú __module__Ú __qualname__Zidlelib.percolatorr Zidlelib.colorizerr!r"Z idlelib.undor#Zidlelib.iomenur$r%r7r&Zidlelib.statusbarr'Zidlelib.autocompleter(Zidlelib.autoexpandr)Zidlelib.calltipr*Zidlelib.codecontextr+Zidlelib.paragraphr,Zidlelib.parenmatchr-Zidlelib.rstripr.Zidlelib.squeezerr/Zidlelib.zoomheightr0rÚgetfilesystemencodingrÅrQrÁrÉr�rŽr”rèrùrhr¶r•rnr rmrr rrrrurvrsrtrorprqrxryr‹rŒr�rzr{r}r|r~rr3rwr‘r’r“r?r­rGrHr¨rJrKr®ÚstringZ ascii_lettersZdigitsrNrQrRr\r`ržrÿrar¯rxr¦r„r…r‡r�r‚rrr>rˆrr‘rlr“rjr”r°r•r—rVr¢r›rirûr¯r±r«r´rµr¸rºr©r€r‚r�rÄrƒr„r…r†r‡rˆr‰rŠrÉrËrÊrÀrÏr»rrrrr-s               +                $ .     %     ,#j        rcCs tt|ƒƒS)N)r<r)r³rrrr¾.sr¾cCs\d}}xJ|D]B}|dkr,|d}|d}q|dkrN|d}||d|}qPqW||fS)NrrÏrDrÐr)ÚsrœrÂrÃZchrrrr¿6s  r¿c@s8eZdZdd„Zdd„Zejejdfd d „Zd d„Z dS)rÜcCs(||_||_d|_|_d|_|_dS)Nr)r>rœr|ÚfinishedÚ blkopenlineÚ indentedline)r½r>rœrrrrÁKs zIndentSearcher.__init__cCsL|jr dS|jd}|_t|ƒd}|jj|ddƒr:dS|jj||dƒS)Nr7rDz.0z>=rOz lineend+1c)rãr|r�r>r×r²)r½r|rŠrrrÚreadlineQs zIndentSearcher.readlineÚclassÚdefÚforÚifÚtryÚwhilec Cs>|jrn2||kr ||kr ||_n||kr:|jr:||_d|_dS)NrD)rãrärå) r½r=ÚtokenÚstartrOràÚINDENTÚNAMEZOPENERSrrrÚ tokeneaterZszIndentSearcher.tokeneatercCsltj}|jt_zHy(tj|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ðfs   zIndentSearcher.runN)rçrèrérêrërì) r6rÞrßrÁræròrïrðrñrðrrrrrÜDs   rÜcCs6|jdƒ}|dkr.|d|…||dd…}||fS)NrLrrD)r.)râr|rrrrúxs rúú[ú]ú/)Z bracketleftZ bracketrightZslashcCs¶|j|ƒ}| s tjƒr$|dkr$dS|d}tjddd„|ƒ}tjd d d„|ƒ}tjd d|ƒ}tjd d |ƒ}tjdd|ƒ}tjdd|ƒ}tjdd|ƒ}tjdd|ƒ}tjdd|ƒ}|S)Nú<>ú <>ú<>r7rz-[a-z]\bcSs |jƒjƒS)N)ÚgroupÚupper)r�rrrrC‘sz!get_accelerator..z\b\w+\bcSstj|jƒ|jƒƒS)N)Úkeynamesr²rþ)r�rrrrC’szKey-ZCancelz Ctrl-BreakzControl-zCtrl-r¡ú+z>rürûrý)r²r Z isCocoaTkrÇrÈ)rXrrYrârrrr_‡s" r_cCs4|j}|jdddƒ|jdddƒ|jdddƒdS) NZtcl_wordBreakAfterza brr™Z tcl_wordcharsz\wZtcl_nonwordcharsz\W)rr)r\rrrrÚ fixwordbreaks�srcCs‚|}t|ƒtjdd…r&tjd}nd}tj|dƒt||d�}|j}d|d<x,tdƒD] }|jdd|t |ƒdƒqZWdS) NrD)r\r¾é r@érÑz rM) rrÚargvr ZsetupApprr>rÙrÑrÛ)rr\r¾rìr>r|rrrÚ_editor_window¦s   rÚ__main__)r:zidlelib.idle_test.test_editorr5F)Ú verbosityÚexit)rð)6Z importlib.abcr£Úimportlib.utilrRrVráròržr$ZtkinterZ tkinter.ttkrZtkinter.simpledialogZ simpledialogr¹Ztkinter.messageboxZ messageboxr·Zidlelib.configrr7rrrrr Zidlelib.multicallr r r r rrr·Zpython_versionrƒrrrÚobjectrr¾r¿rÜrúrr_rrr6Zunittestr:Zidlelib.idle_test.htestrðrrrrÚsn                   4