
    dQ                         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          Zedk    rddlmZ  eddd           dS 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                   n    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd ZdS )AutoCompleteWindowc                 :   || _         || _        d x| _        x| _        | _        d x| _        | _        d | _        d | _        d | _	        d | _
        d | _        d | _        d | _        d x| _        x| _        x| _        x| _        x| _        | _        d| _        d| _        d S )NF)widgettagsautocompletewindowlistbox	scrollbarorigselforegroundorigselbackgroundcompletionsmorecompletionsmodestart
startindexlasttypedstartuserwantswindowhideid
keypressidlistupdateidwinconfigidkeyreleaseiddoubleclickidlastkey_was_tabis_configuring)selfr   r   s      (  /croot/python-split_1694437901252/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_plac/lib/python3.11/idlelib/autocomplete_w.py__init__zAutoCompleteWindow.__init__   s    	BFFF$, ;?>!7#	
 #  $ IM	M 	Mdo 	M(9 	M	M#043E$#    c                 2   t          t          | j                  t          |                    }d}||k     r9| j        |         ||         k    r"|dz  }||k     r| j        |         ||         k    "|t          | j                  k     rA| j                            d| j        |fz  d| j        t          | j                  fz             |t          |          k     r3| j                            d| j        |fz  ||d          | j                   || _        d S )Nr      %s+%dc)minlenr   r   deleter   insertr   )r!   newstartmin_lenis       r"   _change_startz AutoCompleteWindow._change_start@   s   c$*oos8}}55'kkdjmx{::FA 'kkdjmx{::s4:Kx4?A*>>'4?C
OO*LLN N Ns8}}Kx4?A*>>'|#y* * * 


r$   c                     d}t          | j                  }||k    r'||z   dz  }| j        |         |k    r|}n|dz   }||k    't          |t          | j                  dz
            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ms        r"   _binary_searchz!AutoCompleteWindow._binary_searchN   s~     3t'((q!eeQ1A"a''E !ee 1c$*++A-...r$   c                    |                      |          }| j        |         dt          |                   |k    r|S |dz   }t          | j                  }||k    r<||z   dz  }| j        |         dt          |                   |k    r|}n|dz   }||k    <|dz
  }||k    r| j        |         S | j        |         }| j        |         }t          t          |          t          |                    }	t          |          }||	k     r/||         ||         k    r|dz  }||	k     r||         ||         k    |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&   r1   )r5   r   r)   r(   )
r!   r2   firstr.   r3   r4   last
first_comp	last_compr-   s
             r"   _complete_stringz#AutoCompleteWindow._complete_string[   s]   
 ##A&&E"7CFF7+q00HAI !!!eeQ1A"7CFF7+q00E !ee sD==#E** %e,
$T*	c*oos9~~66FF'kkjmy|;;FA 'kkjmy|;;"1"~r$   c                    t          | j                                        d                   }| j                            |           | j        }| j        |         }|                     |          |k    r|}nkt          t          |          t          |                    }d}||k     r/||         ||         k    r|dz  }||k     r||         ||         k    |d|         }| 	                    |           | j        |         dt          | j
                           | j
        k    r(| j                            | j        | j                   dS | j                            | j                            d          | j                            d                     | j        r| j        | _        d| _        | j                            dt"                     | j        D ]"}| j                            t"          |           #| j                            |                     | j
                             |                                  dS dS )zzCall when the selection of the Listbox has changed.

        Updates the Listbox display and calls _change_start.
        r   r&   N)selectbackgroundselectforegroundbgfg)intr   curselectionseer   r   r5   r(   r)   r/   r   	configurer   r   cgetr   r*   ENDr+   
