o
     JAfQ ã                   @   sò  d dl Zd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlT d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl m!Z! d dl"m#Z# d dlm$Z$ dZ%de &¡  Z'ejdkZ(dd„ Z)G dd„ dƒZ*dd„ Z+e ,d¡Z-dd „ Z.G d!d"„ d"ƒZ/d#d$„ Z0d%d&d'd(œZ1d)d*„ Z2d+d,„ Z3d-d.„ Z4e5d/kr÷d d0l6m7Z7 e7d1d2d3d4 d d5l8m9Z9 e9e4ƒ dS dS )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)Údarwinc                  C   sf   	 t j\} }}}}d| |f }|d|f 7 }|dkr#|d|f 7 }|S |dkr1|d|d |f 7 }|S )Nz%s%sz%sÚ	candidatezrc%sÚfinalr   )ÚsysÚversion_info)ÚmajorÚminorÚmicroÚlevelÚserialÚrelease© r!   ú%/usr/lib/python3.10/idlelib/editor.pyÚ_sphinx_version&   s   þr#   c                   @   s4  e Zd ZddlmZ ddlmZmZ ddlm	Z	 ddl
mZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZmZmZmZ ddl m!Z! ddl"m#Z# e$ %¡ Z&dZ'dZ(dZ)dZ*dØdd„Z+dÙdd„Z,dd„ Z-dd„ Z.dd„ Z/dd„ Z0dÙdd„Z1g d ¢Z2d!d"„ Z3d#d$„ Z4d%d&„ Z5d'd(„ Z6d)d*„ Z7dZ8d+d,„ Z9d-gZ:d.d/„ Z;d0d1„ Z<d2d3„ Z=d4d5„ Z>dÙd6d7„Z?dÙd8d9„Z@dÙd:d;„ZAdÙd<d=„ZBd>d?„ 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` dt Zadudv„ Zbdwdx„ Zcdydz„ Zdd{d|„ Zed}d~„ Zfdd€„ 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±iZd²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’dS )ÝÚEditorWindowr   )Ú
Percolator)ÚColorDelegatorÚcolor_config)ÚUndoDelegator)Ú	IOBindingÚencoding)Úmainmenu)ÚMultiStatusBar)ÚAutoComplete)Ú
AutoExpand)ÚCalltip)ÚCodeContext)ÚLineNumbers)ÚFormatParagraphÚFormatRegionÚIndentsÚRstrip)Ú
ParenMatch)Ú
ZoomHeightNTc                 C   s”	  ddl m} tjd u r±tj tjdd¡}tj	 
d¡r:ddtjd d…   }tj d	¡r.d
}n^d}tj ||dd¡}nRtj	d d… dkrdd l}	d}
dtj› d}z	|	 |	j|¡}
W n tyu   z	|	 |	j|¡}
W n	 tyr   Y nw Y nw tj |
¡r~|
}ntj	dkrŒtj tjd¡}tj |¡}tj |¡r§|t_tj	dkr¦dtj t_n
dtjd d…  t_|| _|p¸|j}|| _t|ƒ| _tj|| jd | _}|rØ|j| _|j| j_ni | _i | j_t j!oétj t j!d¡| _"d| _#t$|ƒ | _%}t&|dd | _'}t j(ddddd}ddd d|d!t j(ddd"ddd#œ}t)t*ƒ|fi |¤Ž | _+}| 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| jj]¡ | 1dT| j^¡ | 1dU| j_¡ | 1dV| j`¡ |  a¡  |jbtctddNdW |jedNdNdX |jfdNdNdX | jg|dY< |jhdNdtidZ |jj|d[< t  k| jdd¡|d\< |jhdNdNtidZ | l¡  |  m¡  t j(dd]d^d_d}| | _nd`| _o| jo| _p|  q¡  trt daƒs| j+db t _s|  t¡  dc| _u|  v|¡ | _w}|  x¡  | _y}| z|¡ |j{|_{|j||_|| }| j~¡ |  | ¡ | _€}| | j‚¡ dd| _ƒ|  „dd¡ d | _…d | _†d | _‡|rtj ˆ|¡rˆtj |¡sˆ| ‰|¡r‡de| _ƒ|  Š|¡}|  „|¡ n| ‹|¡ de| _ƒ|  Œ¡  |  ~¡  |  ¡  |  Ž¡  | j df¡}|rË| ‘dg¡}|d u rµdh}|dkrÂ| ’¡  |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(ddd„d_dr¸|  º¡  | 1d…| jº¡ d S |  ·dd†dƒ¡ d S )‡Nr   )ÚScriptBindingZDocz
index.htmlÚlinuxzpython-docs-z%s.%s.%sé   z/var/www/html/python/z/var/www/html/python/index.htmlz/usr/share/doc/ÚwinÚ zSoftware\Python\PythonCore\z\Help\Main Python Documentationr   z0Resources/English.lproj/Documentation/index.htmlzfile://zhttps://docs.python.org/%d.%d/é   )Úmenuzrecent-files.lstÚvbar)ÚnameÚmainr$   ÚwidthÚint©ÚtypeÚtexté   ZnoneZwordprocessorÚheight)r@   ÚpadxÚwrapZhighlightthicknessrB   ZtabstylerH   ZWM_DELETE_WINDOWú<<close-window>>z<Control-Button-1>z<2>z<3>z<MouseWheel>z
<Button-4>z
<Button-5>z<Configure>z<<cut>>z<<copy>>z	<<paste>>z<<center-insert>>z<<help>>z<<python-docs>>z<<about-idle>>z<<open-config-dialog>>ú<<open-module>>z<<do-nothing>>c                 S   s   dS ©NÚbreakr!   ©Úeventr!   r!   r"   Ú<lambda>´   s    z'EditorWindow.__init__.<locals>.<lambda>z<<select-all>>z<<remove-selection>>z<<find>>z<<find-again>>z<<find-in-files>>z<<find-selection>>z<<replace>>ú<<goto-line>>z<<smart-backspace>>z<<newline-and-indent>>z<<smart-indent>>z<<indent-region>>z<<dedent-region>>z<<comment-region>>z<<uncomment-region>>z<<tabify-region>>z<<untabify-region>>z<<toggle-tabs>>ú<<change-indentwidth>>z<Left>z<Right>é   z<<del-word-left>>z<<del-word-right>>z<<beginning-of-line>>z<<open-new-window>>z<<close-all-windows>>z<<open-class-browser>>z<<open-path-browser>>z<<open-turtle-demo>>)ÚsideÚfillÚexpand)ZweightÚcommand)ÚrowÚcolumnZstickyZyscrollcommandÚfontÚIndentz
use-spacesÚboolr   Úblink_off_timeÚinsertofftime)é2   iô  i@KL FTr   Úendéÿÿÿÿz<<autocomplete>>z	<Key-Tab>z<<try-open-completions>>z<KeyRelease-period>z<KeyRelease-slash>z<KeyRelease-backslash>z<<try-open-calltip>>z<KeyRelease-parenleft>z<<refresh-calltip>>z<KeyRelease-parenright>z<<paren-closed>>z<KeyRelease-bracketright>z<KeyRelease-braceright>z<<force-open-completions>>z<<expand-word>>z<<format-paragraph>>z<<flash-paren>>z<<check-module>>z<<run-module>>z<<run-custom>>z<<do-rstrip>>z<<force-open-calltip>>z<<zoom-height>>z<<toggle-code-context>>Úoptionsz*ode*ontextÚdisabledzline-numbers-defaultz<<toggle-line-numbers>>ú*ine*umbers)»Zidlelib.runscriptr8   r$   Ú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Úmenubarr   ZListedToplevelÚtopÚvarsÚtkinter_varsZinversedictÚinstance_dictr   ZuserdirÚrecent_files_pathÚprompt_last_lineÚFrameÚ
text_framer   r?   Ú	GetOptionr   ZTextrF   Zfocused_widgetÚcreatemenubarÚapply_bindingsÚprotocolÚcloseÚbindÚclose_eventr   ZisAquaTkÚ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_eventZdedent_region_eventZcomment_region_eventZuncomment_region_eventZtabify_region_eventZuntabify_region_eventr4   Ztoggle_tabs_eventZchange_indentwidth_eventÚmove_at_edge_if_selectionÚdel_word_leftÚdel_word_rightÚhome_callbackÚdictÚnew_callbackZclose_all_callbackÚopen_module_browserÚopen_path_browserÚopen_turtle_demoÚset_status_barÚpackZLEFTZBOTHZrowconfigureZcolumnconfigureÚhandle_yviewZgridZNSEWÚ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_stopZset_saved_change_hookÚsaved_change_hookr)   ÚioZset_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_endZregister_callbackÚpostwindowsmenur   Z
askintegerr   ZaskyesnoÚ	showerrorÚ	event_addr-   Úuser_input_insert_tagsZautocomplete_eventZtry_open_completions_eventZforce_open_completions_eventr.   Zexpand_word_eventr2   Zformat_paragraph_eventr6   Zflash_paren_eventZparen_closed_eventZcheck_module_eventZrun_module_eventZrun_custom_eventr5   Z	do_rstripr/   ÚctipZtry_open_calltip_eventZrefresh_calltip_eventZforce_open_calltip_eventr7   Zzoom_height_eventÚallow_code_contextr0   Ztoggle_code_context_eventÚupdate_menu_stateÚallow_line_numbersr1   Útoggle_line_numbers_event)Úselfrv   ÚfilenameÚkeyrw   r8   ZdochomeZpyverZbasepathrn   ZdocfileZKEYrz   r   r?   rB   Ztext_optionsrF   rŸ   ÚindentsZ	usespacesr·   r¸   r¼   Ú	is_py_srcr>   ra   ZautocompleteZ
parenmatchZscriptbindingrÑ   r!   r!   r"   Ú__init__I   sÞ  

