
    dafQ                         d Z ddlZddl 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       yy)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                   l    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y)AutoCompleteWindowc                 8   || _         || _        d x| _        x| _        | _        d x| _        | _        d | _        d | _        d | _	        d | _
        d | _        d | _        d | _        d x| _        x| _        x| _        x| _        x| _        | _        d| _        d| _        y )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      1/root/Python-3.12.4/Lib/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  r5| j                  |   ||   k(  r |dz  }||k  r| j                  |   ||   k(  r |t        | j                        k  rM| j                  j	                  d| j
                  |fz  d| j
                  t        | j                        fz         |t        |      k  r9| j                  j                  d| j
                  |fz  ||d  | j                         || _        y )Nr      %s+%dc)minlenr   r   deleter   insertr   )r!   newstartmin_lenis       r"   _change_startz 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                     d}t        | j                        }||kD  r(||z   dz  }| j                  |   |k\  r|}n|dz   }||kD  r(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   su     3t''(q!eQ1A"a'E !e 1c$**+A-..r$   c                     | j                  |      }| j                  |   dt        |       |k7  r|S |dz   }t        | j                        }||kD  r4||z   dz  }| j                  |   dt        |       |k7  r|}n|dz   }||kD  r4|dz
  }||k(  r| j                  |   S | j                  |   }| j                  |   }t        t        |      t        |            }	t        |      }||	k  r!||   ||   k(  r|dz  }||	k  r||   ||   k(  r|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F+q0HAI  !!eQ1A"7CF+q0E !e sD=##E** %%e,
$$T*	c*os9~6F'kjmy|;FA 'kjmy|;"1~r$   c                 |   t        | j                  j                         d         }| j                  j                  |       | j                  }| j
                  |   }| j                  |      |k(  r|}nKt        t        |      t        |            }d}||k  r!||   ||   k(  r|dz  }||k  r||   ||   k(  r|d| }| j                  |       | j
                  |   dt        | j                         | j                  k(  r2| j                  j                  | j                  | j                         y| j                  j                  | j                  j                  d      | j                  j                  d             | j                  r| j                  | _        d| _        | j                  j!                  dt"               | j
                  D ]"  }| j                  j%                  t"        |       $ | j                  j'                  | j                  | j                               | j)                          yy)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{   s   
 T\\..034 !!##F+s#v-H#c(CM2GAg+#a&HQK"7Q g+#a&HQK"7|H8$F#$4S_5CLL""D4J4J484J4J # L LL""DLL4E4Ed4K48LL4E4Ed4K # M ###'#7#7 '+$##As+ ,, 3DLL''T23''(;(;DJJ(GH'') $r$   c                    |\  | _         | _        || _        | j                  j	                  |      | _        | j                  j                  | j
                  d      | _        |r| j                  | j                        }| j                  }| j                  |       | j                  |      }| j                   |   |k(  rA|t        | j                         dz
  k(  s!| j                   |dz      dt        |       |k7  r||k(  S || _        | j                  | _        t        | j                        x| _        }	|	j!                          |	j#                  d       	 |	j$                  j'                  dd|	j(                  dd       t-        |	t.              x| _        }
t3        |	|
j4                  d	
      x| _        }| j                   D ]  }|j9                  t:        |        |j=                  d      | _        |j=                  d      | _         |
jC                  |jD                         |
jG                  tH        tJ               |jG                  tL        tN        d       |	jQ                          | j6                  jS                  | j                  | j                               | jU                          |	jW                  tX        | jZ                        | _.        | j                  jW                  tX        | jZ                        | _/        |	ja                  tX        tb               td        D ]"  }| j                  ja                  tX        |       $ | j                  jW                  tf        | jh                        | _5        tl        D ]"  }| j                  ja                  tf        |       $ | j                  jW                  tn        | jp                        | _9        | j                  ja                  tn        tt               |jW                  tv        | jx                        | _=        d	| _>        |	jW                  t~        | j                        | _A        |jW                  t        | j                        | _D        y# t*        $ r Y w xY w)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[[__T__h?
--djj9IJJEy)##I.A"i/S))*1,,  1%os9~6)C E))+"jj(0(==#"	FFKK;Wcff/ &/s8%DD!(Y]]9>"@ 	@w$$ 	&DNN3%	&!(.@!A!(.@!A/E*$T$7
 	 3 3DJJ ?@! xx 7I{{''(?Q-/FG! 	@CKK!!"93?	@ ++**+F+/+>+>@% 	DCKK!!"=sC	D KK,,-J-1-B-BD;<OP#LL)<)-)>)>@#88$68L8LM$\\*>*.*@*@BO  		s   )Q- -	Q:9Q:c           	         | j                   ry d| _         | j                         sy 	 | j                  }|j                  | j                         |j                  | j                        \  }}}}| j                  }t        j                         j                  d      r|j                          |j                         |j                         }	}|j                         |j                         }}
|j                         t        |t        d|
|z
              z   }|j!                         |z   }|||z   z
  |	k\  s||	k  r||z  }n||	z  }|j#                  d||fz         |j%                          |j'                          t        j                         j                  d      r(	 j+                  t,        | j.                         d | _        d| _         y # t(        $ r Y ^w xY w# t(        $ r Y )w xY w)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   "~~	;;DHHT__%99T__5LAq"b))C ++I6 

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

