
    dH                     \   d Z ddlZddlZddl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ZdZdZdZdZdZdZdZd
ZdZdZdZ ej!        dk    r	dZ"eeee fZ#ndZ"eeeefZ#d  e$ e%e"                    D             Z&d Z' G d! d"          Z( e$d e%e"          z            Z)d# e)D             Z*d$ Z+ e+e)          Z,g Z-e)D ]CZ.dZ/ e$ e%e"                    D ]Z0de0z  e.z  re/e#e0         z  Z/e-1                    e/           D G d% d&          Z2d'Z3e2fdz  e(f e%e3          dz
  z  z   Z4d(  e$ e%e3                    D             Z5 ej6        d)          Z7 ej6        d*          Z8d+ Z9d, Z:i Z;d- Z<d. Z=e>d/k    r'dd0l?m@Z@  e@d1dd23           dd4lAmBZB  eBe=           dS dS )5a  
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Mc                 4    i | ]}t           |         D ]}||S  )
_modifiers.0numbernames      #  /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/multicall.py
<dictcomp>r.   7   sD     9 9 9#%/%79 9!  9 9 9 9    zapplication has been destroyedc                   &    e Zd Zd Zd Zd Zd ZdS )_SimpleBinderc                     || _         dt          |         d         z   dz   | _        || _        || _        g | _        d | _        d S )N<r   >)type_typessequencewidget
widgetinstbindedfuncs	handlerid)selfr5   r8   r9   s       r-   __init__z_SimpleBinder.__init__J   sC    	F4LO+C/$r/   c                     | j         s;| j        | j        fd}| j                            | j        | j        |          | _         | j                            |           d S )Nc                     || _         i }t          t          |          dz
  dd          D ]$}||         }||vrd||<    ||           }|r|c S %d S )Nr   T)mc_typerangelen)eventlrA   	wascalledifuncrs          r-   handlerz#_SimpleBinder.bind.<locals>.handlerT   sy     '	s1vvaxR00 % %AQ4D9,,*.	$ DKK %#$HHH% %r/   )r;   r:   r5   r8   bindr9   r7   append)r<   tripletrH   rJ   s       r-   rK   z_SimpleBinder.bindR   sp    ~ 	F#'#3ty 	% 	% 	% 	% "[--do.2mWF FDN%%%%%r/   c                     | j                             |           | j         s4| j                            | j        | j        | j                   d | _        d S d S N)r:   remover8   unbindr9   r7   r;   )r<   rM   rH   s      r-   rQ   z_SimpleBinder.unbindb   sY    %%% 	"Ktt~NNN!DNNN	" 	"r/   c                     | j         r`	 | j                            | j        | j        | j                    d S # t
          j        $ r }t          |j        d         vr Y d }~d S d }~ww xY wd S Nr   )	r;   r8   rQ   r9   r7   tkinterTclErrorAPPLICATION_GONEargs)r<   es     r-   __del__z_SimpleBinder.__del__h   s    > 	""4?DM( ( ( ( (#   '16!944 544444		 	s   +6 A%A  A%N)__name__
__module____qualname__r=   rK   rQ   rY   r'   r/   r-   r1   r1   I   sP          & & & " " "    r/   r1   c                 v    g | ]5d                      fdt          t                    D                       6S ) c              3   D   K   | ]\  }}d |z  z  |d         dz   V  dS )r   r   -Nr'   )r*   rG   mss      r-   	<genexpr>z<listcomp>.<genexpr>w   sP       ) ) AqFa<)!S ) ) ) ) ) )r/   )join	enumerater(   r*   rb   s    @r-   
<listcomp>rg   w   sg     " " "   ) ) ) )$-j$9$9) ) ) ) ) " " "r/   c                     d }g }| D ]It          fd| D                       }|                    |d           |                    |           J|S )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                 B    d}| rt          | d          \  } }||z  }| |S )znumber of bits set in n base 2r   r   )divmod)nnbrems      r-   nbitszexpand_substates.<locals>.nbits   s:     	Aq\\FAs#IB  	 	r/   c                     h | ]}|z  S r'   r'   )r*   xstates     r-   	<setcomp>z#expand_substates.<locals>.<setcomp>   s    444%!)444r/   T)keyreverse)listsortrL   )statesrn   	statelist	substatesrq   s       @r-   expand_substatesrz   |   s}       I $ $4444V44455	5$///####r/   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )_ComplexBinderc                 ,    |||| j         | j        fd}|S )Nc                 "   dg|d d <   || _         || _        i }d }|D ]P}t          t          |          dz
  dd          D ](}	||	         }