ÿÿÿ€ü€

ÿ
€ÿ

ÿÿù







ÿ



€



ÿÿÿÿ
ÿ
ÿÿzEditorWindow.__init__c                 C   s   |   ¡  d S ©N)r¯   ©rÖ   rP   r!   r!   r"   rŠ   k  ó   zEditorWindow.handle_winconfigc                 C   s^   | j }tt|jj| d¡| d¡gƒƒ}| ¡ d|  }t|| d¡d d¡}|| | _	d S )NZborderrI   r=   r[   )r[   Ú0)
rF   ÚsumÚmapÚtkZgetintZcgetZwinfo_widthr   ÚmeasurerB   )rÖ   rF   Zinner_paddingZpixel_widthZzero_char_widthr!   r!   r"   r¯   n  s   ÿÿzEditorWindow.set_widthc                 C   s   | j  ¡ \}}| j |¡ dS rM   )r¼   Zdefaultfilenamerv   Únew)rÖ   rP   ÚdirnameÚbasenamer!   r!   r"   r¦   {  s   zEditorWindow.new_callbackc                 C   s¼  |j d@ dkr|jdkrd S | j d¡r2| j ddd¡r2| j ddd¡r2t| j d¡ d¡d	 ƒ}n| j dd¡}tt	|ƒƒD ]
}|| d
vrI nq?t	|ƒ}t| j d¡ d¡d	 ƒ}||krad}dt
|ƒ d }|j d	@ dkry| j ddd¡ nV| j d¡s‡| j dd¡ n| j | j d¡d| j d¡¡rŸ| j dd¡ n| j dd¡ | j |¡}| j d¡}| j |d|¡r¿||}}| j ddd¡ | j d||¡ | j d|¡ | j d¡ dS )Né   r   ZHomeZiomarkú<=zinsert lineendúinsert linestartÚ.rT   )ú ú	Úinsertzinsert linestart+ÚcÚselú1.0ra   ú	sel.firstZ	my_anchorú<úsel.lastú>rN   )ÚstateZkeysymrF   rÊ   ÚcomparerC   ÚsplitrÉ   ÚrangeÚlenÚstrÚ
tag_removeÚmark_setÚtag_addÚsee)rÖ   rP   ZinsertptÚlineZlineatÚdestÚfirstÚlastr!   r!   r"   r¤   €  sH   ÿþÿ
ÿ
zEditorWindow.home_callbackc                 C   s°   |   | j¡| _t| jdddd}tjdkr| jjddtd | jjdd	td | jjd
dtd | jjt	t
d |jt	t
d | j d| j¡ | j ddd¡ | j | j¡ d S )NrT   Zgrey75)rH   ZborderwidthZ
backgroundr   Z	_padding1z    )rU   rZ   zCol: ?rÿ   zLn: ?)rU   rV   z<<set-line-and-column>>z<KeyRelease>z<ButtonRelease>)r,   rz   Ú
status_barr€   r   rk   Ú	set_labelZRIGHTr«   ZBOTTOMÚXrF   r‡   Úset_line_and_columnrÏ   Z
after_idle)rÖ   Úsepr!   r!   r"   rª   «  s   
ÿzEditorWindow.set_status_barc                 C   s>   | j  t¡ d¡\}}| j dd| ¡ | j dd| ¡ d S )Nrê   rZ   zCol: %srÿ   zLn: %s)rF   rÊ   ZINSERTr÷   r  r  )rÖ   rP   rÿ   rZ   r!   r!   r"   r  »  s   z EditorWindow.set_line_and_column))ÚfileZ_File)ÚeditZ_Edit)ÚformatZF_ormat)ÚrunZ_Run)rc   Z_Options)r   Z_Window)r
   Z_Helpc                 C   sâ   | j }i  | _}| jD ]'\}}t|ƒ\}}t| |› dd ƒ}t||d|d ||< }|j|||d qt ¡ rIt|ddd |d< }|jd|d	 |  	¡  t| j dd
