
    "e+                         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       yy)    N)	Delegatorc                   x    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y)UndoDelegatori  c                 N    t        j                  |        | j                          y N)r   __init__
reset_undoselfs    lib/python3.12/idlelib/undo.pyr   zUndoDelegator.__init__   s    4     c                 \   | j                   3| j                  d       | j                  d       | j                  d       t        j                  | |       |U| j	                  d| j
                         | j	                  d| j                         | j	                  d| j                         y y )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IIj$//2II+T__=  r   c                 P   ddl m }  || j                  d | j                          t        d| j                  d       t        d| j                  d       t        d| j
                  d       t        d| j                                 || j                  | j                  d         y	)
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(   sw    !t}}]dll+,j$,,C0h

,lDNN4ndnn./t}}T\\]+,r   c                 ^    d| _         d| _        g | _        d| _        | j	                  d       y Nr      )	was_savedr   r   	undoblock	set_savedr
   s    r   r	   zUndoDelegator.reset_undo2   s*    qr   c                 h    |r| j                   | _        nd| _        d| _        | j                          y )Nr$   F)r   r   r   check_saved)r   flags     r   r(   zUndoDelegator.set_saved9   s*    DJDJr   c                 4    | j                   | j                  k(  S r   )r   r   r
   s    r   r    zUndoDelegator.get_savedA   s    zzT\\))r   Nc                     || _         y r   )saved_change_hook)r   hooks     r   set_saved_change_hookz#UndoDelegator.set_saved_change_hookF   s
    !%r   r$   c                     | j                         }|| j                  k7  r%|| _        | j                  r| j                          y y y r   )r    r&   r.   )r   is_saveds     r   r*   zUndoDelegator.check_savedK   s@    >>#t~~%%DN%%&&( & &r   c                 <    | j                  t        |||             y r   )addcmdInsertCommand)r   indexcharstagss       r   insertzUndoDelegator.insertR   s    M%56r   c                 :    | j                  t        ||             y r   )r4   DeleteCommandr   index1index2s      r   deletezUndoDelegator.deleteU   s    M&&12r   c                 t    | j                   dk(  rt               | _         | j                   j                          y Nr   )r'   CommandSequence
bump_depthr
   s    r   undo_block_startzUndoDelegator.undo_block_startc   s(    >>Q,.DN!!#r   c                     | j                   j                  d      dk(  rT| j                   }d| _         t        |      dkD  r2t        |      dk(  r|j                  d      }| j	                  |d       y y y r#   )r'   rC   lengetcmdr4   r   cmds     r   undo_block_stopzUndoDelegator.undo_block_stoph   sf    >>$$R(A-..CDN3x!|s8q=**Q-C C#  .r   c                    |r|j                  | j                         | j                  dk7  r| j                  j                  |       y | j                  r=| j
                  dkD  r.| j                  | j
                  dz
     }|j                  |      ry |g| j                  | j
                  d  | j                  | j
                  kD  rd| _        | j
                  dz   | _        t        | j                        | j                  kD  rD| j                  d= | j
                  dz
  | _        | j                  dk\  r| j                  dz
  | _        d| _        | j                          y )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NN!!#&>>dllQ.mmDLLN3G}}S!(+udllm$::$DJ||a't}}-a <<!+DLzzQ!ZZ!^
r   c                    | j                   dk(  r| j                          y| j                  | j                   dz
     }|j                  | j                         | j                   dz
  | _         d| _        | j                          y)Nr   r   r%   F)r   bellr   undor   r   r*   r   r!   rI   s      r   r   zUndoDelegator.undo_event   sg    <<1IIKmmDLL1,-||a'r   c                 (   | j                   t        | j                        k\  r| j                          y| j                  | j                      }|j	                  | j
                         | j                   dz   | _         d| _        | j                          y)Nr   r%   F)r   rF   r   rS   redor   r   r*   rU   s      r   r   zUndoDelegator.redo_event   sk    <<3t}}--IIKmmDLL)||a'r   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      sa    H	>* & I)73$

$.		r   r   c                   B    e Zd ZdZd
dZd Zd Zd Zd Zd Z	d Z
d	 Zy)CommandNc                 ^    i | _         i | _        || _        || _        || _        |r|| _        y y r   )marks_beforemarks_afterr=   r>   r7   r8   )r   r=   r>   r7   r8   s        r   r   zCommand.__init__   s6    
DI 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__   sR    NN##[[$++tzz499=99#2A47{r   c                      y r   r[   r   texts     r   rL   z
Command.do       r   c                      y r   r[   rh   s     r   rW   zCommand.redo   rj   r   c                      y r   r[   rh   s     r   rT   zCommand.undo   rj   r   c                      yrA   r[   rH   s     r   rN   zCommand.merge   s    r   c                 t    i }|j                         D ]"  }|dk7  s	|dk7  s|j                  |      ||<   $ |S )Nr9   current)
mark_namesr6   )r   ri   marksnames       r   
save_markszCommand.save_marks   sE    OO% 	/DxDI$5"jj.d	/ r   c                 X    |j                         D ]  \  }}|j                  ||        y 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]      s1     D'r   r]   c                   j    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y)
r5   Nc                 6    t         j                  | |d ||       y r   r]   r   )r   r=   r7   r8   s       r   r   zInsertCommand.__init__   s    vtUD9r   c                    | j                  |      | _        |j                  | j                        | _        |j	                  | j                  dd      r|j                  d      | _        |j                  | j                  | j                  | j                         |j                  d| j                  t        | j                        fz        | _	        | j                  |      | _
        y )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jj-<<S(3**X.DKDKKTYY7jjT[[#djj/,J!JK??40r   c                     |j                  d| j                         |j                  | j                  | j                  | j                         | j                  || j                         |j                  d       y Nr9   )rv   r=   r9   r7   r8   rw   r`   seerh   s     r   rW   zInsertCommand.redo   sP    h,DKKTYY7tT--.r   c                     |j                  d| j                         |j                  | j                  | j                         | j	                  || j
                         |j                  d       y r   )rv   r=   r?   r>   rw   r_   r   rh   s     r   rT   zInsertCommand.undo   sJ    h,DKK-tT../r   c                    | j                   |j                   ury| j                  |j                  k7  ry| j                  |j                  k7  ryt	        |j
                        dk7  ry| j
                  r;| j                  | j
                  d         | j                  |j
                        k7  ry|j                  | _        | j
                  |j
                  z   | _        y)NFr%   r$   T)rb   r>   r=   r8   rF   r7   classifyrH   s     r   rN   zInsertCommand.merge   s    >>.;;#**$99 syy>Q::==B(DMM#)),DDjjZZ#))+
