o
     JAf7                     @   s   	 d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZ dddZdd	 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 dS )    N)	StringVar
BooleanVar)Checkbutton)SearchDialogBase)searchenginec                 C   sP   	 |   }t|}t|dst||||_|j}| dd}|| || d S )N_grepdialogz	sel.firstzsel.last)_rootr   gethasattr
GrepDialogr   open)textioflistrootengineZdialogsearchphrase r   #/usr/lib/python3.10/idlelib/grep.pygrep   s   

r   c                 C   s   	 t |  d S N)print)msgr   r   r   
walk_error+   s   r   c                 #   sF    	 t j| tdD ]\ }} fdd|D E d H  |s  d S q	d S )N)onerrorc                 3   s*    | ]}t  |rtj |V  qd S r   )fnmatchospathjoin).0namedirpathpatternr   r   	<genexpr>9   s
    
zfindfiles.<locals>.<genexpr>)r   walkr   )folderr#   	recursive_	filenamesr   r!   r   	findfiles0   s   r*   c                       s^   e Zd Z	 dZdZdZ fddZdddZd	d
 Zdd Z	dd Z
dddZdd Z  ZS )r   zFind in Files DialogZGrepr   c                    s.   	 t  || || _t|| _t|| _d S r   )super__init__r   r   globvarr   recvar)selfr   r   r   	__class__r   r   r,   G   s
   
zGrepDialog.__init__Nc           	      C   sj   	 t | || |r|jpd}nd}tj|\}}tj|\}}|s&d}| jtj	|d|  d S )N z.py*)
r   r   filenamer   r   splitsplitextr-   setr   )	r/   r   r   r   r   dirbaseheadtailr   r   r   r   Z   s   
zGrepDialog.openc                 C   s$   	 t |  | d| jd | _d S )Nz	In files:r   )r   create_entriesZ
make_entryr-   Zglobentr/   r   r   r   r<   p   s   
zGrepDialog.create_entriesc                 C   s,   	 t |  d | jdd}|jddd d S )Nr   zRecurse down subdirectories)variabler   topZboth)Zsidefill)r   Z
make_framer.   pack)r/   Zbtnr   r   r   create_other_buttonsu   s   zGrepDialog.create_other_buttonsc                 C   s"   	 t |  | jd| jdd d S )NzSearch FilesT)Zisdef)r   create_command_buttonsZmake_buttondefault_commandr=   r   r   r   rC   |   s   
z!GrepDialog.create_command_buttonsc                 C   sp   	 | j  }|s
d S | j }|s| j  d S ddlm} tj	}z|| j
t_	| || W |t_	d S |t_	w )Nr   )OutputWindow)r   Zgetprogr-   r	   r?   ZbellZidlelib.outwinrE   sysstdoutr   grep_it)r/   eventprogr   rE   saver   r   r   rD      s   


zGrepDialog.default_commandc                 C   sX  	 t j|\}}|st j}tt||| j }|   | j	
 }td|d| d d}zr|D ]`}zHt|dd8}	t|	dD ]*\}
}|dd  d	krS|d d }||rktj| d
|
 d
| d	 |d7 }qAW d    n1 svw   Y  W q2 ty } z
t| W Y d }~q2d }~ww t|rd| dnd W d S  ty   Y d S w )Nz
Searching z in z ...r   replace)errors   
z: zHits found: z'
(Hint: right-click to open locations.)zNo hits.)r   r   r5   curdirsortedr*   r.   r	   closer   Zgetpatr   r   	enumeratesearchrF   rG   writeOSErrorAttributeError)r/   rJ   r   r&   ZfilepatZfilelistpathitsfnflinenoliner   r   r   r   rH      sF   


zGrepDialog.grep_itr   )__name__
__module____qualname__titleZiconZneedwrapbuttonr,   r   r<   rB   rC   rD   rH   __classcell__r   r   r0   r   r   @   s    

r   c                    s   ddl m}m}mm  ddlm}m} ddlm	} || }|
d tt|  ddd  \}}|d| d|d   ||||}	|	  ||	d	d
   fdd}
||	d|
d}|  d S )Nr   )ToplevelTextSELEND)FrameButton)PyShellFileListzTest GrepDialog+rN         )Zheightc                      s,    d  td d  d S )Nz1.0)r   )Ztag_addr   Z
tag_remover   rg   rf   r   r   r   r   show_grep_dialog   s   z&_grep_dialog.<locals>.show_grep_dialogzShow GrepDialog)r   Zcommand)tkinterrd   re   rf   rg   tkinter.ttkrh   ri   Zidlelib.pyshellrj   rb   mapintZgeometryr5   rA   )parentrd   re   rh   ri   rj   r?   xyframero   Zbuttonr   rn   r   _grep_dialog   s   
 rx   __main__)mainzidlelib.idle_test.test_grep   F)	verbosityexit)run)NN)r   r   rF   rp   r   r   rq   r   Zidlelib.searchbaser   Zidlelibr   r   r   r*   r   rx   r_   Zunittestrz   Zidlelib.idle_test.htestr~   r   r   r   r   <module>   s(    
 