| _
| jd jddd| j
d | jd  t¡| _|  ¡  d S )NZ_menu_postcommandr   )r@   ÚtearoffÚpostcommand)Úlabelr>   Ú	underlineZapple)r@   r  ZapplicationZIDLE)r  r>   ©r  r  r:   zRecent Files)r  r  r>   r
   )ry   rÈ   Ú
menu_specsÚprepstrÚgetattrrx   Zadd_cascader   Z
isCarbonTkÚ
fill_menusÚrecent_files_menuZinsert_cascaderÊ   ÚENDÚbase_helpmenu_lengthÚreset_help_menu_entries)rÖ   ZmbarrÈ   r@   r  r  r  r>   r!   r!   r"   rƒ   Ë  s,   
ÿÿþzEditorWindow.createmenubarc                 C   sJ   | j d }| d¡}|d u rd}|| jkr| | jd |¡ t |¡ d S )Nr   ra   rb   rT   )rÈ   rÊ   rÌ   Údeleter   Zadd_windows_to_menu)rÖ   r>   ra   r!   r!   r"   rÍ   á  s   


zEditorWindow.postwindowsmenuc                 C   ó   	 | j | }|j||d d S )N)r  ©rÈ   Úentryconfig)rÖ   r>   rÊ   r  Úmenuitemr!   r!   r"   Úupdate_menu_labelë  ó   
zEditorWindow.update_menu_labelc                 C   r  )N©rõ   r  )rÖ   r>   rÊ   rõ   r  r!   r!   r"   rÓ   ð  r  zEditorWindow.update_menu_statec                 G   sV   	 |dkrt |d ƒ}t|  d¡| ƒ|  d¡ }d}|df}| jj|g|¢R Ž  dS )NZmovetor   ra   ú@0,0ZscrollZunitsrN   )ÚfloatÚroundÚ	getlinenorF   Úyview)rÖ   rP   ÚargsZfractionÚlinesr!   r!   r"   r¬   õ  s   ÿzEditorWindow.handle_yviewc              	   C   s*  | j }| d|j› d|j› ¡}z| dd|¡o| |dd¡}W n ty+   d}Y nw |s;| ddd	¡ | d
|¡ | jsB|  	¡  | j}|| _
tjd d… dk}|rY|jdd | jD ]%}z|\}}	}
W n	 tyn   Y q\w |
d u rtq\t| |
ƒƒ }|j||d q\| |j|j¡ |r“| j jdd dS )Nú@ú,rñ   rè   ró   Frï   rð   ra   rí   r:   r;   Zarrow)Zcursorr   ZibeamrN   )rF   rÊ   ÚxÚyrö   ÚTclErrorrû   rü   ÚrmenuÚ
make_rmenurP   r   rk   ZconfigÚrmenu_specsÚ
ValueErrorr  ZentryconfigureZtk_popupZx_rootZy_root)rÖ   rP   rF   ZnewdexZin_selectionr-  ZiswinÚitemr  Ú	eventnameZverify_staterõ   r!   r!   r"   r‰     sB   ÿÿ
ÿzEditorWindow.right_menu_event)ÚCloserK   Nc                 C   sf   t | jdd}| jD ]#}|d |d }}|d ur)| j|fdd„}|j||d q
| ¡  q
|| _d S )Nr   r  rT   c                 S   ó   |   |¡ d S rÜ   ©Úevent_generate©rF   r2  r!   r!   r"   rX   /  ó   z(EditorWindow.make_rmenu.<locals>.command©r  rX   )rx   rF   r/  Úadd_commandrË   r-  )rÖ   r-  r1  r  r2  rX   r!   r!   r"   r.  *  s   


zEditorWindow.make_rmenuc                 C   s   |   ¡ S rÜ   )Úrmenu_check_copy©rÖ   r!   r!   r"   Úrmenu_check_cut6  s   zEditorWindow.rmenu_check_cutc                 C   s2   z| j  d¡}W n
 ty   Y dS w |rdS dS )Nrñ   rd   Únormal©rF   rÊ   r,  )rÖ   Zindxr!   r!   r"   r;  9  s   ÿzEditorWindow.rmenu_check_copyc                 C   s0   z| j j d| j d¡ W dS  ty   Y dS w )Nztk::GetSelectionZ	CLIPBOARDrd   r>  )rF   râ   Úcallr,  r<  r!   r!   r"   Úrmenu_check_pasteA  s   ýÿzEditorWindow.rmenu_check_pastec                 C   s   	 t  | j¡ dS rM   )r   ZAboutDialogrz   rÝ   r!   r!   r"   r‘   I  s   zEditorWindow.about_dialogc                 C   s   	 t  | jd¡ dS )NZSettingsrN   )r   ZConfigDialogrz   rÝ   r!   r!   r"   r’   O  s   zEditorWindow.config_dialogc                 C   s$   	 | j r| j }n| j}t |¡ dS rM   )rw   rz   r
   Zshow_idlehelp)rÖ   rP   Úparentr!   r!   r"   r   U  s   
zEditorWindow.help_dialogc              
   C   sr   t jd d… dkr1z	t | j¡ W dS  ty0 } ztjdt|ƒ| j	d W Y d }~dS d }~ww t
 | j¡ dS )Nr:   r;   úDocument Start Failure©ÚtitleÚmessagerB  rN   )r   rk   rg   Ú	startfilerf   ÚOSErrorr   rÎ   rú   rF   Ú