|
|vrd||
<    ||	         |           }|r n)|r nQg |d d <   |D ]} |             g |d d <   |r|S d S )NTr   r@   )rA   mc_staterB   rC   )rD   listsrA   r   ishandlerrunningdoafterhandlerrF   rI   rE   rG   rH   fs               r-   rJ   z0_ComplexBinder.__create_handler.<locals>.handler   s     $(&QQQ#EM%ENIA 	 	s1vvaxR00 " "AQ4D9,,*.	$ AaDKK "!E E"$QQQ#   "N111  r/   )r   r   )r<   r   rA   r   rJ   s        r-   __create_handlerz_ComplexBinder.__create_handler   s1    #(%('+'<%)%8	 	 	 	4 r/   c           	          | _         t          |         d          _        | _        | _        d d t
          D             i _        g  _        g  _        g  _	        t
          D ]} fdt          |         D             }                     ||t          |                   }dt          |         z    j        z   dz   } j                            | j                             j        ||          f           d S )Nr   c                     g | ]}g S r'   r'   rf   s     r-   rg   z+_ComplexBinder.__init__.<locals>.<listcomp>   s    "7"7"7!2"7"7"7r/   c                 6    g | ]}j         d          |         S rO   )r:   )r*   rG   r<   s     r-   rg   z+_ComplexBinder.__init__.<locals>.<listcomp>   s&    JJJ1T%d+A.JJJr/   r3   r4   )r5   r6   typenamer8   r9   _statesr:   
handleridsr   r   _state_subsets_ComplexBinder__create_handler_state_codes_state_namesrL   rK   )r<   r5   r8   r9   rb   r   rJ   seqs   `       r-   r=   z_ComplexBinder.__init__   s   	tQ$ "7"7w"7"7"78 !#  	J 	JAJJJJq8IJJJE++E4aIIGl1o%dm3C7CO""C)9)9$/:=w*H *H $I J J J J		J 	Jr/   c           	          d          j         vrd t          D              j         d         <   t          D ] fdd         d fD             }                     | j        t                             }dt
                    j        dd         d} j                            | j	        
                     j        ||          f            fd} j        s |             d S  j                            |           d S )Nr   c                     g | ]}g S r'   r'   rf   s     r-   rg   z'_ComplexBinder.bind.<locals>.<listcomp>   s    +@+@+@1B+@+@+@r/   c                 V    g | ]%}t                    D ]}j        |         |         &S r'   )r   r:   )r*   detailrG   rb   r<   s      r-   rg   z'_ComplexBinder.bind.<locals>.<listcomp>   sP     = = =$#1!#4= = *6215 = = = =r/   r3   r`   r4   c                  h    j         d                  d                                                 S Nr   r   )r:   rL   rH   r<   rM   s   r-   <lambda>z%_ComplexBinder.bind.<locals>.<lambda>   *    t'