select_set_selection_changed)r!   curselltsselstartr,   r-   r.   items           r"   rH   z%AutoCompleteWindow._selection_changed{   sH   
 T\..00344   !#F+s##v--HH#c((CMM22GAg++#a&HQK"7"7Q g++#a&HQK"7"7|H8$$$F#$4S__$45CCL""D4J484J # L L L L L L""DL4E4Ed4K4K48L4E4Ed4K4K # M M M # *#'#7 '+$##As+++ , 3 3DL''T2222''(;(;DJ(G(GHHH'')))))* *r$   c                 	   |\  | _         | _        || _        | j                            |          | _        | j                            | j        d          | _        |r|                     | j                  }| j        }| 	                    |           | 
                    |          }| j         |         |k    rJ|t          | j                   dz
  k    s)| j         |dz            dt          |                   |k    r||k    S || _        | j        | _        t          | j                  x| _        }	|	                                 |	                    d           	 |	j                            dd|	j        dd           n# t*          $ r Y nw xY wt-          |	t.                    x| _        }
t3          |	|
j        d	
          x| _        }| j         D ]}|                    t:          |           |                    d          | _        |                    d          | _         |
!                    |j"                   |
#                    tH          tJ                     |#                    tL          tN          d           |	(                                 | j        )                    | 
                    | j                             | *                                 |	+                    tX          | j-                  | _.        | j        +                    tX          | j-                  | _/        |	0                    tX          tb                     td          D ]"}| j        0                    tX          |           #| j        +                    tf          | j4                  | _5        tl          D ]"}| j        0                    tf          |           #| j        +                    tn          | j8                  | _9        | j        0                    tn          tt                     |+                    tv          | j<                  | _=        d	| _>        |	+                    t~          | j@                  | _A        |+                    t          | jC                  | _D        d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!::tk::unsupported::MacWindowStylestylehelpnoActivates)orientF)yscrollcommandexportselectionr>   r=   )command)sidefillT)rU   rV   expand)Er   r   r   r   indexr   getr   r;   r/   r5   r)   r   r   Toplevelr   withdrawwm_overrideredirecttkcall_wTclErrorr   VERTICALr   Listboxsetr   r+   rF   rE   r   r   configyviewpackRIGHTYLEFTBOTHliftrG   rH   bindHIDE_VIRTUAL_EVENT_NAME
hide_eventhideaidhidewid	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!   
comp_listsrX   completer   userWantsWin	completedr   r.   acwr   r   rL   seqs                 r"   show_windowzAutoCompleteWindow.show_window   s%    2<.$.	+++E22[__T_h??
 		*--dj99IJEy)))##I..A"i//S)**1,,, 1%os9~~o6)CC E))+"j(0(=(==#"""	FKK;Wcf/ / / / 	 	 	D	%.s8%D%D%DD!(Y]9>"@ "@ "@ 	@w$ 	& 	&DNN3%%%%!(.@!A!A!(.@!A!A///E***$T$777


 	 3 3DJ ? ?@@@!!! xx 7II{''(?QQ-/FGGG! 	@ 	@CK!!"93????+**+F+/+>@ @% 	D 	DCK!!"=sCCCC K,,-J-1-BD D;<OPPP#LL)<)-)>@ @#88$68LMM$\\*>*.*@B Bts   #E? ?
FFc           	      <   | j         rd S d| _         |                                 sd S 	 | j        }|                    | j                   |                    | j                  \  }}}}| j        }t          j                    	                    d          r|
                                 |                                |                                }	}|                                |                                }}
|                                t          |t          d|
|z
                      z   }|                                |z   }|||z   z
  |	k    s||	k     r||z  }n||	z  }|                    d||fz             |                                 |                                 n# t(          $ r Y nw xY wt          j                    	                    d          r9	 |                    t,          | j                   n# t(          $ r Y nw xY wd | _        d| _         d S )NTWindowsr   z+%d+%dF)r    	is_activer   rC   r   bboxr   platformsystem
