<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
 fH                 @   s&  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dUZdVZdWZdXZdYZdZZ ej!dkrd_Z"eeee fZ#nddZ"eeeefZ#e$d!d" e%e&e"D Z'd#Z(G d$d% d%Z)e%de&e"> Z*d&d" e*D Z+d'd( Z,e,e*Z-g Z.xNe*D ]FZ/dZ0x0e%e&e"D ] Z1de1> e/@ r6e0e#e1 O Z0q6W e.j2e0 q W G d)d* d*Z3d|Z4e3fd e)fe&e4d   Z5e$dDd" e%e&e4D Z6ej7dEZ8ej7dFZ9dGdH Z:dIdJ Z;i Z<dKdL Z=dMdN Z>e?dOkr"ddPl@mAZA eAdQddRdS ddTlBmCZC eCe> dS )}a  
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AltMetaMc             C   s"   g | ]}t | D ]}||fqqS  )
_modifiers).0numbernamer    r    6/opt/alt/python36/lib64/python3.6/idlelib/multicall.py
<listcomp>7   s   r&   zapplication has been destroyedc               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
_SimpleBinderc             C   s8   || _ dt| d  d | _|| _|| _g | _d | _d S )N<r   >)type_typessequencewidget
widgetinstbindedfuncs	handlerid)selfr*   r-   r.   r    r    r%   __init__J   s    z_SimpleBinder.__init__c             C   s>   | j s.| j| jfdd}| jj| j| j|| _ | jj| d S )Nc             S   sT   || _ i }xDtt|d ddD ],}|| }||kr d||< || }|r |S q W d S )Nr   Tr3   )mc_typerangelen)eventlr4   	wascalledifuncrr    r    r%   handlerT   s    z#_SimpleBinder.bind.<locals>.handler)r0   r/   r*   r-   bindr.   r,   append)r1   tripletr;   r=   r    r    r%   r>   R   s
    

z_SimpleBinder.bindc             C   s2   | j j| | j s.| jj| j| j| j d | _d S )N)r/   remover-   unbindr.   r,   r0   )r1   r@   r;   r    r    r%   rB   b   s    z_SimpleBinder.unbindc             C   sZ   | j rVy| jj| j| j| j  W n4 tjk
rT } zt|jd krD W Y d d }~X nX d S )Nr   )	r0   r-   rB   r.   r,   tkinterTclErrorAPPLICATION_GONEargs)r1   er    r    r%   __del__h   s    z_SimpleBinder.__del__N)__name__
__module____qualname__r2   r>   rB   rH   r    r    r    r%   r'   I   s   r'   c                s(   g | ]  d j  fddttD qS ) c             3   s*   | ]"\}}d |>  @ r|d d V  qdS )r   r   -Nr    )r"   r:   m)sr    r%   	<genexpr>w   s   z<listcomp>.<genexpr>)join	enumerater!   )r"   r    )rO   r%   r&   w   s   c                sP   dd }g }x>| D ]6 t t fdd| D }|j|dd |j| qW |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             S   s(   d}x| r"t | d\} }||7 }qW |S )znumber of bits set in n base 2r   r   )divmod)nZnbZremr    r    r%   nbits   s
    zexpand_substates.<locals>.nbitsc             3   s   | ]} |@ V  qd S )Nr    )r"   x)stater    r%   rP      s    z#expand_substates.<locals>.<genexpr>T)keyreverse)listsetsortr?   )ZstatesrU   Z	statelistZ	substatesr    )rW   r%   expand_substates|   s    
r]   c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )_ComplexBinderc             C   s   |||| j | jfdd}|S )Nc             S   s   dg|d d < || _ || _i }d }xZ|D ]R}xFtt|d ddD ].}	||	 }
|
|krBd||
< ||	 | }|rBP qBW |r(P q(W g |d d < x|D ]
}|  qW g |d d < |r|S d S )NTr   r3   r3   )r4   mc_stater5   r6   )r7   listsr4   r_   ishandlerrunningdoafterhandlerr9   r<   r8   r:   r;   fr    r    r%   r=      s*    


z0_ComplexBinder.__create_handler.<locals>.handler)ra   rb   )r1   r`   r4   r_   r=   r    r    r%   Z__create_handler   s
    z_ComplexBinder.__create_handlerc                s   | _ t| d  _| _| _d dd tD i _g  _g  _g  _	xhtD ]`} fddt
