<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    YI~dN  ã               @   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Z'de (¡  Z)ejdkZ*dd„ Z+G dd„ de,ƒZ-dd„ Z.e /d¡Z0dd„ Z1G dd„ de,ƒZ2d d!„ Z3d"d#d$d%œZ4d&d'„ Z5d(d)„ Z6d*d+„ Z7e8d,kräd d-l9m:Z: e:d.d/d0d1 d d2l;m<Z< e<e7ƒ dS )3é    N)Ú*)ÚFont)Ú	Scrollbar)ÚidleConf)Úconfigdialog)Úgrep)Úhelp)Ú
help_about)Úmacosx)ÚMultiCallCreator)Úpyparse)Úquery)Úreplace)Úsearch)Úwheel_event)Úwindowé   z (%s)Údarwinc              C   sb   t j\} }}}}d| |f }|d|f 7 }|dkrB|d|f 7 }n|dkr^|d|d |f 7 }|S )Nz%s%sz%sÚ	candidatezrc%sÚfinalr   )ÚsysÚversion_info)ÚmajorÚminorÚmicroÚlevelÚserialÚrelease© r   ú3/opt/alt/python37/lib64/python3.7/idlelib/editor.pyÚ_sphinx_version%   s    r    c               @   sF  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# ddl$m%Z% e& '¡ Z(dZ)dZ*dZ+dßdd„Z,dàdd„Z-dd„ Z.dd„ Z/dd„ Z0dd„ Z1dádd „Z2d!d"d#d$d%d&d'gZ3d(d)„ Z4d*d+„ Z5d,d-„ Z6d.d/„ Z7d0d1„ Z8dZ9d2d3„ Z:d4gZ;d5d6„ Z<d7d8„ Z=d9d:„ Z>d;d<„ Z?dâd=d>„Z@dãd?d@„ZAdädAdB„ZBdådCdD„ZCdEdF„ ZDdGdH„ ZEdIdJ„ ZFdædKdL„ZGdçdMdN„ZHdOdP„ ZIdQdR„ ZJdSdT„ ZKdUdV„ ZLdWdX„ ZMdYdZ„ ZNd[d\„ ZOd]d^„ ZPd_d`„ ZQdadb„ ZRdcdd„ ZSdèdedf„ZTdédgdh„ZUdêdidj„ZVdkdl„ ZWdmdn„ ZXdodp„ ZYdqdr„ ZZdsdt„ Z[dudv„ Z\dwdx„ Z]dydz„ Z^e_j`e_ja d{ Zbd|d}„ Zcd~d„ Zdd€d„ Zed‚dƒ„ Zfd„d…„ Zgd†d‡„ Zhdˆd‰„ ZidŠd‹„ ZjdëdŒd„ZkdŽd„ Zldd‘„ Zmd’d“„ Znd”d•„ Zod–d—„ Zpd˜d™„ Zqdšd›„ Zrdœd„ ZsdìdŸd „Ztd¡d¢„ Zudíd£d¤„Zvd¥d¦„ Zwd§d¨„ Zxd©dª„ Zyd«d¬„ Zzd­d®„ Z{d¯d°„ Z|d±d²„ Z}d³d´„ Z~dµd¶„ Zd·d¸iZ€d¹dº„ Zdîd»d¼„Z‚dïd½d¾„Zƒd¿dÀ„ Z„dðdÁdÂ„Z…dñdÃdÄ„Z†dÅdÆ„ Z‡dÇdÈ„ ZˆdÉdÊ„ Z‰dËdÌ„ ZŠdòdÍdÎ„Z‹dÏdÐ„ ZŒdÑdÒ„ ZdÓdÔ„ ZŽdÕdÖ„ Zd×dØ„ ZdÙdÚ„ Z‘dÛdÜ„ Z’dódÝdÞ„Z“dS )ôÚEditorWindowr   )Ú
Percolator)ÚColorDelegatorÚcolor_config)ÚUndoDelegator)Ú	IOBindingÚencoding)Úmainmenu)ÚMultiStatusBar)ÚAutoComplete)Ú
AutoExpand)ÚCalltip)ÚCodeContext)ÚLineNumbers)ÚFormatParagraphÚFormatRegionÚIndentsÚRstrip)Ú
ParenMatch)ÚSqueezer)Ú
ZoomHeightNTc             C   sH	  ddl m} tjd krtj tjdd¡}tj	 
d¡rvddtjd d…   }tj d	¡r^d
}qÌd}tj ||dd¡}nVtj	d d… dkr²tj tjddtƒ  ¡}	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 | _}
|rl|j| _|j| j_ni | _i | j_tjot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|Ž | _&}| j&| j_'|  (¡  |  )¡  | j *d#| j+¡ | j ,d$| j-¡ t. /¡ rt| ,d$| j-¡ | ,d%| j0¡ | ,d&| j0¡ n| ,d'| j0¡ | ,d(t1¡ | ,d)t1¡ | ,d*t1¡ | ,d+| j2¡ | ,d,| j3¡ | ,d-| j4¡ | ,d.| j5¡ | ,d/| j6¡ | ,d0| j7¡ | ,d1| j8¡ | ,d2| j9¡ | ,d3| j:¡ | ,d4| j;¡ | ,d5d6d7„ ¡ | ,d8| j<¡ | ,d9| j=¡ | ,d:| j>¡ | ,d;| j?¡ | ,d<| j@¡ | ,d=| jA¡ | ,d>| jB¡ | ,d?| jC¡ | ,d@| jD¡ | ,dA| jE¡ | ,dB| jF¡ |  G| ¡ | _H}| ,dC|jI¡ | ,dD|jJ¡ | ,dE|jK¡ | ,dF|jL¡ | ,dG|jM¡ | ,dH|jN¡ |  O| ¡}| ,dI|jP¡ | ,dJ|jQ¡ | ,dK|  Rd¡¡ | ,dL|  RdM¡¡ | ,dN| jS¡ | ,dO| jT¡ | ,dP| jU¡ |r||j| < |rÔ| |jV|< | ,dQ| jW¡ | ,dR| jjX¡ | ,dS| jY¡ | ,dT| jZ¡ | ,dU| j[¡ |  \¡  |j]t^t_dMdV |j`dMdMdW |jadMdMdW | jb|dX< |jcdMdtddY |je|dZ< t f| jdd¡|d[< |jcdMdMtddY | g¡  |  h¡  tj#dd\d]d^d}| | _id_| _j| jj| _k|  l¡  tmtd`ƒsð| j&da t_n|  o¡  db| _p|  q|¡ | _r}|  s¡  | _t}| u|¡ |jv|_v|jw|_w| x| jy¡ |  z| ¡ | _{}| || j}¡ dc| _~|  dc¡ d | _€d | _d | _‚|rÚtj ƒ|¡rÊtj |¡sÊ| „|¡rÚdd| _~|  …|¡}|  |¡ n| †|¡ dd| _~|  ‡¡  |  y¡  |  ˆ¡  |  ‰¡  | jŠ ‹de¡}|rP| Œdf¡}|d kr$dg}|dkr>| ¡  |dM }|| _Žt | j¡ t‘j’| _’t“j”| _”t‘j•| _•| –dhdi¡ | –djdkdldm¡ | –dndo¡ | –dpdq¡ | –drdqdsdt¡ |  —| ¡}| ,dh|j˜¡ | ,dj|j™¡ | ,du|jš¡ | ,dv|  ›| ¡jœ¡ | ,dw|  | ¡jž¡ |  Ÿ| ¡}| ,dx|j ¡ | ,dr|j¡¡ || ƒ}| ,dy|j¢¡ | ,dz|j£¡ | ,d{|j¤¡ | ,d||  ¥| ¡j¦¡ |  §| ¡ | _¨}| ,dn|j©¡ | ,dp|jª¡ | ,d}|j«¡ | ,d~|  ¬| ¡j­¡ | j®rè|  ¯| ¡| _| ,d| jj°¡ n|  ±d€dd‚¡ | j²	r6|  ³| ¡| _‚tj#dddƒd^d	r&|  ´¡  | ,d„| j´¡ n|  ±d€d…d‚¡ d S )†Nr   )ÚScriptBindingZDocz
index.htmlZ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.chmr   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highlightthicknessr?   ZtabstylerD   ZWM_DELETE_WINDOWz<<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>>z<<open-module>>z<<do-nothing>>c             S   s   dS )NÚbreakr   )Úeventr   r   r   Ú<lambda>©   ó    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>>z<<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>>z<<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*Code ContextÚdisabledzline-numbers-defaultz<<toggle-line-numbers>>z*Line Numbers)µZidlelib.runscriptr6   r!   Úhelp_urlÚosÚpathÚjoinr   Úbase_prefixÚplatformÚcountr   Úisdirr    Ú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TextrB   Zfocused_widgetÚcreatemenubarÚapply_bindingsZ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_eventr0   ÚfregionÚindent_region_eventZdedent_region_eventZcomment_region_eventZuncomment_region_eventZtabify_region_eventZuntabify_region_eventr1   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ÚhasattrrU   Úupdate_cursor_blinkÚnum_context_linesr"   Úperr%   ÚundoÚ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ÚpostwindowsmenuÚtkMessageBoxZaskyesnoÚtkSimpleDialogZ
askintegerÚ	showerrorÚ	event_addr*   Zautocomplete_eventZtry_open_completions_eventZforce_open_completions_eventr+   Zexpand_word_eventr/   Zformat_paragraph_eventr3   Zflash_paren_eventZparen_closed_eventZcheck_module_eventZrun_module_eventZrun_custom_eventr2   Z	do_rstripr,   ÚctipZtry_open_calltip_eventZrefresh_calltip_eventZforce_open_calltip_eventr5   Zzoom_height_eventÚallow_code_contextr-   Ztoggle_code_context_eventÚupdate_menu_stateÚallow_line_numbersr.   Útoggle_line_numbers_event)Úselfrf   ÚfilenameÚkeyrg   r6   ZdochomeZpyverZbasepathZchmfilerj   rq   r<   r?   Ztext_optionsrB   rŽ   ÚindentsZ	usespacesr¦   r§   r¬   Ú	is_py_srcr:   rX   ZautocompleteZ
parenmatchZscriptbindingrÂ   r   r   r   Ú__init__H   s¢   





