3GAJ?FFtLL r/   )r:   r   r   r5   r   r   r   r   rL   r8   rK   r9   r   r   )r<   rM   rH   r   rJ   r   doitrb   s   ```    @r-   rK   z_ComplexBinder.bind   s[   1:T---+@+@+@+@+@DWQZ( N N= = = = =)0T(:= = = //ty0<QA A$0OOT]]]GAJJJO&&T[-=-=do>A7.L .L (M N N N NLLLLLL$ 	-DFFFFF&&t,,,,,r/   c                 t      fd} j         s |             d S  j                            |           d S )Nc                  h    j         d                  d                                                 S r   )r:   rP   r   s   r-   r   z'_ComplexBinder.unbind.<locals>.<lambda>   r   r/   )r   r   rL   )r<   rM   rH   r   s   ``` r-   rQ   z_ComplexBinder.unbind   sP    LLLLLL$ 	-DFFFFF&&t,,,,,r/   c                     | j         D ]X\  }}	 | j                            | j        ||           (# t          j        $ r}t          |j        d         vr Y d }~Qd }~ww xY wd S rS   )r   r8   rQ   r9   rT   rU   rV   rW   )r<   r   idrX   s       r-   rY   z_ComplexBinder.__del__   s     	 	GC""4?C<<<<#   '16!944 54444	 	s   !0AAAN)rZ   r[   r\   r   r=   rK   rQ   rY   r'   r/   r-   r|   r|      sb          :J J J.- - -$- - -    r/   r|   ))KeyPressKey)
KeyRelease)ButtonPressButton)ButtonRelease)Activate)	Circulate)Colormap)	Configure)
Deactivate)Destroy)Enter)Expose)FocusIn)FocusOut)Gravity)Leave)Map)Motion)
MouseWheel)Property)Reparent)Unmap)
Visibilityc                 4    i | ]}t           |         D ]}||S r'   )r6   r)   s      r-   r.   r.     sC     1 1 1!'1 1 V 1 1 1 1r/   z^\w+$z^[1-5]$c                 B   | r| d         dk    s| d         dk    rdS | dd                              d          }d}|r<|d         t          v r-|dt          |d                  z  z  }|d= |r|d         t          v -|r&|d         t          v rt          |d                  }|d= ndS t          |         t          u r	|s|rdS d}n[|d d	D             v rt
          }nt          }|sd}n9t          |          dk    r$|                    |d                   r	|d         }ndS |||fS )
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   r3   r@   r4   Nr   r`   c                 (    g | ]}t           |         S r'   )_type_namesrf   s     r-   rg   z#_parse_sequence.<locals>.<listcomp>$  s    GGGqKNGGGr/   )r   r   )	split_modifier_namesr   _binder_classesr1   
_keysym_re
_button_rerC   match)r7   words	modifiersr5   r   type_res         r-   _parse_sequencer     sq     x{c))Xb\S-@-@tQrTN  %%EI
 E!H//Q/%(333	!H  E!H//  q[((58$!HHtt-- 	 	4FF GG,FGGGGG GG G 	FFZZ1__uQx!8!8_1XFF4dF""r/   c                     | d         r?dt           | d                  z   t          | d                  d         z   dz   | d         z   dz   S dt           | d                  z   t          | d                  d         z   dz   S )Nr   r3   r   r   r`   r4   )r   r6   )rM   s    r-   _triplet_to_sequencer   2  s    qz F<
++F71:,>q,AA#Eqz 	 <
++F71:,>q,AA#EEr/   c                 h      t           v rt                     S  G  fdd           }|t            <   |S )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                   ~    e Zd Z e ej                  sJ  fdZd	 fd	Zd
 fd	Z fdZ	 fdZ
d
 fd	Zd ZdS )#MultiCallCreator.<locals>.MultiCallc                       j          g|R i | i  _         fdt          t          t                              D              _        d S )Nc                 >    g | ]}t          |         |          S r'   )r   )r*   rG   r<   r8   s     r-   rg   z@MultiCallCreator.<locals>.MultiCall.__init__.<locals>.<listcomp>K  s:     ; ; ;"# .a0FDAA ; ; ;r/   )r=   _MultiCall__eventinforB   rC   r6   _MultiCall__binders)r<   rW   kwargsr8   s   `  r-   r=   z,MultiCallCreator.<locals>.MultiCall.__init__E  sq    FOD242226222  "D; ; ; ; ;',S[['9'9; ; ;DNNNr/   Nc                    t          |          t          u rt          |          dk    r|d d         dk    r|dd          dk    r|| j        v r| j        |         }|d         8|d         D ]/}| j        |d                                      ||d                    0||d<   |d         2|d         D ])}| j        |d                                      ||           *n|g g| j        |<                       | |||          S )Nr   <<>>r   r   )r5   strrC   r   r   rQ   rK   )r<   r7   rH   addeirM   r8   s         r-   rK   z(MultiCallCreator.<locals>.MultiCall.bindN  s#    H~~$$X):):|t##(=(=t///)(3B!u(')!u N NG N71:6==gr!uMMMM BqE!u(')!u K KG N71:6;;GTJJJJ26D$X.;;tXtS999r/   c                 j   t          |          t          u rt          |          dk    rs|d d         dk    re|dd          dk    rW|| j        v rN| j        |         \  }}|<|D ])}| j        |d                                      ||           *d | j        |         d<                       | ||          S )Nr   r   r   r   r   r   )r5   r   rC   r   r   rQ   )r<   r7   funcidrH   tripletsrM   r8   s         r-   rQ   z*MultiCallCreator.<locals>.MultiCall.unbind`  s    H~~$$X):):|t##(=(=4+++!%!1(!;h##+ I Iwqz299'4HHHH48D$X.q1==x888r/   c                 *   || j         vrd g g| j         |<   | j         |         \  }}|D ]i}t          |          }|                    | ||           +|'| j        |d                                      ||           |                    |           jd S Nr   )r   r   	event_addr   rK   rL   r<   virtual	sequencesrH   r   r   rM   r8   s          r-   r   z-MultiCallCreator.<locals>.MultiCall.event_addk  s     d...-12J )!-g6ND(  - -)#..?$$T7C8888'wqz277FFFOOG,,,,- -r/   c                    || j         vrd S | j         |         \  }}|D ]i}t          |          }|                    | ||           +|'| j        |d                                      ||           |                    |           jd S r   )r   r   event_deleter   rQ   rP   r   s          r-   r   z0MultiCallCreator.<locals>.MultiCall.event_delete|  s    d...!-g6ND(  - -)#..?''gs;;;;'wqz299'4HHHOOG,,,,- -r/   c                     |	|| j         vr                    | |          S t          t          t          | j         |         d                                                 | |          z   S r   )r   
