a
    $RîhõQ  ã                   @   s˜   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r”d dlmZ edddd dS )é    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/python-3.9.24/usr/lib/python3.9/idlelib/autocomplete_w.pyÚ__init__   s"    ÿÿzAutoCompleteWindow.__init__c                 C   s¨   t t| jƒt|ƒƒ}d}||k r<| j| || kr<|d7 }q|t| jƒk rr| j d| j|f d| jt| jƒf ¡ |t|ƒk rž| j d| j|f ||d … ¡ || _d S )Nr   é   ú%s+%dc)ÚminÚlenr   r   Údeleter   Úinsert)r   ÚnewstartÚmin_lenÚir   r   r   Ú_change_start>   s    
ÿ
ÿz AutoCompleteWindow._change_startc                 C   sT   d}t | jƒ}||kr@|| d }| j| |kr6|}q|d }qt|t | jƒd ƒS )Nr   é   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ƒ}||krx|| d }| j| d t|ƒ… |krn|}q:|d }q:|d }||kr’| j| S | j| }| j| }tt|ƒt|ƒƒ}	t|ƒ}||	k râ|| || krâ|d7 }qÀ|d |… S )Nr    r*   )r.   r   r#   r"   )
r   r+   Úfirstr(   r,   r-   ÚlastZ
first_compZ	last_compr'   r   r   r   Ú_complete_stringX   s(    






z#AutoCompleteWindow._complete_stringc                 C   sD  t | j ¡ d ƒ}| j |¡ | j}| j| }|  |¡|krB|}nDtt|ƒt|ƒƒ}d}||k rz|| || krz|d7 }qX|d |… }|  	|¡ | j| d t| j
ƒ… | j
krÄ| jj| j| jd n|| jj| j d¡| j d¡d | jr@| j| _d | _| j dt¡ | jD ]}| j t|¡ q| j |  | j
¡¡ |  ¡  d S )Nr   r    )ÚselectbackgroundÚselectforegroundÚ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   r;   x   s6    



ÿ
ÿ
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¡ z|	j dd|	jdd¡ W n ty   Y n0 t|	td | _}
t|	|
jd	d
 | _}| j D ]}| t|¡ q2| d¡| _| d¡| _ |
j!|j"d |
j#t$t%d |j#t&t'dd |	 (¡  |	 )¡  | j *|  
| j¡¡ |  +¡  |	 ,t-| j.¡| _/| j ,t-| j.¡| _0|	 1t-t2¡ t3D ]}| j 1t-|¡ qè| j ,t4| j5¡| _6t7D ]}| j 1t4|¡ q| j ,t8| j9¡| _:| j 1t8t;¡ | ,t<| j=¡| _>d	| _?|	 ,t@| jA¡| _B| ,tC| jD¡| _Ed S )Nr%   r    z+10000+10000z!::tk::unsupported::MacWindowStyleÚstyleÚhelpZnoActivates)ZorientF)ZyscrollcommandZexportselectionr3   r2   )Zcommand)ÚsideÚfillT)r@   rA   Úexpand)Fr   r   r   r   Úindexr   Úgetr   r1   r)   r.   r#   r   r   ZToplevelr	   Úwm_geometryZwm_overrideredirectZtkÚcallZ_wÚTclErrorr   ZVERTICALr   ZListboxÚsetr
   r%   r9   r8   r   r   ZconfigZyviewÚpackZRIGHTÚYZLEFTZBOTHÚupdate_idletasksZliftr:   r;   Ú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_listsrC   Úcompleter   ZuserWantsWinZ	completedr   r(   Úacwr   r
   r=   Úseqr   r   r   Úshow_windowž   s€    

ÿþ

ÿÿ
ÿÿÿÿzAutoCompleteWindow.show_windowc                 C   sP  | j r
d S d| _ |  ¡ sd S zÖ| j}| | j¡ | | j¡\}}}}| j}t ¡  	d¡r`| 
¡  | ¡ | ¡  }}	| ¡ | ¡  }
}| ¡ t|td|
| ƒƒ }| ¡ | }|||  |	ksÄ||	k rÎ||7 }n||	8 }| d||f ¡ | ¡  W n ty   Y n0 t ¡  	d¡rFz| t| j¡ W n ty>   Y n0 d | _d| _ d S )NTZWindowsr   z+%d+%dF)r   Ú	is_activer   r7   r   Zbboxr	   ÚplatformÚsystemÚ
startswithÚupdateZwinfo_widthÚwinfo_heightZwinfo_rootxr"   ÚmaxZwinfo_rootyrE   rK   rG   Úunbindr[   r   )r   ÚeventÚtextÚxÚyZcxÚcyr`   Z	acw_widthZ
acw_heightÚ
text_widthZtext_heightZnew_xZnew_yr   r   r   r\   ë   s@    ÿ
z"AutoCompleteWindow.winconfig_eventc                 C   s@   | j s
d S z| j  ¡ s|  ¡  W n ty:   |  ¡  Y n0 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    )	rc   ÚtypeZ	EventTypeZFocusOutr   Zafterru   ZButtonPressrr   ©r   rk   r   r   r   rN   +  s
    zAutoCompleteWindow.hide_eventc                 C   s4   |   ¡ r0d| _t| j ¡ d ƒ}|  | j| ¡ d S )NTr   )rc   r   r5   r
   r6   r)   r   ©r   rk   r<   r   r   r   rZ   8  s    z#AutoCompleteWindow.listselect_eventc                 C   s.   t | j ¡ d ƒ}|  | j| ¡ |  ¡  d S )Nr   )r5   r
   r6   r)   r   rr   rx   r   r   r   r^   >  s    z$AutoCompleteWindow.doubleclick_eventc                    s  |   ¡ sd S |j‰ t|dƒr$|j}nd}ˆ dkr6d| _tˆ ƒdks`ˆ dv s`| jtkrJˆ dv 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v s | jtkrˆ dv r|t @ st| j ¡ d ƒ}| j| d t| j