webbrowserÚopen)rÖ   rP   Úwhyr!   r!   r"   r   _  s   û
ÿ€ûzEditorWindow.python_docsc                 C   ó   | j  d¡ dS )Nz<<Cut>>rN   ©rF   r6  rÝ   r!   r!   r"   r‹   j  ó   zEditorWindow.cutc                 C   s    | j  d¡sd S | j  d¡ dS )Nrï   z<<Copy>>rN   )rF   Z
tag_rangesr6  rÝ   r!   r!   r"   rŒ   n  s   zEditorWindow.copyc                 C   s   | j  d¡ | j  d¡ dS )Nz	<<Paste>>rí   rN   )rF   r6  rþ   rÝ   r!   r!   r"   r   u  ó   zEditorWindow.pastec                 C   s.   | j  ddd¡ | j  dd¡ | j  d¡ dS )Nrï   rð   zend-1crí   rN   )rF   rý   rü   rþ   rÝ   r!   r!   r"   r”   z  s   zEditorWindow.select_allc                 C   s    | j  ddd¡ | j  d¡ dS )Nrï   rð   ra   rí   rN   )rF   rû   rþ   rÝ   r!   r!   r"   r•   €  s   zEditorWindow.remove_selectionc                    s,   	 | j j‰| j j‰d‰‡ ‡‡‡fdd„}|S )N)zsel.first+1czsel.last-1cc                    sD   | j d@ dkr zˆdƒ ˆdˆˆ  ƒ W d S  ty   Y d S w d S )NrG   r   rñ   rí   )rõ   r,  rO   ©Ú
edge_indexZedges_tableZself_text_indexZself_text_mark_setr!   r"   Úmove_at_edge  s   ÿüz<EditorWindow.move_at_edge_if_selection.<locals>.move_at_edge)rF   rÊ   rü   )rÖ   rQ  rR  r!   rP  r"   r¡   …  s   z&EditorWindow.move_at_edge_if_selectionc                 C   rL  )Nz<Meta-Delete>rN   rM  rÝ   r!   r!   r"   r¢   ™  rN  zEditorWindow.del_word_leftc                 C   rL  )Nz<Meta-d>rN   rM  rÝ   r!   r!   r"   r£     rN  zEditorWindow.del_word_rightc                 C   ó   t  | j¡ dS rM   )r   ÚfindrF   rÝ   r!   r!   r"   r–   ¡  rN  zEditorWindow.find_eventc                 C   rS  rM   )r   Z
find_againrF   rÝ   r!   r!   r"   r—   ¥  rN  zEditorWindow.find_again_eventc                 C   rS  rM   )r   Zfind_selectionrF   rÝ   r!   r!   r"   r™   ©  rN  z!EditorWindow.find_selection_eventc                 C   s   t   | j| j| j¡ dS rM   )r	   rF   r¼   rv   rÝ   r!   r!   r"   r˜   ­  s   z EditorWindow.find_in_files_eventc                 C   s   t   | j¡ dS rM   )r   rF   rÝ   r!   r!   r"   rš   ±  rN  zEditorWindow.replace_eventc                 C   sT   | j }t |dd¡j}|d ur(| ddd¡ | d|› d¡ | d¡ |  ¡  dS )	Nz
Go To Linez/Enter a positive integer
('big' = end of file):rï   rð   ra   rí   ú.0rN   )rF   r   ZGotoÚresultrû   rü   rþ   r  )rÖ   rP   rF   Úlinenor!   r!   r"   r›   µ  s   þü
zEditorWindow.goto_line_eventc                 C   sr   	 z| j  dd¡ ¡ }W n ty   d}Y nw t | j dd|¡j}|d ur7| jr1| j |¡ |S | j	 
|¡ |S )Nrñ   ró   r<   zOpen ModulezAEnter the name of a Python module
to search on sys.path and open:)rF   rÉ   Ústripr,  r   Z
ModuleNamerV  rv   rJ  r¼   rÃ   )rÖ   r@   Ú	file_pathr!   r!   r"   Úopen_moduleÃ  s&   ÿüüÿzEditorWindow.open_modulec                 C   ó   |   ¡  dS rM   )rZ  rÝ   r!   r!   r"   r“   Û  ó   zEditorWindow.open_module_eventc                 C   sJ   | j j}| jjdkr|s|  ¡ }|d u rdS ddlm} | | j|¡ dS )NZPyShellEditorWindowrN   r   )Úbrowser)	r¼   r×   Ú	__class__Ú__name__rZ  Úidlelibr]  ZModuleBrowserrw   )rÖ   rP   r×   r]  r!   r!   r"   r§   ß  s   ÿz EditorWindow.open_module_browserc                 C   s   ddl m} | | j¡ dS )Nr   )ÚpathbrowserrN   )r`  ra  ZPathBrowserrw   )rÖ   rP   ra  r!   r!   r"   r¨   ê  rO  zEditorWindow.open_path_browserc                 C   s&   dd l }tjddg}|j|dd dS )Nr   z-cz,from turtledemo.__main__ import main; main()F)ÚshellrN   )Ú
subprocessr   Ú
executableÚPopen)rÖ   rP   rc  Úcmdr!   r!   r"   r©   ï  s   þzEditorWindow.open_turtle_democ                 C   sV   |d ur'|dkr)| j  dd| ¡ | j  ddd¡ | j  ddd¡ |  ¡  d S d S d S )Nr   rí   z%d.0rï   rð   ra   z
insert +1l)rF   rü   rû   rý   Úcenter)rÖ   rW  r!   r!   r"   Úgotolineø  s   üzEditorWindow.gotolinec                 C   s`   |rt j |¡r
dS t j t j |¡¡\}}t j |¡tv r dS | j dd¡}| 	d¡o/d|v S )NTrð   z1.0 lineendz#!Zpython)
rg   rh   rm   Úsplitextræ   Únormcaser   rF   rÉ   Ú
startswith)rÖ   r×   ÚbaseÚextrÿ   r!   r!   r"   rÄ   ÿ  s   zEditorWindow.ispythonsourcec                 C   s    | j r| j  | ¡ d | _ d S d S rÜ   )rv   Zunregister_maybe_terminater<  r!   r!   r"   Ú
close_hook  s   
þzEditorWindow.close_hookc                 C   s
   || _ d S rÜ   )rn  )rÖ   rn  r!   r!   r"   Úset_close_hook  ó   
zEditorWindow.set_close_hookc                 C   s2   | j r	| j  | ¡ |  ¡  | j | ¡ |  ¡  d S rÜ   )rv   Zfilename_changed_editr»   rz   Zupdate_windowlist_registryrÅ   r<  r!   r!   r"   r½     s
   z!EditorWindow.filename_change_hookc                 C   sD   | j rd S |  | jj¡r|  ¡ | _ | j r | jj| j | jd d S d S )N)ÚfilterZafter)r¿   rÄ   r¼   r×   r&   r·   Zinsertfilterafterr¸   r<  r!   r!   r"   Ú_addcolorizer  s   
ÿzEditorWindow._addcolorizerc                 C   s,   | j sd S | j  ¡  | j | j ¡ d | _ d S rÜ   )r¿   Zremovecolorsr·   Zremovefilterr<  r!   r!   r"   Ú_rmcolorizer   s
   

zEditorWindow._rmcolorizerc                 C   sN   	 |   ¡  |  ¡  t | j¡ | jd ur| j ¡  | jd ur%| j ¡  d S d S rÜ   )	rs  rr  r$   r'   rF   rÀ   Zupdate_highlight_colorsrÁ   Zupdate_colorsr<  r!   r!   r"   rÅ   '  s   


ÿzEditorWindow.ResetColorizerÚ_c                 C   sp   |  d|¡ | |¡}|r|| jv r|  d|d |¡ d| |¡kr)| d|¡ n| d|d ¡ | |¡ d S )NÚERRORz
 wordstartÚ
rí   z+1c)rý   rÉ   Ú
IDENTCHARSrü   rþ   )rÖ   rF   ÚposÚcharr!   r!   r"   Úcolorize_syntax_error6  s   
z"EditorWindow.colorize_syntax_errorc                 C   s6   	 t jddddd}|sd| jd< d S t j| jd< d S )NrA   r$   zcursor-blinkr]   rD   r   r_   )r   r‚   rF   r^   )rÖ   Zcursorblinkr!   r!   r"   rµ   A  s   ÿz EditorWindow.update_cursor_blinkc                 C   sP   	 | j d ur| j  ¡  | jd ur| j ¡  t | jdd¡}|| jd< |  ¡  d S )NrA   r$   r[   )rÀ   Zupdate_fontrÁ   r   r®   rw   rF   r¯   )rÖ   Znew_fontr!   r!   r"   Ú	ResetFontK  s   