r   _c                 .    || j                   v ry|dk(  ryy)Nalphanumeric
newlinepunctuation)r   )r   cs     r   r   zInsertCommand.classify   s     !!!!9r   r   )rX   rY   rZ   r   rL   rW   rT   rN   stringascii_lettersdigitsr   r   r[   r   r   r5   r5      s;    :1  ''&--7#=Lr   r5   c                   &    e Zd ZddZd Zd Zd Zy)r;   Nc                 6    t         j                  | ||d d        y r   rz   r<   s      r   r   zDeleteCommand.__init__  s    vvtT:r   c                 D   | j                  |      | _        |j                  | j                        | _        | j                  r!|j                  | j                        | _        n#|j                  | j                  dz         | _        |j                  | j                  dd      r|j                  d      | _        |j                  | j                  | j                        | _        |j                  | j                  | j                         | j                  |      | _	        y )Nz +1cr|   r}   )
rs   r_   r6   r=   r>   r~   getr7   r?   r`   rh   s     r   rL   zDeleteCommand.do  s     OOD1jj-;;**T[[1DK**T[[6%9:DK<<S(3**X.DKXXdkk4;;7
DKK-??40r   c                     |j                  d| j                         |j                  | j                  | j                         | j	                  || j
                         |j                  d       y r   )rv   r=   r?   r>   rw   r`   r   rh   s     r   rW   zDeleteCommand.redo  sJ    h,DKK-tT--.r   c                     |j                  d| j                         |j                  | j                  | j                         | j	                  || j
                         |j                  d       y r   )rv   r=   r9   r7   rw   r_   r   rh   s     r   rT   zDeleteCommand.undo$  sJ    h,DKK,tT../r   r   )rX   rY   rZ   r   rL   rW   rT   r[   r   r   r;   r;     s    ;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
y	)rB   c                      g | _         d| _        y rA   )cmdsdepthr
   s    r   r   zCommandSequence.__init__0  s    	
r   c                     | j                   j                  }g }| j                  D ]  }|j                  d|        |dz   dj	                  |      z   dz   S )Nz    z(
z,
z
))rb   rX   r   rM   join)r   rd   strsrI   s       r   rf   zCommandSequence.__repr__4  sX    NN##99 	(CKK$sg'	(5y5::d++e33r   c                 ,    t        | j                        S r   )rF   r   r
   s    r   __len__zCommandSequence.__len__;  s    499~r   c                 :    | j                   j                  |       y 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    yy|r   c                 H    | j                   D ]  }|j                  |        y r   )r   rW   )r   ri   rI   s      r   rW   zCommandSequence.redoD  s     99 	CHHTN	r   c                 r    | j                   d d  }|j                          |D ]  }|j                  |        y r   )r   reverserT   )r   ri   r   rI   s       r   rT   zCommandSequence.undoH  s2    yy| 	CHHTN	r   c                 B    | j                   |z   | _         | j                   S r   )r   )r   incrs     r   rC   zCommandSequence.bump_depthN  s    ZZ$&
zzr   N)r%   )rX   rY   rZ   r   rf   r   rM   rG   rW   rT   rC   r[   r   r   rB   rB   ,  s*    4r   rB   c                 J   ddl m}m}m} ddlm}  ||       }|j                  d       t        t        | j                         j                  d      dd        \  }}|j                  d||dz   fz          ||d	
      }|j                          |j                           ||      }	t               |	j                          ||dfd      }
|
j                  d        ||dfd      }|j                  d        ||dfd      }|j                  d       y )Nr   )ToplevelTextButton)
PercolatorzTest UndoDelegator+r%   z+%d+%d   
   )heightUndoc                  &     j                  d       S r   )r   ds   r   <lambda>z!_undo_delegator.<locals>.<lambda>b      1<<3E r   )ri   commandleft)sideRedoc                  &     j                  d       S r   )r   r   s   r   r   z!_undo_delegator.<locals>.<lambda>d  r   r   Dumpc                  &     j                  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   topxyri   prT   rW   dumpr   s                @r   _undo_delegatorr   S  s    ..-
6
CII"#sFOO%++C045DAqLLQCL()BDIIKNN4AANN1#F,EFDII6I#F,EFDII6I#F,EFD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      s{     '$JI JZ*' *'Z6G 6r G  H$g $N. z	&!%@+ r   