zEditorWindow.__init__c             C   s   |   ¡  d S )N)rž   )rÇ   rH   r   r   r   ry   `  s    zEditorWindow.handle_winconfigc             C   s^   | j }tt|jj| d¡| d¡gƒƒ}| ¡ d|  }t|| d¡d d¡}|| | _	d S )NZborderrE   r9   rR   )rR   Ú0)
rB   ÚsumÚmapÚtkZgetintZcgetZwinfo_widthr   Úmeasurer?   )rÇ   rB   Zinner_paddingZpixel_widthZzero_char_widthr   r   r   rž   c  s    zEditorWindow.set_widthc             C   s   | j  ¡ \}}| j |¡ dS )NrG   )r¬   Zdefaultfilenamerf   Únew)rÇ   rH   ÚdirnameÚbasenamer   r   r   r•   p  s    zEditorWindow.new_callbackc             C   sÄ  |j d@ dkr|jdkrd S | j d¡rd| j ddd¡rd| j ddd¡rdt| j d¡ d¡d	 ƒ}n:| j dd¡}x*tt	|ƒƒD ]}|| d
kr€P q€W t	|ƒ}t| j d¡ d¡d	 ƒ}||krÄd}dt
|ƒ d }|j d	@ dkrô| j ddd¡ n²| j d¡s| j dd¡ n@| j | j d¡d| j d¡¡rD| 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iomarkz<=zinsert lineendzinsert linestartÚ.rK   )ú ú	Úinsertzinsert linestart+ÚcÚselz1.0rX   z	sel.firstZ	my_anchorú<zsel.lastú>rG   )ÚstateZkeysymrB   rº   Úcomparer@   Úsplitr¹   ÚrangeÚlenÚstrÚ
tag_removeÚmark_setÚtag_addÚsee)rÇ   rH   ZinsertptÚlineZlineatÚdestÚfirstÚlastr   r   r   r“   u  s@    
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 )NrK   Zgrey75)rD   ZborderwidthZ
backgroundr   Z	_padding1z    )rL   rQ   zCol: ?rè   zLn: ?)rL   rM   z<<set-line-and-column>>z<KeyRelease>z<ButtonRelease>)r)   rj   Ú
status_barrp   r   ra   Ú	set_labelZRIGHTrš   ZBOTTOMÚXrB   rv   Ú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Ö   rQ   zCol: %srè   zLn: %s)rB   rº   ZINSERTrà   rì   rí   )rÇ   rH   rè   rQ   r   r   r   rï   °  s    z EditorWindow.set_line_and_column)ÚfileZ_File)ÚeditZ_Edit)ÚformatZF_ormat)ÚrunZ_Run)rZ   Z_Options)r   Z_Window)r   Z_Helpc             C   sÒ   | j }i  | _}xD| jD ]:\}}t|ƒ\}}t||dd ||< }|j|||d qW t ¡ r‚t|ddd |d< }|jd|d |  ¡  t| j dd| _	| jd	 j
d
dd| j	d | jd  t¡| _|  ¡  d S )Nr   )r=   Útearoff)Úlabelr:   Ú	underlineZappleZapplicationZIDLE)rö   r:   )rõ   rñ   r7   zRecent Files)rö   r÷   r:   r   )ri   r¸   Ú
menu_specsÚprepstrrh   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   rs   À  s"    

zEditorWindow.createmenubarc             C   sJ   | j d }| d¡}|d kr d}|| jkr<| | jd |¡ t |¡ d S )Nr   rX   rY   rK   )r¸   rº   r¼   Údeleter   Zadd_windows_to_menu)rÇ   r:   rX   r   r   r   r½   Ô  s    


zEditorWindow.postwindowsmenuc             C   s   | j | }|j||d d S )N)rö   )r¸   Úentryconfig)rÇ   r:   rº   rö   Úmenuitemr   r   r   Úupdate_menu_labelÞ  s    
zEditorWindow.update_menu_labelc             C   s   | j | }|j||d d S )N)rÞ   )r¸   r   )rÇ   r:   rº   rÞ   r  r   r   r   rÄ   ã  s    
zEditorWindow.update_menu_statec             G   sR   |dkr<t |d ƒ}t|  d¡| ƒ|  d¡ }d}|df}| jj|f|žŽ  dS )NZmovetor   rX   z@0,0ZscrollZunitsrG   )ÚfloatÚroundÚ	getlinenorB   Úyview)rÇ   rH   ÚargsZfractionÚlinesr   r   r   r›   è  s    zEditorWindow.handle_yviewc          	   C   s6  | j }| d|j› d|j› ¡}y | dd|¡o<| |dd¡}W n tk
rX   d}Y nX |sx| ddd	¡ | d
|¡ | js†|  	¡  | j}|| _
tjd d… dk}|r´|jdd xX| jD ]N}y|\}}	}
W n tk
rä   w¼Y nX |
d krðq¼t| |
ƒƒ }|j||d q¼W | |j|j¡ |r2| j jdd dS )Nú@ú,z	sel.firstz<=zsel.lastFrÛ   z1.0rX   rÙ   r7   r8   Zarrow)Zcursor)rÞ   ZibeamrG   )rB   rº   ÚxÚyrß   ÚTclErrorrä   rå   ÚrmenuÚ
make_rmenurH   r   ra   ZconfigÚrmenu_specsÚ
ValueErrorÚgetattrZentryconfigureZtk_popupZx_rootZy_root)rÇ   rH   rB   ZnewdexZin_selectionr  ZiswinÚitemrö   Ú	eventnameZverify_staterÞ   r   r   r   rx   õ  s<    
zEditorWindow.right_menu_event)ZClosez<<close-window>>Nc             C   sj   t | jdd}xP| jD ]F}|d |d  }}|d k	rT| j|fdd„}|j||d q| ¡  qW || _d S )Nr   )rõ   rK   c             S   s   |   |¡ d S )N)Úevent_generate)rB   r  r   r   r   rO   "  s    z(EditorWindow.make_rmenu.<locals>.command)rö   rO   )rh   rB   r  Úadd_commandr»   r  )rÇ   r  r  rö   r  rO   r   r   r   r    s    zEditorWindow.make_rmenuc             C   s   |   ¡ S )N)Úrmenu_check_copy)rÇ   r   r   r   Úrmenu_check_cut)  s    zEditorWindow.rmenu_check_cutc             C   s6   y| j  d¡}W n tk
r$   dS X |r.dS dS d S )Nz	sel.firstr[   Únormal)rB   rº   r  )rÇ   Zindxr   r   r   r  ,  s
    zEditorWindow.rmenu_check_copyc             C   s6   y| j j d| j d¡ W n tk
r,   dS X dS d S )Nztk::GetSelectionZ	CLIPBOARDr[   r  )rB   rÐ   Úcallr  )rÇ   r   r   r   Úrmenu_check_paste4  s
    zEditorWindow.rmenu_check_pastec             C   s   t  | j¡ dS )NrG   )r	   ZAboutDialogrj   )rÇ   rH   r   r   r   r€   <  s    zEditorWindow.about_dialogc             C   s   t  | jd¡ dS )NZSettingsrG   )r   ZConfigDialogrj   )rÇ   rH   r   r   r   r   B  s    zEditorWindow.config_dialogc             C   s"   | j r| j }n| j}t |¡ dS )NrG   )rg   rj   r   Zshow_idlehelp)rÇ   rH   Úparentr   r   r   r~   H  s
    
zEditorWindow.help_dialogc          
   C   sn   t jd d… dkr^yt | j¡ W qj tk
rZ } ztjdt|ƒ| j	d W d d }~X Y qjX nt
 | j¡ dS )Nr7   r8   zDocument Start Failure)ÚtitleÚmessager  rG   )r   ra   r]   Ú	startfiler\   ÚOSErrorr¾   rÀ   rã   rB   Ú
webbrowserÚopen)rÇ   rH   Úwhyr   r   r   r   R  s    $zEditorWindow.python_docsc             C   s   | j  d¡ dS )Nz<<Cut>>rG   )rB   r  )rÇ   rH   r   r   r   rz   ]  s    zEditorWindow.cutc             C   s    | j  d¡sd S | j  d¡ dS )NrÛ   z<<Copy>>rG   )rB   Z
tag_rangesr  )rÇ   rH   r   r   r   r{   a  s    zEditorWindow.copyc             C   s   | j  d¡ | j  d¡ dS )Nz	<<Paste>>rÙ   rG   )rB   r  rç   )rÇ   rH   r   r   r   r|   h  s    zEditorWindow.pastec             C   s.   | j  ddd¡ | j  dd¡ | j  d¡ dS )NrÛ   z1.0zend-1crÙ   rG   )rB   ræ   rå   rç   )rÇ   rH   r   r   r   rƒ   m  s    zEditorWindow.select_allc             C   s    | j  ddd¡ | j  d¡ dS )NrÛ   z1.0rX   rÙ   rG   )rB   rä   rç   )rÇ   rH   r   r   r   r„   s  s    zEditorWindow.remove_selectionc                s*   | j j‰| j j‰d‰‡ ‡‡‡fdd„}|S )N)zsel.first+1czsel.last-1cc                sB   | j d@ dkr>yˆdƒ ˆdˆˆ  ƒ W n tk
r<   Y nX d S )NrC   r   z	sel.firstrÙ   )rÞ   r  )rH   )Ú
edge_indexÚedges_tableÚself_text_indexÚself_text_mark_setr   r   Úmove_at_edgeƒ  s    z<EditorWindow.move_at_edge_if_selection.<locals>.move_at_edge)rB   rº   rå   )rÇ   r$  r(  r   )r$  r%  r&  r'  r   r   x  s
    z&EditorWindow.move_at_edge_if_selectionc             C   s   | j  d¡ dS )Nz<Meta-Delete>rG   )rB   r  )rÇ   rH   r   r   r   r‘   Œ  s    zEditorWindow.del_word_leftc             C   s   | j  d¡ dS )Nz<Meta-d>rG   )rB   r  )rÇ   rH   r   r   r   r’     s    zEditorWindow.del_word_rightc             C   s   t  | j¡ dS )NrG   )r   ÚfindrB   )rÇ   rH   r   r   r   r…   ”  s    zEditorWindow.find_eventc             C   s   t  | j¡ dS )NrG   )r   Z
find_againrB   )rÇ   rH   r   r   r   r†   ˜  s    zEditorWindow.find_again_eventc             C   s   t  | j¡ dS )NrG   )r   Zfind_selectionrB   )rÇ   rH   r   r   r   rˆ   œ  s    z!EditorWindow.find_selection_eventc             C   s   t   | j| j| j¡ dS )NrG   )r   rB   r¬   rf   )rÇ   rH   r   r   r   r‡      s    z EditorWindow.find_in_files_eventc             C   s   t   | j¡ dS )NrG   )r   rB   )rÇ   rH   r   r   r   r‰   ¤  s    zEditorWindow.replace_eventc             C   sT   | j }t |dd¡j}|d k	rP| ddd¡ | d|› d¡ | d¡ |  ¡  dS )	Nz
Go To Linez/Enter a positive integer
('big' = end of file):rÛ   z1.0rX   rÙ   z.0rG   )rB   r   ZGotoÚresulträ   rå   rç   rï   )rÇ   rH   rB   Úlinenor   r   r   rŠ   ¨  s    
zEditorWindow.goto_line_eventc             C   sp   y| j  dd¡ ¡ }W n tk
r.   d}Y nX t | j dd|¡j}|d k	rl| jr`| j |¡ n| j	 
|¡ |S )Nz	sel.firstzsel.lastr;   zOpen ModulezAEnter the name of a Python module
to search on sys.path and open:)rB   r¹   Ústripr  r   Z
ModuleNamer*  rf   r"  r¬   r³   )rÇ   r=   Ú	file_pathr   r   r   Úopen_module¶  s    
zEditorWindow.open_modulec             C   s   |   ¡  dS )NrG   )r.  )rÇ   rH   r   r   r   r‚   Î  s    zEditorWindow.open_module_eventc             C   sJ   | j j}| jjdkr|s,|  ¡ }|d kr,dS ddlm} | | j|¡ dS )NZPyShellEditorWindowrG   r   )Úbrowser)	r¬   rÈ   Ú	__class__Ú__name__r.  Úidlelibr/  ZModuleBrowserrg   )rÇ   rH   rÈ   r/  r   r   r   r–   Ò  s    z EditorWindow.open_module_browserc             C   s   ddl m} | | j¡ dS )Nr   )ÚpathbrowserrG   )r2  r3  ZPathBrowserrg   )rÇ   rH   r3  r   r   r   r—   Ý  s    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)ÚshellrG   )Ú
subprocessr   Ú
executableÚPopen)rÇ   rH   r5  Úcmdr   r   r   r˜   â  s    zEditorWindow.open_turtle_democ             C   sN   |d k	rJ|dkrJ| j  dd| ¡ | j  ddd¡ | j  ddd¡ |  ¡  d S )Nr   rÙ   z%d.0rÛ   z1.0rX   z
insert +1l)rB   rå   rä   ræ   Úcenter)rÇ   r+  r   r   r   Úgotolineë  s
    zEditorWindow.gotolinec             C   s`   |rt j |¡rdS t j t j |¡¡\}}t j |¡dkr@dS | j dd¡}| d¡o^d|kS )NT)z.pyz.pywz1.0z1.0 lineendz#!Úpython)	r]   r^   rc   ÚsplitextrÔ   ÚnormcaserB   r¹   Ú
startswith)rÇ   rÈ   ÚbaseZextrè   r   r   r   r´   ò  s    zEditorWindow.ispythonsourcec             C   s   | j r| j  | ¡ d | _ d S )N)rf   Zunregister_maybe_terminate)rÇ   r   r   r   Ú
close_hookû  s    zEditorWindow.close_hookc             C   s
   || _ d S )N)r@  )rÇ   r@  r   r   r   Úset_close_hook   s    zEditorWindow.set_close_hookc             C   s2   | j r| j  | ¡ |  ¡  | j | ¡ |  ¡  d S )N)rf   Zfilename_changed_editr«   rj   Zupdate_windowlist_registryrµ   )rÇ   r   r   r   r­     s
    z!EditorWindow.filename_change_hookc             C   sV   | j r
d S |  | jj¡r"|  ¡ | _ | j rR| j | j¡ | j | j ¡ | j | j¡ d S )N)	r¯   r´   r¬   rÈ   r#   r¦   Úremovefilterr§   r¨   )rÇ   r   r   r   Ú_addcolorizer
  s    
zEditorWindow._addcolorizerc             C   s,   | j s
d S | j  ¡  | j | j ¡ d | _ d S )N)r¯   Zremovecolorsr¦   rB  )rÇ   r   r   r   Ú_rmcolorizer  s
    
zEditorWindow._rmcolorizerc             C   sH   |   ¡  |  ¡  t | j¡ | jd k	r0| j ¡  | jd k	rD| j ¡  d S )N)	rD  rC  r!   r$   rB   r°   Zupdate_highlight_colorsr±   Zupdate_colors)rÇ   r   r   r   rµ     s    


zEditorWindow.ResetColorizerÚ_c             C   sp   |  d|¡ | |¡}|r6|| jkr6|  d|d |¡ d| |¡krR| d|¡ n| d|d ¡ | |¡ d S )NZERRORz
 wordstartÚ
rÙ   z+1c)ræ   r¹   Ú
IDENTCHARSrå   rç   )rÇ   rB   ÚposÚcharr   r   r   Úcolorize_syntax_error+  s    
z"EditorWindow.colorize_syntax_errorc             C   s2   t jddddd}|s"d| jd< nt j| jd< d S )Nr>   r!   zcursor-blinkrT   )rA   r   rV   )r   rr   rB   rU   )rÇ   Zcursorblinkr   r   r   r¤   6  s
    z EditorWindow.update_cursor_blinkc             C   sN   | j d k	r| j  ¡  | jd k	r(| j ¡  t | jdd¡}|| jd< |  ¡  d S )Nr>   r!   rR   )r°   Zupdate_fontr±   r   r   rg   rB   rž   )rÇ   Znew_fontr   r   r   Ú	ResetFont@  s    




zEditorWindow.ResetFontc             C   s„   t  ¡  | j_}x&| ¡ D ]\}}| jj|f|žŽ  qW xF|  ¡ D ]:}t  |¡}|rBx&| ¡ D ]\}}| jj|f|žŽ  q^W qBW d S )N)	r   ÚGetCurrentKeySetr(   Údefault_keydefsÚitemsrB   Zevent_deleteÚget_standard_extension_namesÚGetExtensionBindings)rÇ   ÚkeydefsrH   ÚkeylistÚextensionNameÚxkeydefsr   r   r   ÚRemoveKeybindingsQ  s    
zEditorWindow.RemoveKeybindingsc             C   sV  t  ¡  | j_}|  ¡  x(|  ¡ D ]}t  |¡}|r"|  |¡ q"W i }xR| jjD ]F}i ||d < x4|d D ](}|rj|d ||d  t|d ƒd < qjW qPW x¶| j	D ]¬}| j	| }| 
t¡}|d krÄq¢|d7 }x€td|ƒD ]r}	| |	¡dkrØ| |	d¡}
|
rØ| |	d¡}d}||kr.||| kr.|| | }|rØt||ƒ}
|j|	|
d qØW q¢W d S )Nr   rK   rO   Úacceleratorrö   r;   )rV  )r   rL  r(   rM  rt   rO  rP  Úmenudefsrù   r¸   rº   rü   rá   rA   Z	entrycgetÚget_acceleratorr   )rÇ   rQ  rS  rT  ZmenuEventDictr:   r  ZmenubarItemrX   rº   ZaccelZitemNamerH   r   r   r   ÚApplyKeybindings]  s<    
(



zEditorWindow.ApplyKeybindingsc             C   s   | j stjddddd| _d S )Nr>   rS   z
num-spacesr@   )rA   )rŸ   r   rr   r¡   )rÇ   r   r   r   r¢     s    
z#EditorWindow.set_notabs_indentwidthc             C   s€   t  ¡ }| jd }| t¡}|| jkr8| | jd |¡ |rr| ¡  x,|D ]$}|  |d ¡}|j	|d |d qJW || jd< d S )Nr   rK   r   )rö   rO   )
r   ZGetAllExtraHelpSourcesListr¸   rº   rü   rý   rÿ   r»   Ú"_EditorWindow__extra_help_callbackr  )rÇ   Z	help_listZhelpmenuZhelpmenu_lengthÚentryr8  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rryt | ¡ W q| tk
rn } ztj	dt
|ƒˆ jd W d d }~X Y q|X n
t | ¡ d S )N)ZwwwZhttpr7   r8   zDocument Start Failure)r  r  r  )r>  r]   r^   re   r   ra   r  r   r¾   rÀ   rã   rB   r!  r"  )Úhelpfiler#  )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 Q R X |rptj |¡d }||krd| |¡ | d|¡ g ‰ x2|D ]*}d|ksštj |dd… ¡szˆ  	|¡ qzW ‡ fd	d
„|D ƒ}d}|dt
|ƒ… }|rVy*t|dddd}| |¡ W d Q R X W nV tk
rT } z6t| jddƒsDd| j_tjdd|› d| jd W d d }~X Y nX xj| jjD ]^}	|	j}
|
 dt¡ xDt|ƒD ]8\}}| ¡ }|	 |¡}|
j|| d | |dd q€W q`W d S )NÚrÚutf_8r   )r'   ÚerrorsrF  r   ú rY   c                s   g | ]}|ˆ kr|‘qS r   r   )Ú.0r^   )Ú	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.)r  r  r  r×   )rö   rO   r÷   )rn   r]   r^   r²   r"  Ú	readlinesÚabspathÚremoverÙ   Úappendrâ   Ú
writelinesr   r  rg   rf  r¾   ÚshowwarningrB   rj   rm   rû   rÿ   rü   Ú	enumerateÚrstripÚ#_EditorWindow__recent_file_callbackr  )rÇ   Únew_fileZrf_listr-  Zrf_list_filer^   ZulcharsZrf_fileÚerrÚinstancer:   ÚiÚ	file_nameÚcallbackr   )rc  r   r¶   ¨  sL    



