B
    '˜t\
  ã               @   s–   d Z ddlmZ ddlmZmZ ddlmZ ddlZddlm	Z	 ddd	d
gZ
G dd„ deƒZG dd„ deeeƒƒZG dd	„ d	eƒZG dd
„ d
eƒZdS )z'
Clipboard for command line interface.
é    )Úunicode_literals)ÚABCMetaÚabstractmethod)Úwith_metaclassN)ÚSelectionTypeÚ	ClipboardÚClipboardDataÚDummyClipboardÚDynamicClipboardc               @   s    e Zd ZdZdejfdd„ZdS )r   z{
    Text on the clipboard.

    :param text: string
    :param type: :class:`~prompt_toolkit.selection.SelectionType`
    Ú c             C   s8   t |tjƒst‚|tjtjtjfks(t‚|| _|| _	d S )N)
Ú
isinstanceÚsixÚstring_typesÚAssertionErrorr   Ú
CHARACTERSZLINESZBLOCKÚtextÚtype)Úselfr   r   © r   ú<lib/python3.7/site-packages/prompt_toolkit/clipboard/base.pyÚ__init__   s    zClipboardData.__init__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r      s   c               @   s8   e Zd ZdZedd„ ƒZdd„ Zdd„ Ze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.)
    c             C   s   dS )ze
        Set data to the clipboard.

        :param data: :class:`~.ClipboardData` instance.
        Nr   )r   Údatar   r   r   Úset_data(   s    zClipboard.set_datac             C   s"   t |tjƒst‚|  t|ƒ¡ dS )z?
        Shortcut for setting plain text on clipboard.
        N)r   r   r   r   r   r   )r   r   r   r   r   Úset_text0   s    zClipboard.set_textc             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
   c               @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )r	   zB
    Clipboard implementation that doesn't remember anything.
    c             C   s   d S )Nr   )r   r   r   r   r   r   G   s    zDummyClipboard.set_datac             C   s   d S )Nr   )r   r   r   r   r   r   J   s    zDummyClipboard.set_textc             C   s   d S )Nr   )r   r   r   r   r   M   s    zDummyClipboard.rotatec             C   s   t ƒ S )N)r   )r   r   r   r   r   P   s    zDummyClipboard.get_dataN)r   r   r   r   r   r   r   r   r   r   r   r   r	   C   s
   c               @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Z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.
    c             C   s   t |ƒst‚|| _d S )N)Úcallabler   Úget_clipboard)r   r!   r   r   r   r   Z   s    zDynamicClipboard.__init__c             C   s    |   ¡ ptƒ }t|tƒst‚|S )N)r!   r	   r   r   r   )r   Z	clipboardr   r   r   Ú
_clipboard^   s    zDynamicClipboard._clipboardc             C   s   |   ¡  |¡ d S )N)r"   r   )r   r   r   r   r   r   c   s    zDynamicClipboard.set_datac             C   s   |   ¡  |¡ d S )N)r"   r   )r   r   r   r   r   r   f   s    zDynamicClipboard.set_textc             C   s   |   ¡  ¡  d S )N)r"   r   )r   r   r   r   r   i   s    zDynamicClipboard.rotatec             C   s   |   ¡  ¡ S )N)r"   r   )r   r   r   r   r   l   s    zDynamicClipboard.get_dataN)
r   r   r   r   r   r"   r   r   r   r   r   r   r   r   r
   T   s   )r   Z
__future__r   Úabcr   r   r   r   Zprompt_toolkit.selectionr   Ú__all__Úobjectr   r   r	   r
   r   r   r   r   Ú<module>   s   !