<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
 fN                 @   s   d Z 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rddlmZ edddd ddlmZ ee dS )zReplace 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)searchenginec             C   s<   | j  }tj|}t|ds(t|||_|j}|j|  dS )zvReturns a singleton ReplaceDialog instance.The single dialog
     saves user entries and preferences across instances._replacedialogN)Z_rootr   gethasattrReplaceDialogr   open)textrootengineZdialog r   4/opt/alt/python36/lib64/python3.6/idlelib/replace.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__r   replvar)selfr   r   r   r   r   r      s    zReplaceDialog.__init__c             C   s   t j| | y|jd}W n tk
r2   d}Y nX y|jd}W n tk
rZ   d}Y nX |ph|jd}|pp|}| j|| d| _dS )zDisplay the replace dialogz	sel.firstNzsel.lastinsert   )r   r
   indexr   show_hitok)r   r   firstlastr   r   r   r
   !   s    

zReplaceDialog.openc             C   s"   t j|  | jd| jd | _dS )z#Create label and text entry widgetszReplace with:r   N)r   create_entriesZ
make_entryr   Zreplent)r   r   r   r   r   1   s    
zReplaceDialog.create_entriesc             C   sH   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   6   s
    
z$ReplaceDialog.create_command_buttonsNc             C   s   | j d d S )Nr   )do_find)r   eventr   r   r   r   =   s    zReplaceDialog.find_itc             C   s   | j | jr| j  d S )N)r"   r   
do_replace)r   r#   r   r   r   r   @   s    zReplaceDialog.replace_itc             C   s"   | j | jr| j r| j d dS )zReplace and find next.r   N)r"   r   r$   )r   r#   r   r   r   r    D   s    zReplaceDialog.default_commandc             C   sL   | j j rDy|j|}W qH tjk
r@   | j j|d d}Y qHX n|}|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_expandK   s    
zReplaceDialog._replace_expandc             C   s  | j j }|sdS | jj }| j}| j j||}|s@| j  dS |jddd |jddd |d }|d j }| j j	 rd}d}d}d }	}
|j
  x| j j||||d|}|sP |\}}|jd| d|d  }|j }| j||}|dkrP |j \}}d	||f }	d	||f }
||kr.|jd
|
 n4|jd
|	 |	|
krP|j|	|
 |rb|j|	| |t| }d}qW |j  |	r|
r| j|	|
 | j  dS )z4Replace all instances of patvar with replvar in textN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!   Y   sZ    




zReplaceDialog.replace_allr   c       
      C   sv   | j j sdS | j}| j j|d |}|s4| 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}W n tk
rL   d }Y nX |sd|jd } }}tj|\}}|jd| d|d  }|j||}	|sdS | j	|	| j
j }
|
d krdS |jd| |j  |	j r|j|| |
r|j||
 |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   sv   | j }|jd| |jddd |jd|| |jddd ||krR|jd| n|jd|| |jd |j  dS )zMHighlight text from 'first' to 'last'.
        'first', 'last' - Text indicesr   r,   z1.0r-   r.   N)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)N)N)N)N)r   )N)__name__
__module____qualname__titleZiconr   r
   r   r   r   r   r    r+   r!   r"   r$   r   r;   r   r   r   r   r	      s   



2
r	   c                s   ddl m}m}m m ddlm} || }|jd tt	| j
 jddd  \}}|j
d||d f  d	d
 }dd }||dd|_|_j  jdd j   fdd}	||d|	d}
|
j  d S )Nr   )ToplevelTextENDSEL)ButtonzTest ReplaceDialog+r   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_stopZgray)Zinactiveselectbackgroundr   z"This is a sample sTring
Plus MORE.c                  s(   j d  t jd  d S )Nz1.0)rE   r   r2   r   )rL   rM   r   r   r   show_replace   s    z%_replace_dialog.<locals>.show_replacer   )r   Zcommand)tkinterrJ   rK   rL   rM   Ztkinter.ttkrN   rI   mapintZgeometrysplitr4   r:   Zpackr   Z	focus_set)parentrJ   rK   rN   Zboxxyr4   r:   rQ   Zbuttonr   )rL   rM   r   r   _replace_dialog   s"    
 rY   __main__)mainzidlelib.idle_test.test_replace   F)	verbosityexit)run)__doc__r&   rR   r   r   Zidlelib.searchbaser   Zidlelibr   r   r	   rY   rF   Zunittestr[   Zidlelib.idle_test.htestr_   r   r   r   r   <module>   s    7