U
    Z+d	                     @  s   d Z ddlmZ ddlmZmZ ddlmZmZ ddl	m
Z
 dddd	gZG d
d dZG dd dedZG dd deZG dd	 d	eZdS )z'
Clipboard for command line interface.
    )annotations)ABCMetaabstractmethod)CallableOptional)SelectionType	ClipboardClipboardDataDummyClipboardDynamicClipboardc                   @  s*   e Zd ZdZdejfddddddZd	S )
r	   z{
    Text on the clipboard.

    :param text: string
    :param type: :class:`~prompt_toolkit.selection.SelectionType`
     strr   None)texttypereturnc                 C  s   || _ || _d S N)r   r   )selfr   r    r   A/tmp/pip-unpacked-wheel-blk8czbf/prompt_toolkit/clipboard/base.py__init__   s    zClipboardData.__init__N)__name__
__module____qualname____doc__r   Z
CHARACTERSr   r   r   r   r   r	      s    c                   @  sT   e Zd ZdZedddddZdddd	d
ZddddZeddddZdS )r   z
    Abstract baseclass for clipboards.
    (An implementation can be in memory, it can share the X11 or Windows
    keyboard, or can be persistent.)
    r	   r   datar   c                 C  s   dS )ze
        Set data to the clipboard.

        :param data: :class:`~.ClipboardData` instance.
        Nr   r   r   r   r   r   set_data)   s    zClipboard.set_datar   r   r   c                 C  s   |  t| dS )z?
        Shortcut for setting plain text on clipboard.
        N)r   r	   r   r   r   r   r   set_text1   s    zClipboard.set_textr   c                 C  s   dS )z7
        For Emacs mode, rotate the kill ring.
        Nr   r   r   r   r   rotate7   s    zClipboard.rotatec                 C  s   dS )z(
        Return clipboard data.
        Nr   r#   r   r   r   get_data<   s    zClipboard.get_dataN)	r   r   r   r   r   r   r!   r$   r%   r   r   r   r   r   "   s   )	metaclassc                   @  sL   e Zd ZdZdddddZdddd	d
ZddddZddddZdS )r
   zB
    Clipboard implementation that doesn't remember anything.
    r	   r   r   c                 C  s   d S r   r   r   r   r   r   r   H   s    zDummyClipboard.set_datar   r   c                 C  s   d S r   r   r    r   r   r   r!   K   s    zDummyClipboard.set_textr"   c                 C  s   d S r   r   r#   r   r   r   r$   N   s    zDummyClipboard.rotatec                 C  s   t  S r   )r	   r#   r   r   r   r%   Q   s    zDummyClipboard.get_dataN)r   r   r   r   r   r!   r$   r%   r   r   r   r   r
   C   s
   c                   @  sj   e Zd ZdZdddddZddd	d
ZdddddZdddddZddddZddddZ	dS )r   z
    Clipboard class that can dynamically returns any Clipboard.

    :param get_clipboard: Callable that returns a :class:`.Clipboard` instance.
    zCallable[[], Clipboard | None]r   )get_clipboardr   c                 C  s
   || _ d S r   )r'   )r   r'   r   r   r   r   \   s    zDynamicClipboard.__init__r   r"   c                 C  s   |   pt S r   )r'   r
   r#   r   r   r   
_clipboard_   s    zDynamicClipboard._clipboardr	   r   c                 C  s   |   | d S r   )r(   r   r   r   r   r   r   b   s    zDynamicClipboard.set_datar   r   c                 C  s   |   | d S r   )r(   r!   r    r   r   r   r!   e   s    zDynamicClipboard.set_textc                 C  s   |     d S r   )r(   r$   r#   r   r   r   r$   h   s    zDynamicClipboard.rotatec                 C  s   |    S r   )r(   r%   r#   r   r   r   r%   k   s    zDynamicClipboard.get_dataN)
r   r   r   r   r   r(   r   r!   r$   r%   r   r   r   r   r   U   s   N)r   
__future__r   abcr   r   typingr   r   Zprompt_toolkit.selectionr   __all__r	   r   r
   r   r   r   r   r   <module>   s   !