£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
B
     fN                 @   s   d Z ddlZddlT ddlmZ ddlmZmZ ddlm	Z	 dZ
dZed	fZd
ZdZdZdZdZdZdZG dd dZedkrddlmZ edddd dS )zH
An auto-completion window for IDLE, used by the autocomplete extension
    N)*)	Scrollbar)FILESATTRS)MC_SHIFTz<<autocompletewindow-hide>>z
<FocusOut>z<ButtonPress>z<<autocompletewindow-keypress>>)z<Key>z<Key-BackSpace>z<Key-Return>z	<Key-Tab>z<Key-Up>z
<Key-Down>z
<Key-Home>z	<Key-End>z<Key-Prior>z
<Key-Next>z<Key-Escape>z!<<autocompletewindow-keyrelease>>z<KeyRelease>z<B1-ButtonRelease>z<Configure>z<B1-Double-ButtonRelease>c               @   s   e Z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!S )"AutoCompleteWindowc             C   s   || _ d  | _ | _| _d  | _| _d | _d | _d | _d | _	d | _
d | _d | _d  | _ | _ | _ | _ | _| _d| _d| _d S )NF)widgetautocompletewindowlistbox	scrollbarorigselforegroundorigselbackgroundcompletionsmorecompletionsmodestart
startindexlasttypedstartuserwantswindowZhideid
keypressidlistupdateidwinconfigidkeyreleaseiddoubleclickidlastkey_was_tabis_configuring)selfr    r   ;/opt/alt/python37/lib64/python3.7/idlelib/autocomplete_w.py__init__   s    $zAutoCompleteWindow.__init__c             C   s   t t| jt|}d}x&||k r>| j| || kr>|d7 }qW |t| jk rv| jd| j|f d| jt| jf  |t|k r| jd| j|f ||d   || _d S )Nr      z%s+%dc)minlenr   r   deleter   insert)r   newstartmin_lenir   r   r   _change_start>   s    z AutoCompleteWindow._change_startc             C   sX   d}t | j}x4||krB|| d }| j| |kr8|}q|d }qW t|t | jd S )zFind the first index in self.completions where completions[i] is
        greater or equal to s, or the last index if there is no such.
        r      r    )r"   r   r!   )r   sr'   jmr   r   r   _binary_searchK   s     

z!AutoCompleteWindow._binary_searchc       
      C   s   |  |}| j| dt| |kr(|S |d }t| j}x@||krz|| d }| j| dt| |krp|}q<|d }q<W |d }||kr| j| S | j| }| j| }tt|t|}	t|}x$||	k r|| || kr|d7 }qW |d| S )zAssuming that s is the prefix of a string in self.completions,
        return the longest string which is a prefix of all the strings which
        s is a prefix of them. If s is not a prefix of a string, return s.
        Nr    r)   )r-   r   r"   r!   )
r   r*   firstr'   r+   r,   ZlastZ
first_compZ	last_compr&   r   r   r   _complete_stringX   s(    





z#AutoCompleteWindow._complete_stringc             C   sL  t | j d }| j| | j}| j| }| ||krB|}nHtt|t|}d}x$||k r||| || kr||d7 }qZW |d| }| 	| | j| dt| j
 | j
kr| jj| j| jd n| jj| jd| jdd | jrH| j| _d| _| jdt x| jD ]}| jt| qW | j| | j
 |   dS )zzCall when the selection of the Listbox has changed.

        Updates the Listbox display and calls _change_start.
        r   r    N)selectbackgroundselectforegroundZbgZfg)intr
   curselectionseer   r   r-   r!   r"   r(   r   Z	configurer   r   cgetr   r#   ENDr$   
select_set_selection_changed)r   curselZltsZselstartr%   r&   r'   itemr   r   r   r8   x   s2    


