HEX
Server: LiteSpeed
System: Linux spg20.cloudpowerdns.com 5.14.0-611.35.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Feb 25 03:46:09 EST 2026 x86_64
User: carrerup (3153)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: //opt/bitninja-python-dojo/embedded/lib/python3.9/idlelib/__pycache__/multicall.cpython-39.pyc
a

�;�i�H�@sdZddlZddlZddlZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZd
ZdZdZdZ ej!dkr�dZ"eeee fZ#ndZ"eeeefZ#e$dd �e%e&e"��D��Z'd!Z(Gd"d#�d#�Z)e%de&e"�>�Z*d$d �e*D�Z+d%d&�Z,e,e*�Z-gZ.e*D]BZ/dZ0e%e&e"��D] Z1de1>e/@�r2e0e#e1OZ0�q2e.�2e0��qGd'd(�d(�Z3d)Z4e3fde)fe&e4�dZ5e$d*d �e%e&e4��D��Z6e�7d+�Z8e�7d,�Z9d-d.�Z:d/d0�Z;iZ<d1d2�Z=d3d4�Z>e?d5k�rdd6l@mAZAeAd7dd8d9�dd:lBmCZCeCe>�dS);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)�ZShift�ZControl)ZOption)ZCommand)r)ZAltr)ZMeta�McCs"g|]}t|D]}||f�qqS�)�
_modifiers��.0Znumber�namerr�E/opt/bitninja-python-dojo/embedded/lib/python3.9/idlelib/multicall.py�
<listcomp>7s�r%zapplication has been destroyedc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�
_SimpleBindercCs8||_dt|dd|_||_||_g|_d|_dS)N�<r�>)�type�_types�sequence�widget�
widgetinst�bindedfuncs�	handlerid)�selfr)r,r-rrr$�__init__Jsz_SimpleBinder.__init__cCs>|js.|j|jfdd�}|j�|j|j|�|_|j�|�dS)NcSsT||_i}tt|�ddd�D]0}||}||vrd||<||�}|r|SqdS)Nr���T)�mc_type�range�len)�event�lr3�	wascalled�i�func�rrrr$�handlerTsz#_SimpleBinder.bind.<locals>.handler)r/r.r)r,�bindr-r+�append)r0�tripletr:r<rrr$r=Rs

�z_SimpleBinder.bindcCs2|j�|�|js.|j�|j|j|j�d|_dS�N)r.�remover,�unbindr-r+r/)r0r?r:rrr$rBbsz_SimpleBinder.unbindc
Cs\|jrXz|j�|j|j|j�Wn6tjyV}zt|jdvrB�WYd}~n
d}~00dS�Nr)	r/r,rBr-r+�tkinter�TclError�APPLICATION_GONE�args)r0�errr$�__del__hs�z_SimpleBinder.__del__N)�__name__�
__module__�__qualname__r1r=rBrIrrrr$r&Isr&cs(g|] �d��fdd�tt�D���qS)�c3s*|]"\}}d|>�@r|ddVqdS)rr�-Nr)r"r9�m��srr$�	<genexpr>ws�z<listcomp>.<genexpr>)�join�	enumerater )r"rrPr$r%ws��csLdd�}g}|D]6�tt�fdd�|D���}|j|dd�|�|�q|S)z�For each item of states return a list containing all combinations of
    that item with individual bits reset, sorted by the number of set bits.
    cSs$d}|r t|d�\}}||7}q|S)znumber of bits set in n base 2rr)�divmod)�n�nb�remrrr$�nbits�s