zEditorWindow.ResetFontc                 C   s~   	 t  ¡  | j_}| ¡ D ]\}}| jj|g|¢R Ž  q|  ¡ D ]}t  |¡}|r<| ¡ D ]\}}| jj|g|¢R Ž  q-q d S rÜ   )	r   ÚGetCurrentKeySetr+   Údefault_keydefsÚitemsrF   Zevent_deleteÚget_standard_extension_namesÚGetExtensionBindings)rÖ   ÚkeydefsrP   ÚkeylistÚextensionNameÚxkeydefsr!   r!   r"   ÚRemoveKeybindings\  s   
€üzEditorWindow.RemoveKeybindingsc                 C   s@  	 t  ¡  | j_}|  ¡  |  ¡ D ]}t  |¡}|r|  |¡ qi }| jjD ]!}i ||d < |d D ]}|rF|d ||d  t|d ƒd < q2q&| j	D ]R}| j	| }| 
t¡}|d u r\qK|d7 }td|ƒD ]7}	| |	¡dkrœ| |	d¡}
|
rœ| |	d¡}d}||v rŽ||| v rŽ|| | }|rœt||ƒ}
|j|	|
d qeqKd S )Nr   rT   rX   Úacceleratorr  r<   )r†  )r   r|  r+   r}  r„   r  r€  Úmenudefsr  rÈ   rÊ   r  rø   rE   Z	entrycgetÚget_acceleratorr  )rÖ   r  rƒ  r„  ZmenuEventDictr>   r1  ZmenubarItemra   rÊ   ZaccelZitemNamerP   r!   r!   r"   ÚApplyKeybindingsh  sJ   

€ €þ



€õùzEditorWindow.ApplyKeybindingsc                 C   s$   	 | j stjddddd| _d S d S )NrA   r\   z
num-spacesrC   rD   )r°   r   r‚   r²   r<  r!   r!   r"   r³   Œ  s   
ÿÿz#EditorWindow.set_notabs_indentwidthc                 C   s~   	 t  ¡ }| jd }| t¡}|| jkr| | jd |¡ |r8| ¡  |D ]}|  |d ¡}|j	|d |d q%|| jd< d S )Nr
   rT   r   r9  )
r   ZGetAllExtraHelpSourcesListrÈ   rÊ   r  r  r  rË   Ú"_EditorWindow__extra_help_callbackr:  )rÖ   Z	help_listZhelpmenuZhelpmenu_lengthÚentryrf  r!   r!   r"   r  “  s   


z$EditorWindow.reset_help_menu_entriesc                    s   	 |f‡ fdd„	}|S )Nc              
      s„   |   d¡stj | ¡} tjd d… dkr;zt | ¡ W d S  ty: } ztj	dt
|ƒˆ jd W Y d }~d S d }~ww t | ¡ d S )N)ZwwwÚhttpr:   r;   rC  rD  )rk  rg   rh   ru   r   rk   rG  rH  r   rÎ   rú   rF   rI  rJ  )ÚhelpfilerK  r<  r!   r"   Údisplay_extra_help¦  s   

ÿ€ÿz>EditorWindow.__extra_help_callback.<locals>.display_extra_helpr!   )rÖ   r  rŽ  r!   r<  r"   Z__extra_help_callback¤  s   z"EditorWindow.__extra_help_callbackc              
      sÜ  	 g }| j }|r*tj |¡r*t|dddd}| ¡ }W d   ƒ n1 s%w   Y  |rCtj |¡d }||v r=| |¡ | d|¡ g ‰ |D ]}d|v sWtj |dd… ¡s\ˆ  	|¡ qG‡ fd	d
„|D ƒ}d}|dt
|ƒ… }|r¼zt|dddd}| |¡ W d   ƒ n1 s‹w   Y  W n* ty» } zt| jddƒs±d| j_tjdd|› d| jd W Y d }~nd }~ww | jjD ]+}	|	j}
|
 dt¡ t|ƒD ]\}}| ¡ }|	 |¡}|
j|| d | |dd qÏqÀd S )NÚrÚutf_8r   )r*   Úerrorsrv  r   ú rb   c                    s   g | ]}|ˆ vr|‘qS r!   r!   )Ú.0rh   ©Z	bad_pathsr!   r"   Ú
<listcomp>Æ  s    z9EditorWindow.update_recent_files_list.<locals>.<listcomp>Z1234567890ABCDEFGHIJKÚwÚrecentfiles_messageFTzIDLE Warningz)Cannot save Recent Files list to disk.
  z
Select OK to continue.rD  rë   )r  rX   r  )r~   rg   rh   rÂ   rJ  Ú	readlinesÚabspathÚremoverí   Úappendrù   Ú
writelinesrH  r  rw   r—  r   ÚshowwarningrF   rz   r}   r  r  r  Ú	enumerateÚrstripÚ#_EditorWindow__recent_file_callbackr:  )rÖ   Únew_fileZrf_listrY  Zrf_list_filerh   ZulcharsZrf_fileÚerrÚinstancer>   ÚiÚ	file_nameÚcallbackr!   r”  r"   rÆ   ³  sn   ÿ
þ

€ÿþ€ÿü€ý	
þýýz%EditorWindow.update_recent_files_listc                    s   |f‡ fdd„	}|S )Nc                    s   ˆ j j| d d S )N)ZeditFile)r¼   rJ  )Z
fn_closurer<  r!   r"   Úopen_recent_fileâ  s   z=EditorWindow.__recent_file_callback.<locals>.open_recent_filer!   )rÖ   r¥  r§  r!   r<  r"   Z__recent_file_callbacká  s   z#EditorWindow.__recent_file_callbackc                 C   s‚   |   ¡ }|  ¡ }|r|r|d | t }n|r|}n|r|}nd}|p&|p&|}|  ¡ s3d| }d| }| j |¡ | j |¡ d S )Nz - Úuntitledz*%s*z*%s)Úshort_titleÚ
long_titleÚ_py_versionÚ	get_savedrz   Zwm_titleZwm_iconname)rÖ   ZshortÚlongrE  Ziconr!   r!   r"   r»   æ  s   zEditorWindow.saved_change_hookc                 C   s
   | j  ¡ S rÜ   )r¸   r¬  r<  r!   r!   r"   r¬  ø  rp  zEditorWindow.get_savedc                 C   s   | j  |¡ d S rÜ   )r¸   Ú	set_saved)rÖ   Úflagr!   r!   r"   r®  û  s   zEditorWindow.set_savedc                 C   s   | j  ¡  d S rÜ   )r¸   Ú
