<!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>
3
 fuM              
   @   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)COMPLETE_FILESCOMPLETE_ATTRIBUTES)MC_SHIFTz<<autocompletewindow-hide>>z
<FocusOut>z<ButtonPress>z<<autocompletewindow-keypress>><Key><Key-BackSpace><Key-Return>	<Key-Tab><Key-Up>
<Key-Down>
<Key-Home>	<Key-End><Key-Prior>
<Key-Next>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 S )NF)widgetautocompletewindowlistbox	scrollbarorigselforegroundorigselbackgroundcompletionsmorecompletionsmodestart
startindexlasttypedstartuserwantswindowZhideid
keypressidlistupdateidwinconfigidkeyreleaseiddoubleclickidlastkey_was_tab)selfr    r&   ;/opt/alt/python36/lib64/python3.6/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jd| j|f d| jt| jf  |t|k r| j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
        one.r      r)   )r+   r   r*   )r%   sr0   jmr&   r&   r'   _binary_searchJ   s     

z!AutoCompleteWindow._binary_searchc       
      C   s   | j |}| 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)   r2   )r6   r   r+   r*   )
r%   r3   firstr0   r4   r5   ZlastZ
first_compZ	last_compr/   r&   r&   r'   _complete_stringW   s(    





z#AutoCompleteWindow._complete_stringc             C   sL  t | jj d }| jj| | j}| j| }| j||krB|}nHtt|t|}d}x$||k r||| || kr||d7 }qZW |d| }| j	| | j| dt| j
 | j
kr| jj| j| jd n| jj| jjd| jjdd | jrH| j| _d| _| jjdt x| jD ]}| jjt| qW | jj| j| j
 | j  dS )z|Should be called when the selection of the Listbox has changed.
        Updates the Listbox display and calls _change_start.r   r)   N)selectbackgroundselectforegroundbgZfg)intr   curselectionseer   r   r6   r*   r+   r1   r   Z	configurer   r   cgetr   r,   ENDr-   
select_set_selection_changed)r%   curselZltsZselstartr.   r/   r0   itemr&   r&   r'   rB   v   s2    


z%AutoCompleteWindow._selection_changedc             C   s  |\| _ | _|| _| jj|| _| jj| jd| _|r| j| j}| j}| j	| | j
|}| j | |kr|t| j d ks| j |d  dt| |kr||kS || _| j| _t| j | _}	|	jd |	jd y|	jjdd|	jdd W n tk
r   Y nX t|	td	 | _}
t|	|
jd
dd | _}x| j D ]}|jt| q8W |jd| _|jd| _ |
j!|j"d |
j#t$t%d |j#t&t'dd |	j(  | jj)| j
| j | j*  |	j+t,| j-| _.| jj+t,| j-| _/|	j0t,t1 xt2D ]}| jj0t,| qW | jj+t3| j4| _5xt6D ]}| jj0t3| qW | jj+t7| j8| _9| jj0t7t: |j+t;| j<| _=|	j+t>| j?| _@|j+tA| jB| _Cd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orientFZwhite)ZyscrollcommandZexportselectionr;   r:   r9   )Zcommand)sidefillT)rF   rG   expand)Dr   r   r   r   indexr   getr   r8   r1   r6   r+   r   r   ZToplevelr   wm_geometryZwm_overrideredirectZtkZcallZ_wZTclErrorr   ZVERTICALr   ZListboxsetr   r-   r@   r?   r   r   configZyviewZpackZRIGHTYZLEFTZBOTHZliftrA   rB   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    WINCONFIG_SEQUENCEwinconfig_eventr!   DOUBLECLICK_SEQUENCEdoubleclick_eventr#   )r%   Z
comp_listsrI   completer   ZuserWantsWinZ	completedr   r0   acwr   r   rD   seqr&   r&   r'   show_window   sl    