zexpand_substates.<locals>.nbitsc3s|]}�|@VqdSr@r)r"�x��staterr$rR��z#expand_substates.<locals>.<genexpr>T)�key�reverse)�list�set�sortr>)ZstatesrYZ	statelistZ	substatesrr[r$�expand_substates|srcc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�_ComplexBindercCs||||j|jfdd�}|S)NcSs�dg|dd�<||_||_i}d}|D]R}tt|�ddd�D]0}	||	}
|
|vr>d||
<||	|�}|r>qpq>|r&qzq&g|dd�<|D]
}|�q�g|dd�<|r�|SdS)NTrr2)r3�mc_stater4r5)r6�listsr3re�ishandlerrunning�doafterhandlerr8r;r7r9r:�frrr$r<�s*z0_ComplexBinder.__create_handler.<locals>.handler)rgrh)r0rfr3rer<rrr$Z__create_handler�s�
z_ComplexBinder.__create_handlerc	s�|�_t|d�_|�_|�_ddd�tD�i�_g�_g�_g�_	tD]`}�fdd�t
|D�}��||t|�}dt
|�jd}�j�|�j��j||�f�qJdS)NrcSsg|]}g�qSrr�r"rQrrr$r%�r]z+_ComplexBinder.__init__.<locals>.<listcomp>csg|]}�jd|�qSr@)r.�r"r9�r0rr$r%�r]r'r()r)r*�typenamer,r-�_statesr.�
handleridsrgrh�_state_subsets�_ComplexBinder__create_handler�_state_codes�_state_namesr>r=)r0r)r,r-rQrfr<�seqrrlr$r1�s�z_ComplexBinder.__init__c	s��d�jvr�dd�tD��j�d<tD]j���fdd��ddfD�}��|�jt��}dt��j�df}�j�|�j	�
�j||�f�q*���fdd�}�js�|�n�j
�|�dS)NrcSsg|]}g�qSrrrjrrr$r%�r]z'_ComplexBinder.bind.<locals>.<listcomp>cs(g|] }t�D]}�j||�qqSr)rpr.)r"�detailr9)rQr0rr$r%�s�z	<%s%s-%s>cs�j�d�d���S�Nrr)r.r>r�r:r0r?rr$�<lambda>�r]z%_ComplexBinder.bind.<locals>.<lambda>)r.rnrqr)rrrsrmror>r,r=r-rgrh)r0r?r:rfr<rt�doitr)r:rQr0r?r$r=�s"
�
��
z_ComplexBinder.bindcs.���fdd�}�js|�n�j�|�dS)Ncs�j�d�d���Srv)r.rArrwrr$rx�r]z'_ComplexBinder.unbind.<locals>.<lambda>)rgrhr>)r0r?r:ryrrwr$rB�sz_ComplexBinder.unbindcCsb|jD]V\}}z|j�|j||�WqtjyZ}zt|jdvrF�WYd}~qd}~00qdSrC)ror,rBr-rDrErFrG)r0rt�idrHrrr$rI�sz_ComplexBinder.__del__N)rJrKrLrqr1r=rBrIrrrr$rd�s
rd))�KeyPressZKey)�
KeyRelease)ZButtonPressZButton)Z
ButtonRelease)ZActivate)Z	Circulate)ZColormap)Z	Configure)Z
Deactivate)ZDestroy)ZEnter)ZExpose)ZFocusIn)ZFocusOut)ZGravity)ZLeave)ZMap)ZMotion)Z
MouseWheel)ZProperty)ZReparent)ZUnmap)Z
VisibilitycCs"g|]}t|D]}||f�qqSr)r*r!rrr$r%s�z^\w+$z^[1-5]$cCs|r|ddks|ddkr dS|dd��d�}d}|rb|dtvrb|dt|d>O}|d=q6|r�|dtvr�t|d}|d=ndSt|tur�|s�|r�dSd}nN|dd	�d
D�vr�t}nt}|s�d}n(t|�dkr�|�|d�r�|d}ndS|||fS)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.
    rr'r2r(NrrNcSsg|]}t|�qSr)�_type_namesrjrrr$r%$r]z#_parse_sequence.<locals>.<listcomp>)r{r|)	�split�_modifier_namesr}�_binder_classesr&�
_keysym_re�
_button_rer5�match)r+�words�	modifiersr)ruZtype_rerrr$�_parse_sequences0
r�cCs`|dr8dt|dt|ddd|ddSdt|dt|dddSdS)Nrr'rrrNr()rsr*)r?rrr$�_triplet_to_sequence2s"��r�cs0�tvrt�SG�fdd�d��}|t�<|S)z�Return a MultiCall class which inherits its methods from the
    given widget class (for example, Tkinter.Text). This is used
    instead of a templating mechanism.
    csreZdZe�ej�sJ��fdd�Zd�fdd�	Zd�fdd�	Z�fdd	�Z	�fd
d�Z
d�fdd
�	Zdd�ZdS)z#MultiCallCreator.<locals>.MultiCallcs@�j�g|�Ri|��i�_��fdd�ttt��D��_dS)Ncsg|]}t||����qSr)r�rk)r0r,rr$r%Ks�z@MultiCallCreator.<locals>.MultiCall.__init__.<locals>.<listcomp>)r1�_MultiCall__eventinfor4r5r*�_MultiCall__binders)r0rG�kwargs�r,rlr$r1Es