reset_undor<  r!   r!   r"   r°  þ  r8  zEditorWindow.reset_undoc                 C   s   | j j}|rtj |¡S dS )Nr¨  )r¼   r×   rg   rh   ræ   )rÖ   r×   r!   r!   r"   r©    s   zEditorWindow.short_titlec                 C   s   | j jpdS )Nr<   )r¼   r×   r<  r!   r!   r"   rª    rÞ   zEditorWindow.long_titlec                 C   r[  rM   )rg  rÝ   r!   r!   r"   rŽ     r\  z EditorWindow.center_insert_eventrí   c                 C   sH   | j }|  ¡ \}}|  |¡}|| }td||d  ƒ}| t|ƒ¡ d S )NrT   r=   )rF   Úgetwindowlinesr$  Úmaxr%  r"  )rÖ   ÚmarkrF   rz   ÚbotrW  rH   Znewtopr!   r!   r"   rg    s   
zEditorWindow.centerc                 C   sN   | j }|  d¡}|  d¡}||kr#| ¡ dkr#t|d ƒ}|| d }||fS )Nr!  z@0,65535rT   rH   )rF   r$  Zwinfo_heightrC   )rÖ   rF   rz   r´  rH   r!   r!   r"   r±    s   

zEditorWindow.getwindowlinesc                 C   s   | j }tt| |¡ƒƒS rÜ   )rF   rC   r"  rÊ   )rÖ   r³  rF   r!   r!   r"   r$    s   zEditorWindow.getlinenoc                 C   s*   	 | j  ¡ }t d|¡}ttt| ¡ ƒƒS )Nz(\d+)x(\d+)\+(-?\d+)\+(-?\d+))rz   Zwm_geometryÚreÚmatchÚlistrá   rC   Úgroups)rÖ   ZgeomÚmr!   r!   r"   Úget_geometry"  s   
zEditorWindow.get_geometryc                 C   r[  rM   )r†   rÝ   r!   r!   r"   rˆ   (  r\  zEditorWindow.close_eventc                 C   sH   | j r"|  ¡ s| j ¡ dkr| j ¡  | j ¡  | j ¡  | j  ¡ S d S )Nr>  )r¼   r¬  rz   rõ   Z	deiconifyÚlowerZliftÚ	maybesaver<  r!   r!   r"   r¼  ,  s   



úzEditorWindow.maybesavec                 C   s8   z|   ¡ }t|ƒdkr|  ¡  |W S  ty   Y d S w )NÚcancel)r¼  rú   Ú_closeÚAttributeError)rÖ   Zreplyr!   r!   r"   r†   5  s   ÿzEditorWindow.closec                 C   s”   | j jr| j| j jd t | j¡ |  ¡  | j  ¡  d | _ d | _| j	r,| j	 ¡  d | _	d | _
d | _| j ¡  d | _| j ¡  | jrH|  ¡  d S d S )N)r¡  )r¼   r×   rÆ   r   Zunregister_callbackrÍ   Úunload_extensionsr†   r¸   r¿   rF   r|   r·   rz   Zdestroyrn  r<  r!   r!   r"   r¾  >  s$   



þzEditorWindow._closec                 C   s   i | _ |  ¡  d S rÜ   )Ú
extensionsÚload_standard_extensionsr<  r!   r!   r"   rÇ   R  s   zEditorWindow.load_extensionsc                 C   s0   t | j ¡ ƒD ]}t|dƒr| ¡  qi | _d S )Nr†   )r·  rÁ  Úvaluesr´   r†   )rÖ   Úinsr!   r!   r"   rÀ  V  s
   
€
zEditorWindow.unload_extensionsc                 C   s@   |   ¡ D ]}z|  |¡ W q   tdt|ƒƒ t ¡  Y qd S )NzFailed to load extension)r  Úload_extensionÚprintÚreprÚ	tracebackÚ	print_exc)rÖ   r@   r!   r!   r"   rÂ  \  s   ûz%EditorWindow.load_standard_extensionsc                 C   s   t jddS )NT)Zeditor_only)r   ZGetExtensionsr<  r!   r!   r"   r  d  rÞ   z)EditorWindow.get_standard_extension_namesZZzDummyZzzdummyc           	   	   C   sN  | j  ||¡}zztjd| td}W n ttfy#   t |¡}Y nw W n ty2   td|ƒ ‚ w t||ƒ}t	 
|¡}t|dƒrI|  |j|¡ || ƒ}|| j|< |r£|  |¡ |D ]I}| dd¡}|d d… dkry|dd … }|d d… dksk|d	d … d
kr|d d	… }|d	d … d
ks|d }t||ƒr¢| j |t||ƒ¡ q[d S d S )Nrê   )Úpackagez
Failed to import extension: r‡  ú-rt  rT   rò   rb   rô   Z_event)ÚextfilesrÉ   Ú	importlibÚimport_moduleÚ__package__ÚImportErrorÚ	TypeErrorrÆ  r  r   r€  r´   r  r‡  rÁ  r„   r   rF   r‡   )	rÖ   r@   ZfnameÚmodÚclsr  rÄ  ZveventZ
methodnamer!   r!   r"   rÅ  k  sD   ÿ€
þ




ÿÿ
€özEditorWindow.load_extensionc                 C   sH   |d u r| j j}| j}||_| ¡ D ]\}}|r!|j|g|¢R Ž  qd S rÜ   )r+   r}  rF   r  r~  rÏ   )rÖ   r  rF   rP   r‚  r!   r!   r"   r„   ‡  s   €þzEditorWindow.apply_bindingsc              	   C   sì   	 |d u r	| j j}|d u r| j j}| j}| j}|D ]Z\}}| |¡}|s%q|D ]K}|s0| ¡  q'|\}	}
|	d d… dk}|rD|	dd … }	t|	ƒ\}}	t||
ƒ}||
fdd„}|ri|  	|
t
¡}|j|	||||d q'|j|	|||d q'qd S )NrT   ú!c                 S   r4  rÜ   r5  r7  r!   r!   r"   rX   ©  r8  z(EditorWindow.fill_menus.<locals>.command)r  r  rX   r†  Úvariable)r  r  rX   r†  )r+   r‡  r}  rÈ   rF   rÉ   rË   r  rˆ  Úget_var_objZ
BooleanVarZadd_checkbuttonr:  )rÖ   r‡  r  rÈ   rF   ZmnameZ	entrylistr>   r‹  r  r2  Zcheckbuttonr  r†  rX   Úvarr!   r!   r"   r    sB   


þþîüzEditorWindow.fill_menusc                 C   s"   |   |¡}|r| ¡ }|S t|ƒ‚rÜ   )rÖ  rÉ   Ú	NameError)rÖ   r@   r×  Úvaluer!   r!   r"   Úgetvarµ  s
   
