
   b5H$            	         ^ S r SSKrSSKrSSK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SrSrSrSrSrSrS
rSrSrSr \RB                  S:X  a	  Sr"\\\\ 4r#OSr"\\\\4r#\$" \%" \"5      5       V Vs0 s H  n \"U      H  nX_M     M     snn r&Sr' " S  S!5      r(\$" S\%" \"5      -  5      r)\) V^s/ s H$  mS"RU                  U4S# j\+" \"5       5       5      PM&     snr,S$ r-\-" \)5      r./ r/\) HB  r0Sr1\$" \%" \"5      5       H  r2S\2-  \0-  (       d  M  \1\#\2   -  r1M     \/Rg                  \15        MD      " S% S&5      r4S'r5\44S-  \(4\%" \55      S-
  -  -   r6\$" \%" \55      5       V Vs0 s H  n \5U      H  nX_M     M     snn r7\Rp                  " S(5      r9\Rp                  " S)5      r:S* r;S+ r<0 r=S, r>S- r?\@S.:X  a  SS/KAJBrB  \B" S0SS1S29  SS3KCJDrD  \D" \?5        ggs  snn f s  snf s  snn f )4a  
MultiCall - a class which inherits its methods from a Tkinter widget (Text, for
example), but enables multiple calls of functions per virtual event - all
matching events will be called, not only the most specific one. This is done
by wrapping the event functions - event_add, event_delete and event_info.
MultiCall recognizes only a subset of legal event sequences. Sequences which
are not recognized are treated by the original Tk handling mechanism. A
more-specific event will be called before a less-specific event.

The recognized sequences are complete one-event sequences (no emacs-style
Ctrl-X Ctrl-C, no shortcuts like <3>), for all types of events.
Key/Button Press/Release events can have modifiers.
The recognized modifiers are Shift, Control, Option and Command for Mac, and
Control, Alt, Shift, Meta/M for other platforms.

For all events which were handled by MultiCall, a new member is added to the
event instance passed to the binded functions - mc_type. This is one of the
event type constants defined in this module (such as MC_KEYPRESS).
For Key/Button events (which are handled by MultiCall and may receive
modifiers), another member is added - mc_state. This member gives the state
of the recognized modifiers, as a combination of the modifier constants
also defined in this module (for example, MC_SHIFT).
Using these members is absolutely portable.

The order by which events are called is defined by these rules:
1. A more-specific event will be called before a less-specific event.
2. A recently-binded event will be called before a previously-binded event,
   unless this conflicts with the first rule.
Each function will be called at most once for each event.
    N                        	   
                                           @      darwin)ShiftControl)Option)Command)r   )Altr   )MetaMzapplication has been destroyedc                   ,    \ rS rSrS rS rS rS rSrg)_SimpleBinderI   c                 r    Xl         S[        U   S   -   S-   U l        X l        X0l        / U l        S U l        g )N<r   >)type_typessequencewidget
