
    ;e                         	 d dl Z d dlmZmZmZ d dlmZ d Z G d d          Zd Zd Z	d	 Z
ed
k    rd dlmZ  edd           dS dS )    N)	StringVar
BooleanVarTclError)
messageboxc                 Z    	 t          | d          st          |           | _        | j        S )N_searchengine)hasattrSearchEnginer   )roots    +/usr/lib/python3.11/idlelib/searchengine.pygetr      s4    
 4)) 0)$//    c                   r    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZddZddZddZddZdS )r
   c                    	 || _         t          |d          | _        t          |d          | _        t          |d          | _        t          |d          | _        t          |d          | _        t          |d          | _        d S )N FT)	r   r   patvarr   revarcasevarwordvarwrapvarbackvar)selfr   s     r   __init__zSearchEngine.__init__   sz    	 	b))e,,
!$..!$..!$--!$..r   c                 4    | j                                         S N)r   r   r   s    r   getpatzSearchEngine.getpat%   s    {   r   c                 :    | j                             |           d S r   )r   setr   pats     r   setpatzSearchEngine.setpat(   s    r   c                 4    | j                                         S r   )r   r   r   s    r   isrezSearchEngine.isre+   s    z~~r   c                 4    | j                                         S r   )r   r   r   s    r   iscasezSearchEngine.iscase.       |!!!r   c                 4    | j                                         S r   )r   r   r   s    r   iswordzSearchEngine.isword1   r'   r   c                 4    | j                                         S r   )r   r   r   s    r   iswrapzSearchEngine.iswrap4   r'   r   c                 4    | j                                         S r   )r   r   r   s    r   isbackzSearchEngine.isback7   r'   r   c                     	 |                                  rt          j        |          }|                     |           d S r   )r$   reescaper"   r    s     r   setcookedpatzSearchEngine.setcookedpat<   s:    +99;; 	!)C..CCr   c                     |                                  }|                                 st          j        |          }|                                 rd|z  }|S )Nz\b%s\b)r   r$   r/   r0   r)   r    s     r   getcookedpatzSearchEngine.getcookedpatC   sJ    kkmmyy{{ 	!)C..C;;== 	"c/C
r   c                    	 |                                  }|s|                     |d           d S |                                 }d}|                                 s|t          j        z  }	 t	          j        ||          }n># t          j        $ r,}|                     ||j        |j	                   Y d }~d S d }~ww xY w|S )NzEmpty regular expressionr   )
r   report_errorr3   r&   r/   
IGNORECASEcompileerrormsgpos)r   r!   flagsproges        r   getprogzSearchEngine.getprogK   s    0kkmm 	c#=>>>4!!{{}} 	*BM)E	:c5))DDx 	 	 	c15!%00044444	 s   *B   B;!B66B;Nc                     dt          |          z   }|r|dz   t          |          z   }||dz   t          |          z   }t          j        d|| j                   d S )NzError: z

Pattern: z	
Offset: zRegular expression error)master)strr   	showerrorr   )r   r!   r9   cols       r   r5   zSearchEngine.report_error\   sw    #c((" 	1%C0C?$s3xx/C7"49	6 	6 	6 	6 	6 	6r   r   c                    	 |s|                                  }|sd S | j                                        }t          |          \  }}|                                 r4|r|}n|}t          |          \  }}	|                     ||||	||          }
n3|r|}n|}t          |          \  }}	|                     ||||	||          }
|
S r   )r>   r   r   get_selectionr-   get_line_colsearch_backwardsearch_forward)r   textr<   okwrapfirstlaststartlinerC   ress              r   search_textzSearchEngine.search_textf   s    	"  	<<>>D t|!!#D))t;;== 	G $U++ID#&&tT4dBGGCC $U++ID#%%dD$T2FFC
r   c                 r   d}|}|                     d|z  d|dz   z            }	|	r|                    |	d d         |          }
|
r|s|
                                |k    r||
fS |dz   }|r||k    rnEd}d}|                     d|z  d|dz   z            }	|	s|rd}d}d}|                     dd          }	|	d S )Nr   %d.0   z1.0z2.0)r   searchend)r   rI   r<   rO   rC   rK   rJ   wrapped	startlinecharsms              r   rH   zSearchEngine.search_forward   s   	$$q&(9:: 	/E#2#J,,A # #37N!8D 4)++CBHHVd]Fd1f,=>>E /T /..  	/  tr   c                    d}|}|                     d|z  d|dz   z            }		 t          ||	d d         |          }
|
r|s|
                                |k     r||
fS |dz
  }|r||k     rnd}|dk    rG|snvd}d}|                    d          }t	          t
          |                    d                    \  }}|                     d|z  d|dz   z            }	t          |	          dz
  }d S )Nr   rS   rT   TrU   zend-1c.)r   search_reverserN   indexmapintsplitlen)r   rI   r<   rO   rC   rK   rJ   rX   rY   rZ   r[   r:   s               r   rG   zSearchEngine.search_backward   s   	$$q&(9::	!tU3B3Z55A # #S7N!8D 4)++Bqyy jj**SYYs^^44	cHHVd]Fd1f,=>>Ee**q.C#	!$ tr   r   )Nr   )r   )__name__
__module____qualname__r   r   r"   r$   r&   r)   r+   r-   r1   r3   r>   r5   rQ   rH   rG    r   r   r
   r
      s       F/ / /! ! !       " " "" " "" " "" " "
      "6 6 6 6& & & &P   ,     r   r
   c                    	 |                      |          }|sd S d }|                                \  }}||k     rO||k    rI|}||k    r|dz   }|                      ||          }|sn#|                                \  }}||k     r||k    I|S )NrT   )rV   span)r<   rZ   rC   r[   foundijs          r   r^   r^      s     	EA tE6688DAq
c''a3hh66!AKKq!! 	vvxx1 c''a3hh Lr   c                     	 	 |                      d          }|                      d          }n# t          $ r d x}}Y nw xY w|s|                      d          }|s|}||fS )Nz	sel.firstzsel.lastinsert)r_   r   )rI   rL   rM   s      r   rE   rE      s    

;''zz*%%    %

8$$ $;s   *. ??c                 b    	 t          t          |                     d                    \  }}||fS )Nr]   )r`   ra   rb   )r_   rO   rC   s      r   rF   rF      s.    BCS))**ID#9r   __main__)mainz#idlelib.idle_test.test_searchengine   )	verbosity)r/   tkinterr   r   r   r   r   r
   r^   rE   rF   rd   unittestrq   rg   r   r   <module>rv      s    - 				 3 3 3 3 3 3 3 3 3 3      	 	 	g g g g g g g gT  .     zD	.!<<<<<< r   