z%EditorWindow.update_recent_files_listc                s   |f‡ fdd„	}|S )Nc                s   ˆ j j| d d S )N)ZeditFile)r¬   r"  )Z
fn_closure)rÇ   r   r   Úopen_recent_file×  s    z=EditorWindow.__recent_file_callback.<locals>.open_recent_filer   )rÇ   rt  rv  r   )rÇ   r   Z__recent_file_callbackÖ  s    z#EditorWindow.__recent_file_callbackc             C   s‚   |   ¡ }|  ¡ }|r*|r*|d | t }n|r4|}n|r>|}nd}|pL|pL|}|  ¡ sfd| }d| }| j |¡ | j |¡ d S )Nz - Úuntitledz*%s*z*%s)Úshort_titleÚ
long_titleÚ_py_versionÚ	get_savedrj   Zwm_titleZwm_iconname)rÇ   ZshortZlongr  Ziconr   r   r   r«   Û  s    zEditorWindow.saved_change_hookc             C   s
   | j  ¡ S )N)r§   r{  )rÇ   r   r   r   r{  í  s    zEditorWindow.get_savedc             C   s   | j  |¡ d S )N)r§   Ú	set_saved)rÇ   Úflagr   r   r   r|  ð  s    zEditorWindow.set_savedc             C   s   | j  ¡  d S )N)r§   Ú
