
   2                       S SK r S SKJr   " S S\5      r " S S5      r " S S\5      r " S	 S
\5      r " S S\5      rS r\	S:X  a  S SK
Jr  \" SSSS9  S SKJr  \" \5        gg)    N)	Delegatorc                       \ rS rSrSrS rS rS rS rS r	S r
S	rS
 rSrS rSS jrSS jrS rS rSS jrS rS rSrg	)UndoDelegator   i  c                 P    [         R                  " U 5        U R                  5         g N)r   __init__
reset_undoselfs    #/usr/lib/python3.13/idlelib/undo.pyr	   UndoDelegator.__init__   s    4     c                 `   U R                   b3  U R                  S5        U R                  S5        U R                  S5        [        R                  " X5        UbU  U R	                  SU R
                  5        U R	                  SU R                  5        U R	                  SU R                  5        g g )Nz<<undo>>z<<redo>>z<<dump-undo-state>>)delegateunbindr   setdelegatebind
undo_event
redo_event
dump_event)r   r   s     r   r   UndoDelegator.setdelegate   s    ==$KK
#KK
#KK-.d-IIj$//2IIj$//2II+T__=  r   c                 >   SSK J n  U" U R                  S U R                   5        [        SU R                  SS9  [        SU R                  SS9  [        SU R
                  SS9  [        SU R                  5       5        U" U R                  U R                  S  5        g	)
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   UndoDelegator.dump_event(   sw    !t}}]dll+,j$,,C0h

,lDNN4ndnn./t}}T\\]+,r   c                 ^    SU l         SU l        / U l        SU l        U R	                  S5        g Nr      )	was_savedr   r   	undoblock	set_savedr   s    r   r
   UndoDelegator.reset_undo2   s*    qr   c                 r    U(       a  U R                   U l        OSU l        SU l        U R                  5         g )Nr(   F)r   r!   r"   check_saved)r   flags     r   r,   UndoDelegator.set_saved9   s*    DJDJr   c                 4    U R                   U R                  :H  $ r   )r!   r   r   s    r   r#   UndoDelegator.get_savedA   s    zzT\\))r   Nc                     Xl         g r   )saved_change_hook)r   hooks     r   set_saved_change_hook#UndoDelegator.set_saved_change_hookF   s    !%r   r(   c                     U R                  5       nXR                  :w  a)  Xl        U R                  (       a  U R                  5         g g g r   )r#   r*   r5   )r   is_saveds     r   r/   UndoDelegator.check_savedK   s<    >>#~~%%N%%&&( & &r   c                 :    U R                  [        XU5      5        g r   )addcmdInsertCommand)r   indexcharstagss       r   insertUndoDelegator.insertR   s    M%56r   c                 8    U R                  [        X5      5        g r   )r=   DeleteCommandr   index1index2s      r   deleteUndoDelegator.deleteU   s    M&12r   c                 v    U R                   S:X  a  [        5       U l         U R                   R                  5         g Nr   )r+   CommandSequence
bump_depthr   s    r   undo_block_startUndoDelegator.undo_block_startc   s(    >>Q,.DN!!#r   c                     U R                   R                  S5      S:X  aV  U R                   nSU l         [        U5      S:  a3  [        U5      S:X  a  UR                  S5      nU R	                  US5        g g g r'   )r+   rN   lengetcmdr=   r   cmds     r   undo_block_stopUndoDelegator.undo_block_stoph   sf    >>$$R(A-..CDN3x!|s8q=**Q-C C#  .r   c                    U(       a  UR                  U R                  5        U R                  S:w  a  U R                  R                  U5        g U R                  (       aC  U R
                  S:  a3  U R                  U R
                  S-
     nUR                  U5      (       a  g U/U R                  U R
                  S & U R                  U R
                  :  a  SU l        U R
                  S-   U l        [        U R                  5      U R                  :  aE  U R                  S	 U R
                  S-
  U l        U R                  S:  a  U R                  S-
  U l        SU l        U R                  5         g )Nr   r)   r(   T)dor   r+   appendr"   r   r   merger!   rR   max_undor/   )r   rU   executelastcmds       r   r=   UndoDelegator.addcmdt   s   FF4==!>>QNN!!#&>>dllQ.mmDLLN3G}}S!!(+udllm$::$DJ||a't}}-a <<!+DLzzQ!ZZ!^
r   c                 
   U R                   S:X  a  U R                  5         gU R                  U R                   S-
     nUR                  U R                  5        U R                   S-
  U l         SU l        U R                  5         g)Nr   r   r)   F)r   bellr   undor   r"   r/   r   r$   rU   s      r   r   UndoDelegator.undo_event   sg    <<1IIKmmDLL1,-||a'r   c                 *   U R                   [        U R                  5      :  a  U R                  5         gU R                  U R                      nUR	                  U R
                  5        U R                   S-   U l         SU l        U R                  5         g)Nr   r)   F)r   rR   r   ra   redor   r"   r/   rc   s      r   r   UndoDelegator.redo_event   sk    <<3t}}--IIKmmDLL)||a'r   )r"   r   r!   r5   r+   r   r*   r   )T)__name__
