a
    åzeG&  ã                   @   sŠ   d dl Z d dlmZmZ d dlmZ d dlmZ dd„ ZG dd„ deƒZ	d	d
„ Z
edkr†d dlmZ edddd d dlmZ ee
ƒ dS )é    N)Ú	StringVarÚTclError)ÚSearchDialogBase)Úsearchenginec                 C   s<   |   ¡ }t |¡}t|dƒs(t||ƒ|_|j}| | ¡ d S )NÚ_replacedialog)Ú_rootr   ÚgetÚhasattrÚReplaceDialogr   Úopen)ÚtextÚrootÚengineZdialog© r   ú%/usr/lib/python3.9/idlelib/replace.pyÚreplace   s    	

r   c                       s   e Zd ZdZdZ‡ fdd„Zdd„ Zdd„ Zd	d
„ Zddd„Z	d dd„Z
d!dd„Zdd„ Zd"dd„Zd#dd„Zdd„ Zdd„ Zd$dd„Z‡  ZS )%r
   zReplace DialogÚReplacec                    s   t ƒ  ||¡ t|ƒ| _d S ©N)ÚsuperÚ__init__r   Úreplvar)Úselfr   r   ©Ú	__class__r   r   r   %   s    zReplaceDialog.__init__c                 C   s„   t  | |¡ z| d¡}W n ty0   d }Y n0 z| d¡}W n tyV   d }Y n0 |pd| d¡}|pl|}|  ||¡ d| _d S )Nú	sel.firstúsel.lastÚinsertT)r   r   Úindexr   Úshow_hitÚok)r   r   ÚfirstÚlastr   r   r   r   5   s    	

zReplaceDialog.openc                 C   s"   t  | ¡ |  d| j¡d | _d S )NzReplace with:r   )r   Úcreate_entriesZ
make_entryr   Zreplent©r   r   r   r   r"   L   s    
zReplaceDialog.create_entriesc                 C   sJ   t  | ¡ |  d| j¡ |  d| j¡ | jd| jdd |  d| j¡ d S )NZFindr   zReplace+FindT)ZisdefzReplace All)r   Úcreate_command_buttonsZmake_buttonÚfind_itÚ
replace_itÚdefault_commandÚreplace_allr#   r   r   r   r$   Q   s
    
z$ReplaceDialog.create_command_buttonsNc                 C   s   |   d¡ d S ©NF)Údo_find©r   Úeventr   r   r   r%   ]   s    zReplaceDialog.find_itc                 C   s   |   | j¡r|  ¡  d S r   ©r*   r   Ú
do_replacer+   r   r   r   r&   a   s    zReplaceDialog.replace_itc                 C   s"   |   | j¡r|  ¡ r|   d¡ d S r)   r-   r+   r   r   r   r'   i   s    zReplaceDialog.default_commandc                 C   sJ   | j  ¡ rBz| |¡}W qF tjy>   | j  |d¡ d }Y qF0 n|}|S )NzInvalid Replace Expression)r   ZisreÚexpandÚreÚerrorZreport_error)r   ÚmÚreplÚnewr   r   r   Ú_replace_expandt   s    
zReplaceDialog._replace_expandc                 C   s¢  | j  ¡ }|sd S | j ¡ }| j}| j  ||¡}|s@|  ¡  d S | ddd¡ | ddd¡ |d }|d  ¡ }| j  	¡ r‚d}d}d}d  }	}
| 
¡  | j j||||d|d	 }rv|\}}| d
| d
|d  ¡}| ¡ }|  ||¡}|d u rôqv| ¡ \}}d||f }	d||f }
||kr0| d|
¡ n4| d|	¡ |	|
krR| |	|
¡ |rd| |	|¡ |t|ƒ }d}q–| ¡  |	r–|
r–|  |	|
¡ |  ¡  d S )NÚselú1.0ÚendÚhitr   é   TF)Úwrapr   ú%d.0ú%d.%dr   )r   Úgetprogr   r   r   Úsearch_textÚbellÚ
tag_removeÚstartZiswrapÚundo_block_startZsearch_forwardÚgroupr5   ÚspanÚmark_setÚdeleter   ÚlenÚundo_block_stopr   Úclose)r   r,   Úprogr3   r   ÚresÚlineÚcolr   r    r!   r2   ÚcharsZorigr4   ÚiÚjr   r   r   r(      sX    



ÿ

zReplaceDialog.replace_allFc           
      C   sv   | j  ¡ sdS | j}| j  |d |¡}|s4|  ¡  dS |\}}| ¡ \}}d||f }d||f }	|  ||	¡ d| _dS )NFr=   T)r   r>   r   r?   r@   rE   r   r   )