zAutoCompleteWindow.show_windowc             C   s   | j  sd S | j}|j| j |j| j\}}}}| j}|j |j  }}	|j |j  }
}|j t	|t
d|
|  }|j | }|||  |	ks||	k r||7 }n||	8 }|jd||f  tj jdr|jt| j d | _d S )Nr   z+%d+%dZWindows)	is_activer   r>   r   Zbboxr   Zwinfo_widthwinfo_heightZwinfo_rootxr*   maxZwinfo_rootyrK   platformsystem
startswithunbindr]   r!   )r%   eventtextxyZcxZcyrb   Z	acw_widthZ
acw_heightZ
text_widthZtext_heightZnew_xZnew_yr&   r&   r'   r^      s$    
z"AutoCompleteWindow.winconfig_eventc             C   sB   | j s
d S y| j j s| j  W n tk
r<   | j  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>   | j  r:|jtjkr&| jjd| j n|jtjkr:| j  d S )Nr)   )	re   typeZ	EventTypeZFocusOutr   afterrr   ZButtonPressrp   )r%   rl   r&   r&   r'   rP     s
    zAutoCompleteWindow.hide_eventc             C   s4   | j  r0d| _t| jj d }| j| j|  d S )NTr   )re   r   r<   r   r=   r1   r   )r%   rl   rC   r&   r&   r'   r\     s    z#AutoCompleteWindow.listselect_eventc             C   s.   t | jj d }| j| j|  | j  d S )Nr   )r<   r   r=   r1   r   rp   )r%   rl   rC   r&   r&   r'   r`     s    z$AutoCompleteWindow.doubleclick_eventc                s  | j  sd S |j t|dr$|j}nd} dkr6d| _t dks\ d(ks\| jtkof d)kof|t @  rHt dkr| j	| j
   n| dkr| j	| j
d
  nb dkr| j	| j
d  nH d	kr| j	| j
d  n.t| j
dkr| j  d S | j	| j
d d*  | j
| _| jjdt| jj d  | jj| j| j
 | j  dS  dkrf| j  | j  dS | jtkr| d+ks| jtkr d,kr|t @  rt| jj d }| j| d t| j
 | j
kr| jtks| j
r| j	| j|  | j  d S  d-kr| rd| _t| jj d } dkr<d}n dkrVt| jd }n d.kr| jj| jj | jjd } dkrtd|| }ntt| jd || }n2 dkrtd|d }ntt| jd |d }| jj| | jj| | j  | j	| j|  dS  dkrr| rr| jr`t| jj d }| j	| j|  | 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
| _| jjdt| jj d  | jj| j| j
 | j  dS | j  d S d S )0Nmc_stater   ZTabFr)   
underscore	BackSpaceperiodminus_.-breakZReturnspace	parenleft
parenrightbracketleftbracketrightslash	backslashquotedbl
apostropheHomeEndPriorNextUpDownTc             3   s   | ]}| kV  qd S )Nr&   ).0r3   )keysymr&   r'   	<genexpr>  s    z4AutoCompleteWindow.keypress_event.<locals>.<genexpr>ShiftControlAltMetaCommandOption )rv   rw   )rx   ry   )rx   r~   r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   )r   r   )r   r   r   r   r   r   )re   r   hasattrru   r$   r+   r   r   r   r1   r   rp   r   r   Zselect_clearr<   r=   rA   r6   rB   ra   r   r   r   Znearestrf   rg   r*   anychar)r%   rl   staterC   ZnewselZjumpr&   )r   r'   rV   $  s    

  





z!AutoCompleteWindow.keypress_eventc             C   s@   | j  sd S | jjd| jjd| jt| jf kr<| j  d S )Nr-   z%s+%dc)re   r   rI   r   r+   r   rp   )r%   rl   r&   r&   r'   rY     s
    
z#AutoCompleteWindow.keyrelease_eventc             C   s
   | j d k	S )N)r   )r%   r&   r&   r'   re     s    zAutoCompleteWindow.is_activec             C   s   | j | j| j d S )N)r1   r8   r   )r%   r&   r&   r'   ra     s    zAutoCompleteWindow.completec             C   s(  | j  sd S | jjtt xtD ]}| jjt| q W | jjt| j | jjt| j	 d | _d | _	xt
D ]}| jjt| qhW | jjt| j d | _| jjtt | jjt| j d | _| jjt| j d | _| jr| jjt| j d | _| jj  | jj  d | _| jj  d | _| jj  d | _d S )N)re   r   Zevent_deleterO   rS   rT   r   rk   rQ   rR   rW   rU   r   rX   rZ   r"   r   r[   r    r!   r]   Z	focus_setr   Zdestroy)r%   rc   r&   r&   r'   rp     s<    





zAutoCompleteWindow.hide_windowN)__name__
__module____qualname__r(   r1   r6   r8   rB   rd   r^   rr   rP   r\   r`   rV   rY   re   ra   rp   r&   r&   r&   r'   r      s     $Itr   __main__)mainz%idlelib.idle_test.test_autocomplete_wr2   F)	verbosityexit)
r   r   r	   r
   r   r   r   r   r   r   )__doc__rh   ZtkinterZtkinter.ttkr   Zidlelib.autocompleter   r   Zidlelib.multicallr   rO   rS   rT   rU   rW   rX   rZ   r[   r]   r_   r   r   Zunittestr   r&   r&   r&   r'   <module>   s0        7