startswithupdatewinfo_widthwinfo_heightwinfo_rootxr(   maxwinfo_rootywm_geometry	deiconifyupdate_idletasksr`   unbindr|   r   )r!   eventtextxycxcyr   	acw_width
acw_height
text_widthtext_heightnew_xnew_ys                 r"   r}   z"AutoCompleteWindow.winconfig_event   s-    	F"~~ 	F	;DHHT_%%%99T_55LAq"b)C  ++I66  

$'OO$5$5s7G7G7I7IzI&*&6&6&8&8$:K:K:M:MJ$$&&QAzI7M0N0N)O)OOE$$&&*Eq2v&*44z>> #OOHu~5666MMOOO  """" 	 	 	D	 ?''	22 	$

-t/?@@@@   #D#s$   E=F& &
F32F3 G> >
H
Hc                     | j         sd S 	 | j                                         s|                                  d S d S # t          $ r |                                  Y d S w xY wN)r   	focus_gethide_windowKeyErrorr!   s    r"   _hide_event_checkz$AutoCompleteWindow._hide_event_check  s    & 	F	*4466 #  """""# # 	 	 	 	s   -< AAc                     |                                  rb|j        t          j        k    r"| j                            d| j                   d S |j        t          j        k    r|                                  d S d S d S )Nr&   )	r   type	EventTypeFocusOutr   afterr   ButtonPressr   r!   r   s     r"   rn   zAutoCompleteWindow.hide_event*  s     >> 	#zY/// !!!T%;<<<<<y444  """""	# 	# 54r$   c                     |                                  rUd| _        t          | j                                        d                   }|                     | j        |                    d S d S )NTr   )r   r   rA   r   rB   r/   r   r!   r   rI   s      r"   r{   z#AutoCompleteWindow.listselect_event7  sh    >> 	9#'D 2244Q788Ft/788888	9 	9r$   c                     t          | j                                        d                   }|                     | j        |                    |                                  d S )Nr   )rA   r   rB   r/   r   r   r   s      r"   r   z$AutoCompleteWindow.doubleclick_event=  sV    T\..003444+F3444r$   c                    |                                  sd S |j        t          |d          r|j        }nd}dk    rd| _        t                    dk    sdv s| j        t          k    rdv r|t           z  st                    dk    r| 	                    | j
        z              ndk    r| 	                    | j
        d	z              nd
k    r| 	                    | j
        dz              ntdk    r| 	                    | j
        dz              nPt          | j
                  dk    r|                                  d S | 	                    | j
        d d                    | j
        | _        | j                            dt          | j                                        d                              | j                            |                     | j
                             |                                  dS dk    r*|                                  |                                  dS | j        t*          k    rdv s| j        t          k    rdv r|t           z  st          | j                                        d                   }| j        |         d t          | j
                           | j
        k    r7| j        t*          k    s| j
        r | 	                    | j        |                    |                                  d S dv r|sd| _        t          | j                                        d                   }dk    rd}ndk    rt          | j                  dz
  }ndv r| j                            | j                                                  | j                            d          z
  }dk    rt5          d||z
            }n{dk    sJ t7          t          | j                  dz
  ||z             }nJdk    rt5          d|dz
            }n0dk    sJ t7          t          | j                  dz
  |dz             }| j                            |           | j                            |           |                                  | 	                    | j        |                    dS dk    r{|sy| j        rbt          | j                                        d                   }| 	                    | j        |                    |                                  dS d| _        d| _        d S t9          fddD                       rd S |j        r|j        dk    r| 	                    | j
        |j        z              | j
        | _        | j                            dt          | j                                        d                              | j                            |                     | j
                             |                                  dS |                                  d S )Nmc_stater   TabFr&   )
underscore	BackSpace)periodminusr   _r   .r   -breakReturn)r   space	parenleft
parenrightbracketleftbracketright)slash	backslashquotedbl
apostrophe)HomeEndPriorNextUpDownTr   r   )r   r   r   r   r   r   c              3       K   | ]}|v V  	d S r    ).0r2   keysyms     r"   	<genexpr>z4AutoCompleteWindow.keypress_event.<locals>.<genexpr>  s?       E Ef E E E E E Er$   )ShiftControlAltMetaCommandOption )r   r   hasattrr   r   r)   r   r   r   r/   r   r   r   r   select_clearrA   rB   rG   r5   rH   r   r   r   r   nearestr   r   r(   anychar)r!   r   staterI   newseljumpr   s         @r"   ru   z!AutoCompleteWindow.keypress_eventC  sf   ~~ 	45*%% 	NEEEU??#(D KK1*E E E	U""v#($ ($XI%($ 6{{a""4:#67777<''""4:#344448##""4:#344447""""4:#34444 tz??a''$$&&&4""4:crc?333"&*DL%%aT\-F-F-H-H-K)L)LMMML##D$7$7
$C$CDDD##%%%7xMMOOO7i5  V& & i5  V>&? &?xi'&? 2244Q788F'(8TZ(89TZGGI&&$*&""4#3F#;<<<4EEE F $(D 2244Q788F5T-..q0,,,|++DL,E,E,G,GHH|++A../W$$ F4K00FF!V++++ T%5!6!6q!8&+FFFF4Qq))''''S!12214fQh??L%%f---L##F+++##%%%t/78887ooeo# 
T\6688;<<""4#3F#;<<<  """w (,$'+$t E E E E 'D E E E E E 	 4Z 	EJ#--tzEJ6777"&*DL%%aT\-F-F-H-H-K)L)LMMML##D$7$7
$C$CDDD##%%%7 4r$   c                    |                                  sd S | j                            d          | j                            d| j        t	          | j                  fz            k    r|                                  d S d S )Nr+   r'   )r   r   rX   r   r)   r   r   r   s     r"   rx   z#AutoCompleteWindow.keyrelease_event  s    ~~ 	F;X&&;X#dj//(JJKKL L L Lr$   c                     | j         d uS r   )r   r   s    r"   r   zAutoCompleteWindow.is_active  s    &d22r$   c                 `    |                      |                     | j                             d S r   )r/   r;   r   r   s    r"   r   zAutoCompleteWindow.complete  s,    400<<=====r$   c                 ~   |                                  sd S | j                            t          t                     t
          D ]"}| j                            t          |           #| j                            t          | j                   | j                            t          | j	                   d | _        d | _	        t          D ]"}| j                            t          |           #| 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 r   )r   r   event_deleterm   rr   rs   r   r   ro   rp   rv   rt   r   rw   ry   r   r   rz   r   r   r|   	focus_setr   destroy)r!   r   s     r"   r   zAutoCompleteWindow.hide_window  s	   ~~ 	F 	,,-D-D	F 	F 	F! 	C 	CCK$$%<cBBBB&&'>MMM2DLAAA% 	G 	GCK$$%@#FFFF6HHH  !>!4	6 	6 	68$:KLLL /1BCCC  	$#**+=t?OPPP#D 	 	   '')))"&r$   N)__name__
__module____qualname__r#   r/   r5   r;   rH   r   r}   r   rn   r{   r   ru   rx   r   r   r   r   r$   r"   r	   r	      s       !$ !$ !$F  / / /  @$* $* $*LF F FP3$ 3$ 3$j
 
 
# # #9 9 9  r r rh  3 3 3> > >%' %' %' %' %'r$   r	   __main__)mainz%idlelib.idle_test.test_autocomplete_wr1   F)	verbosityexit)__doc__r   tkintertkinter.ttkr   idlelib.autocompleter   r   idlelib.multicallr   rm   rr   rs   rt   rv   rw   ry   rz   r|   r~   r	   r   unittestr   r   r$   r"   <module>r      s         ! ! ! ! ! ! - - - - - - - - & & & & & &7 & )?;? C  !D $ * " 2 P' P' P' P' P' P' P' P'f zD	0AEJJJJJJ r$   