zEditorWindow.getvarc                 C   s&   |   ||¡}|r| |¡ d S t|ƒ‚rÜ   )rÖ  r­   rØ  )rÖ   r@   rÙ  Úvartyper×  r!   r!   r"   Úsetvar½  s   zEditorWindow.setvarc                 C   s,   | j  |¡}|s|r|| jƒ | j |< }|S rÜ   )r|   rÉ   rF   )rÖ   r@   rÛ  r×  r!   r!   r"   rÖ  Ä  s   zEditorWindow.get_var_objc                 C   s(   | j r| j d|¡pd| j |¡v S dS )NZTODOÚSTRINGrT   )r¿   rF   Útag_prevrangeZ	tag_names)rÖ   Z
text_indexr!   r!   r"   Úis_char_in_stringÔ  s
   ÿzEditorWindow.is_char_in_stringc                 C   s8   z| j  d¡}| j  d¡}||fW S  ty   Y dS w )Nrñ   ró   ©NNr?  )rÖ   r  r  r!   r!   r"   Úget_selection_indicesà  s   
ÿz"EditorWindow.get_selection_indicesc                 C   s   | j d pt}t|ƒS )NÚtabs)rF   ÚTK_TABWIDTH_DEFAULTrC   )rÖ   Úcurrentr!   r!   r"   Úget_tk_tabwidthë  s   zEditorWindow.get_tk_tabwidthc              	   C   sF   | j }|  ¡ |kr!|j dd|d d|jd| ¡}|j|d d S d S )Nr[   rã   z
-displayofÚn)râ  )rF   rå  râ   r@  ZmasterZ	configure)rÖ   ZnewtabwidthrF   Zpixelsr!   r!   r"   Úset_tk_tabwidthñ  s   þûzEditorWindow.set_tk_tabwidthc                 C   sP   |r |r |   ¡ }d|  krdkrn n|| _| j| jkr d| _|  | j¡ d S )Nr=   r   F)Úguess_indentr²   r±   r°   rç  )rÖ   rÚ   Zguessr¤  r!   r!   r"   r¾   ü  s   z#EditorWindow.set_indentation_paramsc           
      C   s8  | j }|  ¡ \}}|r|r| ||¡ | d|¡ dS | dd¡}|dkr9| ddd¡r3| d¡ dS | ¡  dS |d d	vrF| d¡ dS | j}t| 	|¡ƒ}|d
 | j
 | j
 }d}		 |d d… }|	d
 }	t| 	|¡ƒ}||ksx|d d	vrynq]| ¡  | d|	 d¡ ||k r–| dd||  | j¡ | ¡  dS )Nrí   rN   ré   r<   rô   rð   z	insert-1crb   ú 	rT   r   Tz
insert-%dcrë   )rF   rá  r  rü   rÉ   rö   Zbellr±   rù   Ú
expandtabsr²   r¹   rí   rÐ   rº   )
rÖ   rP   rF   r  r  Úcharsr±   ZhaveZwantZncharsdeletedr!   r!   r"   rœ     sF   
ÿ
ûÿz"EditorWindow.smart_backspace_eventc           
      C   s   | j }|  ¡ \}}| ¡  zm|r1|r1t|ƒt|ƒkr%| j |¡W | ¡  S | ||¡ | d|¡ | 	dd¡}t
|| jƒ\}}|t|ƒkrN|  || j ¡ n!| jrTd}nt| | j¡ƒ}| j}	d|	||	   }| d|| j¡ | d¡ W | ¡  dS | ¡  w )Nrí   ré   rì   rë   rN   )rF   rá  r¹   Ú
index2linerŸ   r    rº   r  rü   rÉ   Úget_line_indentr±   rù   Úreindent_tor²   r°   rê  rí   rÐ   rþ   )
rÖ   rP   rF   r  r  ÚprefixÚrawZ	effectiveZpadræ  r!   r!   r"   rž   0  s.   
í
zEditorWindow.smart_indent_eventc              	   C   s<  	 | j }|  ¡ \}}| ¡  z„|r |r | ||¡ | d|¡ | dd¡}dt|ƒ}}||k rE|| dv rE|d7 }||k rE|| dv s7||kr]| dd| j¡ W | 	d¡ | 
¡  dS |d |… }d}|r|d dv r|d d… }|d7 }|r|d dv sm|r‰| d	| d¡ | d¡dv rœ| d¡ | d¡dv s| dd| j¡ t| d¡ƒ}	t | j| j¡}
| jsî| jD ],}t|	| dƒ}t|ƒd
 }| |d¡}|
 |¡ |
 |  |¡¡}|d usã|dkrå nq¹|
 |pëd¡ n| dd¡}|rû|d }nd}| |d¡}|
 |¡ |
 d¡ |
 ¡ }|tjkrd|tjkrn:|tjkr-| d|| j¡ n+|tjkr;|  |
  ¡ ¡ n|tj!krX|
 "¡ dkrQ| d|| j¡ n|  |
 #¡ ¡ W | 	d¡ | 
¡  dS |
 $¡ }| d|| j¡ |
 %¡ r{|  &|¡ n|rˆ|
 '¡ rˆ|  (|¡ W | 	d¡ | 
¡  dS | 	d¡ | 
¡  w )Nrí   ré   r   ré  rT   rv  rN   rb   zinsert - %d charsrU  Zconsolerð   ))rF   rá  r¹   r  rü   rÉ   rù   rí   rÐ   rþ   rº   rì  rÊ   r   ZParserr²   r±   r   r¶   r²  rÇ  Zset_codeZfind_good_parse_startÚ_build_char_in_string_funcZset_lorÞ  Zget_continuation_typeZC_NONEZC_STRING_FIRST_LINEZC_STRING_NEXT_LINESZ	C_BRACKETrî  Zcompute_bracket_indentZC_BACKSLASHZget_num_lines_in_stmtZcompute_backslash_indentZget_base_indent_stringZis_block_openerrž   Zis_block_closerrœ   )rÖ   rP   rF   r  r  rÿ   r¤  ræ  ÚindentÚlnor+  ÚcontextZstartatZstartatindexZrawtextZbodr  rî   r!   r!   r"   r   S  s¤   ÿÿ
U«þ
ÿ

ÿÿ


ÿ
÷



ÿ
z%EditorWindow.newline_and_indent_eventc                 C   s   || j fdd„}|S )Nc                 S   s   ||d|   ƒS )Nz+%dcr!   )ÚoffsetZ_startindexZ_icisr!   r!   r"   ÚinnerÌ  s   z6EditorWindow._build_char_in_string_func.<locals>.inner)rß  )rÖ   Z
startindexrö  r!   r!   r"   rñ  Ë  s   
ÿz'EditorWindow._build_char_in_string_funcc                 C   s.   | j rt|| jƒ\}}d| d|  S d| S )Nrì   rë   )r°   Údivmodr±   )rÖ   ræ  ZntabsZnspacesr!   r!   r"   Ú_make_blanksÛ  s   zEditorWindow._make_blanksc                 C   sN   | j }| ¡  | ddd¡r| dd¡ |r!| d|  |¡| j¡ | ¡  d S )Nré   z!=rí   )rF   r¹   rö   r  rí   rø  rÐ   rº   )rÖ   rZ   rF   r!   r!   r"   rî  å  s   ÿzEditorWindow.reindent_toc                 C   sV   t | j| jƒ ¡ \}}|r#|r#t|| jƒ\}}t|| jƒ\}}|| S d }}|| S ©Nr   )ÚIndentSearcherrF   r±   r  rí  )rÖ   ÚopenerZindentedrð  ZindentsmallZindentlarger!   r!   r"   rè  ô  s   ÿzEditorWindow.guess_indentc                 C   sN   | j d u rd S | j jr| j  ¡  d}n| j  ¡  d}| jdd|› dd d S )NZShowZHiderc   re   z Line Numbers)r>   rÊ   r  )rÁ   Zis_shownZhide_sidebarZshow_sidebarr  )rÖ   rP   Z
menu_labelr!   r!   r"   rÕ   ý  s   



