3
tY]'+                 @   s   d dl Z d dlmZ G dd deZG dd dZG dd deZG d	d
 d
eZG dd deZdd Ze	dkrd dl
mZ edddd d dlmZ ee dS )    N)	Delegatorc               @   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Z
dd Zd#Zdd Zd$ddZd%ddZdd Zdd Zd&ddZdd  Zd!d" ZdS )'UndoDelegatori  c             C   s   t j|  | j  d S )N)r   __init__
reset_undo)self r   lib/python3.6/idlelib/undo.pyr      s    
zUndoDelegator.__init__c             C   sj   | j d k	r(| jd | jd | jd tj| | |d k	rf| jd| j | jd| j | jd| j d S )Nz<<undo>>z<<redo>>z<<dump-undo-state>>)delegateZunbindr   setdelegateZbind
undo_event
redo_event
dump_event)r   r	   r   r   r   r
      s    



zUndoDelegator.setdelegatec             C   sv   ddl m } || jd | j  td| jdd td| jdd td| jdd td| j  || j| jd   d	S )
Nr   )pprintzpointer: )endzsaved:z
can_merge:zget_saved():break)r   undolistpointerprintsaved	can_merge	get_saved)r   eventr   r   r   r   r   (   s    zUndoDelegator.dump_eventc             C   s&   d| _ d| _g | _d| _| jd d S )N   r   )	was_savedr   r   	undoblock	set_saved)r   r   r   r   r   2   s
    zUndoDelegator.reset_undoc             C   s&   |r| j | _nd| _d| _| j  d S )Nr   Fr   )r   r   r   check_saved)r   flagr   r   r   r   9   s
    
zUndoDelegator.set_savedc             C   s   | j | jkS )N)r   r   )r   r   r   r   r   A   s    zUndoDelegator.get_savedNc             C   s
   || _ d S )N)saved_change_hook)r   hookr   r   r   set_saved_change_hookF   s    z#UndoDelegator.set_saved_change_hookr   c             C   s*   | j  }|| jkr&|| _| jr&| j  d S )N)r   r   r    )r   Zis_savedr   r   r   r   K   s
    
zUndoDelegator.check_savedc             C   s   | j t||| d S )N)addcmdInsertCommand)r   indexcharstagsr   r   r   insertR   s    zUndoDelegator.insertc             C   s   | j t|| d S )N)r#   DeleteCommand)r   index1index2r   r   r   deleteU   s    zUndoDelegator.deletec             C   s    | j dkrt | _ | j j  d S )Nr   )r   CommandSequence
bump_depth)r   r   r   r   undo_block_startc   s    
zUndoDelegator.undo_block_startc             C   sN   | j jddkrJ| j }d| _ t|dkrJt|dkr>|jd}| j|d d S )Nr   r   r   )r   r.   lengetcmdr#   )r   cmdr   r   r   undo_block_stoph   s    
zUndoDelegator.undo_block_stopTc             C   s   |r|j | j | jdkr*| jj| d S | jrX| jdkrX| j| jd  }|j|rXd S |g| j| jd < | j| jkr|d| _| jd | _t	| j| j
kr| jd= | jd | _| jdkr| jd | _d| _| j  d S )Nr   r   Tr   )dor	   r   appendr   r   r   merger   r0   max_undor   )r   r2   ZexecuteZlastcmdr   r   r   r#   t   s(    


zUndoDelegator.addcmdc             C   sP   | j dkr| j  dS | j| j d  }|j| j | j d | _ d| _| j  dS )Nr   r   r   F)r   bellr   undor	   r   r   )r   r   r2   r   r   r   r      s    
zUndoDelegator.undo_eventc             C   sR   | j t| jkr| j  dS | j| j  }|j| j | j d | _ d| _| j  dS )Nr   r   F)r   r0   r   r8   redor	   r   r   )r   r   r2   r   r   r   r      s    zUndoDelegator.redo_eventr   )N)N)T)__name__
__module____qualname__r7   r   r
   r   r   r   r   r    r"   r   r   r(   r,   r/   r3   r#   r   r   r   r   r   r   r      s$   



r   c               @   sR   e Zd ZdZdddZdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd ZdS )CommandNc             C   s,   i | _ i | _|| _|| _|| _|r(|| _d S )N)marks_beforemarks_afterr*   r+   r&   r'   )r   r*   r+   r&   r'   r   r   r   r      s    zCommand.__init__c             C   s>   | j j}| j| j| j| jf}| jd kr2|d d }|t| S )Nr   r   )	__class__r;   r*   r+   r&   r'   repr)r   str   r   r   __repr__   s
    
zCommand.__repr__c             C   s   d S )Nr   )r   textr   r   r   r4      s    z
Command.doc             C   s   d S )Nr   )r   rF   r   r   r   r:      s    zCommand.redoc             C   s   d S )Nr   )r   rF   r   r   r   r9      s    zCommand.undoc             C   s   dS )Nr   r   )r   r2   r   r   r   r6      s    zCommand.mergec             C   s8   i }x.|j  D ]"}|dkr|dkr|j|||< qW |S )Nr(   Zcurrent)Z
mark_namesr%   )r   rF   marksnamer   r   r   
save_marks   s
    zCommand.save_marksc             C   s&   x |j  D ]\}}|j|| q
W d S )N)itemsmark_set)r   rF   rG   rH   r%   r   r   r   	set_marks   s    zCommand.set_marks)N)r;   r<   r=   r'   r   rE   r4   r:   r9   r6   rI   rL   r   r   r   r   r>      s   
	r>   c               @   sN   e Zd ZdddZdd Zdd Zdd	 Zd