reset_undo)rÇ   r   r   r   r~  ó  s    zEditorWindow.reset_undoc             C   s   | j j}|rtj |¡S dS )Nrw  )r¬   rÈ   r]   r^   rÔ   )rÇ   rÈ   r   r   r   rx  ö  s    zEditorWindow.short_titlec             C   s   | j jp
dS )Nr;   )r¬   rÈ   )rÇ   r   r   r   ry  ú  s    zEditorWindow.long_titlec             C   s   |   ¡  dS )NrG   )r9  )rÇ   rH   r   r   r   r}   ý  s    z EditorWindow.center_insert_eventrÙ   c             C   sH   | j }|  ¡ \}}|  |¡}|| }td||d  ƒ}| t|ƒ¡ d S )NrK   r9   )rB   Úgetwindowlinesr  Úmaxr  r  )rÇ   ÚmarkrB   rj   Úbotr+  rD   Znewtopr   r   r   r9    s    
zEditorWindow.centerc             C   sN   | j }|  d¡}|  d¡}||krF| ¡ dkrFt|d ƒ}|| d }||fS )Nz@0,0z@0,65535rK   rD   )rB   r  Zwinfo_heightr@   )rÇ   rB   rj   r‚  rD   r   r   r   r  	  s    

zEditorWindow.getwindowlinesc             C   s   | j }tt| |¡ƒƒS )N)rB   r@   r  rº   )rÇ   r  rB   r   r   r   r    s    zEditorWindow.getlinenoc             C   s(   | j  ¡ }t d|¡}ttt| ¡ ƒƒS )Nz(\d+)x(\d+)\+(-?\d+)\+(-?\d+))rj   Zwm_geometryÚreÚmatchÚlistrÏ   r@   Úgroups)rÇ   ZgeomÚmr   r   r   Úget_geometry  s    
zEditorWindow.get_geometryc             C   s   |   ¡  dS )NrG   )ru   )rÇ   rH   r   r   r   rw     s    zEditorWindow.close_eventc             C   sH   | j rD|  ¡ s:| j ¡ dkr&| j ¡  | j ¡  | j ¡  | j  ¡ S d S )Nr  )r¬   r{  rj   rÞ   Z	deiconifyÚlowerZliftÚ	maybesave)rÇ   r   r   r   rŠ  !  s    


