
    ;e7                         	 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Zd Zd Z G d	 d
e	          Zd Zedk    r'd dlmZ  eddd           d dlmZ  ee           dS dS )    N)	StringVar
BooleanVar)Checkbutton)SearchDialogBase)searchenginec                    	 |                                  }t          j        |          }t          |d          st	          |||          |_        |j        }|                     dd          }|                    | ||           d S )N_grepdialogz	sel.firstzsel.last)_rootr   gethasattr
GrepDialogr	   open)textioflistrootenginedialogsearchphrases          #/usr/lib/python3.11/idlelib/grep.pygrepr      s     ::<<Dd##F6=)) ='fe<<F88K44L
KKlB'''''    c                 &    	 t          |            d S N)print)msgs    r   
walk_errorr   +   s    	#JJJJJr   c              #      K   	 t          j        | t                    D ] \  }}fd|D             E d {V  |s d S !d S )N)onerrorc              3      K   | ]9}t          j         |          t          j                            |          V  :d S r   )fnmatchospathjoin).0namedirpathpatterns     r   	<genexpr>zfindfiles.<locals>.<genexpr>9   sX       7 7tW557BGLL$// 7 7 7 7 7 7r   )r"   walkr   )folderr(   	recursive_	filenamesr'   s    `   @r   	findfilesr/   0   s       "$!D!D!D  I7 7 7 7 7 )7 7 7 	7 	7 	7 	7 	7 	7 	7  	EE		 r   c                   T     e Zd Z	 dZdZdZ fdZddZd Zd Z	d	 Z
dd
Zd Z xZS )r   zFind in Files DialogGrepr   c                     	 t                                          ||           || _        t          |          | _        t          |          | _        d S r   )super__init__r   r   globvarr   recvar)selfr   r   r   	__class__s       r   r4   zGrepDialog.__init__G   sK    	 	v&&&
  &&r   Nc                 V   	 t          j        | ||           |r
|j        pd}nd}t          j                            |          \  }}t          j                            |          \  }}|sd}| j                            t          j        	                    |d|z                        d S )N z.py*)
r   r   filenamer"   r#   splitsplitextr5   setr$   )	r7   r   r   r   r#   dirbaseheadtails	            r   r   zGrepDialog.openZ   s    		 	dD,777 	;$"DDDGMM$''	TW%%d++
d 	Dc3:6677777r   c                 |    	 t          j        |            |                     d| j                  d         | _        d S )Nz	In files:r   )r   create_entries
make_entryr5   globentr7   s    r   rE   zGrepDialog.create_entriesp   s6    C'---{DLAA!Dr   c                     	 t          |                                 d         | j        d          }|                    dd           d S )Nr   zRecurse down subdirectories)variabler   topboth)sidefill)r   
make_framer6   pack)r7   btns     r   create_other_buttonszGrepDialog.create_other_buttonsu   sP    :!!!$t{24 4 4 	e&)))))r   c                 j    	 t          j        |            |                     d| j        d           d S )NzSearch FilesT)isdef)r   create_command_buttonsmake_buttondefault_commandrH   s    r   rU   z!GrepDialog.create_command_buttons|   s:    F/555)=TJJJJJr   c                 n   	 | j                                         }|sd S | j                                        }|s| j                                         d S ddlm} t          j	        }	  || j
                  t          _	        |                     ||           |t          _	        d S # |t          _	        w xY w)Nr   )OutputWindow)r   getprogr5   r   rK   bellidlelib.outwinrY   sysstdoutr   grep_it)r7   eventprogr#   rY   saves         r   rW   zGrepDialog.default_command   s    	 {""$$ 	F|!! 	HMMOOOF//////z	%dj11CJLLt$$$CJJJCJs   (0B& &B4c                 :   	 t           j                            |          \  }}|st           j        }t	          t          ||| j                                                            }|                                  | j	        
                                }t          d|d| d           d}	 |D ]}	 t          |d          5 }	t          |	d          D ]_\  }
}|dd          d	k    r
|d d         }|                    |          r-t          j                            | d
|
 d
| d	           |dz  }`	 d d d            n# 1 swxY w Y   # t$          $ r}t          |           Y d }~d }~ww xY wt          |rd| dnd           d S # t&          $ r Y d S w xY 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#   r=   curdirsortedr/   r6   r   closer   getpatr   r   	enumeratesearchr]   r^   writeOSErrorAttributeError)r7   ra   r#   r+   filepatfilelistpathitsfnflinenoliner   s                r   r_   zGrepDialog.grep_it   s9   
	 '---- 	YF)FGT[__5F5FGGHH

k  ""0300d000111	 
 
	b333 *q,5aOO * *LFD#BCCyD00'+CRCy#{{400 * #
 0 0B1L1L&1L1LD1L1L1L M M M $	** * * * * * * * * * * * * * *    #JJJJJJJJ*OOOOO)+ + + + + 	 	 	 DD	sa   -F 2EA1E5EE	EE		EF 
E0E+&F +E00F 
FFr   )__name__
__module____qualname__titleiconneedwrapbuttonr4   r   rE   rR   rU   rW   r_   __classcell__)r8   s   @r   r   r   @   s        *"EDN' ' ' ' '&8 8 8 8,E E E
* * *K K K
   .% % % % % % %r   r   c                 2   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z                ||           ||          }	|	                                  ||	d	
                                           fd}
 ||	d|
          }|                                 d S )Nr   )ToplevelTextSELEND)FrameButton)PyShellFileListzTest GrepDialog+rf         )heightc                                           d            t                                         d            d S )Nz1.0)r   )tag_addr   
tag_remove)r   r   r   r   s   r   show_grep_dialogz&_grep_dialog.<locals>.show_grep_dialog   sH    S%%%%TUC(((((r   zShow GrepDialog)r   command)tkinterr   r   r   r   tkinter.ttkr   r   idlelib.pyshellr   r}   mapintgeometryr=   rP   )parentr   r   r   r   r   rK   xyframer   buttonr   r   r   r   s               @@@@r   _grep_dialogr      sn   000000000000))))))))//////
(6

CII   sFOO%%++C00455DAqLL"Q""S""###OC  EE#JJE	JJLLL4a   DIIKKK) ) ) ) ) ) ) )
 VE 1;KLLLF
KKMMMMMr   __main__)mainzidlelib.idle_test.test_grep   F)	verbosityexit)run)NN)r!   r"   r]   r   r   r   r   r   idlelib.searchbaser   idlelibr   r   r   r/   r   r   rz   unittestr   idlelib.idle_test.htestr    r   r   <module>r      sQ  
  				 



 ) ) ) ) ) ) ) ) # # # # # # / / / / / /            ( ( ( (.  
   } } } } }! } } }@  0 zD	&!%@@@@++++++C r   