z%AutoCompleteWindow._selection_changedc             C   s  |\| _ | _|| _| j|| _| j| jd| _|r| | j}| j}| 	| | 
|}| j | |kr|t| j d ks| j |d  dt| |kr||kS || _| j| _t| j | _}	|	d |	d y|	jdd|	jdd W n tk
r   Y nX t|	td	 | _}
t|	|
jd
d | _}x| j D ]}|t| q6W |d| _|d| _ |
j!|j"d |
j#t$t%d |j#t&t'dd |	(  | j)| 
| j | *  |	+t,| j-| _.| j+t,| j-| _/|	0t,t1 xt2D ]}| j0t,| qW | j+t3| j4| _5xt6D ]}| j0t3| qW | j+t7| j8| _9| j0t7t: |+t;| j<| _=d
| _>|	+t?| j@| _A|+tB| jC| _DdS )zShow the autocomplete list, bind events.

        If complete is True, complete the text, and if there is exactly
        one matching completion, don't open a list.
        r$   r    Nz+10000+10000z!::tk::unsupported::MacWindowStyleZstylehelpZnoActivates)ZorientF)ZyscrollcommandZexportselectionr1   r0   )Zcommand)sidefillT)r<   r=   expand)Er   r   r   r   indexr   getr   r/   r(   r-   r"   r   r   ZToplevelr	   wm_geometryZwm_overrideredirectZtkZcallZ_wZTclErrorr   ZVERTICALr   ZListboxsetr
   r$   r6   r5   r   r   ZconfigZyviewZpackZRIGHTYZLEFTZBOTHZliftr7   r8   ZbindHIDE_VIRTUAL_EVENT_NAME
hide_eventhideaidhidewidZ	event_addHIDE_FOCUS_OUT_SEQUENCEHIDE_SEQUENCESKEYPRESS_VIRTUAL_EVENT_NAMEkeypress_eventr   KEYPRESS_SEQUENCESKEYRELEASE_VIRTUAL_EVENT_NAMEkeyrelease_eventr   KEYRELEASE_SEQUENCELISTUPDATE_SEQUENCElistselect_eventr   r   WINCONFIG_SEQUENCEwinconfig_eventr   DOUBLECLICK_SEQUENCEdoubleclick_eventr   )r   Z
comp_listsr?   completer   ZuserWantsWinZ	completedr   r'   acwr   r
   r:   seqr   r   r   show_window   sn    









zAutoCompleteWindow.show_windowc             C   s  | j r
d S d| _ |  sd S | j}|| j || j\}}}}| j}|  | |	  }}	| |	  }
}|
 t|td|
|  }| | }|||  |	ks||	k r||7 }n||	8 }|d||f  |  t dr|t| j d | _d| _ d S )NTr   z+%d+%dZWindowsF)r   	is_activer   r4   r   Zbboxr	   updateZwinfo_widthwinfo_heightZwinfo_rootxr!   maxZwinfo_rootyrA   Zupdate_idletasksplatformsystem
startswithunbindrR   r   )r   eventtextxyZcxZcyrW   Z	acw_widthZ
acw_heightZ
text_widthZtext_heightZnew_xZnew_yr   r   r   rS      s0    
z"AutoCompleteWindow.winconfig_eventc             C   sB   | j s
d S y| j  s|   W n tk
r<   |   Y nX d S )N)r	   Z	focus_gethide_windowKeyError)r   r   r   r   _hide_event_check  s    
z$AutoCompleteWindow._hide_event_checkc             C   s>   |   r:|jtjkr&| jd| j n|jtjkr:|   d S )Nr    )	rZ   typeZ	EventTypeZFocusOutr   Zafterrh   ZButtonPressrf   )r   rb   r   r   r   rE     s
    zAutoCompleteWindow.hide_eventc             C   s4   |   r0d| _t| j d }| | j|  d S )NTr   )rZ   r   r2   r
   r3   r(   r   )r   rb   r9   r   r   r   rQ   (  s    z#AutoCompleteWindow.listselect_eventc             C   s.   t | j d }| | j|  |   d S )Nr   )r2   r
   r3   r(   r   rf   )r   rb   r9   r   r   r   rU   .  s    z$AutoCompleteWindow.doubleclick_eventc                s   |   sd S |j t|dr$|j}nd} dkr6d| _t dks` dks`| jtkrJ dkrJ|t @ sJt dkr| 	| j
   n| dkr| 	| j