zEditorWindow.maybesavec             C   s:   y |   ¡ }t|ƒdkr|  ¡  |S  tk
r4   Y nX d S )NZcancel)rŠ  rã   Ú_closeÚAttributeError)rÇ   Zreplyr   r   r   ru   *  s    zEditorWindow.closec             C   s   | j jr| j| j jd t | j¡ |  ¡  | j  ¡  d | _ d | _| j	rX| j	 ¡  d | _	d | _
d | _| j ¡  d | _| j ¡  | jrŒ|  ¡  d S )N)rp  )r¬   rÈ   r¶   r   Zunregister_callbackr½   Úunload_extensionsru   r§   r¯   rB   rl   r¦   rj   Zdestroyr@  )rÇ   r   r   r   r‹  3  s"    



zEditorWindow._closec             C   s   i | _ |  ¡  d S )N)Ú
extensionsÚload_standard_extensions)rÇ   r   r   r   r·   G  s    zEditorWindow.load_extensionsc             C   s4   x(t | j ¡ ƒD ]}t|dƒr| ¡  qW i | _d S )Nru   )r…  rŽ  Úvaluesr£   ru   )rÇ   Úinsr   r   r   r  K  s    
zEditorWindow.unload_extensionsc             C   sH   xB|   ¡ D ]6}y|  |¡ W q
   tdt|ƒƒ t ¡  Y q