| D } j||t| }dt|   j d } jj| jj j||f qLW d S )Nr   c             S   s   g | ]}g qS r    r    )r"   rO   r    r    r%   r&      s    z+_ComplexBinder.__init__.<locals>.<listcomp>c                s   g | ]} j d  | qS )N)r/   )r"   r:   )r1   r    r%   r&      s    r(   r)   )r*   r+   typenamer-   r.   _statesr/   
handleridsra   rb   _state_subsets_ComplexBinder__create_handler_state_codes_state_namesr?   r>   )r1   r*   r-   r.   rO   r`   r=   seqr    )r1   r%   r2      s    
z_ComplexBinder.__init__c                s   d j krdd tD j d < xrtD ]jfddd d fD }j|jt }dt jd f }jj|j	j
j||f q,W  fdd}js|  njj| d S )Nr   c             S   s   g | ]}g qS r    r    )r"   rO   r    r    r%   r&      s    z'_ComplexBinder.bind.<locals>.<listcomp>c                s(   g | ] }t   D ]}j| | qqS r    )rg   r/   )r"   detailr:   )rO   r1   r    r%   r&      s   z	<%s%s-%s>c                  s   j d  d  j S )Nr   r   )r/   r?   r    )r;   r1   r@   r    r%   <lambda>   s    z%_ComplexBinder.bind.<locals>.<lambda>)r/   re   rh   r*   ri   rj   rd   rf   r?   r-   r>   r.   ra   rb   )r1   r@   r;   r`   r=   rk   doitr    )r;   rO   r1   r@   r%   r>      s    


z_ComplexBinder.bindc                s.    fdd}j s|  njj| d S )Nc                  s   j d  d  j S )Nr   r   )r/   rA   r    )r;   r1   r@   r    r%   rm      s    z'_ComplexBinder.unbind.<locals>.<lambda>)ra   rb   r?   )r1   r@   r;   rn   r    )r;   r1   r@   r%   rB      s    z_ComplexBinder.unbindc             C   sd   x^| j D ]T\}}y| jj| j|| W q tjk
rZ } zt|jd krJ W Y d d }~X qX qW d S )Nr   )rf   r-   rB   r.   rC   rD   rE   rF   )r1   rk   idrG   r    r    r%   rH      s    z_ComplexBinder.__del__N)rI   rJ   rK   rh   r2   r>   rB   rH   r    r    r    r%   r^      s
   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             C   s"   g | ]}t | D ]}||fqqS r    )r+   )r"   r#   r$   r    r    r%   r&     s   z^\w+$z^[1-5]$c             C   s  |  s| d dks| d dkr"dS | dd j d}d}x.|rf|d tkrf|dt|d  > O }|d= q:W |r|d tkrt|d  }|d= ndS t| tkr|s|rdS d}nP|dd dD krt}nt}|sd}n*t|dko|j|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   r(   r   r)   NrM   c             S   s   g | ]}t | qS r    )_type_names)r"   rO   r    r    r%   r&   $  s    z#_parse_sequence.<locals>.<listcomp>rp   rr   r3   r3   )rp   rr   )	split_modifier_namesr   _binder_classesr'   
_keysym_re
_button_rer6   match)r,   ZwordsZ	modifiersr*   rl   Ztype_rer    r    r%   _parse_sequence  s0    

r   c             C   s`   | d r8dt | d   t| d  d  d | d  d S dt | d   t| d  d  d S d S )Nr   r(   r   r   rM   r)   )rj   r+   )r@   r    r    r%   _triplet_to_sequence2  s    0r   c                s0    t krt   S G  fd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                   sb   e Zd Z fddZd fdd	Zd fdd	Z fdd	Z fd
dZd fdd	Zdd Z	dS )z#MultiCallCreator.<locals>.MultiCallc                s:   j  f|| i  _ fddtttD  _d S )Nc                s   g | ]}t | | qS r    )r   )r"   r:   )r1   r-   r    r%   r&   K  s   z@MultiCallCreator.<locals>.MultiCall.__init__.<locals>.<listcomp>)r2   _MultiCall__eventinfor5   r6   r+   _MultiCall__binders)r1   rF   kwargs)r-   )r1   r%   r2   E  s    z,MultiCallCreator.<locals>.MultiCall.__init__Nc                s   t |tkrt|dkr|d d dkr|dd  dkr|| jkr| j| }|d d k	rx*|d D ]}| j|d  j||d  qbW ||d< |d d k	rx6|d D ]}| j|d  j|| qW n|g g| j|<  j| |||S )Nr   z<<z>>r   r   )r*   strr6   r   r   rB   r>   )r1   r,   r;   addZeir@   )r-   r    r%   r>   N  s     

z(MultiCallCreator.<locals>.MultiCall.bindc                s   t |tkrt|dkr|d d dkr|dd  dkr|| jkr| j| \}}|d k	rx"|D ]}| j|d  j|| q^W d | j| d<  j| ||S )Nr   z<<z>>r   r   r   )r*   r   r6   r   r   rB   )r1   r,   Zfuncidr;   tripletsr@   )r-   r    r%   rB   `  s     

