a 9êdg&+ã@s¤ddlZddlmZGdd„deƒZGdd„dƒZGdd„deƒZGd d „d eƒZGd d „d eƒZd d„Ze dkr ddl m Z e ddddddl m Z e eƒdS)éN)Ú Delegatorc@s–eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dZ dd„Z dZ dd„Z d#dd„Zd$dd„Zdd„Zdd„Zd%dd„Zdd „Zd!d"„ZdS)&Ú UndoDelegatoriècCst |¡| ¡dS©N)rÚ__init__Ú reset_undo©Úself©r ú(/usr/local/lib/python3.9/idlelib/undo.pyrs zUndoDelegator.__init__cCsj|jdur(| d¡| d¡| d¡t ||¡|durf| d|j¡| d|j¡| d|j¡dS)Nz<>z<>z<>)ÚdelegateZunbindrÚ setdelegateÚbindÚ undo_eventÚ redo_eventÚ dump_event)rr r r r r s     zUndoDelegator.setdelegatecCsvddlm}||jd|j…ƒtd|jddtd|jddtd|jddtd| ¡ƒ||j|jd…ƒd S) Nr)Úpprintzpointer:ú )Úendzsaved:z can_merge:z get_saved():Úbreak)rÚundolistÚpointerÚprintÚsavedÚ can_mergeÚ get_saved)rÚeventrr r r r(s zUndoDelegator.dump_eventcCs&d|_d|_g|_d|_| d¡dS©Néÿÿÿÿré)Ú was_savedrrÚ undoblockÚ set_savedrr r r r2s zUndoDelegator.reset_undocCs&|r|j|_nd|_d|_| ¡dS)NrF)rrrÚ check_saved)rÚflagr r r r!9s  zUndoDelegator.set_savedcCs |j|jkSr)rrrr r r rAszUndoDelegator.get_savedNcCs ||_dSr)Úsaved_change_hook)rÚhookr r r Úset_saved_change_hookFsz#UndoDelegator.set_saved_change_hookrcCs*| ¡}||jkr&||_|jr&| ¡dSr)rrr$)rZis_savedr r r r"Ks  zUndoDelegator.check_savedcCs| t|||ƒ¡dSr)ÚaddcmdÚ InsertCommand)rÚindexÚcharsÚtagsr r r ÚinsertRszUndoDelegator.insertcCs| t||ƒ¡dSr)r'Ú DeleteCommand©rÚindex1Úindex2r r r ÚdeleteUszUndoDelegator.deletecCs |jdkrtƒ|_|j ¡dS©Nr)r ÚCommandSequenceÚ bump_depthrr r r Úundo_block_startcs zUndoDelegator.undo_block_startcCsN|j d¡dkrJ|j}d|_t|ƒdkrJt|ƒdkr>| d¡}| |d¡dSr)r r4ÚlenÚgetcmdr'©rÚcmdr r r Úundo_block_stophs   zUndoDelegator.undo_block_stopTcCsÔ|r| |j¡|jdkr*|j |¡dS|jrX|jdkrX|j|jd}| |¡rXdS|g|j|jd…<|j|jkr|d|_|jd|_t |jƒ|j krÂ|jd=|jd|_|jdkrÂ|jd|_d|_|  ¡dS)NrrrT) Údor r ÚappendrrrÚmergerr6Úmax_undor")rr9ZexecuteZlastcmdr r r r'ts(         zUndoDelegator.addcmdcCsP|jdkr| ¡dS|j|jd}| |j¡|jd|_d|_| ¡dS)NrrrF)rÚbellrÚundor rr"©rrr9r r r r‹s   zUndoDelegator.undo_eventcCsR|jt|jƒkr| ¡dS|j|j}| |j¡|jd|_d|_| ¡dS)NrrF)rr6rr?Úredor rr"rAr r r r–s   zUndoDelegator.redo_event)N)N)T)Ú__name__Ú __module__Ú __qualname__r>rr rrr!rr$r&rr"r,r1r5r:r'rrr r r r rs$      rc@sReZdZdZddd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dS)ÚCommandNcCs,i|_i|_||_||_||_|r(||_dSr)Ú marks_beforeÚ marks_afterr/r0r*r+)rr/r0r*r+r r r r§szCommand.__init__cCs>|jj}|j|j|j|jf}|jdur2|dd…}|t|ƒS)Nr)Ú __class__rCr/r0r*r+Úrepr)rÚsÚtr r r Ú__repr__°s   zCommand.__repr__cCsdSrr ©rÚtextr r r r;·sz Command.docCsdSrr rNr r r rBºsz Command.redocCsdSrr rNr r r r@½sz Command.undocCsdSr2r r8r r r r=Àsz Command.mergecCs4i}| ¡D]"}|dkr |dkr | |¡||<q |S)Nr,Úcurrent)Z mark_namesr))rrOÚmarksÚnamer r r Ú save_marksÃs  zCommand.save_markscCs"| ¡D]\}}| ||¡qdSr)ÚitemsÚmark_set)rrOrQrRr)r r r Ú set_marksÊszCommand.set_marks)N) rCrDrEr+rrMr;rBr@r=rSrVr r r r rF¢s rFc@sNeZdZddd„Zdd„Zdd„Zdd „Zd d „Zej ej d Z d d„Z dS)r(NcCst ||d||¡dSr©rFr)rr/r*r+r r r rÒszInsertCommand.__init__cCsv| |¡|_| |j¡|_| |jdd¡r6| d¡|_| |j|j|j¡| d|jt|jƒf¡|_ | |¡|_ dS)Nú>úend-1cz%s+%dc) rSrGr)r/Úcomparer,r*r+r6r0rHrNr r r r;Õs  zInsertCommand.docCs>| d|j¡| |j|j|j¡| ||j¡| d¡dS©Nr,)rUr/r,r*r+rVrHÚseerNr r r rBàszInsertCommand.redocCs:| d|j¡| |j|j¡| ||j¡| d¡dSr[)rUr/r1r0rVrGr\rNr r r r@çszInsertCommand.undocCs‚|j|jurdS|j|jkr dS|j|jkr0dSt|jƒdkrBdS|jrh| |jd¡| |j¡krhdS|j|_|j|j|_dS)NFrrT)rIr0r/r+r6r*Úclassifyr8r r r r=îs   ÿzInsertCommand.mergeÚ_cCs||jvrdS|dkrdSdS)NÚ alphanumericÚ ÚnewlineÚ punctuation)r_)rÚcr r r r]s  zInsertCommand.classify)N) rCrDrErr;rBr@r=ÚstringÚ ascii_lettersÚdigitsr_r]r r r r r(Ïs  r(c@s.eZdZd dd„Zdd„Zdd„Zdd „ZdS) r-NcCst |||dd¡dSrrWr.r r r r szDeleteCommand.__init__cCs| |¡|_| |j¡|_|jr0| |j¡|_n| |jd¡|_| |jdd¡r^| d¡|_| |j|j¡|_| |j|j¡| |¡|_ dS)Nz +1crXrY) rSrGr)r/r0rZÚgetr*r1rHrNr r r r;s  zDeleteCommand.docCs:| d|j¡| |j|j¡| ||j¡| d¡dSr[)rUr/r1r0rVrHr\rNr r r rBszDeleteCommand.redocCs:| d|j¡| |j|j¡| ||j¡| d¡dSr[)rUr/r,r*rVrGr\rNr r r r@$szDeleteCommand.undo)N)rCrDrErr;rBr@r r r r r-s r-c@sNeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z ddd„Z dS)r3cCsg|_d|_dSr2)ÚcmdsÚdepthrr r r r0szCommandSequence.__init__cCs>|jj}g}|jD]}| d|f¡q|dd |¡dS)Nz %rz( z, z ))rIrCrhr<Újoin)rrKZstrsr9r r r rM4s  zCommandSequence.__repr__cCs t|jƒSr)r6rhrr r r Ú__len__;szCommandSequence.__len__cCs|j |¡dSr)rhr<r8r r r r<>szCommandSequence.appendcCs |j|Sr)rh)rÚir r r r7AszCommandSequence.getcmdcCs|jD]}| |¡qdSr)rhrB)rrOr9r r r rBDs zCommandSequence.redocCs.|jdd…}| ¡|D]}| |¡qdSr)rhÚreverser@)rrOrhr9r r r r@HszCommandSequence.undorcCs|j||_|jSr)ri)rZincrr r r r4Ns zCommandSequence.bump_depthN)r) rCrDrErrMrkr<r7rBr@r4r r r r r3,sr3c sddlm}m}m}ddlm}||ƒ}| d¡tt|  ¡  d¡dd…ƒ\}}|  d||df¡||d d }|  ¡|  ¡||ƒ} t ƒ‰|  ˆ¡||d ‡fd d „d} | j dd||d‡fdd „d} | j dd||d‡fdd „d} | j dddS)Nr)ÚToplevelÚTextÚButton)Ú PercolatorzTest UndoDelegatorú+rz+%d+%dé¯é )ZheightZUndocs ˆ d¡Sr)rr ©Údr r Úbóz!_undo_delegator..)rOZcommandÚleft)ZsideZRedocs ˆ d¡Sr)rr rur r rwdrxZDumpcs ˆ d¡Sr)rr rur r rwfrx)ÚtkinterrnrorpZidlelib.percolatorrqÚtitleÚmapÚintZgeometryÚsplitÚpackZ focus_setrZ insertfilter) ÚparentrnrorprqZundowinÚxÚyrOÚpr@rBÚdumpr rur Ú_undo_delegatorSs$       r…Ú__main__)Úmainzidlelib.idle_test.test_undoéF)Ú verbosityÚexit)Úrun)rdZidlelib.delegatorrrrFr(r-r3r…rCZunittestr‡Zidlelib.idle_test.htestr‹r r r r Ús -9$'