-t/?/?@  $D#  		  s$   EG  G 	GG	G)(G)c                     | j                   sy 	 | j                   j                         s| j                          y y # t        $ r | j                          Y y w xY wN)r   	focus_gethide_windowKeyErrorr!   s    r"   _hide_event_checkz$AutoCompleteWindow._hide_event_check  sS    &&	**446  " 7 	 	s   *; AAc                 
   | j                         rs|j                  t        j                  k(  r'| j                  j                  d| j                         y |j                  t        j                  k(  r| j                          y y y )Nr&   )	r   type	EventTypeFocusOutr   afterr   ButtonPressr   r!   r   s     r"   rn   zAutoCompleteWindow.hide_event*  sd     >>zzY/// !!!T%;%;<y444  " 5 r$   c                     | j                         rLd| _        t        | j                  j	                         d         }| j                  | j                  |          y y )NTr   )r   r   rA   r   rB   r/   r   r!   r   rI   s      r"   r{   z#AutoCompleteWindow.listselect_event7  sN    >>#'D 224Q78Ft//78 r$   c                     t        | j                  j                         d         }| j                  | j                  |          | j                          y )Nr   )rA   r   rB   r/   r   r   r   s      r"   r   z$AutoCompleteWindow.doubleclick_event=  sC    T\\..0344++F34r$   c                    | j                         sy |j                  t        |d      r|j                  }nd}dk7  rd| _        t              dk(  sdv s| j                  t        k(  rdv r|t         z  svt              dk(  r| j                  | j                  z          ndk(  r| j                  | j                  d	z          nd
k(  r| j                  | j                  dz          nkdk(  r| j                  | j                  dz          nGt        | j                        dk(  r| j                          y | j                  | j                  d d        | j                  | _        | j                  j                  dt        | j                  j!                         d                | j                  j#                  | j%                  | j                               | j'                          ydk(  r!| j)                          | j                          y| j                  t*        k(  rdv s!| j                  t        k(  rdv r|t         z  st        | j                  j!                         d         }| j,                  |   d t        | j                         | j                  k(  r=| j                  t*        k(  s| j                  r| j                  | j,                  |          | j                          y dv r|sd| _        t        | j                  j!                         d         }dk(  rd}ndk(  rt        | j,                        dz
  }n։dv r| j                  j1                  | j                  j3                               | j                  j1                  d      z
  }dk(  rt5        d||z
        }nndk(  sJ t7        t        | j,                        dz
  ||z         }nAdk(  rt5        d|dz
        }n,dk(  sJ t7        t        | j,                        dz
  |dz         }| j                  j                  |       | j                  j#                  |       | j'                          | j                  | j,                  |          ydk(  rr|sp| j                  rUt        | j                  j!                         d         }| j                  | j,                  |          | j                          yd| _        d| _        y t9        fddD              ry |j:                  r|j:                  dk\  r| j                  | j                  |j:                  z          | j                  | _        | j                  j                  dt        | j                  j!                         d                | j                  j#                  | j%                  | j                               | j'                          y| j                          y )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  
 y wr    ).0r2   keysyms     r"   	<genexpr>z4AutoCompleteWindow.keypress_event.<locals>.<genexpr>  s      Ef Es   )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  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$ F4K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 ZZEJJ#-tzzEJJ67"&**DLL%%aT\\-F-F-H-K)LMLL##D$7$7

$CD##% r$   c                     | j                         sy | j                  j                  d      | j                  j                  d| j                  t	        | j
                        fz        k7  r| j                          y y )Nr+   r'   )r   r   rX   r   r)   r   r   r   s     r"   rx   z#AutoCompleteWindow.keyrelease_event  sc    ~~;;X&;;X#djj/(JJKL Lr$   c                     | j                   d uS r   )r   r   s    r"   r   zAutoCompleteWindow.is_active  s    &&d22r$   c                 X    | j                  | j                  | j                               y r   )r/   r;   r   r   s    r"   r   zAutoCompleteWindow.complete  s    400<=r$   c                    | j                         sy | j                  j                  t        t               t
        D ]"  }| j                  j                  t        |       $ | j                  j                  t        | j                         | j                  j                  t        | j                         d | _        d | _	        t        D ]"  }| j                  j                  t        |       $ | j                  j                  t        | j                         d | _        | j                  j                  t        t               | j                  j                  t        | j                         d | _        | j                   j                  t"        | j$                         d | _        | j&                  r1| j                  j                  t(        | j&                         d | _        | j                  j+                          | j,                  j/                          d | _        | j                   j/                          d | _        | j                  j/                          d | _        y 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   ~~ 	,,-D-D	F! 	CCKK$$%<cB	C 	&&'>M2DLLA% 	GCKK$$%@#F	G6H  !>!4	68$:K:KL /1B1BC ##**+=t?O?O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	      sZ    !$F/@$*LFP3$j
#9rh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'f z	0AEJ r$   