widgetinstbindedfuncs	handlerid)selfr,   r/   r0   s       (/usr/lib/python3.13/idlelib/multicall.py__init___SimpleBinder.__init__J   s9    	F4LO+C/$    c                     U R                   (       dQ  U R                  U R                  4S jnU R                  R	                  U R
                  U R                  U5      U l         U R                  R                  U5        g )Nc                     X l         0 n[        [        U5      S-
  SS5       H%  nX   nXS;  d  M  SX5'   U" U 5      nU(       d  M#  Us  $    g )Nr   T)mc_typerangelen)eventlr;   	wascalledifuncrs          r4   handler#_SimpleBinder.bind.<locals>.handlerT   sN     '	s1vaxR0A4D,*.	 K1#$H 1r7   )r2   r1   r,   r/   bindr0   r.   append)r3   tripletrB   rD   s       r4   rF   _SimpleBinder.bindR   sY    ~~#'#3#3tyy 	% "[[--doo.2mmWFDN%r7   c                     U R                   R                  U5        U R                   (       dC  U R                  R                  U R                  U R
                  U R                  5        S U l        g g N)r1   remover/   unbindr0   r.   r2   )r3   rH   rB   s      r4   rM   _SimpleBinder.unbindb   sM    %KKtt~~N!DN  r7   c                    U R                   (       a=   U R                  R                  U R                  U R                  U R                   5        g g ! [
        R                   a"  n[        UR                  S   ;  a  e  S nAg S nAff = fNr   )	r2   r/   rM   r0   r.   tkinterTclErrorAPPLICATION_GONEargs)r3   es     r4   __del___SimpleBinder.__del__h   sh    >>""4??DMM(  ## '166!94 5s   ;A B$BB)r1   r2   r.   r,   r/   r0   N)	__name__
__module____qualname____firstlineno__r5   rF   rM   rV   __static_attributes__ r7   r4   r'   r'   I   s    & "r7   r'    c              3   V   >#    U  H  u  pS U-  T-  (       d  M  US   S-   v   M      g7f)r   r   -Nr]   ).0rA   mss      r4   	<genexpr>rd   w   s/      )$9DAFa< !!S$9s   ))c                     S n/ nU  HB  n[        U  Vs1 s H  oCU-  iM	     sn5      nUR                  USS9  UR                  U5        MD     U$ s  snf )zFor each item of states return a list containing all combinations of
that item with individual bits reset, sorted by the number of set bits.
c                 N    SnU (       a  [        U S5      u  pX-  nU (       a  M  U$ )znumber of bits set in n base 2r   r   )divmod)nnbrems      r4   nbitsexpand_substates.<locals>.nbits   s,    Aq\FAIB a 	r7   T)keyreverse)listsortrG   )statesrk   	stateliststatex	substatess         r4   expand_substatesrv   |   s^     IV4V!)V45	5$/#   5s   A
c                   2    \ rS rSrS rS rS rS rS rSr	g)	_ComplexBinder   c                 @    UX#U R                   U R                  4S jnU$ )Nc                    S/US S & X l         X0l        0 nS nU HN  n[        [        U5      S-
  SS5       H%  n	X   n
