
    d#+                        d dl Z d dlmZ  G d de          Z G d d          Z G d de          Z G d	 d
e          Z G d de          Zd Ze	dk    r'd dl
mZ  eddd           d dlmZ  ee           dS dS )    N)	Delegatorc                   z    e Zd ZdZd Zd Zd Zd Zd Zd Z	dZ
d	 Zd
Zd ZddZddZd Zd ZddZd Zd ZdS )UndoDelegatori  c                 V    t          j        |            |                                  d S N)r   __init__
reset_undoselfs      /croot/python-split_1694437901252/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_plac/lib/python3.11/idlelib/undo.pyr   zUndoDelegator.__init__   s)    4       c                 f   | j         ?|                     d           |                     d           |                     d           t          j        | |           |S|                     d| j                   |                     d| j                   |                     d| j                   d S d S )Nz<<undo>>z<<redo>>z<<dump-undo-state>>)delegateunbindr   setdelegatebind
undo_event
redo_event
dump_event)r   r   s     r   r   zUndoDelegator.setdelegate   s    =$KK
###KK
###KK-...dH---IIj$/222IIj$/222II+T_=====  r   c                 T   ddl m }  || j        d | j                            t          d| j        d           t          d| j        d           t          d| j        d           t          d|                                             || 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   s      r   r   zUndoDelegator.dump_event(   s    !!!!!!t}]dl]+,,,j$,C0000h
,,,,lDN4444ndnn..///t}T\]]+,,,wr   c                 h    d| _         d| _        g | _        d| _        |                     d           d S Nr      )	was_savedr   r   	undoblock	set_savedr
   s    r   r	   zUndoDelegator.reset_undo2   s6    qr   c                 h    |r| j         | _        nd| _        d| _        |                                  d S )Nr$   F)r   r   r   check_saved)r   flags     r   r(   zUndoDelegator.set_saved9   s;     	DJJDJr   c                 "    | j         | j        k    S r   )r   r   r
   s    r   r    zUndoDelegator.get_savedA   s    zT\))r   Nc                     || _         d S r   )saved_change_hook)r   hooks     r   set_saved_change_hookz#UndoDelegator.set_saved_change_hookF   s    !%r   r$   c                     |                                  }|| j        k    r$|| _        | j        r|                                  d S d S d S r   )r    r&   r.   )r   is_saveds     r   r*   zUndoDelegator.check_savedK   sZ    >>##t~%%%DN% )&&((((( &%) )r   c                 N    |                      t          |||                     d S r   )addcmdInsertCommand)r   indexcharstagss       r   insertzUndoDelegator.insertR   s&    M%5566666r   c                 L    |                      t          ||                     d S r   )r4   DeleteCommandr   index1index2s      r   deletezUndoDelegator.deleteU   s$    M&&1122222r   c                 t    | j         dk    rt                      | _         | j                                          d S Nr   )r'   CommandSequence
bump_depthr
   s    r   undo_block_startzUndoDelegator.undo_block_startc   s6    >Q,..DN!!#####r   c                    | j                             d          dk    ra| j         }d| _         t          |          dk    rBt          |          dk    r|                    d          }|                     |d           d S d S d S r#   )r'   rC   lengetcmdr4   r   cmds     r   undo_block_stopzUndoDelegator.undo_block_stoph   s    >$$R((A--.CDN3xx!||s88q==**Q--C C##### .- |r   Tc                 J   |r|                     | j                   | j        dk    r| j                            |           d S | j        r7| j        dk    r,| j        | j        dz
           }|                    |          rd S |g| j        | j        d <   | j        | j        k    rd| _        | j        dz   | _        t          | j                  | j
        k    r1| j        d= | j        dz
  | _        | j        dk    r| j        dz
  | _        d| _        |                                  d S )Nr   r%   r$   T)dor   r'   appendr   r   r   merger   rF   max_undor*   )r   rI   executelastcmds       r   r4   zUndoDelegator.addcmdt   s%    	"FF4=!!!>QN!!#&&&F> 	dlQ..mDLN3G}}S!! (+udlmm$:$$DJ|a't}--a <!+DLzQ!Z!^
r   c                     | j         dk    r|                                  dS | j        | j         dz
           }|                    | j                   | j         dz
  | _         d| _        |                                  dS )Nr   r   r%   F)r   bellr   undor   r   r*   r   r!   rI   s      r   r   zUndoDelegator.undo_event   st    <1IIKKK7mDL1,-|a'wr   c                    | j         t          | j                  k    r|                                  dS | j        | j                  }|                    | j                   | j         dz   | _         d| _        |                                  dS )Nr   r%   F)r   rF   r   rS   redor   r   r*   rU   s      r   r   zUndoDelegator.redo_event   sy    <3t}----IIKKK7mDL)|a'wr   r   )T)__name__