r   r   r   rL   rM   r2   rP   rQ   r    r!   r   r   r   r*   ¹   s    
zReplaceDialog.do_findc                 C   s  | j  ¡ }|sdS | j}z| d¡ }}| d¡}W n tyJ   d }Y n0 |sb| d¡ } }}t |¡\}}| d| d|d  ¡}| ||¡}	|sœdS |  	|	| j
 ¡ ¡}
|
d u rºdS | d|¡ | ¡  |	 ¡ râ| ||¡ |
rò| ||
¡ | ¡  |  || d¡¡ d| _dS )NFr   r   r   r<   r:   T)r   r>   r   r   r   r   Zget_line_colr   Úmatchr5   r   rF   rC   rD   rG   r   rI   r   r   )r   rK   r   r    Úposr!   rM   rN   rO   r2   r4   r   r   r   r.   Í   s:    

zReplaceDialog.do_replacec                 C   sv   | j }| d|¡ | ddd¡ | d||¡ | ddd¡ ||krR| d|¡ n| d||¡ | d¡ | ¡  d S )Nr   r6   r7   r8   r9   )r   rF   rA   Útag_addZseeZupdate_idletasks)r   r    r!   r   r   r   r   r   í   s    
zReplaceDialog.show_hitc                 C   s    t  | |¡ | j ddd¡ d S )Nr9   r7   r8   )r   rJ   r   rA   r+   r   r   r   rJ     s    zReplaceDialog.close)N)N)N)N)F)N)Ú__name__Ú
__module__Ú__qualname__ÚtitleZiconr   r   r"   r$   r%   r&   r'   r5   r(   r*   r.   r   rJ   Ú__classcell__r   r   r   r   r
      s   



8
 r
   c                    sî   ddl m}m}m‰ m‰ ddlm}m} || ƒ}| d¡ t	t
|  ¡  d¡dd … ƒ\}}| d||d f ¡ d	d
„ }dd„ }	||ƒ}
|
 ¡  ||
dd‰|ˆ_|	ˆ_ˆ ¡  ˆ dd¡ ˆ ¡  ‡ ‡‡fdd„}||
d|d}| ¡  d S )Nr   )ÚToplevelÚTextÚENDÚSEL)ÚFrameÚButtonzTest ReplaceDialogú+r:   z+%d+%dé¯   c                   S   s   d S r   r   r   r   r   r   rC     s    z)_replace_dialog.<locals>.undo_block_startc                   S   s   d S r   r   r   r   r   r   rI     s    z(_replace_dialog.<locals>.undo_block_stopZgray)Zinactiveselectbackgroundr   z"This is a sample sTring
Plus MORE.c                      s(   ˆ  ˆdˆ ¡ tˆƒ ˆ ˆdˆ ¡ d S )Nr7   )rT   r   rA   r   ©r\   r]   r   r   r   Úshow_replace#  s    z%_replace_dialog.<locals>.show_replacer   )r   Zcommand)ÚtkinterrZ   r[   r\   r]   Ztkinter.ttkr^   r_   rX   ÚmapÚintZgeometryÚsplitÚpackrC   rI   r   Z	focus_set)ÚparentrZ   r[   r^   r_   ÚtopÚxÚyrC   rI   Úframerc   Zbuttonr   rb   r   Ú_replace_dialog
  s&    
 rn   Ú__main__)Úmainzidlelib.idle_test.test_replaceé   F)Ú	verbosityÚexit)Úrun)r0   rd   r   r   Zidlelib.searchbaser   Zidlelibr   r   r
   rn   rU   Zunittestrp   Zidlelib.idle_test.htestrt   r   r   r   r   Ú<module>   s    l!