B
    v9a¡&  ã               @   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)Z_rootr   ÚgetÚhasattrÚReplaceDialogr   Úopen)ÚtextÚrootÚengineZdialog© r   ú/usr/lib/python3.7/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  | |¡ y| d¡}W n tk
r2   d }Y nX y| d¡}W n tk
rZ   d }Y nX |ph| d¡}|pp|}|  ||¡ d| _d S )Nz	sel.firstz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_all)r   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 )N)r#   r   Ú
do_replace)r   r$   r   r   r   r    a   s    zReplaceDialog.replace_itc             C   s"   |   | j¡r|  ¡ r|   d¡ d S )NF)r#   r   r%   )r   r$   r   r   r   r!   i   s    zReplaceDialog.default_commandc             C   sL   | j  ¡ rDy| |¡}W qH tjk
r@   | j  |d¡ d }Y qHX 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  }	}
| 
¡  xà| j j||||d|d	}|s¶P |\}}| d
| d
|d  ¡}| ¡ }|  ||¡}|d krôP | ¡ \}}d||f }	d||f }
||kr0| d|
¡ n4| d|	¡ |	|
krR| |	|
¡ |rd| |	|¡ |t|ƒ }d}q˜W | ¡  |	r˜|
r˜|  |	|
¡ |  ¡  d S )NÚselz1.0ÚendÚhitr   é   TF)Úwrapr   z%d.0z%d.%dr   )r   Úgetprogr   r   r   Úsearch_textÚbellÚ
tag_removeÚstartZiswrapÚundo_block_startZsearch_forwardÚgroupr,   ÚspanÚmark_setÚdeleter   ÚlenÚundo_block_stopr   Úclose)r   r$   Úprogr*   r   ÚresÚlineÚcolr   r   r   r)   ÚcharsZorigr+   ÚiÚjr   r   r   r"      s\    






zReplaceDialog.replace_allFc       
      C   sv   | j  ¡ sdS | j}| j  |d |¡}|s4|  ¡  dS |\}}| ¡ \}}d||f }d||f }	|  ||	¡ d| _dS )NFz%d.%dT)r   r2   r   r3   r4   r9   r   r   )
r   r   r   r@   rA   r)   rD   rE   r   r   r   r   r   r#   ¼   s    
zReplaceDialog.do_findc             C   s  | j  ¡ }|sdS | j}y| d¡ }}| d¡}W n tk
rL   d }Y nX |sd| d¡ } }}t |¡\}}| d| d|d  ¡}| ||¡}	|sždS |  	|	| j
 ¡ ¡}
|
d kr¼dS | d|¡ | ¡  |	 ¡ rä| ||¡ |
rô| ||
¡ | ¡  |  || d¡¡ d| _dS )NFz	sel.firstzsel.lastr   z%d.0r0   T)r   r2   r   r   r   r   Zget_line_colr   Úmatchr,   r   r:   r7   r8   r;   r   r=   r   r   )r   r?   r   r   Úposr   rA   rB   rC   r)   r+   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   r-   z1.0r.   r/   )r   r:   r5   Ú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 )Nr/   z1.0r.   )r   r>   r   r5   )r   r$   r   r   r   r>     s    zReplaceDialog.close)N)N)N)N)F)N)Ú__name__Ú
__module__Ú__qualname__ÚtitleZiconr   r
   r   r   r   r    r!   r,   r"   r#   r%   r   r>   Ú__classcell__r   r   )r   r   r	      s   



;
 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ú+r0   z+%d+%dé¯   c               S   s   d S )Nr   r   r   r   r   r7     s    z)_replace_dialog.<locals>.undo_block_startc               S   s   d S )Nr   r   r   r   r   r=     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 )Nz1.0)rH   r   r5   r   )rP   rQ   r   r   r   Úshow_replace&  s    z%_replace_dialog.<locals>.show_replacer   )r   Zcommand)ÚtkinterrN   rO   rP   rQ   Ztkinter.ttkrR   rS   rL   ÚmapÚintZgeometryÚsplitÚpackr7   r=   r   Z	focus_set)ÚparentrN   rO   rR   rS   ÚtopÚxÚyr7   r=   ÚframerV   Zbuttonr   )rP   rQ   r   r   Ú_replace_dialog  s&    
 ra   Ú__main__)Úmainzidlelib.idle_test.test_replaceé   F)Ú	verbosityÚexit)Úrun)r'   rW   r   r   Zidlelib.searchbaser   Zidlelibr   r   r	   ra   rI   Zunittestrc   Zidlelib.idle_test.htestrg   r   r   r   r   Ú<module>   s    o!