3 § fNã@sŽdZddlZddlmZmZddlmZddlmZdd„Z Gdd „d eƒZ d d „Z e d krŠdd l mZedddd�ddlmZee ƒ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. éN)Ú StringVarÚTclError)ÚSearchDialogBase)Ú searchenginecCs<|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ú4/opt/alt/python36/lib64/python3.6/idlelib/replace.pyÚreplace s    rc@sˆeZdZdZdZdd„Zdd„Zdd„Zd d „Zdd d „Z d dd„Z d!dd„Z dd„Z d"dd„Z d#dd„Zdd„Zdd„Zd$dd„Zd S)%r zReplace DialogÚReplacecCstj|||ƒt|ƒ|_dS)N)rÚ__init__rÚreplvar)Úselfr r rrrrszReplaceDialog.__init__cCsˆtj||ƒy|jdƒ}Wntk r2d}YnXy|jdƒ}Wntk rZd}YnX|ph|jdƒ}|pp|}|j||ƒd|_dS)zDisplay the replace dialogz sel.firstNzsel.lastÚinserté)rr ÚindexrÚshow_hitÚok)rr ÚfirstÚlastrrrr !s    zReplaceDialog.opencCs"tj|ƒ|jd|jƒd|_dS)z#Create label and text entry widgetsz Replace with:rN)rÚcreate_entriesZ make_entryrZreplent)rrrrr1s zReplaceDialog.create_entriescCsHtj|ƒ|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)rrrrr6s  z$ReplaceDialog.create_command_buttonsNcCs|jdƒdS)Nr)Údo_find)rÚeventrrrr=szReplaceDialog.find_itcCs|j|jƒr|jƒdS)N)r"rÚ do_replace)rr#rrrr@s zReplaceDialog.replace_itcCs"|j|jƒr|jƒr|jdƒdS)zReplace and find next.rN)r"rr$)rr#rrrr Ds zReplaceDialog.default_commandc CsL|jjƒrDy|j|ƒ}WqHtjk r@|jj|dƒd}YqHXn|}|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ÚnewrrrÚ_replace_expandKs  zReplaceDialog._replace_expandcCs¢|jjƒ}|sdS|jjƒ}|j}|jj||ƒ}|s@|jƒdS|jdddƒ|jdddƒ|d}|djƒ}|jj ƒr‚d}d}d}d} } |j ƒxÞ|jj ||||d|ƒ}|s´P|\}} |jd|d|dƒ} | j ƒ} |j | |ƒ}|dkròP| jƒ\}}d ||f} d ||f} || k�r.|jd | ƒn4|jd | ƒ| | k�rP|j| | ƒ|�rb|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Újrrrr!YsZ                zReplaceDialog.replace_allrc Csv|jjƒsdS|j}|jj|d|ƒ}|s4|jƒdS|\}}|jƒ\}}d||f}d||f} |j|| ƒd|_dS)NFz%d.%drT)r r/r r0r1r6rr) rrr r=r>r(rArBrrrrrr"‹s     zReplaceDialog.do_findc Cs|jjƒ}|sdS|j}y|jdƒ}}|jdƒ}Wntk rLd}YnX|sd|jdƒ}}}tj|ƒ\}}|jd|d|dƒ}|j||ƒ} |sždS|j | |j jƒƒ} | dkr¼dS|j d|ƒ|j ƒ| j ƒrä|j||ƒ| rô|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*rrrr$›s:      zReplaceDialog.do_replacecCsv|j}|jd|ƒ|jdddƒ|jd||ƒ|jdddƒ||krR|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 rrrrºs  zReplaceDialog.show_hitcCs tj||ƒ|jjdddƒdS)Nr.z1.0r-)rr;r r2)rr#rrrr;És zReplaceDialog.close)N)N)N)N)r)N)Ú__name__Ú __module__Ú __qualname__ÚtitleZiconrr rrrrr r+r!r"r$rr;rrrrr s    2 r c sÚddlm}m}m‰m‰ddlm}||ƒ}|jdƒtt |j ƒj dƒdd…ƒ\}}|j d||dfƒd d „}d d „}||d d�‰|ˆ_ |ˆ_ ˆjƒˆjddƒˆjƒ‡‡‡fdd„} ||d| d�} | jƒdS)Nr)ÚToplevelÚTextÚENDÚSEL)ÚButtonzTest ReplaceDialogú+rz+%d+%dé¯cSsdS)Nrrrrrr4Øsz)_replace_dialog..undo_block_startcSsdS)Nrrrrrr:Ûsz(_replace_dialog..undo_block_stopZgray)Zinactiveselectbackgroundrz"This is a sample sTring Plus MORE.cs(ˆjˆdˆƒtˆƒˆjˆdˆƒdS)Nz1.0)rErr2r)rLrMr rrÚ show_replaceåsz%_replace_dialog..show_replacer)r Zcommand)ÚtkinterrJrKrLrMZ tkinter.ttkrNrIÚmapÚintZgeometryÚsplitr4r:ZpackrZ focus_set) ÚparentrJrKrNZboxÚxÚyr4r:rQZbuttonr)rLrMr rÚ_replace_dialogÎs"     rYÚ__main__)Úmainzidlelib.idle_test.test_replaceéF)Ú verbosityÚexit)Úrun)Ú__doc__r&rRrrZidlelib.searchbaserZidlelibrrr rYrFZunittestr[Zidlelib.idle_test.htestr_rrrrÚs   7