B
    Çä˜\.  ã               @   s,   d Z ddlZddlmZ G dd„ deƒZdS )z>String dispatch class to match regexps and dispatch commands.
é    N)ÚCommandChainDispatcherc               @   sL   e Zd ZdZdd„ Zddd„Zddd„Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚStrDispatcha  Dispatch (lookup) a set of strings / regexps for match.

    Example:

    >>> dis = StrDispatch()
    >>> dis.add_s('hei',34, priority = 4)
    >>> dis.add_s('hei',123, priority = 2)
    >>> dis.add_re('h.i', 686)
    >>> print(list(dis.flat_matches('hei')))
    [123, 34, 686]
    c             C   s   i | _ i | _d S )N)ÚstrsÚregexs)Úself© r   ú8lib/python3.7/site-packages/IPython/utils/strdispatch.pyÚ__init__   s    zStrDispatch.__init__r   c             C   s*   | j  |tƒ ¡}| ||¡ || j |< dS )z( Adds a target 'string' for dispatching N)r   Úgetr   Úadd)r   ÚsÚobjÚpriorityÚchainr   r   r   Úadd_s   s    zStrDispatch.add_sc             C   s*   | j  |tƒ ¡}| ||¡ || j |< dS )z& Adds a target regexp for dispatching N)r   r
   r   r   )r   Zregexr   r   r   r   r   r   Úadd_re#   s    zStrDispatch.add_rec             c   sF   || j kr| j | V  x*| j ¡ D ]\}}t ||¡r"|V  q"q"W dS )z2 Get a seq of Commandchain objects that match key N)r   r   ÚitemsÚreÚmatch)r   ÚkeyÚrr   r   r   r   Údispatch*   s    
zStrDispatch.dispatchc             C   s   d| j | jf S )Nz<Strdispatch %s, %s>)r   r   )r   r   r   r   Ú__repr__6   s    zStrDispatch.__repr__c             c   s0   || j krd S x| j | D ]}|d V  qW d S )Né   )r   )r   r   Úelr   r   r   Ú	s_matches9   s    
zStrDispatch.s_matchesc             c   s0   x*|   |¡D ]}x|D ]}|d V  qW qW dS )z- Yield all 'value' targets, without priority r   N)r   )r   r   Úvalr   r   r   r   Úflat_matches?   s    
zStrDispatch.flat_matchesN)r   )r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r   r   r   r   r   r   r   r   r   r   r      s   

r   )r!   r   ZIPython.core.hooksr   Úobjectr   r   r   r   r   Ú<module>   s   