__module____qualname____firstlineno__r\   r	   r   r   r
   r,   r#   r5   r7   r*   r/   rB   rI   rO   rV   r=   r   r   __static_attributes__ r   r   r   r      sa    H	>* & I)73$

$.		r   r   c                   L    \ rS rSrSrSS jrS rS rS rS r	S r
S	 rS
 rSrg)Command   Nc                 `    0 U l         0 U l        Xl        X l        X0l        U(       a  X@l        g g r   )marks_beforemarks_afterrG   rH   r@   rA   )r   rG   rH   r@   rA   s        r   r	   Command.__init__   s.    
I r   c                     U R                   R                  nU R                  U R                  U R                  U R
                  4nU R
                  c  US S nU[        U5      -   $ )Nr(   )	__class__rh   rG   rH   r@   rA   repr)r   sts      r   __repr__Command.__repr__   sR    NN##[[$++tzz499=99#2A47{r   c                     g r   rm   r   texts     r   rY   
Command.do       r   c                     g r   rm   r}   s     r   rf   Command.redo   r   r   c                     g r   rm   r}   s     r   rb   Command.undo   r   r   c                     grL   rm   rT   s     r   r[   Command.merge   s    r   c                 ~    0 nUR                  5        H&  nUS:w  d  M  US:w  d  M  UR                  U5      X#'   M(     U$ )NrB   current)
mark_namesr?   )r   r~   marksnames       r   
save_marksCommand.save_marks   s>    OO%DxDI$5"jj. & r   c                 X    UR                  5        H  u  p4UR                  X45        M     g r   )itemsmark_set)r   r~   r   r   r?   s        r   	set_marksCommand.set_marks   s      ;;=KDMM$& )r   )r@   rG   rH   rs   rr   rA   r   )rh   ri   rj   rk   rA   r	   rz   rY   rf   rb   r[   r   r   rl   rm   r   r   ro   ro      s1     D'r   ro   c                   t    \ rS rSrSS jrS rS rS rS r\	R                  \	R                  -   S-   rS	 rS
rg)r>      Nc                 2    [         R                  XS X#5        g r   ro   r	   )r   rG   r@   rA   s       r   r	   InsertCommand.__init__   s    tU9r   c                    U R                  U5      U l        UR                  U R                  5      U l        UR	                  U R                  SS5      (       a  UR                  S5      U l        UR                  U R                  U R                  U R                  5        UR                  SU R                  [        U R                  5      4-  5      U l	        U R                  U5      U l
        g )N>end-1cz%s+%dc)r   rr   r?   rG   comparerB   r@   rA   rR   rH   rs   r}   s     r   rY   InsertCommand.do   s     OOD1jj-<<S(33**X.DKDKKTYY7jjT[[#djj/,J!JK??40r   c                     UR                  SU R                  5        UR                  U R                  U R                  U R                  5        U R                  XR                  5        UR                  S5        g NrB   )r   rG   rB   r@   rA   r   rs   seer}   s     r   rf   InsertCommand.redo   sN    h,DKKTYY7t--.r   c                     UR                  SU R                  5        UR                  U R                  U R                  5        U R	                  XR
                  5        UR                  S5        g r   )r   rG   rI   rH   r   rr   r   r}   s     r   rb   InsertCommand.undo   sH    h,DKK-t../r   c                    U R                   UR                   La  gU R                  UR                  :w  a  gU R                  UR                  :w  a  g[	        UR
                  5      S:w  a  gU R
                  (       a<  U R                  U R
                  S   5      U R                  UR
                  5      :w  a  gUR                  U l        U R
                  UR
                  -   U l        g)NFr)   r(   T)rv   rH   rG   rA   rR   r@   classifyrT   s     r   r[   InsertCommand.merge   s    >>.;;#**$99 syy>Q::==B(DMM#)),DDjjZZ#))+
r   _c                 2    XR                   ;   a  gUS:X  a  gg)Nalphanumeric
newlinepunctuation)r   )r   cs     r   r   InsertCommand.classify   s    !!!!9r   r@   rG   rH   rs   rr   r   )rh   ri   rj   rk   r	   rY   rf   rb   r[   stringascii_lettersdigitsr   r   rl   rm   r   r   r>   r>      s;    :1  ''&--7#=Lr   r>   c                   0    \ rS rSrSS jrS rS rS rSrg)	rE   i  Nc                 4    [         R                  XUS S 5        g r   r   rF   s      r   r	   DeleteCommand.__init__  s    vtT:r   c                 X   U R                  U5      U l        UR                  U R                  5      U l        U R                  (       a!  UR                  U R                  5      U l        O#UR                  U R                  S-   5      U l        UR                  U R                  SS5      (       a  UR                  S5      U l        UR                  U R                  U R                  5      U l        UR                  U R                  U R                  5        U R                  U5      U l	        g )Nz +1cr   r   )
r   rr   r?   rG   rH   r   getr@   rI   rs   r}   s     r   rY   DeleteCommand.do  s     OOD1jj-;;**T[[1DK**T[[6%9:DK<<S(33**X.DKXXdkk4;;7
DKK-??40r   c                     UR                  SU R                  5        UR                  U R                  U R                  5        U R	                  XR
                  5        UR                  S5        g r   )r   rG   rI   rH   r   rs   r   r}   s     r   rf   DeleteCommand.redo  sH    h,DKK-t--.r   c                     UR                  SU R                  5        UR                  U R                  U R                  5        U R	                  XR
                  5        UR                  S5        g r   )r   rG   rB   r@   r   rr   r   r}   s     r   rb   DeleteCommand.undo$  sH    h,DKK,t../r   r   r   )	rh   ri   rj   rk   r	   rY   rf   rb   rl   rm   r   r   rE   rE     s    ;1r   rE   c                   H    \ rS rSrS rS rS rS rS rS r	S r
SS	 jrS
rg)rM   i,  c                      / U l         SU l        g rL   cmdsdepthr   s    r   r	   CommandSequence.__init__0  s    	
r   c                     U R                   R                  n/ nU R                   H  nUR                  SU< 35        M     US-   SR	                  U5      -   S-   $ )Nz    z(
z,
z
))rv   rh   r   rZ   join)r   rx   strsrU   s       r   rz   CommandSequence.__repr__4  sS    NN##99CKK$sg' 5y5::d++e33r   c                 ,    [        U R                  5      $ r   )rR   r   r   s    r   __len__CommandSequence.__len__;  s    499~r   c                 :    U R                   R                  U5        g r   )r   rZ   rT   s     r   rZ   CommandSequence.append>  s    		r   c                      U R                   U   $ r   )r   )r   is     r   rS   CommandSequence.getcmdA  s    yy|r   c                 L    U R                    H  nUR                  U5        M     g r   )r   rf   )r   r~   rU   s      r   rf   CommandSequence.redoD  s    99CHHTN r   c                 v    U R                   S S  nUR                  5         U H  nUR                  U5        M     g r   )r   reverserb   )r   r~   r   rU   s       r   rb   CommandSequence.undoH  s-    yy|CHHTN r   c                 B    U R                   U-   U l         U R                   $ r   )r   )r   incrs     r   rN   CommandSequence.bump_depthN  s    ZZ$&
zzr   r   N)r)   )rh   ri   rj   rk   r	   rz   r   rZ   rS   rf   rb   rN   rl   rm   r   r   rM   rM   ,  s*    4r   rM   c                 "  ^ SSK JnJnJn  SSKJn  U" U 5      nUR                  S5        [        [        U R                  5       R                  S5      SS  5      u  pgUR                  SXgS-   4-  5        U" US	S
9nUR                  5         UR                  5         U" U5      n	[        5       mU	R                  T5        U" USU4S jS9n
U
R                  SS9  U" USU4S jS9nUR                  SS9  U" USU4S jS9nUR                  SS9  g )Nr   )ToplevelTextButton)
PercolatorzTest UndoDelegator+r)   z+%d+%d   
   )heightUndoc                  &   > T R                  S 5      $ r   )r   ds   r   <lambda>!_undo_delegator.<locals>.<lambda>b      1<<3Er   )r~   commandleft)sideRedoc                  &   > T R                  S 5      $ r   )r   r   s   r   r   r   d  r   r   Dumpc                  &   > T R                  S 5      $ r   )r   r   s   r   r   r   f  r   r   )tkinterr   r   r   idlelib.percolatorr   titlemapintgeometrysplitpack	focus_setr   insertfilter)parentr   r   r   r   topxyr~   prb   rf   dumpr   s                @r   _undo_delegatorr   S  s    ..-
6
CII"#sFOO%++C045DALLQC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   ro   r>   rE   rM   r   rh   unittestr   idlelib.idle_test.htestr  rm   r   r   <module>r     s{     '$JI JZ*' *'Z6G 6r G  H$g $N. z	&!%@+ r   