event_infotuplemapr   )r<   r   r8   s     r-   r   z.MultiCallCreator.<locals>.MultiCall.event_info  sv    '1A"A"A((w777S!5!%!1'!:1!=? ? @ @((w778 8r/   c                     | j         D ]r}| j         |         \  }}|r^|D ][}	 | j        |d                                      ||           +# t          j        $ r}t
          |j        d         vr Y d }~Td }~ww xY wsd S )Nr   r   )r   r   rQ   rT   rU   rV   rW   )r<   r   rH   r   rM   rX   s         r-   rY   z+MultiCallCreator.<locals>.MultiCall.__del__  s    + & &!%!1'!:h &#+ & && N71:6==gtLLLL&/ & & &#3qvay#@#@ % $A#@#@#@#@&& &s   'A		A7A22A7)NNNrO   )rZ   r[   r\   
issubclassrT   Miscr=   rK   rQ   r   r   r   rY   )r8   s   r-   	MultiCallr   B  s        z&',/////	; 	; 	; 	; 	;	: 	: 	: 	: 	: 	:$		9 		9 		9 		9 		9 		9	- 	- 	- 	- 	-"	- 	- 	- 	- 	-	8 	8 	8 	8 	8 	8		& 		& 		& 		& 		&r/   r   )_multicall_dict)r8   r   s   ` r-   MultiCallCreatorr   :  sl    
   v&&Y& Y& Y& Y& Y& Y& Y&V Y& Y& Y&v (OFr/   c                    t          j        |           }|                    d           t          t          |                                                     d          dd                    \  }}|                    d||dz   fz              t          t           j                  |          	                                 dgffd	} |d            |d	            |d
            |d            |d            |d            |d            |d            |d            |d            |d            |d           d S )NzTest MultiCall+r   z+%d+%d   r   c                       fd}                     d|d         z  |                               d|d         z              |dxx         dz  cc<   d S )Nc                 &    t                     d S rO   )print)rD   r   s    r-   rJ   z-_multi_call.<locals>.bindseq.<locals>.handler  s    #JJJJJr/   z<<handler%d>>r   r   )rK   r   )r   rk   rJ   texts   `  r-   bindseqz_multi_call.<locals>.bindseq  sp    	 	 	 	 			/!A$&000qt+S111	!	r/   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>)
rT   Topleveltitler   intgeometryr   r   Textpack)parenttoprp   yr   r   s        @r-   _multi_callr     s   

6
"
"CIIsFOO%%++C00455DAqLLQCL())))GL))#..DIIKKKs       GGGOGMGG!"""GIG !!!GLGGLGIGIr/   __main__)mainzidlelib.idle_test.test_mainmenuF)	verbosityexit)run)C__doc__resysrT   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platformr(   _modifier_masksrB   rC   r   rV   r1   r   r   rz   r   r   rb   rI   rG   rL   r|   r6   r   r   compiler   r   r   r   r   r   r   rZ   unittestr   idlelib.idle_test.htestr  r'   r/   r-   <module>r'     sz   < 
			 



  Q}q12BA|1{1lAxbIR*2
x2Fyb+b+2(R}dTFT7	t* <8FJY
COODJ!68W=O9 9',uSS__'='=9 9 9 4 & & & & & & & &Z %SS__$
%
%" " !" " "
  $ "!'** 	  A	AU33z??## $ $Fa< 	$##A[ [ [ [ [ [ [ [~
 "#a'=*:cc&kk!m*LL1 1#(5V#5#51 1 1 RZ!!
RZ
##
%# %# %#NF F F d d dN  4 zD	*aeDDDD++++++C r/   