
    .hhQ                         S r SSKrSSK7  SSKJr  SSKJrJr  SSKJ	r	  Sr
Sr\S	4rS
rSrSrSrSrSrSr " S S5      r\S:X  a  SSKJr  \" SSSS9  gg)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                   t    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rSrg)AutoCompleteWindow   c                 4   Xl         X l        S =U l        =U l        U l        S =U l        U l        S U l        S U l        S U l	        S U l
        S U l        S U l        S U l        S =U l        =U l        =U l        =U l        =U l        U l        SU l        SU l        g )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      ?/opt/python-3.13.8/usr/lib/python3.13/idlelib/autocomplete_w.py__init__AutoCompleteWindow.__init__   s    	BFFF$, ;?>!7#	
 #  $ IM	M 	Mdo 	M(9 	M	M#043E$#    c                 4   [        [        U R                  5      [        U5      5      nSnX2:  a6  U R                  U   X   :X  a!  US-  nX2:  a  U R                  U   X   :X  a  M!  U[        U R                  5      :  aM  U R                  R	                  SU R
                  U4-  SU R
                  [        U R                  5      4-  5        U[        U5      :  a8  U R                  R                  SU R
                  U4-  XS  U R                  5        Xl        g )Nr      %s+%dc)minlenr   r   deleter   insertr   )r"   newstartmin_lenis       r#   _change_start AutoCompleteWindow._change_start@   s    c$**os8}5kdjjmx{:FA kdjjmx{:s4::KKx4??A*>>'4??C