X q
W d S )NzFailed to load extension)rO  Úload_extensionÚprintÚreprÚ	tracebackÚ	print_exc)rÇ   r=   r   r   r   r  Q  s    z%EditorWindow.load_standard_extensionsc             C   s   t jddS )NT)Zeditor_only)r   ZGetExtensions)rÇ   r   r   r   rO  Y  s    z)EditorWindow.get_standard_extension_namesZZzDummyZzzdummyc       	   	   C   sF  | j  ||¡}y>ytjd| td}W n" ttfk
rH   t |¡}Y nX W n  tk
rl   td|ƒ ‚ Y nX t||ƒ}t	 
|¡}t|dƒrš|  |j|¡ || ƒ}|| j|< |rB|  |¡ x„|D ]|}| dd¡}x |d d… dkrò|dd … }qÔW x"|d	d … d
kr|d d	… }qöW |d }t||ƒrÂ| j |t||ƒ¡ qÂW d S )NrÖ   )Úpackagez
Failed to import extension: rW  ú-rE  rK   rÜ   rY   rÝ   Z_event)Úextfilesr¹   Ú	importlibÚimport_moduleÚ__package__ÚImportErrorÚ	TypeErrorr“  r  r   rP  r£   rú   rW  rŽ  rt   r   rB   rv   )	rÇ   r=   ZfnameÚmodÚclsrQ  r‘  ZveventZ
methodnamer   r   r   r’  `  s4    







zEditorWindow.load_extensionc             C   sJ   |d kr| j j}| j}||_x(| ¡ D ]\}}|r&|j|f|žŽ  q&W d S )N)r(   rM  rB   rQ  rN  rÁ   )rÇ   rQ  rB   rH   rR  r   r   r   rt   |  s    zEditorWindow.apply_bindingsc          	   C   sò   |d kr| j j}|d kr | j j}| j}| j}xÀ|D ]¸\}}| |¡}|sJq2xž|D ]–}|sb| ¡  qP|\}	}
|	d d… dk}|rŠ|	dd … }	t|	ƒ\}}	t||
ƒ}||
fdd„}|rÔ|  	|
t
¡}|j|	||||d qP|j|	|||d qPW q2W d S )NrK   ú!c             S   s   |   |¡ d S )N)r  )rB   r  r   r   r   rO   ž  s    z(EditorWindow.fill_menus.<locals>.command)rö   r÷   rO   rV  Úvariable)rö   r÷   rO   rV  )r(   rW  rM  r¸   rB   r¹   r»   rù   rX  Úget_var_objZ
BooleanVarZadd_checkbuttonr  )rÇ   rW  rQ  r¸   rB   ZmnameZ	entrylistr:   r[  rö   r  Zcheckbuttonr÷   rV  rO   Úvarr   r   r   rú   …  s8    




zEditorWindow.fill_menusc             C   s&   |   |¡}|r| ¡ }|S t|ƒ‚d S )N)r£  r¹   Ú	NameError)rÇ   r=   r¤  Úvaluer   r   r   Úgetvarª  s
    
zEditorWindow.getvarc             C   s(   |   ||¡}|r| |¡ nt|ƒ‚d S )N)r£  rœ   r¥  )rÇ   r=   r¦  Úvartyper¤  r   r   r   Úsetvar²  s    zEditorWindow.setvarc             C   s,   | j  |¡}|s(|r(|| jƒ | j |< }|S )N)rl   r¹   rB   )rÇ   r=   r¨  r¤  r   r   r   r£  ¹  s    zEditorWindow.get_var_objc             C   s,   | j r$| j d|¡p"d| j |¡kS dS d S )NZTODOÚSTRINGrK   )r¯   rB   Útag_prevrangeZ	tag_names)rÇ   Z
text_indexr   r   r   Úis_char_in_stringÉ  s    zEditorWindow.is_char_in_stringc             C   s:   y | j  d¡}| j  d¡}||fS  tk
r4   dS X d S )Nz	sel.firstzsel.last)NN)rB   rº   r  )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)rB   ÚTK_TABWIDTH_DEFAULTr@   )rÇ   Zcurrentr   r   r   Úget_tk_tabwidthà  s    zEditorWindow.get_tk_tabwidthc          	   C   sB   | j }|  ¡ |kr>|j dd|d d|jd| ¡}|j|d d S )NrR   rÑ   z
-displayofÚn)r®  )rB   r°  rÐ   r  ZmasterZ	configure)rÇ   ZnewtabwidthrB   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 )Nr9   r   F)Úguess_indentr¡   r    rŸ   r²  )rÇ   rË   Zguessrs  r   r   r   r®   ñ  s    z#EditorWindow.set_indentation_paramsc       
      C   sB  | j }|  ¡ \}}|r6|r6| ||¡ | d|¡ dS | dd¡}|dkrp| ddd¡rd| d¡ n| ¡  dS |d d	krŠ| d¡ dS | j}t| 	|¡ƒ}|d
 | j
 | j
 }d}	xH|| jkrÄP |d d… }|	d
 }	t| 	|¡ƒ}||ksú|d d	kr¸P q¸W | ¡  | d|	 d¡ ||k r6| dd||  ¡ | ¡  dS )NrÙ   rG   zinsert linestartr;   rÝ   z1.0z	insert-1crY   z 	rK   r   z
insert-%dcr×   )rB   r­  rÿ   rå   r¹   rß   Zbellr    râ   Ú
expandtabsr¡   ro   r©   rÙ   rª   )
rÇ   rH   rB   rê   rë   Úcharsr    ZhaveZwantZncharsdeletedr   r   r   r‹   ú  sB    


z"EditorWindow.smart_backspace_eventc       
      C   sì   | j }|  ¡ \}}| ¡  zÂ|rX|rXt|ƒt|ƒkr@| j |¡S | ||¡ | d|¡ | dd¡}t	|| j
ƒ\}}|t|ƒkr’|  || j ¡ n>| jržd}n&t| | j
¡ƒ}| j}	d|	||	   }| d|¡ | d¡ dS | ¡  X d S )NrÙ   zinsert linestartrØ   r×   rG   )rB   r­  r©   Ú
index2linerŽ   r   rÿ   rå   r¹   Úget_line_indentr    râ   Úreindent_tor¡   rŸ   r´  rÙ   rç   rª   )
rÇ   rH   rB   rê   rë   ÚprefixÚrawZ	effectiveZpadr±  r   r   r   r   &  s,    
zEditorWindow.smart_indent_eventc          	   C   sê  | j }|  ¡ \}}| ¡  z´|r>|r>| ||¡ | d|¡ | dd¡}dt|ƒ }}x ||k rx|| dkrx|d7 }qZW ||kr’| dd¡ dS |d |… }d}x2|rÔ|d dkrÔ|| jkrÔ|d d… }|d7 }q¤W |rê| d	| d¡ x| d¡dkr| d¡ qìW | dd¡ t	| 
d¡ƒ}	t | j| j¡}
| js¶xf| jD ]\}t|	| dƒ}t|ƒd
 }| |d¡}|
 |¡ |
 |  |¡¡}|d k	sœ|dkrDP qDW |
 |p°d¡ n@| dd¡}|rÒ|d }nd}| |d¡}|
 |¡ |
 d¡ |
 ¡ }|tjkrŠ|tjkrnn|tjkr2| d|¡ nT|tjkrN|  |
 ¡ ¡ n8|tjkr†|
 ¡ dkrv| d|¡ n|  |
  ¡ ¡ n dS |
 !¡ }| d|¡ |
 "¡ r´|  #|¡ n|rÎ|
 $¡ rÎ|  %|¡ dS | &d¡ | '¡  X d S )NrÙ   zinsert linestartr   z 	rK   rF  rG   rY   zinsert - %d charsz.0Zconsolez1.0)(rB   r­  r©   rÿ   rå   r¹   râ   rÙ   ro   r¶  rº   r   ZParserr¡   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ç   rª   )rÇ   rH   rB   rê   rë   rè   rs  r±  ÚindentZlnor  ÚcontextZstartatZstartatindexZrawtextZbodr^  rÚ   r   r   r   rŒ   I  s„    	






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   s2   | j r&t|| jƒ\}}d| d|  S d| S d S )NrØ   r×   )rŸ   Údivmodr    )rÇ   r±  ZntabsZnspacesr   r   r   Ú_make_blanksÏ  s    zEditorWindow._make_blanksc             C   sJ   | j }| ¡  | ddd¡r(| dd¡ |r>| d|  |¡¡ | ¡  d S )Nzinsert linestartz!=rÙ   )rB   r©   rß   rÿ   rÙ   rÁ  rª   )rÇ   rQ   rB   r   r   r   r¸  Ù  s    zEditorWindow.reindent_toc             C   sP   t | j| jƒ ¡ \}}|r@|r@t|| jƒ\}}t|| jƒ\}}nd }}|| S )Nr   )ÚIndentSearcherrB   r    rô   r·  )rÇ   ÚopenerZindentedrº  ZindentsmallZindentlarger   r   r   r³  ç  s    zEditorWindow.guess_indentc             C   sN   | j d krd S | j jr&| j  ¡  d}n| j  ¡  d}| jdd|› dd d S )NZShowZHiderZ   z*Line Numbersz Line Numbers)r:   rº   rö   )r±   Zis_shownZhide_sidebarZshow_sidebarr  )rÇ   rH   Z
menu_labelr   r   r   rÆ   ð  s    


z&EditorWindow.toggle_line_numbers_event)NNNN)N)N)N)N)N)N)N)N)N)N)N)N)rÙ   )rÙ   )N)NN)N)N)T)N)”r1  Ú
__module__Ú__qualname__Zidlelib.percolatorr"   Zidlelib.colorizerr#   r$   Zidlelib.undor%   Zidlelib.iomenur&   r'   r2  r(   Zidlelib.statusbarr)   Zidlelib.autocompleter*   Zidlelib.autoexpandr+   Zidlelib.calltipr,   Zidlelib.codecontextr-   Zidlelib.sidebarr.   Zidlelib.formatr/   r0   r1   r2   Zidlelib.parenmatchr3   Zidlelib.squeezerr4   Zidlelib.zoomheightr5   r   ÚgetfilesystemencodingZfilesystemencodingr\   rÃ   rÅ   rÌ   ry   rž   r•   r“   r™   rï   rø   rs   r½   r  rÄ   r›   r  rx   r  r  r  r  r  r€   r   r~   r   rz   r{   r|   rƒ   r„   r   r‘   r’   r…   r†   rˆ   r‡   r‰   rŠ   r.  r‚   r–   r—   r˜   r:  r´   r@  rA  r­   rC  rD  rµ   ÚstringZascii_lettersÚdigitsrG  rJ  r¤   rK  rU  rY  r¢   rþ   rZ  r¶   ro  r«   r{  r|  r~  rx  ry  r}   r9  r  r  rˆ  rw   rŠ  ru   r‹  r·   r  r  rO  r™  r’  rt   rú   r§  r©  r£  r¬  r­  r°  r²  r®   r‹   r   rŒ   r»  rÁ  r¸  r³  rÆ   r   r   r   r   r!   1   s   
  
+

%




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

		
	
%


	,#v
	r!   c             C   s   t t| ƒƒS )N)r@   r  )rº   r   r   r   r¶  þ  s    r¶  z[ \t]*c             C   s$   t  | ¡}| ¡ t| ¡  |¡ƒfS )N)Ú_line_indent_rer„  rX   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 )Nr   )rB   r    rs  ÚfinishedÚblkopenlineÚindentedline)rÇ   rB   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;   rK   z.0z>=rX   z lineend+1c)rË  rs  r”  rB   rß   r¹   )rÇ   rs  r  r   r   r   Úreadline  s    zIndentSearcher.readline)ÚclassÚdefÚforÚifÚtryÚwhilec	       	      C   s>   | j rn2||kr ||kr || _n||kr:| jr:|| _d| _ d S )NrK   )rË  rÌ  rÍ  )	rÇ   rA   ÚtokenÚstartrX   rè   ÚINDENTÚNAMEZOPENERSr   r   r   Ú
tokeneater#  s    zIndentSearcher.tokeneaterc          	   C   sl   t j}| jt _zHy(t  | j¡}x|D ]}| j|Ž  q$W W n t jtfk
rR   Y nX W d |t _X | j| j	fS )N)
ÚtokenizeÚtabsizer    Úgenerate_tokensrÎ  rÙ  Ú
TokenErrorÚSyntaxErrorrÌ  rÍ  )rÇ   Zsave_tabsizeÚtokensrÕ  r   r   r   rô   /  s    

zIndentSearcher.runN)
r1  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 )NrE  r   rK   )r)  )Úsrs  r   r   r   rù   A  s    
rù   ú[ú]ú/)ZbracketleftZbracketrightZslashc             C   s´   |   |¡}|rt ¡ r"|dk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>   ú<<open-module>>ú<<change-indentwidth>>ú<<goto-line>>r;   r   z-[a-z]\bc             S   s   |   ¡  ¡ S )N)rÊ  Úupper)r‡  r   r   r   rI   Z  rJ   z!get_accelerator.<locals>.<lambda>z\b\w+\bc             S   s   t  |  ¡ |  ¡ ¡S )N)Úkeynamesr¹   rÊ  )r‡  r   r   r   rI   [  rJ   zKey-ZCancelz
Ctrl-BreakzControl-zCtrl-r˜  ú+z><r×   rÜ   rÝ   )r¹   r
   Z	isCocoaTkrƒ  Úsub)rQ  r  rR  rà  r   r   r   rX  P  s    
rX  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  )rg   rÐ   r   r   r   Úfixwordbreaksf  s    rë  c             C   s‚   | }t |ƒ tjdd … r&tjd }nd }t |d ¡ t||d}|j}d|d< x,tdƒD ] }| dd| t	|ƒ d ¡ qZW d S )	NrK   )rg   rÈ   é
   rD   é   rÙ   z  rF  )
rë  r   Úargvr
   ZsetupAppr!   rB   rá   rÙ   rã   )r  rg   rÈ   rò   rB   rs  r   r   r   Ú_editor_windowo  s    rï  Ú__main__)r>   zidlelib.idle_test.test_editorr9   F)Ú	verbosityÚexit)rô   )=Zimportlib.abcrš  Úimportlib.utilr]   ra   rƒ  rÇ  r   rÚ  r•  r!  ZtkinterZtkinter.fontr   Ztkinter.ttkr   Ztkinter.simpledialogZsimpledialogr¿   Ztkinter.messageboxZ
messageboxr¾   Zidlelib.configr   r2  r   r   r   r	   r
   Zidlelib.multicallr   r   r   r   r   Zidlelib.treer   r   r¯  Zpython_versionrz  r   r    Úobjectr!   r¶  ÚcompilerÉ  r·  rÂ  rù   rè  rX  rë  rï  r1  Zunittestr>   Zidlelib.idle_test.htestrô   r   r   r   r   Ú<module>   sv   
           X

4
	
