o =?h&+@sddlZddlmZGdddeZGdddZGdddeZGd d d eZGd d d eZd dZe dkrRddl m Z e ddddddl m Z e edSdS)N) Delegatorc@seZdZdZddZddZddZdd Zd d Zd d Z dZ ddZ dZ ddZ d#ddZd#ddZddZddZd$ddZdd Zd!d"ZdS)% UndoDelegatoricCst||dSN)r__init__ reset_undoselfr 3/opt/alt/python310/lib64/python3.10/idlelib/undo.pyrs  zUndoDelegator.__init__cCsn|jdur|d|d|dt|||dur5|d|j|d|j|d|jdSdS)Nz<>z<>z<>)delegateZunbindr setdelegateZbind undo_event redo_event dump_event)rr r r r r s     zUndoDelegator.setdelegatecCsvddlm}||jd|jtd|jddtd|jddtd|jddtd|||j|jdd S) Nr)pprintzpointer: )endzsaved:z can_merge:z get_saved():break)rundolistpointerprintsaved can_merge get_saved)reventrr r r r(s zUndoDelegator.dump_eventcCs&d|_d|_g|_d|_|ddSNr) was_savedrr undoblock set_savedrr r r r2s zUndoDelegator.reset_undocCs&|r|j|_nd|_d|_|dS)NrF)rrr check_saved)rflagr r r r 9s   zUndoDelegator.set_savedcCs |j|jkSr)rrrr r r rAs zUndoDelegator.get_savedNcCs ||_dSr)saved_change_hook)rhookr r r set_saved_change_hookF z#UndoDelegator.set_saved_change_hookrcCs2|}||jkr||_|jr|dSdSdSr)rrr#)rZis_savedr r r r!Ks  zUndoDelegator.check_savedcCs|t|||dSr)addcmd InsertCommand)rindexcharstagsr r r insertRzUndoDelegator.insertcCs|t||dSr)r' DeleteCommandrindex1index2r r r deleteUszUndoDelegator.deletecCs |jdkr t|_|jdSNr)rCommandSequence bump_depthrr r r undo_block_startcs zUndoDelegator.undo_block_startcCsV|jddkr'|j}d|_t|dkr)t|dkr|d}||ddSdSdSr)rr5lengetcmdr'rcmdr r r undo_block_stophs   zUndoDelegator.undo_block_stopTcCs|r||j|jdkr|j|dS|jr,|jdkr,|j|jd}||r,dS|g|j|jd<|j|jkr>d|_|jd|_t |j|j kra|jd=|jd|_|jdkra|jd|_d|_| dS)NrrrT) dor rappendrrrmergerr7max_undor!)rr:ZexecuteZlastcmdr r r r'ts(          zUndoDelegator.addcmdcCsP|jdkr |dS|j|jd}||j|jd|_d|_|dS)NrrrF)rbellrundor rr!rrr:r r r r s   zUndoDelegator.undo_eventcCsR|jt|jkr|dS|j|j}||j|jd|_d|_|dS)NrrF)rr7rr@redor rr!rBr r r rs   zUndoDelegator.redo_eventr)T)__name__ __module__ __qualname__r?rr rrr rr#r%rr!r,r2r6r;r'r rr r r r rs&      rc@sReZdZdZdddZddZddZdd Zd d Zd d Z ddZ ddZ dS)CommandNcCs0i|_i|_||_||_||_|r||_dSdSr) marks_before marks_afterr0r1r*r+)rr0r1r*r+r r r rs zCommand.__init__cCs>|jj}|j|j|j|jf}|jdur|dd}|t|S)Nr) __class__rDr0r1r*r+repr)rstr r r __repr__s    zCommand.__repr__cCdSrr rtextr r r r<z Command.docCrOrr rPr r r rCrRz Command.redocCrOrr rPr r r rArRz Command.undocCsdSr3r r9r r r r>rRz Command.mergecCs4i}|D]}|dkr|dkr||||<q|S)Nr,Zcurrent)Z mark_namesr))rrQmarksnamer r r save_markss  zCommand.save_markscCs"|D] \}}|||qdSr)itemsmark_set)rrQrSrTr)r r r set_marksszCommand.set_marksr) rDrErFr+rrNr<rCrAr>rUrXr r r r rGs   rGc@sNeZdZdddZddZddZdd Zd d Zej ej d Z d dZ dS)r(NcCst||d||dSrrGr)rr0r*r+r r r rr-zInsertCommand.__init__cCsv|||_||j|_||jddr|d|_||j|j|j|d|jt|jf|_ |||_ dS)N>end-1cz%s+%dc) rUrHr)r0comparer,r*r+r7r1rIrPr r r r<s  zInsertCommand.docCs>|d|j||j|j|j|||j|ddSNr,)rWr0r,r*r+rXrIseerPr r r rCszInsertCommand.redocC:|d|j||j|j|||j|ddSr])rWr0r2r1rXrHr^rPr r r rAzInsertCommand.undocCs|j|jurdS|j|jkrdS|j|jkrdSt|jdkr!dS|jr4||jd||jkr4dS|j|_|j|j|_dS)NFrrT)rJr1r0r+r7r*classifyr9r r r r>s   zInsertCommand.merge_cCs||jvrdS|dkr dSdS)N alphanumeric newlineZ punctuation)rc)rcr r r ras zInsertCommand.classifyr) rDrErFrr<rCrAr>stringZ ascii_lettersZdigitsrcrar r r r r(s   r(c@s.eZdZd ddZddZddZdd ZdS) r.NcCst|||dddSrrYr/r r r r r-zDeleteCommand.__init__cCs|||_||j|_|jr||j|_n ||jd|_||jddr/|d|_||j|j|_||j|j|||_ dS)Nz +1crZr[) rUrHr)r0r1r\getr*r2rIrPr r r r<s  zDeleteCommand.docCr_r])rWr0r2r1rXrIr^rPr r r rCr`zDeleteCommand.redocCr_r])rWr0r,r*rXrHr^rPr r r rA$r`zDeleteCommand.undor)rDrErFrr<rCrAr r r r r.s   r.c@sNeZdZddZddZddZddZd d Zd d Zd dZ dddZ dS)r4cCsg|_d|_dSr3)cmdsdepthrr r r r0s zCommandSequence.__init__cCs>|jj}g}|jD] }|d|fq |dd|dS)Nz %rz( z, z ))rJrDrir=join)rrLZstrsr:r r r rN4s  zCommandSequence.__repr__cCs t|jSr)r7rirr r r __len__;r&zCommandSequence.__len__cCs|j|dSr)rir=r9r r r r=>szCommandSequence.appendcCs |j|Sr)ri)rir r r r8Ar&zCommandSequence.getcmdcCs|jD]}||qdSr)rirC)rrQr:r r r rCDs  zCommandSequence.redocCs.|jdd}||D]}||q dSr)rireverserA)rrQrir:r r r rAHs  zCommandSequence.undorcCs|j||_|jSr)rj)rZincrr r r r5Ns zCommandSequence.bump_depthN)r) rDrErFrrNrlr=r8rCrAr5r r r r r4,sr4c sddlm}m}m}ddlm}||}|dtt| ddd\}}| d||df||d d }| | ||} t | ||d fd d d} | j dd||dfdd d} | j dd||dfdd d} | j dddS)Nr)ToplevelTextButton) PercolatorzTest UndoDelegator+rz+%d+%d )ZheightZUndoc dSr)r r dr r b z!_undo_delegator..)rQZcommandleft)ZsideZRedocrvr)rr rwr r rydrzZDumpcrvr)rr rwr r ryfrz)ZtkinterrorprqZidlelib.percolatorrrtitlemapintZgeometrysplitZpackZ focus_setrZ insertfilter) parentrorprqrrZundowinxyrQprArCdumpr rwr _undo_delegatorSs$       r__main__)mainzidlelib.idle_test.test_undoF) verbosityexit)run)rgZidlelib.delegatorrrrGr(r.r4rrDZunittestrZidlelib.idle_test.htestrr r r r s -9$'