__module____qualname__rO   r   r   r   r	   r(   r    r.   r0   r&   r*   r9   r?   rD   rJ   r4   r   r    r   r   r   r      s       H  	> 	> 	>      * * * & & & I) ) )7 7 7 73 3 3 3$ $ $

$ 
$ 
$   .	 	 		 	 	 	 	r   r   c                   D    e Zd ZdZd
dZd Zd Zd Zd Zd Z	d Z
d	 ZdS )CommandNc                 b    i | _         i | _        || _        || _        || _        |r	|| _        d S d S r   )marks_beforemarks_afterr=   r>   r7   r8   )r   r=   r>   r7   r8   s        r   r   zCommand.__init__   sD    
 	DIII	 	r   c                     | j         j        }| j        | j        | j        | j        f}| j        
|d d         }|t          |          z   S )Nr$   )	__class__rX   r=   r>   r7   r8   repr)r   sts      r   __repr__zCommand.__repr__   sG    N#[$+tz49=9#2#A477{r   c                     d S r   r[   r   texts     r   rL   z
Command.do       r   c                     d S r   r[   rh   s     r   rW   zCommand.redo   rj   r   c                     d S r   r[   rh   s     r   rT   zCommand.undo   rj   r   c                     dS rA   r[   rH   s     r   rN   zCommand.merge   s    qr   c                     i }|                                 D ]&}|dk    r|dk    r|                    |          ||<   '|S )Nr9   current)
mark_namesr6   )r   ri   marksnames       r   
save_markszCommand.save_marks   sP    OO%% 	/ 	/DxDI$5$5"jj..dr   c                 f    |                                 D ]\  }}|                    ||           d S r   )itemsmark_set)r   ri   rq   rr   r6   s        r   	set_markszCommand.set_marks   s>     ;;== 	' 	'KD%MM$&&&&	' 	'r   r   )rX   rY   rZ   r8   r   rf   rL   rW   rT   rN   rs   rw   r[   r   r   r]   r]      s         D               ' ' ' ' 'r   r]   c                   X    e Zd Zd	dZd Zd Zd Zd Zej	        ej
        z   dz   Zd ZdS )
r5   Nc                 B    t                               | |d ||           d S r   r]   r   )r   r=   r7   r8   s       r   r   zInsertCommand.__init__   s$    vtUD99999r   c                    |                      |          | _        |                    | j                  | _        |                    | j        dd          r|                    d          | _        |                    | j        | j        | j                   |                    d| j        t          | j                  fz            | _	        |                      |          | _
        d S )N>end-1cz%s+%dc)rs   r_   r6   r=   comparer9   r7   r8   rF   r>   r`   rh   s     r   rL   zInsertCommand.do   s     OOD11jj--<<S(33 	/**X..DKDKTY777jjT[#dj//,J!JKK??400r   c                     |                     d| j                   |                    | j        | j        | j                   |                     || j                   |                    d           d S Nr9   )rv   r=   r9   r7   r8   rw   r`   seerh   s     r   rW   zInsertCommand.redo   sc    h,,,DKTY777tT-...r   c                     |                     d| j                   |                    | j        | j                   |                     || j                   |                    d           d S r   )rv   r=   r?   r>   rw   r_   r   rh   s     r   rT   zInsertCommand.undo   s_    h,,,DK---tT.///r   c                 l   | j         |j         urdS | j        |j        k    rdS | j        |j        k    rdS t	          |j                  dk    rdS | j        r>|                     | j        d                   |                     |j                  k    rdS |j        | _        | j        |j        z   | _        dS )NFr%   r$   T)rb   r>   r=   r8   rF   r7   classifyrH   s     r   rN   zInsertCommand.merge   s    >..5;#*$$59  5sy>>Q5: 	==B((DMM#),D,DDD5jZ#)+
