
\[\                 @   s   d  d l  Td  d l m Z d  d l m Z d  d l Z d d   Z Gd d   d e  Z d	 d
   Z e	 d k r d  d l
 m Z e e  n  d S)    )*)SearchEngine)SearchDialogBaseNc             C   sY   |  j    } t j |  } t | d  s? t | |  | _ n  | j } | j |   d  S)N_replacedialog)Z_rootr   gethasattrReplaceDialogr   open)textrootengineZdialog r   +/usr/lib/python3.4/idlelib/ReplaceDialog.pyreplace   s    	r   c               @   s   e  Z d  Z d Z d Z 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 d S)r   zReplace DialogReplacec             C   s&   t  j |  | |  t |  |  _ d  S)N)r   __init__Z	StringVarreplvar)selfr   r   r   r   r   r      s    zReplaceDialog.__init__c             C   s   t  j |  |  y | j d  } Wn t k
 r= d  } Yn Xy | j d  } Wn t k
 rk d  } Yn X| p~ | j d  } | p | } |  j | |  d |  _ d  S)Nz	sel.firstzsel.lastinsert   )r   r	   indexTclErrorshow_hitok)r   r
   firstlastr   r   r   r	      s    zReplaceDialog.openc             C   s-   t  j |   |  j d |  j  d |  _ d  S)NzReplace with:r   )r   create_entriesZ
make_entryr   Zreplent)r   r   r   r   r   )   s    zReplaceDialog.create_entriesc             C   s`   t  j |   |  j d |  j  |  j d |  j  |  j d |  j d  |  j d |  j  d  S)NZFindr   zReplace+Findr   zReplace All)r   create_command_buttonsZmake_buttonfind_it
replace_itdefault_commandreplace_all)r   r   r   r   r   -   s
    z$ReplaceDialog.create_command_buttonsNc             C   s   |  j  d  d  S)Nr   )do_find)r   eventr   r   r   r   4   s    zReplaceDialog.find_itc             C   s#   |  j  |  j  r |  j   n  d  S)N)r"   r   
do_replace)r   r#   r   r   r   r   7   s    zReplaceDialog.replace_itc             C   s5   |  j  |  j  r1 |  j   r1 |  j  d  q1 n  d  S)Nr   )r"   r   r$   )r   r#   r   r   r   r    ;   s    zReplaceDialog.default_commandc             C   s`   |  j  j   rV y | j |  } Wq\ t j k
 rR |  j  j | d  d } Yq\ Xn | } | S)za Helper function for expanding a regular expression
            in the replace field, if needed. zInvalid Replace ExpressionN)r   ZisreexpandreerrorZreport_error)r   mreplnewr   r   r   _replace_expandA   s    zReplaceDialog._replace_expandc             C   sA  |  j  j   } | s d  S|  j j   } |  j } |  j  j | |  } | sZ | j   d  S| j d d d  | j d d d  | d } | d j   } |  j  j	   r d } d } n  d } d  }	 }
 | j
   x5|  j  j | | | | d |  } | s Pn  | \ } } | j d | d | d  } | j   } |  j | |  } | d  k rXPn  | j   \ } } d | | f }	 d | | f }
 | | k r| j d	 |
  nH | j d	 |	  |	 |
 k r| j |	 |
  n  | r| j |	 |  n  | t |  } d } q | j   |	 r3|
 r3|  j |	 |
  n  |  j   d  S)
Nselz1.0endhitr   r   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!   O   sZ    	

	

!	
zReplaceDialog.replace_allr   c       
      C   s   |  j  j   s d S|  j } |  j  j | d  |  } | sH | j   d S| \ } } | j   \ } } d | | f } d | | f }	 |  j | |	  d |  _ d S)NFz%d.%dr   T)r   r/   r
   r0   r1   r6   r   r   )
r   r   r
   r=   r>   r(   rA   rB   r   r   r   r   r   r"      s    	
	zReplaceDialog.do_findc             C   s  |  j  j   } | s d S|  j } y& | j d  } } | j d  } Wn t k
 rb d  } Yn X| s | j d  } } } n  t j |  \ } } | j d | d | d  } | j | |  }	 | s d S|  j	 |	 |  j
 j    }
 |
 d  k r d S| j d |  | j   |	 j   r6| j | |  n  |
 rO| j | |
  n  | j   |  j | | j d   d |  _ d S)	NFz	sel.firstzsel.lastr   z%d.0r   r   T)r   r/   r
   r   r   r   Zget_line_colr   matchr+   r   r7   r4   r5   r8   r   r:   r   r   )r   r<   r
   r   posr   r>   r?   r@   r(   r*   r   r   r   r$      s:    	

	zReplaceDialog.do_replacec             C   s   |  j  } | j d |  | j d d d  | j d | |  | j d d d  | | k rq | j d |  n | j d | |  | j d  | j   d  S)Nr   r,   z1.0r-   r.   )r
   r7   r2   tag_addZseeZupdate_idletasks)r   r   r   r
   r   r   r   r      s    	zReplaceDialog.show_hitc             C   s*   t  j |  |  |  j j d d d  d  S)Nr.   z1.0r-   )r   r;   r
   r2   )r   r#   r   r   r   r;      s    zReplaceDialog.close)__name__
__module____qualname__titleZiconr   r	   r   r   r   r   r    r+   r!   r"   r$   r   r;   r   r   r   r   r      s   1r   c       
         s   t    } | j d  t t t t j d |  j      \ } } } } | j d | | d f  d d   } d d   } t |    |   _	 |   _
   j     j d	 d
 d    f d d   } t | d d d | }	 |	 j   d  S)NzTest ReplaceDialogz[x+]z+%d+%d   c               S   s   d  S)Nr   r   r   r   r   r4      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_stopr   zThis is a sample string.

   c                  s4     j  t d t  t      j t d t  d  S)Nz1.0)rE   ZSELZENDr   r2   r   )r
   r   r   show_replace   s    
z%_replace_dialog.<locals>.show_replacer
   r   Zcommand)ZTkrI   listmapintr&   splitZgeometryZTextr4   r:   Zpackr   ZButton)
parentr   widthZheightxyr4   r:   rL   Zbuttonr   )r
   r   _replace_dialog   s    	3		
rU   __main__)run)ZtkinterZidlelibr   Zidlelib.SearchDialogBaser   r&   r   r   rU   rF   Zidlelib.idle_test.htestrW   r   r   r   r   <module>   s   
	