Füƒa9ã@s¹dZddlTddlmZddlmZddlZdd„ZGdd „d eƒZd d „Z e d krµddl Z e j d ddddƒddl mZee ƒdS)zÀReplace dialog for IDLE. Inherits SearchDialogBase for GUI. Uses idlelib.SearchEngine for search capability. Defines various replace related functions like replace, replace all, replace+find. é)Ú*)Ú SearchEngine)ÚSearchDialogBaseNcCsV|jƒ}tj|ƒ}t|dƒs<t||ƒ|_|j}|j|ƒdS)zvReturns a singleton ReplaceDialog instance.The single dialog saves user entries and preferences across instances.Ú_replacedialogN)Z_rootrÚgetÚhasattrÚ ReplaceDialogrÚopen)ÚtextÚrootÚengineZdialog©r ú+/usr/lib/python3.5/idlelib/ReplaceDialog.pyÚreplace s   rc@sÊeZdZdZdZdd„Zdd„Zdd„Zd d „Zd d d „Z d dd„Z d dd„Z dd„Z d dd„Z ddd„Zdd„Zdd„Zd dd„Zd S)rzReplace DialogÚReplacecCs&tj|||ƒt|ƒ|_dS)N)rÚ__init__Z StringVarÚreplvar)Úselfr r r r rrszReplaceDialog.__init__cCsªtj||ƒy|jdƒ}Wntk r=d}YnXy|jdƒ}Wntk rkd}YnX|p~|jdƒ}|pŠ|}|j||ƒd|_dS)zDisplay the replace dialogz sel.firstNzsel.lastÚinserté)rr ÚindexÚTclErrorÚshow_hitÚok)rr ÚfirstÚlastr r rr !s     zReplaceDialog.opencCs-tj|ƒ|jd|jƒd|_dS)z#Create label and text entry widgetsz Replace with:rN)rÚcreate_entriesZ make_entryrZreplent)rr r rr1s zReplaceDialog.create_entriescCs`tj|ƒ|jd|jƒ|jd|jƒ|jd|jdƒ|jd|jƒdS)NZFindrz Replace+Findrz Replace All)rÚcreate_command_buttonsZ make_buttonÚfind_itÚ replace_itÚdefault_commandÚ replace_all)rr r rr6s  z$ReplaceDialog.create_command_buttonsNcCs|jdƒdS)Nr)Údo_find)rÚeventr r rr=szReplaceDialog.find_itcCs |j|jƒr|jƒdS)N)r"rÚ do_replace)rr#r r rr@szReplaceDialog.replace_itcCs/|j|jƒr+|jƒr+|jdƒdS)zReplace and find next.rN)r"rr$)rr#r r rr Ds zReplaceDialog.default_commandc Cs`|jjƒrVy|j|ƒ}Wq\tjk rR|jj|dƒd}Yq\Xn|}|S)za Helper function for expanding a regular expression in the replace field, if needed. zInvalid Replace ExpressionN)r ZisreÚexpandÚreÚerrorZ report_error)rÚmÚreplÚnewr r rÚ_replace_expandKszReplaceDialog._replace_expandcCs0|jjƒ}|sdS|jjƒ}|j}|jj||ƒ}|sZ|jƒdS|jdddƒ|jdddƒ|d}|djƒ}|jj ƒrµd}d}d}d} } |j ƒx*|jj ||||d|ƒ}|súP|\}} |jd|d|dƒ} | j ƒ} |j | |ƒ}|dkrOP| jƒ\}}d ||f} d ||f} || kr |jd | ƒnB|jd | ƒ| | krÌ|j| | ƒ|râ|j| |ƒ|t|ƒ}d}qÒW|jƒ| r"| r"|j| | ƒ|jƒdS) z4Replace all instances of patvar with replvar in textNÚselz1.0ÚendÚhitrrz%d.0z%d.%dr)r Úgetprogrrr Ú search_textÚbellÚ tag_removeÚstartZiswrapÚundo_block_startZsearch_forwardÚgroupr+ÚspanÚmark_setÚdeleterÚlenÚundo_block_stoprÚclose)rr#Úprogr)r ÚresÚlineÚcolrrrr(ÚcharsZorigr*ÚiÚjr r rr!YsZ     !        zReplaceDialog.replace_allrc Cs£|jjƒsdS|j}|jj|d|ƒ}|sH|jƒdS|\}}|jƒ\}}d||f}d||f} |j|| ƒd|_dS)NFz%d.%drT)r r/r r0r1r6rr) rrr r=r>r(rArBrrr r rr"‹s    zReplaceDialog.do_findc Csv|jjƒ}|sdS|j}y&|jdƒ}}|jdƒ}Wntk rbd}YnX|s€|jdƒ}}}tj|ƒ\}}|jd|d|dƒ}|j||ƒ} |sÏdS|j | |j jƒƒ} | dkrúdS|j d|ƒ|j ƒ| j ƒr0|j||ƒ| rF|j|| ƒ|jƒ|j||jdƒƒd|_dS) NFz sel.firstzsel.lastrz%d.0rrT)r r/r rrrZ get_line_colrÚmatchr+rr7r4r5r8rr:rr) rr<r rÚposrr>r?r@r(r*r r rr$›s:        zReplaceDialog.do_replacecCsŸ|j}|jd|ƒ|jdddƒ|jd||ƒ|jdddƒ||krq|jd|ƒn|jd||ƒ|jdƒ|jƒdS)zMHighlight text from 'first' to 'last'. 'first', 'last' - Text indicesrr,z1.0r-r.N)r r7r2Útag_addZseeZupdate_idletasks)rrrr r r rrºs   zReplaceDialog.show_hitcCs*tj||ƒ|jjdddƒdS)Nr.z1.0r-)rr;r r2)rr#r r rr;ÉszReplaceDialog.close)Ú__name__Ú __module__Ú __qualname__ÚtitleZiconrr rrrrr r+r!r"r$rr;r r r rrs      2  rc sÿt|ƒ}|jdƒttttjd|jƒƒƒƒ\}}}}|jd||dfƒdd„}dd„}t|d d ƒ‰|ˆ_ |ˆ_ ˆj ƒˆj d d ƒˆj ƒ‡fd d†}t|ddd|ƒ} | j ƒdS)zhtest wrapper functionzTest ReplaceDialogz[x+]z+%d+%dé–cSsdS)Nr r r r rr4Ösz)_replace_dialog..undo_block_startcSsdS)Nr r r r rr:Ùsz(_replace_dialog..undo_block_stopZinactiveselectbackgroundZgrayrz"This is a sample sTring Plus MORE.cs4ˆjtdtƒtˆƒˆjtdtƒdS)Nz1.0)rEZSELZENDrr2r )r r rÚ show_replaceãs z%_replace_dialog..show_replacer rZcommandN)ZToplevelrIÚlistÚmapÚintr&ÚsplitZgeometryZTextr4r:ZpackrZ focus_setZButton) ÚparentZboxÚwidthZheightÚxÚyr4r:rKZbuttonr )r rÚ_replace_dialogÎs  3      rTÚ__main__z$idlelib.idle_test.test_replacedialogÚ verbosityéÚexitF)Úrun)Ú__doc__ZtkinterZidlelibrZidlelib.SearchDialogBaserr&rrrTrFZunittestÚmainZidlelib.idle_test.htestrYr r r rÚs   ¶