
    z%i7                         	 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       yy)    N)	StringVar
BooleanVar)Checkbutton)SearchDialogBase)searchenginec                     	 | j                         }t        j                  |      }t        |d      st	        |||      |_        |j
                  }| j                  dd      }|j                  | ||       y )N_grepdialogz	sel.firstzsel.last)_rootr   gethasattr
GrepDialogr	   open)textioflistrootenginedialogsearchphrases          @/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/idlelib/grep.pygrepr      sj     ::<Dd#F6=)'fe<F88K4L
KKlB'    c                     	 t        |        y N)print)msgs    r   
walk_errorr   +   s    	#Jr   c              #      K   	 t        j                  | t              D ]  \  }}fd|D        E d {    |r y  y 7 w)N)onerrorc              3      K   | ]:  }t        j                   |      r"t        j                  j                  |       < y wr   )fnmatchospathjoin).0namedirpathpatterns     r   	<genexpr>zfindfiles.<locals>.<genexpr>9   s6      7tW5 GGLL$/ 7s   A A)r"   walkr   )folderr(   	recursive_	filenamesr'   s    `   @r   	findfilesr/   0   sS      "$!D I7 )7 	7 	7 	7s   3AAAA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                 v    	 t         |   ||       || _        t        |      | _        t        |      | _        y r   )super__init__r   r   globvarr   recvar)selfr   r   r   	__class__s       r   r4   zGrepDialog.__init__G   s7    	 	v&
  &r   c                 f   	 t        j                  | ||       |r|j                  xs d}nd}t        j                  j                  |      \  }}t        j                  j                  |      \  }}|sd}| j                  j                  t        j                  j                  |d|z                y )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;;$"DDGGMM$'	TWW%%d+
dDc3:67r   c                 x    	 t        j                  |        | j                  d| j                        d   | _        y )Nz	In files:r   )r   create_entries
make_entryr5   globentr7   s    r   rE   zGrepDialog.create_entriesp   s.    C''-{DLLA!Dr   c                 ~    	 t        | j                         d   | j                  d      }|j                  dd       y )Nr   zRecurse down subdirectories)variabler   topboth)sidefill)r   
make_framer6   pack)r7   btns     r   create_other_buttonszGrepDialog.create_other_buttonsu   s9    :!!$t{{24 	e&)r   c                 l    	 t        j                  |        | j                  d| j                  d       y )NzSearch FilesT)isdef)r   create_command_buttonsmake_buttondefault_commandrH   s    r   rU   z!GrepDialog.create_command_buttons|   s.    F//5)=)=TJr   c                 l   	 | j                   j                         }|sy | j                  j                         }|s| j                  j                          y ddlm} t        j                  }	  || j                        t        _	        | j                  ||       |t        _	        y # |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    	 {{""$||!HHMMO/zz	%djj1CJLLt$CJCJs   --B& &B3c                    	 t         j                  j                  |      \  }}|st         j                  }t	        t        ||| j                  j                                     }| j                          | j                  j                         }t        d|d| d       d}	 |D ]z  }	 t        |d      5 }	t        |	d      D ]Q  \  }
}|dd  d	k(  r|d d }|j                  |      s%t        j                   j#                  | d
|
 d
| d	       |dz  }S 	 d d d        | t        |rd| d       y d       y # 1 sw Y   $xY w# t$        $ r}t        |       Y d }~d }~ww xY w# t&        $ r Y y 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   sz   
	 ''---YYF)FGT[[__5FGH

kk  "
3'dV401	 
	b3 *q,5aO *LFD#BCyD0'+CRy#{{40 #

 0 0B4r&D61L M $	**
  !&NO +)+* *  #JJ  	 	s`   #E( )E61D;(/D;E E( 4E( ;E	 E	E%E E(  E%%E( (	E43E4r   )__name__
__module____qualname__titleiconneedwrapbuttonr4   r   rE   rR   rU   rW   r_   __classcell__)r8   s   @r   r   r   @   s:    *"EDN'&8,E
*K
.%r   r   c                    ddl m}m}mm ddlm}m} ddlm	}  ||       }|j                  d       t        t        | j                         j                  d      dd        \  }}|j                  d| d|dz            ||       ||      }	|	j                           ||	d	
      j                          fd}
 ||	d|
      }|j                          y )Nr   )ToplevelTextSELEND)FrameButton)PyShellFileListzTest GrepDialog+rf         )heightc                  l    j                  d        t               j                  d        y )Nz1.0)r   )tag_addr   
tag_remove)r   r   r   r   s   r   show_grep_dialogz&_grep_dialog.<locals>.show_grep_dialog   s-    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      s    00)/
6
CII sFOO%++C045DAqLL1QCqS	"#C E#JE	JJLa DIIK)
 E 1;KLF
KKMr   __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      so   
  	 
 ) # /  (.
 }! }@0 z	&!%@+ r   