o
     JAf'  ã                   @   s’   	 d dl Z d dlmZmZ d dlmZ d dlmZ ddd„ZG dd„ deƒZ	d	d
„ Z
edkrGd dlmZ edddd d dlmZ ee
ƒ dS dS )é    N)Ú	StringVarÚTclError)ÚSearchDialogBase)Úsearchenginec                 C   sB   	 |   ¡ }t |¡}t|dƒst||ƒ|_|j}|j| |d d S )NÚ_replacedialog)Úinsert_tags)Ú_rootr   ÚgetÚhasattrÚReplaceDialogr   Úopen)Útextr   ÚrootÚengineZdialog© r   ú&/usr/lib/python3.10/idlelib/replace.pyÚreplace   s   

r   c                       s”   e Zd Z	 dZdZ‡ fdd„Zd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 | _d S ©N)ÚsuperÚ__init__r   Úreplvarr   )Úselfr   r   ©Ú	__class__r   r   r   %   s   

zReplaceDialog.__init__Nc                 C   sŒ   	 t  | |¡ z| d¡}W n ty   d }Y nw z| d¡}W n ty,   d }Y nw |p3| d¡}|p7|}|  ||¡ d| _|| _d S )Nú	sel.firstúsel.lastÚinsertT)r   r   Úindexr   Úshow_hitÚokr   )r   r   r   ÚfirstÚlastr   r   r   r   6   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#   N   s   
zReplaceDialog.create_entriesc                 C   sL   	 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%   S   s   
z$ReplaceDialog.create_command_buttonsc                 C   s   	 |   d¡ d S ©NF)Údo_find©r   Úeventr   r   r   r&   _   s   zReplaceDialog.find_itc                 C   s   	 |   | j¡r|  ¡  d S d S r   ©r+   r    Ú
do_replacer,   r   r   r   r'   c   s   ÿzReplaceDialog.replace_itc                 C   s,   	 |   | j¡r|  ¡ r|   d¡ d S d S d S r*   r.   r,   r   r   r   r(   k   s   ýzReplaceDialog.default_commandc                 C   sN   	 | j  ¡ r#z| |¡}W |S  tjy"   | j  |d¡ d }Y |S w |}|S )NzInvalid Replace Expression)r   ZisreÚexpandÚreÚerrorZreport_error)r   ÚmÚreplÚnewr   r   r   Ú_replace_expandv   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  	¡ rBd}d}d}d  }	}
| 
¡  | j j||||d|d	 }rÆ|\}}| d
| d
|d  ¡}| ¡ }|  ||¡}|d u rynM| ¡ \}}d||f }	d||f }
||kr–| d|
¡ n| d|	¡ |	|
kr¦| |	|
¡ |r°| |	|| j¡ |t|ƒ }d}| j j||||d|d	 }sZ| ¡  |	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Úgroupr6   ÚspanÚmark_setÚdeleter   r   ÚlenÚundo_block_stopr   Úclose)r   r-   Úprogr4   r   ÚresÚlineÚcolr    r!   r"   r3   ÚcharsZorigr5   ÚiÚjr   r   r   r)   ƒ   s`   
	


ÿì
ÿzReplaceDialog.replace_allFc           
      C   sx   	 | j  ¡ sdS | j}| j  |d |¡}|s|  ¡  dS |\}}| ¡ \}}d||f }d||f }	|  ||	¡ d| _dS )NFr>   T)r   r?   r   r@   rA   rF   r   r    )
r   r    r   rM   rN   r3   rQ   rR   r!   r"   r   r   r   r+   »   s   
zReplaceDialog.do_findc                 C   s  	 | j  ¡ }|s
dS | j}z| d¡ }}| d¡}W n ty&   d }Y nw |s2| d¡ } }}t |¡\}}| d| d|d  ¡}| ||¡}	|sOdS |  	|	| j
 ¡ ¡}
|
d u r^dS | d|¡ | ¡  |	 ¡ rr| ||¡ |
r|| ||
| j¡ | ¡  |  || d¡¡ d| _dS )NFr   r   r   r=   r;   T)r   r?   r   r   r   r   Zget_line_colr	   Úmatchr6   r   rG   rD   rE   rH   r   r   rJ   r   r    )r   rL   r   r!   Úposr"   rN   rO   rP   r3   r5   r   r   r   r/   Ï   s>   
ÿzReplaceDialog.do_replacec                 C   sx   	 | j }| d|¡ | ddd¡ | d||¡ | ddd¡ ||kr*| d|¡ n| d||¡ | d¡ | ¡  d S )Nr   r7   r8   r9   r:   )r   rG   rB   Ú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 | _d S )Nr:   r8   r9   )r   rK   r   rB   r   r,   r   r   r   rK     s   
zReplaceDialog.closer   )F)Ú__name__Ú
__module__Ú__qualname__ÚtitleZiconr   r   r#   r%   r&   r'   r(   r6   r)   r+   r/   r   rK   Ú__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   ó   d S r   r   r   r   r   r   rD     ó   z)_replace_dialog.<locals>.undo_block_startc                   S   rc   r   r   r   r   r   r   rJ     rd   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 )Nr8   )rU   r   rB   r   ©r]   r^   r   r   r   Úshow_replace&  s   z%_replace_dialog.<locals>.show_replacer   )r   Zcommand)Útkinterr[   r\   r]   r^   Ztkinter.ttkr_   r`   rY   ÚmapÚintZgeometryÚsplitÚpackrD   rJ   r   Z	focus_set)Úparentr[   r\   r_   r`   ÚtopÚxÚyrD   rJ   Úframerf   Zbuttonr   re   r   Ú_replace_dialog  s&   
 rq   Ú__main__)Úmainzidlelib.idle_test.test_replaceé   F)Ú	verbosityÚexit)Úrunr   )r1   rg   r   r   Zidlelib.searchbaser   Zidlelibr   r   r   rq   rV   Zunittestrs   Zidlelib.idle_test.htestrw   r   r   r   r   Ú<module>   s    
 o!û