d Zej	ej
 d Zdd ZdS )r$   Nc             C   s   t j| |d || d S )N)r>   r   )r   r*   r&   r'   r   r   r   r      s    zInsertCommand.__init__c             C   sv   | j || _|j| j| _|j| jddr6|jd| _|j| j| j| j |jd| jt| jf | _	| j || _
d S )N>zend-1cz%s+%dc)rI   r?   r%   r*   comparer(   r&   r'   r0   r+   r@   )r   rF   r   r   r   r4      s    zInsertCommand.doc             C   s>   |j d| j |j| j| j| j | j|| j |jd d S )Nr(   )rK   r*   r(   r&   r'   rL   r@   see)r   rF   r   r   r   r:      s    zInsertCommand.redoc             C   s:   |j d| j |j| j| j | j|| j |jd d S )Nr(   )rK   r*   r,   r+   rL   r?   rO   )r   rF   r   r   r   r9      s    zInsertCommand.undoc             C   s   | j |j k	rdS | j|jkr dS | j|jkr0dS t|jdkrBdS | jrh| j| jd | j|jkrhdS |j| _| j|j | _dS )NFr   Tr   )rA   r+   r*   r'   r0   r&   classify)r   r2   r   r   r   r6      s    zInsertCommand.merge_c             C   s   || j krdS |dkrdS dS )Nalphanumeric
newlineZpunctuation)rR   )r   cr   r   r   rP      s
    
zInsertCommand.classify)N)r;   r<   r=   r   r4   r:   r9   r6   stringZascii_lettersZdigitsrR   rP   r   r   r   r   r$      s   
r$   c               @   s.   e Zd Zd
ddZdd Zdd Zdd	 ZdS )r)   Nc             C   s   t j| ||d d  d S )N)r>   r   )r   r*   r+   r   r   r   r     s    zDeleteCommand.__init__c             C   s   | j || _|j| j| _| jr0|j| j| _n|j| jd | _|j| jddr^|jd| _|j| j| j| _|j| j| j | j || _	d S )Nz +1crM   zend-1c)
rI   r?   r%   r*   r+   rN   getr&   r,   r@   )r   rF   r   r   r   r4     s    zDeleteCommand.doc             C   s:   |j d| j |j| j| j | j|| j |jd d S )Nr(   )rK   r*   r,   r+   rL   r@   rO   )r   rF   r   r   r   r:     s    zDeleteCommand.redoc             C   s:   |j d| j |j| j| j | j|| j |jd d S )Nr(   )rK   r*   r(   r&   rL   r?   rO   )r   rF   r   r   r   r9   $  s    zDeleteCommand.undo)N)r;   r<   r=   r   r4   r:   r9   r   r   r   r   r)     s   
r)   c               @   sN   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dddZ
dS )r-   c             C   s   g | _ d| _d S )Nr   )cmdsdepth)r   r   r   r   r   0  s    zCommandSequence.__init__c             C   sB   | j j}g }x| jD ]}|jd|f  qW |d dj| d S )Nz    %rz(
z,
z
))rA   r;   rX   r5   join)r   rC   Zstrsr2   r   r   r   rE   4  s
    zCommandSequence.__repr__c             C   s
   t | jS )N)r0   rX   )r   r   r   r   __len__;  s    zCommandSequence.__len__c             C   s   | j j| d S )N)rX   r5   )r   r2   r   r   r   r5   >  s    zCommandSequence.appendc             C   s
   | j | S )N)rX   )r   ir   r   r   r1   A  s    zCommandSequence.getcmdc             C   s   x| j D ]}|j| qW d S )N)rX   r:   )r   rF   r2   r   r   r   r:   D  s    zCommandSequence.redoc             C   s2   | j d d  }|j  x|D ]}|j| qW d S )N)rX   reverser9   )r   rF   rX   r2   r   r   r   r9   H  s    
zCommandSequence.undor   c             C   s   | j | | _ | j S )N)rY   )r   Zincrr   r   r   r.   N  s    zCommandSequence.bump_depthN)r   )r;   r<   r=   r   rE   r[   r5   r1   r:   r9   r.   r   r   r   r   r-   ,  s   r-   c                s  ddl m}m}m} ddlm} || }|jd tt| j	 j
ddd  \}}|j	d||d f  ||d	d
}|j  |j  ||}	t  |	j  ||d fddd}
|
jdd ||d fddd}|jdd ||d fddd}|jdd d S )Nr   )ToplevelTextButton)
PercolatorzTest UndoDelegator+r   z+%d+%d   
   )ZheightZUndoc                  s
    j d S )N)r   r   )dr   r   <lambda>b  s    z!_undo_delegator.<locals>.<lambda>)rF   Zcommandleft)ZsideZRedoc                  s
    j d S )N)r   r   )re   r   r   rf   d  s    ZDumpc                  s
    j d S )N)r   r   )re   r   r   rf   f  s    )Ztkinterr^   r_   r`   Zidlelib.percolatorra   titlemapintZgeometrysplitZpackZ	focus_setr   Zinsertfilter)parentr^   r_   r`   ra   ZundowinxyrF   pr9   r:   dumpr   )re   r   _undo_delegatorS  s$    
 
rq   __main__)mainzidlelib.idle_test.test_undo   F)	verbosityexit)run)rV   Zidlelib.delegatorr   r   r>   r$   r)   r-   rq   r;   Zunittestrs   Zidlelib.idle_test.htestrw   r   r   r   r   <module>   s    -9$'