tr   _c                 ,    || j         v rdS |dk    rdS dS )Nalphanumeric
newlinepunctuation)r   )r   cs     r   r   zInsertCommand.classify   s(    !!!!>999}r   r   )rX   rY   rZ   r   rL   rW   rT   rN   stringascii_lettersdigitsr   r   r[   r   r   r5   r5      s        : : : :1 1 1        '&-7#=L    r   r5   c                   (    e Zd ZddZd Zd Zd ZdS )r;   Nc                 B    t                               | ||d d            d S r   rz   r<   s      r   r   zDeleteCommand.__init__  s$    vvtT:::::r   c                 4   |                      |          | _        |                    | j                  | _        | j        r |                    | j                  | _        n"|                    | j        dz             | _        |                    | j        dd          r|                    d          | _        |                    | j        | j                  | _        |                    | j        | j                   |                      |          | _	        d S )Nz +1cr|   r}   )
rs   r_   r6   r=   r>   r~   getr7   r?   r`   rh   s     r   rL   zDeleteCommand.do  s     OOD11jj--; 	;**T[11DKK**T[6%9::DK<<S(33 	/**X..DKXXdk4;77
DK---??400r   c                     |                     d| j                   |                    | j        | j                   |                     || j                   |                    d           d S r   )rv   r=   r?   r>   rw   r`   r   rh   s     r   rW   zDeleteCommand.redo  s_    h,,,DK---tT-...r   c                     |                     d| j                   |                    | j        | j                   |                     || j                   |                    d           d S r   )rv   r=   r9   r7   rw   r_   r   rh   s     r   rT   zDeleteCommand.undo$  s_    h,,,DK,,,tT.///r   r   )rX   rY   rZ   r   rL   rW   rT   r[   r   r   r;   r;     sU        ; ; ; ;1 1 1      r   r;   c                   @    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dd	Z
d
S )rB   c                 "    g | _         d| _        d S rA   )cmdsdepthr
   s    r   r   zCommandSequence.__init__0  s    	


r   c                     | j         j        }g }| j        D ]}|                    d|           |dz   d                    |          z   dz   S )Nz    z(
z,
z
))rb   rX   r   rM   join)r   rd   strsrI   s       r   rf   zCommandSequence.__repr__4  s]    N#9 	( 	(CKKs''''5y5::d+++e33r   c                 *    t          | j                  S r   )rF   r   r
   s    r   __len__zCommandSequence.__len__;  s    49~~r   c                 :    | j                             |           d S r   )r   rM   rH   s     r   rM   zCommandSequence.append>  s    	r   c                     | j         |         S r   )r   )r   is     r   rG   zCommandSequence.getcmdA  s    y|r   c                 D    | j         D ]}|                    |           d S r   )r   rW   )r   ri   rI   s      r   rW   zCommandSequence.redoD  s.    9 	 	CHHTNNNN	 	r   c                     | j         d d          }|                                 |D ]}|                    |           d S r   )r   reverserT   )r   ri   r   rI   s       r   rT   zCommandSequence.undoH  sH    y| 	 	CHHTNNNN	 	r   r%   c                 .    | j         |z   | _         | j         S r   )r   )r   incrs     r   rC   zCommandSequence.bump_depthN  s    Z$&
zr   N)r%   )rX   rY   rZ   r   rf   r   rM   rG   rW   rT   rC   r[   r   r   rB   rB   ,  s          4 4 4               r   rB   c                    ddl m}m}m} ddlm}  ||           }|                    d           t          t          | 	                                
                    d          dd                    \  }}|	                    d||dz   fz              ||d	
          }|                                 |                                  ||          }	t                      |	                                ||dfd          }
|
                    d            ||dfd          }|                    d            ||dfd          }|                    d           d S )Nr   )ToplevelTextButton)
PercolatorzTest UndoDelegator+r%   z+%d+%d   
   )heightUndoc                  .                          d           S r   )r   ds   r   <lambda>z!_undo_delegator.<locals>.<lambda>b      q||D7I7I r   )ri   commandleft)sideRedoc                  .                          d           S r   )r   r   s   r   r   z!_undo_delegator.<locals>.<lambda>d  r   r   Dumpc                  .                          d           S r   )r   r   s   r   r   z!_undo_delegator.<locals>.<lambda>f  r   r   )tkinterr   r   r   idlelib.percolatorr   titlemapintgeometrysplitpack	focus_setr   insertfilter)parentr   r   r   r   undowinxyri   prT   rW   dumpr   s                @r   _undo_delegatorr   S  s   ..........------hvGMM&'''sFOO%%++C00455DAqXAG,---4###DIIKKKNN
4AANN16'0I0I0I0IJJJDII6I6'0I0I0I0IJJJDII6I6'0I0I0I0IJJJDII6Ir   __main__)mainzidlelib.idle_test.test_undo   F)	verbosityexit)run)r   idlelib.delegatorr   r   r]   r5   r;   rB   r   rX   unittestr   idlelib.idle_test.htestr   r[   r   r   <module>r      ss    ' ' ' ' ' '$J J J J JI J J JZ*' *' *' *' *' *' *' *'Z6 6 6 6 6G 6 6 6r         G      H$ $ $ $ $g $ $ $N  , zD	&!%@@@@++++++C r   