ƒ… | j
krö| jtksæ| j
rö|  	| j| ¡ |  ¡  d S ˆ dv r|sd| _t| j ¡ d ƒ}ˆ dkr:d}n¨ˆ dkrTt| jƒd }nŽˆ dv r°| j | j ¡ ¡| j d¡ }ˆ dkr–td|| ƒ}ntt| jƒd || ƒ}n2ˆ dkrÊtd|d ƒ}ntt| jƒd |d ƒ}| j |¡ | j |¡ |  ¡  |  	| j| ¡ dS ˆ dkrn|sn| jr\t| j ¡ d ƒ}|  	| j| ¡ |  ¡  dS d| _d| _d S n’t‡ fdd„dD ƒƒrŠd 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Úminusrz   Ú_r{   Ú.r|   ú-éÿÿÿÿÚbreakZReturn)r{   ÚspaceZ	parenleftZ
parenrightZbracketleftZbracketright)ZslashZ	backslashZquotedblZ
apostrophe)ÚHomeÚEndÚPriorÚNextÚUpZDownTrƒ   r„   )r…   r†   r…   r‡   c                 3   s   | ]}|ˆ v V  qd S rq   r   )Ú.0r+   ©Úkeysymr   r   Ú	<genexpr>¥  ó    z4AutoCompleteWindow.keypress_event.<locals>.<genexpr>)ZShiftZControlZAltZMetaZCommandZOptionú )rc   rŠ   Úhasattrry   r   r#   r   r   r   r)   r   rr   r   r
   Zselect_clearr5   r6   r:   r.   r;   r_   r   r   r   Znearestrh   ri   r"   ÚanyÚchar)r   rk   Ústater<   ZnewselZjumpr   r‰   r   rT   D  sÌ    
ÿÿÿý
ÿýÿýû	 ÿÿ
ÿ



ÿ

z!AutoCompleteWindow.keypress_eventc                 C   s@   |   ¡ sd S | j d¡| j d| jt| jƒf ¡kr<|  ¡  d S )Nr%   r!   )rc   r   rC   r   r#   r   rr   rw   r   r   r   rW   ¸  s    
ÿz#AutoCompleteWindow.keyrelease_eventc                 C   s
   | j d uS rq   )r	   rt   r   r   r   rc   À  s    zAutoCompleteWindow.is_activec                 C   s   |   |  | j¡¡ d S rq   )r)   r1   r   rt   r   r   r   r_   Ã  s    zAutoCompleteWindow.completec                 C   s   |   ¡ sd S | j tt¡ tD ]}| j t|¡ q| j t| j¡ | j t| j	¡ d | _d | _	t
D ]}| j t|¡ qb| 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 rq   )rc   r	   Zevent_deleterM   rQ   rR   r   rj   rO   rP   rU   rS   r   rV   rX   r   r
   rY   r   r   r[   Z	focus_setr   Zdestroy)r   ra   r   r   r   rr   Ç  s@    ÿÿ



zAutoCompleteWindow.hide_windowN)Ú__name__Ú
__module__Ú__qualname__r   r)   r.   r1   r;   rb   r\   ru   rN   rZ   r^   rT   rW   rc   r_   rr   r   r   r   r   r      s    ! &M4tr   Ú__main__)Úmainz%idlelib.idle_test.test_autocomplete_wr*   F)Ú	verbosityÚexit)rd   ÚtkinterZtkinter.ttkr   Zidlelib.autocompleter   r   Zidlelib.multicallr   rM   rQ   rR   rS   rU   rV   rX   rY   r[   r]   r   r’   Zunittestr–   r   r   r   r   Ú<module>   s*      W