d	  nb d
kr| 	| j
d  nH dkr| 	| j
d  n.t| j
dkr|   d S | 	| j
d d  | j
| _| jdt| j d  | j| | j
 |   dS  dkrh|   |   dS | jtkr~ dks| jtkr dkr|t @ st| j d }| j| d t| j
 | j
kr| jtks| j
r| 	| j|  |   d S  dkr2|s2d| _t| j d } dkr:d}nĈ dkrTt| jd }n dkr| j| j | jd } dkrtd|| }n& dksttt| jd || }n@ dkrtd|d }n& dksttt| jd |d }| j| | j| |   | 	| j|  dS  dkr|s| jrxt| j d }| 	| j|  |   dS d| _d| _d S nt fdddD rd S |jr|jdkr| 	| j
|j  | j
| _| jdt| j d  | j| | j
 |   dS |   d S d S ) Nmc_stater   ZTabFr    )
underscoreZ	BackSpace)periodminusrk   _rl   .rm   -breakZReturn)rl   ZspaceZ	parenleftZ
parenrightZbracketleftZbracketright)ZslashZ	backslashZquotedblZ
apostrophe)HomeEndPriorNextUpDownTrs   rt   )ru   rv   ru   rv   rw   rx   c             3   s   | ]}| kV  qd S )Nr   ).0r*   )keysymr   r   	<genexpr>  s    z4AutoCompleteWindow.keypress_event.<locals>.<genexpr>)ZShiftZControlZAltZMetaZCommandZOption )rZ   rz   hasattrrj   r   r"   r   r   r   r(   r   rf   r   r
   Zselect_clearr2   r3   r7   r-   r8   rV   r   r   r   Znearestr\   r]   AssertionErrorr!   anychar)r   rb   stater9   ZnewselZjumpr   )rz   r   rK   4  s    

 





z!AutoCompleteWindow.keypress_eventc             C   s@   |   sd S | jd| jd| jt| jf kr<|   d S )Nr$   z%s+%dc)rZ   r   r?   r   r"   r   rf   )r   rb   r   r   r   rN     s
    
z#AutoCompleteWindow.keyrelease_eventc             C   s
   | j d k	S )N)r	   )r   r   r   r   rZ     s    zAutoCompleteWindow.is_activec             C   s   |  | | j d S )N)r(   r/   r   )r   r   r   r   rV     s    zAutoCompleteWindow.completec             C   s(  |   sd S | jtt xtD ]}| jt| q W | jt| j | jt| j	 d | _d | _	xt
D ]}| jt| qhW | jt| j d | _| jtt | jt| j d | _| jt| j d | _| jr| jt| j d | _| j  | j  d | _| j  d | _| j  d | _d S )N)rZ   r	   Zevent_deleterD   rH   rI   r   ra   rF   rG   rL   rJ   r   rM   rO   r   r
   rP   r   r   rR   Z	focus_setr   Zdestroy)r   rX   r   r   r   rf     s<    





zAutoCompleteWindow.hide_windowN)__name__
__module____qualname__r   r(   r-   r/   r8   rY   rS   rh   rE   rQ   rU   rK   rN   rZ   rV   rf   r   r   r   r   r      s    ! &L%tr   __main__)mainz%idlelib.idle_test.test_autocomplete_wr)   F)	verbosityexit)__doc__r^   ZtkinterZtkinter.ttkr   Zidlelib.autocompleter   r   Zidlelib.multicallr   rD   rH   rI   rJ   rL   rM   rO   rP   rR   rT   r   r   Zunittestr   r   r   r   r   <module>   s,      G