O*LLNs8}KKx4??A*>>'|#yy* 
r&   c                     Sn[        U R                  5      nX2:  a)  X#-   S-  nU R                  U   U:  a  UnOUS-   nX2:  a  M)  [        U[        U R                  5      S-
  5      $ )zFind 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"   sr0   jms        r#   _binary_search!AutoCompleteWindow._binary_searchN   so     3t''(qe1A"a'E e 1c$**+A-..r&   c                 "   U R                  U5      nU R                  U   S[        U5       U:w  a  U$ US-   n[        U R                  5      nXC:  a5  X4-   S-  nU R                  U   S[        U5       U:w  a  UnOUS-   nXC:  a  M5  US-
  nX&:X  a  U R                  U   $ U R                  U   nU R                  U   n[        [        U5      [        U5      5      n	[        U5      nX9:  a   Xs   X   :X  a  US-  nX9:  a  Xs   X   :X  a  M  USU $ )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(   r4   )r8   r   r+   r*   )
r"   r5   firstr0   r6   r7   last
first_comp	last_compr/   s
             r#   _complete_string#AutoCompleteWindow._complete_string[   s*   
 ##A&E"7CF+q0HAI  !e1A"7CF+q0E e s=##E** %%e,
$$T*	c*os9~6Fkjmy|;FA kjmy|;"1~r&   c                    [        U R                  R                  5       S   5      nU R                  R                  U5        U R                  nU R
                  U   nU R                  U5      U:X  a  UnOJ[        [        U5      [        U5      5      nSnXe:  a   X&   X6   :X  a  US-  nXe:  a  X&   X6   :X  a  M  USU nU R                  U5        U R
                  U   S[        U R                  5       U R                  :X  a/  U R                  R                  U R                  U R                  S9  gU R                  R                  U R                  R                  S5      U R                  R                  S5      S9  U R                  (       a  U R                  U l        SU l        U R                  R!                  S["        5        U R
                   H#  nU R                  R%                  ["        U5        M%     U R                  R'                  U R                  U R                  5      5        U R)                  5         gg)zjCall 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   r8   r*   r+   r1   r   	configurer   r   cgetr   r,   ENDr-   
select_set_selection_changed)r"   curselltsselstartr.   r/   r0   items           r#   rM   %AutoCompleteWindow._selection_changed{   s   
 T\\..034 !!##F+s#v-H#c(CM2GA+#&HK"7Q +#&HK"7|H8$F#$4S_5CLL""D4J4J484J4J # L LL""DLL4E4Ed4K48LL4E4Ed4K # M ###'#7#7 '+$##As+ ,,DLL''T2 -''(;(;DJJ(GH'') $r&   c                    Uu  U l         U l        X@l        U R                  R	                  U5      U l        U R                  R                  U R
                  S5      U l        U(       a  U R                  U R                  5      nU R                  nU R                  U5        U R                  U5      nU R                   U   U:X  aB  U[        U R                   5      S-
  :X  d"  U R                   US-      S[        U5       U:w  a  Xg:H  $ XPl        U R                  U l        [        U R                  5      =U l        n	U	R!                  5         U	R#                  S5         U	R$                  R'                  SSU	R(                  SS5        [-        U	[.        S9=U l        n
[3        XR4                  S	S
9=U l        nU R                    H  nUR9                  [:        U5        M     UR=                  S5      U l        UR=                  S5      U l         U
RC                  URD                  S9  U
RG                  [H        [J        S9  URG                  [L        [N        SS9  U	RQ                  5         U R6                  RS                  U R                  U R                  5      5        U RU                  5         U	RW                  [X        U RZ                  5      U l.        U R                  RW                  [X        U RZ                  5      U l/        U	Ra                  [X        [b        5        [d         H#  nU R                  Ra                  [X        U5        M%     U R                  RW                  [f        U Rh                  5      U l5        [l         H#  nU R                  Ra                  [f        U5        M%     U R                  RW                  [n        U Rp                  5      U l9        U R                  Ra                  [n        [t        5        URW                  [v        U Rx                  5      U l=        S	U l>        U	RW                  [~        U R                  5      U lA        URW                  [        U R                  5      U lD        g! [*         a     GNf = f)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exportselectionrC   rB   )command)sidefillT)r[   r\   expand)Er   r   r   r   indexr   getr   r?   r1   r8   r+   r   r   Toplevelr   withdrawwm_overrideredirecttkcall_wTclErrorr   VERTICALr   Listboxsetr   r-   rK   rJ   r   r   configyviewpackRIGHTYLEFTBOTHliftrL   rM   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_listsr^   completer   userWantsWin	completedr   r0   acwr   r   rQ   seqs                 r#   show_windowAutoCompleteWindow.show_window   s~    2<.$.	++++E2[[__T__h?
--djj9IJJEy)##I.A"i/S))*1,,  1%os9~6)C ))+"jj(0(==#"	FFKK;Wcff/ &/s8%DD!(]]9>"@ 	@w$$DNN3% %!(.@!A!(.@!A/E*$T$7
 	 3 3DJJ ?@! xx 7I{{''(?Q-/FG!CKK!!"93? " ++**+F+/+>+>@%CKK!!"=sC & KK,,-J-1-B-BD;<OP#LL)<)-)>)>@#88$68L8LM$\\*>*.*@*@BO  		s   )Q( (
Q65Q6c           	         U R                   (       a  g SU l         U R                  5       (       d  g  U R                  nUR                  U R                  5        UR                  U R                  5      u  p4pVU R                  n[        R                  " 5       R                  S5      (       a  UR                  5         UR                  5       UR                  5       pUR                  5       UR                  5       pUR                  5       [        U[        SX-
  5      5      -   nUR!                  5       U-   nXU-   -
  U	:  d  XI:  a  X-  nOX-  nUR#                  SX4-  5        UR%                  5         UR'                  5         [        R                  " 5       R                  S5      (       a(   WR+                  [,        U R.                  5        S U l        SU l         g ! [(         a     Nef = f! [(         a     N+f = f)NTWindowsr   z+%d+%dF)r!   	is_activer   rH   r   bboxr   platformsystem
startswithupdatewinfo_widthwinfo_heightwinfo_rootxr*   maxwinfo_rootywm_geometry	deiconifyupdate_idletasksrf   unbindr   r   )r"   eventtextxycxcyr   	acw_width
acw_height
text_widthtext_heightnew_xnew_ys                 r#   r   "AutoCompleteWindow.winconfig_event   s   "~~	;;DHHT__%99T__5LA"))C ++I66 

$'OO$5s7G7G7Iz&*&6&6&8$:K:K:M$$&QAz7M0N)OOE$$&*E2v&*4> #OOH~56MMO  " ??''	22

-t/?/?@  $D#  		  s$   EG - G, 
G)(G),
G98G9c                     U R                   (       d  g  U R                   R                  5       (       d  U R                  5         g g ! [         a    U R                  5          g f = fN)r   	focus_gethide_windowKeyErrorr"   s    r#   _hide_event_check$AutoCompleteWindow._hide_event_check  sV    &&	**4466  " 7 	 	s   /A A"!A"c                    U R                  5       (       au  UR                  [        R                  :X  a'  U R                  R                  SU R                  5        g UR                  [        R                  :X  a  U R                  5         g g g )Nr(   )	r   type	EventTypeFocusOutr   afterr   ButtonPressr   r"   r   s     r#   rt   AutoCompleteWindow.hide_event*  sg     >>zzY/// !!!T%;%;<y444  " 5 r&   c                     U R                  5       (       aL  SU l        [        U R                  R	                  5       S   5      nU R                  U R                  U   5        g g )NTr   )r   r   rF   r   rG   r1   r   r"   r   rN   s      r#   r   #AutoCompleteWindow.listselect_event7  sQ    >>#'D 224Q78Ft//78 r&   c                     [        U R                  R                  5       S   5      nU R                  U R                  U   5        U R                  5         g )Nr   )rF   r   rG   r1   r   r   r   s      r#   r   $AutoCompleteWindow.doubleclick_event=  sC    T\\..0344++F34r&   c                   ^ U R                  5       (       d  g UR                  m[        US5      (       a  UR                  nOSnTS:w  a  SU l        [        T5      S:X  d"  TS;   d  U R                  [        :X  Ga  TS;   Ga  U[        ) -  (       Gd{  [        T5      S:X  a  U R                  U R                  T-   5        OTS:X  a  U R                  U R                  S	-   5        OTS
:X  a  U R                  U R                  S-   5        OmTS:X  a  U R                  U R                  S-   5        OH[        U R                  5      S:X  a  U R                  5         g U R                  U R                  S S 5        U R                  U l        U R                  R                  S[        U R                  R!                  5       S   5      5        U R                  R#                  U R%                  U R                  5      5        U R'                  5         gTS:X  a!  U R)                  5         U R                  5         gU R                  [*        :X  a  TS;   d)  U R                  [        :X  a  TS;   a  U[        ) -  (       d  [        U R                  R!                  5       S   5      nU R,                  U   S [        U R                  5       U R                  :X  aC  U R                  [*        :X  d  U R                  (       a  U R                  U R,                  U   5        U R                  5         g TS;   Ga  U(       Gd  SU l        [        U R                  R!                  5       S   5      nTS:X  a  SnOTS:X  a  [        U R,                  5      S-
  nOTS;   a  U R                  R1                  U R                  R3                  5       5      U R                  R1                  S5      -
  nTS:X  a  [5        SX5-
  5      nOpTS:X  d   e[7        [        U R,                  5      S-
  X5-   5      nOCTS:X  a  [5        SUS-
  5      nO-TS:X  d   e[7        [        U R,                  5      S-
  US-   5      nU R                  R                  U5        U R                  R#                  U5        U R'                  5         U R                  U R,                  U   5        gTS:X  a|  U(       du  U R                  (       aU  [        U R                  R!                  5       S   5      nU R                  U R,                  U   5        U R                  5         gSU l        SU l        g [9        U4S jS 5       5      (       a  g UR:                  (       a  UR:                  S:  a  U R                  U R                  UR:                  -   5        U R                  U l        U R                  R                  S[        U R                  R!                  5       S   5      5        U R                  R#                  U R%                  U R                  5      5        U R'                  5         gU R                  5         g )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   ,   >#    U  H	  oT;   v   M     g 7fr    ).0r5   keysyms     r#   	<genexpr>4AutoCompleteWindow.keypress_event.<locals>.<genexpr>  s      E 'Df 'Ds   )ShiftControlAltMetaCommandOption )r   r   hasattrr   r    r+   r   r   r   r1   r   r   r   r   select_clearrF   rG   rL   r8   rM   r   r   r   r   nearestr   r   r*   anychar)r"   r   staterN   newseljumpr   s         @r#   r{   !AutoCompleteWindow.keypress_eventC  s   ~~5*%%NNEEU?#(D K1*E E		U"v#($XI%%6{a""4::#67<'""4::#348#""4::#347"""4::#34 tzz?a'$$&""4::cr?3"&**DLL%%aT\\-F-F-H-K)LMLL##D$7$7

$CD##%xMMOii5 V& ii5 V>&?xi' 224Q78F'(8TZZ9TZZGII&$**""4#3#3F#;<EE#'D 224Q78F5T--.q0,,||++DLL,E,E,GH||++A./W$ FK0F!V+++ T%5%5!6q!8&+FF4Qq)'''S!1!1214fQh?LL%%f-LL##F+##%t//78oe##T\\668;<""4#3#3F#;<  " (,$'+$ E 'D E E E ZZEJJ#-tzzEJJ67"&**DLL%%aT\\-F-F-H-K)LMLL##D$7$7

$CD##% r&   c                    U R                  5       (       d  g U R                  R                  S5      U R                  R                  SU R                  [	        U R
                  5      4-  5      :w  a  U R                  5         g g )Nr-   r)   )r   r   r^   r   r+   r   r   r   s     r#   r~   #AutoCompleteWindow.keyrelease_event  sf    ~~;;X&;;X#djj/(JJKL Lr&   c                     U R                   S L$ r   )r   r   s    r#   r   AutoCompleteWindow.is_active  s    &&d22r&   c                 X    U R                  U R                  U R                  5      5        g r   )r1   r?   r   r   s    r#   r   AutoCompleteWindow.complete  s    400<=r&   c                    U R                  5       (       d  g U R                  R                  [        [        5        [
         H#  nU R                  R                  [        U5        M%     U R                  R                  [        U R                  5        U R                  R                  [        U R                  5        S U l        S U l	        [         H#  nU R                  R                  [        U5        M%     U R                  R                  [        U R                  5        S U l        U R                  R                  [        [        5        U R                  R                  [        U R                  5        S U l        U R                   R                  ["        U R$                  5        S U l        U R&                  (       a1  U R                  R                  [(        U R&                  5        S U l        U R                  R+                  5         U R,                  R/                  5         S U l        U R                   R/                  5         S U l        U R                  R/                  5         S U l        g r   )r   r   event_deleters   rx   ry   r   r   ru   rv   r|   rz   r   r}   r   r   r   r   r   r   r   	focus_setr   destroy)r"   r   s     r#   r   AutoCompleteWindow.hide_window  s   ~~ 	,,-D-D	F!CKK$$%<cB " 	&&'>M2DLLA%CKK$$%@#F &6H  !>!4	68$:K:KL /1B1BC ##**+=t?O?OP#D 	 	 '')"&r&   )r   r   r   ru   r   rv   r!   r   r   r    r   r   r   r   r   r   r   r   r   r   r   r   r   r   N)__name__
__module____qualname____firstlineno__r$   r1   r8   r?   rM   r   r   r   rt   r   r   r{   r~   r   r   r   __static_attributes__r   r&   r#   r	   r	      sZ    !$F/@$*LFP3$j
#9rh3>%'r&   r	   __main__)mainz%idlelib.idle_test.test_autocomplete_wr4   F)	verbosityexit)__doc__r   tkintertkinter.ttkr   idlelib.autocompleter   r   idlelib.multicallr   rs   rx   ry   rz   r|   r}   r   r   r   r   r	   r   unittestr  r   r&   r#   <module>r     s      ! - &7 & )?;? C  !D $ * " 2 P' P'f z	0AEJ r&   