a
    Jb                     @   s>   d Z ddlmZmZmZ G dd deZG dd dejZdS )zD A generic Emacs-style kill ring, as well as a Qt-specific version.
    )QtCore	QtWidgetsQtGuic                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )KillRingz& A generic Emacs-style kill ring.
    c                 C   s   |    d S )N)clearself r	   2lib/python3.9/site-packages/qtconsole/kill_ring.py__init__   s    zKillRing.__init__c                 C   s   d| _ g | _dS ) Clears the kill ring.
        N_index_ringr   r	   r	   r
   r      s    zKillRing.clearc                 C   s   | j | dS z, Adds some killed text to the ring.
        N)r   appendr   textr	   r	   r
   kill   s    zKillRing.killc                 C   s   t | j| _|  S )zr Yank back the most recently killed text.

        Returns
        -------
        A text string or None.
        )lenr   r   rotater   r	   r	   r
   yank    s    zKillRing.yankc                 C   s(   |  j d8  _ | j dkr$| j| j  S dS )z{ Rotate the kill ring, then yank back the new top.

        Returns
        -------
        A text string or None.
           r   Nr   r   r	   r	   r
   r   *   s    
zKillRing.rotateN)	__name__
__module____qualname____doc__r   r   r   r   r   r	   r	   r	   r
   r      s   
r   c                       sP   e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zdd Z	dd Z
  ZS )
QtKillRingz/ A kill ring attached to Q[Plain]TextEdit.
    c                    sL   t |tjtjfsJ t   t | _d| _d| _	|| _
|j| j dS )zD Create a kill ring attached to the specified Qt text edit.
        NF)
isinstancer   Z	QTextEditZQPlainTextEditsuperr   r   r   
_prev_yank_skip_cursor
_text_editZcursorPositionChangedZconnect_cursor_position_changed)r   Z	text_edit	__class__r	   r
   r   >   s    
zQtKillRing.__init__c                 C   s   | j   d| _dS )r   N)r   r   r!   r   r	   r	   r
   r   K   s    
zQtKillRing.clearc                 C   s   | j | dS r   )r   r   r   r	   r	   r
   r   Q   s    zQtKillRing.killc                 C   s"   |  }|r|  | | dS )z5 Kills the text selected by the give cursor.
        N)ZselectedTextZremoveSelectedTextr   )r   cursorr   r	   r	   r
   kill_cursorV   s    zQtKillRing.kill_cursorc                 C   s2   | j  }|r.d| _| j }|| || _dS )z2 Yank back the most recently killed text.
        TN)r   r   r"   r#   
textCursor
insertTextr!   r   r   r'   r	   r	   r
   r   ^   s    


zQtKillRing.yankc                 C   sV   | j rR| j }|rRd| _| j }|jtjj	tjj
t| j d || || _ dS )z; Rotate the kill ring, then yank back the new top.
        T)nN)r!   r   r   r"   r#   r)   ZmovePositionr   ZQTextCursorZLeftZ
KeepAnchorr   r*   r+   r	   r	   r
   r   h   s    



zQtKillRing.rotatec                 C   s   | j rd| _ nd | _d S )NF)r"   r!   r   r	   r	   r
   r$   |   s    z#QtKillRing._cursor_position_changed)r   r   r   r   r   r   r   r(   r   r   r$   __classcell__r	   r	   r%   r
   r   6   s   
r   N)	r   Zqtpyr   r   r   objectr   ZQObjectr   r	   r	   r	   r
   <module>   s   (