X;  d  M  SXj'   X   " U 5      nU(       d  M%    O   U(       d  MN    O   / US S & U H
  nU" 5         M     / US S & U(       a  U$ g )NTr   r:   )r;   mc_stater<   r=   )r>   listsr;   r|   ishandlerrunningdoafterhandlerr@   rC   r?   rA   rB   fs               r4   rD   0_ComplexBinder.__create_handler.<locals>.handler   s     $(&Q#M%NIAs1vaxR0A4D,*.	DK1! 1 1  #%Q# $ "N1 r7   )r~   r   )r3   r}   r;   r|   rD   s        r4   __create_handler_ComplexBinder.__create_handler   s&    #(%'+'<'<%)%8%8	4 r7   c           	         Xl         [        U   S   U l        X l        X0l        S [
         Vs/ s H  n/ PM     sn0U l        / U l        / U l        / U l	        [
         H  n[        U    Vs/ s H  oPR                  S    U   PM     nnU R                  Xa[        U   5      nS[        U   -   U R                  -   S-   nU R                  R                  XR                  R                  U R                  X5      45        M     g s  snf s  snf )Nr   r*   r+   )r,   r-   typenamer/   r0   _statesr1   
handleridsr~   r   _state_subsets_ComplexBinder__create_handler_state_codes_state_namesrG   rF   )	r3   r,   r/   r0   rc   rA   r}   rD   seqs	            r4   r5   _ComplexBinder.__init__   s    	tQ$ w"7w!2w"78 !# A8Fq8IJ8I1%%d+A.8IEJ++EaIGl1o%dmm3C7COO""C)9)9$//:=*H $I J	  #8 Ks   D+Dc           	        ^ ^^ TS   T R                   ;  a  [         Vs/ s H  n/ PM     snT R                   TS   '   [         H  nTS   S 4 VVs/ s H&  n[        U     H  nT R                   U   U   PM     M(     nnnT R                  UT R                  [
        U   5      nS[        U   < T R                  < STS   < S3nT R                  R                  UT R                  R                  T R                  X5      45        M     UU U4S jn	T R                  (       d  U	" 5         g T R                  R                  U	5        g s  snf s  snnf )Nr   r*   r`   r+   c                  R   > TR                   TS      TS      R                  T 5      $ Nr   r   )r1   rG   rB   r3   rH   s   r4   <lambda>%_ComplexBinder.bind.<locals>.<lambda>   (    t''
3GAJ?FFtLr7   )r1   r   r   r   r,   r   r   r   r   rG   r/   rF   r0   r~   r   )
r3   rH   rB   rc   detailrA   r}   rD   r   doits
   ```       r4   rF   _ComplexBinder.bind   s2   1:T---8?+@1B+@DWQZ()0T(:=(:f#1!#4a **6215#4 6(:  = //tyy0<QA$0OT]]GAJO&&T[[-=-=doo>A.L (M N  M$$F&&t, ,A=s   E	-Ec                    ^ ^^ UU U4S jnT R                   (       d  U" 5         g T R                  R                  U5        g )Nc                  R   > TR                   TS      TS      R                  T 5      $ r   )r1   rL   r   s   r4   r   '_ComplexBinder.unbind.<locals>.<lambda>   r   r7   )r~   r   rG   )r3   rH   rB   r   s   ``` r4   rM   _ComplexBinder.unbind   s*    L$$F&&t,r7   c                     U R                    H,  u  p U R                  R                  U R                  X5        M.     g ! [        R
                   a#  n[        UR                  S   ;  a  e  S nAMc  S nAff = frP   )r   r/   rM   r0   rQ   rR   rS   rT   )r3   r   idrU   s       r4   rV   _ComplexBinder.__del__   s_    GC""4??C< ' ## '166!94 5s   &>A5A00A5)r1   r   r   r~   r,   r   r/   r0   N)
rX   rY   rZ   r[   r   r5   rF   rM   rV   r\   r]   r7   r4   rx   rx      s    :J.-$-r7   rx   ))KeyPressKey)
KeyRelease)ButtonPressButton)ButtonRelease)Activate)	Circulate)Colormap)	Configure)
Deactivate)Destroy)Enter)Expose)FocusIn)FocusOut)Gravity)Leave)Map)Motion)
MouseWheel)Property)Reparent)Unmap)
Visibilityz^\w+$z^[1-5]$c                 H   U (       a  U S   S:w  d	  U S   S:w  a  gU SS R                  S5      nSnU(       a8  US   [        ;   a+  US[        US      -  -  nUS	 U(       a  US   [        ;   a  M+  U(       a  US   [        ;   a  [        US      nUS	 Og[        U   [        L a  U(       d  U(       a  gSnOdUS Vs/ s H  n[        U   PM     sn;   a  [
        nO[        nU(       d  SnO/[        U5      S:X  a  UR                  US   5      (       a  US   nOgX#U4$ s  snf )	a  Get a string which should describe an event sequence. If it is
successfully parsed as one, return a tuple containing the state (as an int),
the event type (as an index of _types), and the detail - None if none, or a
string if there is one. If the parsing is unsuccessful, return None.
r   r*   r:   r+   Nr   r`   )r   r   )	split_modifier_names_type_names_binder_classesr'   
_keysym_re
_button_rer=   match)r.   words	modifiersr,   r   rc   type_res          r4   _parse_sequencer     s&    x{c)Xb\S-@QrN  %EI
E!H/Q/%(333	!H E!H/ q[(58$!Ht-F ,FG,FqKN,FGG G GFZ1_uQx!8!81XFF"" Hs   <Dc                     U S   (       a+  S[         U S      -   [        U S      S   -   S-   U S   -   S-   $ S[         U S      -   [        U S      S   -   S-   $ )Nr   r*   r   r   r`   r+   )r   r-   )rH   s    r4   _triplet_to_sequencer   2  sy    qz<
++F71:,>q,AA#Eqz 	 <
++F71:,>q,AA#EEr7   c                 \   ^  T [         ;   a	  [         T    $  " U 4S jST 5      nU[         T '   U$ )zReturn a MultiCall class which inherits its methods from the
given widget class (for example, Tkinter.Text). This is used
instead of a templating mechanism.
c                      > \ rS rSr\"  Y \R                  5      (       d   eU 4S jrSU 4S jjrSU 4S jjr	U 4S jr
U 4S jrSU 4S jjrS	 rS
rg)#MultiCallCreator.<locals>.MultiCalliB  c                    > TR                   " U /UQ70 UD6  0 U l        [        [        [        5      5       Vs/ s H  n[
        U   " UTU 5      PM     snU l        g s  snf rK   )r5   _MultiCall__eventinfor<   r=   r-   r   _MultiCall__binders)r3   rT   kwargsrA   r/   s       r4   r5   ,MultiCallCreator.<locals>.MultiCall.__init__E  s^    OOD24262  "D',S['9;'9! .a0FDA'9;DN ;s   ANc                   > [        U5      [        L a  [        U5      S:  a  US S S:X  a  USS  S:X  a  XR                  ;   a}  U R                  U   nUS   b0  US    H'  nU R                  US      R                  XTS   5        M)     X$S'   US   b-  US    H$  nU R                  US      R                  XR5        M&     OU/ /U R                  U'   TR                  XX#5      $ )Nr   <<>>r   r   )r,   strr=   r   r   rM   rF   )r3   r.   rB   addeirH   r/   s         r4   rF   (MultiCallCreator.<locals>.MultiCall.bindN  s     H~$X):|t#(=///))(3B!u(')!uG NN71:6==g!uM (- qE!u(')!uG NN71:6;;GJ (- 37D$$X.;;tt99r7   c                 L  > [        U5      [        L a  [        U5      S:  aq  US S S:X  ah  USS  S:X  a_  XR                  ;   aP  U R                  U   u  p4Ub<  U H$  nU R                  US      R                  XS5        M&     S U R                  U   S'   TR                  XU5      $ )Nr   r   r   r   r   r   )r,   r   r=   r   r   rM   )r3   r.   funcidrB   tripletsrH   r/   s         r4   rM   *MultiCallCreator.<locals>.MultiCall.unbind`  s    H~$X):|t#(=+++!%!1!1(!;##+wqz299'H $,48D$$X.q1==88r7   c                 (  > XR                   ;  a  S / /U R                   U'   U R                   U   u  p4U HZ  n[        U5      nUc  TR                  XU5        M%  Ub!  U R                  US      R	                  Xc5        UR                  U5        M\     g Nr   )r   r   	event_addr   rF   rG   r3   virtual	sequencesrB   r   r   rH   r/   s          r4   r   -MultiCallCreator.<locals>.MultiCall.event_addk  s     ...-12J  )!--g6ND )#.?$$TC8'wqz277FOOG, !r7   c                   > XR                   ;  a  g U R                   U   u  p4U HZ  n[        U5      nUc  TR                  XU5        M%  Ub!  U R                  US      R	                  Xc5        UR                  U5        M\     g r   )r   r   event_deleter   rM   rL   r   s          r4   r   0MultiCallCreator.<locals>.MultiCall.event_delete|  sz    ...!--g6ND )#.?''s;'wqz299'HOOG, !r7   c                    > Ub  XR                   ;  a  TR                  X5      $ [        [        [        U R                   U   S   5      5      TR                  X5      -   $ r   )r   
event_infotuplemapr   )r3   r   r/   s     r4   r   .MultiCallCreator.<locals>.MultiCall.event_info  sb    '1A1A"A((77S!5!%!1!1'!:1!=? @((78 8r7   c                 (   U R                    HH  nU R                   U   u  p#U(       d  M  U H%  n U R                  US      R                  XB5        M'     MJ     g ! [        R                   a#  n[
        UR                  S   ;  a  e  S nAM`  S nAff = f)Nr   r   )r   r   rM   rQ   rR   rS   rT   )r3   r   rB   r   rH   rU   s         r4   rV   +MultiCallCreator.<locals>.MultiCall.__del__  s    ++!%!1!1'!:4#+& NN71:6==gL $, ,  '// &#3qvvay#@ % $A&s   !AB.BB)	__binders__eventinfo)NNNrK   )rX   rY   rZ   r[   
issubclassrQ   Miscr5   rF   rM   r   r   r   rV   r\   )r/   s   r4   	MultiCallr   B  s=    &',,////	;	:$		9	-"	-	8		&r7   r   )_multicall_dict)r/   r   s   ` r4   MultiCallCreatorr   :  s9    
  v&&Y&V Y&v (OFr7   c                 :  ^ [         R                  " U 5      nUR                  S5        [        [        U R                  5       R                  S5      SS  5      u  p#UR                  SX#S-   4-  5        [        [         R                  5      " U5      mTR                  5         TR                  5         S/4U4S jjnU" S5        U" S	5        U" S
5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        g )NzTest MultiCall+r   z+%d+%d   r   c                    >^  U 4S jnTR                  SUS   -  U5        TR                  SUS   -  T 5        US==   S-  ss'   g )Nc                    > [        T5        g rK   )print)r>   r   s    r4   rD   -_multi_call.<locals>.bindseq.<locals>.handler  s
    #Jr7   z<<handler%d>>r   r   )rF   r   )r   rh   rD   texts   `  r4   bindseq_multi_call.<locals>.bindseq  sC    			/!A$&0qt+S1	!	r7   z<Key>z<Control-Key>z<Alt-Key-a>z<Control-Key-a>z<Alt-Control-Key-a>z<Key-b>z<Control-Button-1>z
<Button-2>z<Alt-Button-1>z
<FocusOut>z<Enter>z<Leave>)rQ   Topleveltitler   intgeometryr   r   Textpack	focus_set)parenttoprt   yr   r   s        @r4   _multi_callr    s    


6
"CIIsFOO%++C045DALLQCL()GLL)#.DIIKNNs  GOM!"I !LLIIr7   __main__)mainzidlelib.idle_test.test_mainmenuF)	verbosityexit)run)E__doc__resysrQ   MC_KEYPRESSMC_KEYRELEASEMC_BUTTONPRESSMC_BUTTONRELEASEMC_ACTIVATEMC_CIRCULATEMC_COLORMAPMC_CONFIGUREMC_DEACTIVATE
MC_DESTROYMC_ENTER	MC_EXPOSE
MC_FOCUSINMC_FOCUSOUT
MC_GRAVITYMC_LEAVEMC_MAP	MC_MOTIONMC_MOUSEWHEELMC_PROPERTYMC_REPARENTMC_UNMAPMC_VISIBILITYMC_SHIFT
MC_CONTROLMC_ALTMC_META	MC_OPTION
MC_COMMANDplatform
_modifiers_modifier_masksr<   r=   r   rS   r'   r   join	enumerater   rv   r   r   rc   rC   rA   rG   rx   r-   r   r   compiler   r   r   r   r   r   r  rX   unittestr  idlelib.idle_test.htestr  )numbernamerc   s   00pr4   <module>r6     s  < 
 
  Q}q12BA|1{1lAxbIR*2
x2Fyb+b+2(R}dTFT7	t* <<8FJY
CODJ!68W=O (-S_'=9'=V%/%7T <%7 '=9 4 & &Z S_$
% !" !A  )$-j$9) ) !"
$ "'* 	A	A3z?#Fa<<##A $  
[ [~
 "#a'=*:c&k!m*LL $)V#51#5!' |!/ #51 ZZ!
ZZ
#
%#NF dN: z	*aeD+ O9@"\1s   <G$;+G*1G/