�z,MultiCallCreator.<locals>.MultiCall.__init__Ncs�t|�tur�t|�dkr�|dd�dkr�|dd�dkr�||jvr�|j|}|ddur�|dD]}|j|d�||d�q`||d<|ddur�|dD]}|j|d�||�q�n|gg|j|<��||||�S)Nr�<<����>>rr)r)�strr5r�r�rBr=)r0r+r:�add�eir?r�rr$r=Ns ��

z(MultiCallCreator.<locals>.MultiCall.bindcs�t|�tur�t|�dkr�|dd�dkr�|dd�dkr�||jvr�|j|\}}|dur�|D]}|j|d�||�q\d|j|d<��|||�S)Nrr�r�r�rr)r)r�r5r�r�rB)r0r+Zfuncidr:�tripletsr?r�rr$rB`s���z*MultiCallCreator.<locals>.MultiCall.unbindcs|||jvrdgg|j|<|j|\}}|D]L}t|�}|durN��|||�q*|durl|j|d�||�|�|�q*dS�Nr)r�r��	event_addr�r=r>�r0�virtual�	sequencesr:r�rtr?r�rr$r�ks
z-MultiCallCreator.<locals>.MultiCall.event_addcsr||jvrdS|j|\}}|D]L}t|�}|durD��|||�q |durb|j|d�||�|�|�q dSr�)r�r��event_deleter�rBrAr�r�rr$r�|s
z0MultiCallCreator.<locals>.MultiCall.event_deletecsF|dus||jvr��||�Sttt|j|d����||�SdSr�)r��
event_info�tuple�mapr�)r0r�r�rr$r��s�
�z.MultiCallCreator.<locals>.MultiCall.event_infocSs~|jD]r}|j|\}}|r|D]V}z|j|d�||�Wq tjyt}zt|jdvr`�WYd}~q d}~00q qdS)Nrr)r�r�rBrDrErFrG)r0r�r:r�r?rHrrr$rI�s
z+MultiCallCreator.<locals>.MultiCall.__del__)NNN)N)N)
rJrKrL�
issubclassrDZMiscr1r=rBr�r�r�rIrr�rr$�	MultiCallBs	r�)�_multicall_dict)r,r�rr�r$�MultiCallCreator:s
[r�cs�t�|�}|�d�tt|���d�dd��\}}|�d||df�ttj�|����	�dgf�fdd�	}|d	�|d
�|d�|d�|d
�|d�|d�|d�|d�|d�|d�|d�dS)NzTest MultiCall�+rz+%d+%d�rcsH�fdd�}��d|d|���d|d��|dd7<dS)Ncst��dSr@)�print)r6�rtrr$r<�sz-_multi_call.<locals>.bindseq.<locals>.handlerz
<<handler%d>>rr)r=r�)rtrVr<��textr�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>)
rDZToplevel�titler��intZgeometryr~r��Text�pack)�parent�toprZ�yr�rr�r$�_multi_call�s&

 r��__main__)�mainzidlelib.idle_test.test_mainmenuF)�	verbosity�exit)�run)D�__doc__�re�sysrDZMC_KEYPRESSZ
MC_KEYRELEASEZMC_BUTTONPRESSZMC_BUTTONRELEASEZMC_ACTIVATEZMC_CIRCULATEZMC_COLORMAPZMC_CONFIGUREZ
MC_DEACTIVATEZ
MC_DESTROYZMC_ENTERZ	MC_EXPOSEZ
MC_FOCUSINZMC_FOCUSOUTZ
MC_GRAVITYZMC_LEAVEZMC_MAPZ	MC_MOTIONZ
MC_MOUSEWHEELZMC_PROPERTYZMC_REPARENTZMC_UNMAPZ
MC_VISIBILITYZMC_SHIFTZ
MC_CONTROLZMC_ALTZMC_METAZ	MC_OPTIONZ
MC_COMMAND�platformr Z_modifier_masks�dictr4r5rrFr&rnrsrcrprrrQr;r9r>rdr*r�r}�compiler�r�r�r�r�r�r�rJZunittestr�Zidlelib.idle_test.htestr�rrrr$�<module>sf

�
-�_

�

'g