z*MultiCallCreator.<locals>.MultiCall.unbindc                s   || j krd g g| j |< | j | \}}xT|D ]L}t|}|d krP j| || q,|d k	rn| j|d  j|| |j| q,W d S )Nr   )r   r   	event_addr   r>   r?   )r1   virtual	sequencesr;   r   rk   r@   )r-   r    r%   r   k  s    

z-MultiCallCreator.<locals>.MultiCall.event_addc                sv   || j krd S | j | \}}xT|D ]L}t|}|d krF j| || q"|d k	rd| j|d  j|| |j| q"W d S )Nr   )r   r   event_deleter   rB   rA   )r1   r   r   r;   r   rk   r@   )r-   r    r%   r   |  s    

z0MultiCallCreator.<locals>.MultiCall.event_deletec                sF   |d ks|| j kr j| |S ttt| j | d  j| | S d S )Nr   )r   
event_infotuplemapr   )r1   r   )r-   r    r%   r     s
    z.MultiCallCreator.<locals>.MultiCall.event_infoc             S   s   x~| j D ]t}| j | \}}|rx\|D ]T}y| j|d  j|| W q$ tjk
rv } zt|jd krf W Y d d }~X q$X q$W qW d S )Nr   r   )r   r   rB   rC   rD   rE   rF   )r1   r   r;   r   r@   rG   r    r    r%   rH     s    
z+MultiCallCreator.<locals>.MultiCall.__del__)NNN)N)N)
rI   rJ   rK   r2   r>   rB   r   r   r   rH   r    )r-   r    r%   	MultiCallB  s   	r   )_multicall_dict)r-   r   r    )r-   r%   MultiCallCreator:  s
    [r   c                s   t j| }|jd tt| j jddd  \}}|jd||d f  tt j|  j	  dgf fdd	}|d	 |d
 |d |d |d |d |d |d |d |d |d |d d S )NzTest MultiCall+r   z+%d+%d   r   c                sH    fdd}j d|d  | jd|d    |d  d7  < d S )Nc                s   t   d S )N)print)r7   )rk   r    r%   r=     s    z-_multi_call.<locals>.bindseq.<locals>.handlerz<<handler%d>>r   r   )r>   r   )rk   rT   r=   )text)rk   r%   bindseq  s    z_multi_call.<locals>.bindseqz<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>)
rC   ZTopleveltitler   intZgeometryr   r   ZTextZpack)parenttoprV   yr   r    )r   r%   _multi_call  s&    

 r   __main__)mainzidlelib.idle_test.test_mainmenuF)	verbosityexit)runr   r   r	       @      r   r   r   r   )r   r   r   r   r   r   r   r   r   )r   r   r   r   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )D__doc__resysrC   ZMC_KEYPRESSZMC_KEYRELEASEZMC_BUTTONPRESSZMC_BUTTONRELEASEZMC_ACTIVATEZMC_CIRCULATEZMC_COLORMAPZMC_CONFIGUREZMC_DEACTIVATEZ
MC_DESTROYZMC_ENTERZ	MC_EXPOSEZ
MC_FOCUSINZMC_FOCUSOUTZ
MC_GRAVITYZMC_LEAVEZMC_MAPZ	MC_MOTIONZMC_MOUSEWHEELZMC_PROPERTYZMC_REPARENTZMC_UNMAPZMC_VISIBILITYZMC_SHIFTZ
MC_CONTROLZMC_ALTZMC_METAZ	MC_OPTIONZ
MC_COMMANDplatformr!   Z_modifier_masksdictr5   r6   r   rE   r'   re   rj   r]   rg   ri   rO   r<   r:   r?   r^   r+   r   r   compiler   r   r   r   r   r   r   rI   Zunittestr   Zidlelib.idle_test.htestr   r    r    r    r%   <module>   s                         

-
`     

'g