ÿz&EditorWindow.toggle_line_numbers_event)NNNNrÜ   )rí   rà  )T)“r_  Ú
__module__Ú__qualname__Zidlelib.percolatorr%   Zidlelib.colorizerr&   r'   Zidlelib.undor(   Zidlelib.iomenur)   r*   r`  r+   Zidlelib.statusbarr,   Zidlelib.autocompleter-   Zidlelib.autoexpandr.   Zidlelib.calltipr/   Zidlelib.codecontextr0   Zidlelib.sidebarr1   Zidlelib.formatr2   r3   r4   r5   Zidlelib.parenmatchr6   Zidlelib.zoomheightr7   r   ÚgetfilesystemencodingZfilesystemencodingrf   rÒ   rÔ   rÐ   rÛ   rŠ   r¯   r¦   r¤   rª   r  r  rƒ   rÍ   r  rÓ   r¬   r-  r‰   r/  r.  r=  r;  rA  r‘   r’   r   r   r‹   rŒ   r   r”   r•   r¡   r¢   r£   r–   r—   r™   r˜   rš   r›   rZ  r“   r§   r¨   r©   rh  rÄ   rn  ro  r½   rr  rs  rÅ   ÚstringÚascii_lettersÚdigitsrw  rz  rµ   r{  r…  r‰  r³   r  rŠ  rÆ   r   r»   r¬  r®  r°  r©  rª  rŽ   rg  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   rñ  rø  rî  rè  rÕ   r!   r!   r!   r"   r$   2   sú    
  
$+

%þ









			
$
.


		ÿ

	%


	+#x
	r$   c                 C   s   t t| ƒƒS rÜ   )rC   r"  )rÊ   r!   r!   r"   rì    rÞ   rì  z[ \t]*c                 C   s&   	 t  | ¡}| ¡ t| ¡  |¡ƒfS rÜ   )Ú_line_indent_rer¶  ra   rù   Úgrouprê  )rÿ   r±   r¹  r!   r!   r"   rí    s   
rí  c                   @   s8   e Zd Zdd„ Zdd„ Zejejdfdd„Zdd	„ Z	d
S )rú  c                 C   s(   || _ || _d | _| _d  | _| _d S rù  )rF   r±   r¤  ÚfinishedÚblkopenlineÚindentedline)rÖ   rF   r±   r!   r!   r"   rÛ   !  s   zIndentSearcher.__init__c                 C   sL   | j rdS | jd  }| _t|ƒd }| j |dd¡rdS | j ||d ¡S )Nr<   rT   rU  z>=ra   z lineend+1c)r  r¤  rÇ  rF   rö   rÉ   )rÖ   r¤  r³  r!   r!   r"   Úreadline'  s   zIndentSearcher.readline)ÚclassÚdefÚforÚifÚtryÚwhilec	           	      C   sJ   | j rd S ||kr||v r|| _d S ||kr!| jr#|| _d| _ d S d S d S )NrT   )r  r  r  )	rÖ   rE   ÚtokenÚstartra   rÿ   ÚINDENTÚNAMEZOPENERSr!   r!   r"   Ú
tokeneater0  s   

þzIndentSearcher.tokeneaterc              	   C   sl   t j}| jt _z$zt  | j¡}|D ]}| j|Ž  qW n t jtfy&   Y nw W |t _n|t _w | j| j	fS rÜ   )
ÚtokenizeÚtabsizer±   Úgenerate_tokensr  r  Ú
TokenErrorÚSyntaxErrorr  r  )rÖ   Zsave_tabsizeÚtokensr  r!   r!   r"   r  <  s   ÿý€zIndentSearcher.runN)
r_  rü  rý  rÛ   r  r  r  r  r  r  r!   r!   r!   r"   rú    s    

ýrú  c                 C   s6   |   d¡}|dkr| d |… | |d d …  } || fS )Nrt  r   rT   )rT  )Úsr¤  r!   r!   r"   r  N  s   
r  ú[ú]ú/)ZbracketleftZbracketrightZslashc                 C   s´   |   |¡}|rt ¡ r|dv rdS |d }t ddd„ |¡}t ddd„ |¡}t d	d|¡}t d
d|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}|S )N>   rS   rL   rR   r<   r   z-[a-z]\bc                 S   s   |   ¡  ¡ S rÜ   )r  Úupper©r¹  r!   r!   r"   rQ   g  s    z!get_accelerator.<locals>.<lambda>z\b\w+\bc                 S   s   t  |  ¡ |  ¡ ¡S rÜ   )ÚkeynamesrÉ   r  r  r!   r!   r"   rQ   h  s    zKey-ZCancelz
Ctrl-BreakzControl-zCtrl-rË  ú+z><rë   rò   rô   )rÉ   r   Z	isCocoaTkrµ  Úsub)r  r2  r‚  r  r!   r!   r"   rˆ  ]  s   
rˆ  c                 C   s4   | j }| ddd¡ | ddd¡ | ddd¡ d S )	NZtcl_wordBreakAfterza br   r­   Ztcl_wordcharsz\wZtcl_nonwordcharsz\W)râ   r@  )rw   râ   r!   r!   r"   Úfixwordbreakss  s   r"  c                 C   s~   | }t |ƒ tjdd … rtjd }nd }t |d ¡ t||d}|j}d|d< tdƒD ]}| dd| t	|ƒ d ¡ q,d S )	NrT   )rw   r×   é
   rH   é   rí   z  rv  )
r"  r   Úargvr   ZsetupAppr$   rF   rø   rí   rú   )rB  rw   r×   r	  rF   r¤  r!   r!   r"   Ú_editor_window|  s   ÿr&  Ú__main__)rA   zidlelib.idle_test.test_editorr=   F)Ú	verbosityÚexit)r  ):Zimportlib.abcrÍ  Úimportlib.utilrg   rk   rµ  rÿ  r   r  rÈ  rI  ÚtkinterZtkinter.fontr   Ztkinter.ttkr   r   r   Zidlelib.configr   r`  r   r	   r
   r   r   Zidlelib.multicallr   r   r   r   r   Zidlelib.treer   Zidlelib.utilr   r   rã  Zpython_versionr«  r   r#   r$   rì  Úcompiler  rí  rú  r  r  rˆ  r"  r&  r_  ZunittestrA   Zidlelib.idle_test.htestr  r!   r!   r!   r"   Ú<module>   s~    
           d

4
ý	û