o
     JAf                     @   s   	 d dl Z d dlmZmZmZ d dlmZ dd ZG dd dZdd	 Zd
d Z	dd Z
edkr>d dlmZ eddd dS dS )    N)	StringVar
BooleanVarTclError)
messageboxc                 C   s   	 t | dst| | _| jS )N_searchengine)hasattrSearchEnginer   )root r
   +/usr/lib/python3.10/idlelib/searchengine.pyget   s   

r   c                   @   s   e Zd Z	 dd Zdd Zdd Zdd Zd	d
 Zdd Zd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d ZdS )$r   c                 C   sT   	 || _ 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	   r
   r
   r   __init__   s   zSearchEngine.__init__c                 C   
   | j  S N)r   r   r   r
   r
   r   getpat%      
zSearchEngine.getpatc                 C   s   | j | d S r   )r   setr   patr
   r
   r   setpat(   s   zSearchEngine.setpatc                 C   r   r   )r   r   r   r
   r
   r   isre+   r   zSearchEngine.isrec                 C   r   r   )r   r   r   r
   r
   r   iscase.   r   zSearchEngine.iscasec                 C   r   r   )r   r   r   r
   r
   r   isword1   r   zSearchEngine.iswordc                 C   r   r   )r   r   r   r
   r
   r   iswrap4   r   zSearchEngine.iswrapc                 C   r   r   )r   r   r   r
   r
   r   isback7   r   zSearchEngine.isbackc                 C   s"   	 |   r
t|}| | d S r   )r   reescaper   r   r
   r
   r   setcookedpat<   s   
zSearchEngine.setcookedpatc                 C   s.   |   }|  st|}|  rd| }|S )Nz\b%s\b)r   r   r$   r%   r!   r   r
   r
   r   getcookedpatC   s   
zSearchEngine.getcookedpatc              
   C   s   	 |   }|s| |d d S |  }d}|  s|tjB }z	t||}W |S  tjyD } z| ||j|j	 W Y d }~d S d }~ww )NzEmpty regular expressionr   )
r   report_errorr'   r    r$   
IGNORECASEcompileerrormsgpos)r   r   flagsproger
   r
   r   getprogK   s"   
zSearchEngine.getprogNc                 C   sN   dt | }|r|d t | }|d ur|d t | }tjd|| jd d S )NzError: z

Pattern: z	
Offset: zRegular expression error)Zmaster)strr   Z	showerrorr	   )r   r   r,   colr
   r
   r   r(   \   s   
zSearchEngine.report_errorr   c                 C   s   	 |s|   }|sd S | j }t|\}}|  r3|r|}n|}t|\}}	| ||||	||}
|
S |r8|}n|}t|\}}	| ||||	||}
|
S r   )r1   r   r   get_selectionr#   get_line_colsearch_backwardsearch_forward)r   textr/   okwrapfirstlaststartliner3   resr
   r
   r   search_textf   s(   
zSearchEngine.search_textc                 C   s   d}|}| d| d|d  }	|	rY||	d d |}
|
r*|s&|
 |kr*||
fS |d }|r7||kr7	 d S d}d}| d| d|d  }	|	sW|rWd}d}d}| dd}	|	sd S )Nr   %d.0   z1.0z2.0)r   searchend)r   r8   r/   r>   r3   r:   r9   wrapped	startlinecharsmr
   r
   r   r7      s,   	zSearchEngine.search_forwardc                 C   s   d}|}| d| d|d  }		 t||	d d |}
|
r)|s%|
 |k r)||
fS |d }|r6||k r6	 d S d}|dkrT|sA	 d S d}d}|d}tt|d\}}| d| d|d  }	t|	d }q)Nr   rA   rB   TrC   zend-1c.)r   search_reverser=   indexmapintsplitlen)r   r8   r/   r>   r3   r:   r9   rF   rG   rH   rI   r-   r
   r
   r   r6      s0   
zSearchEngine.search_backwardr   )Nr   )r   )__name__
__module____qualname__r   r   r   r   r    r!   r"   r#   r&   r'   r1   r(   r@   r7   r6   r
   r
   r
   r   r      s"    



(r   c                 C   s~   	 |  |}|s
d S d }| \}}||k r=||kr=|}||kr$|d }|  ||}|s/	 |S | \}}||k r=||ks|S )NrB   )rD   span)r/   rH   r3   rI   foundijr
   r
   r   rK      s"   
rK   c                 C   sT   	 z|  d}|  d}W n ty   d  }}Y nw |s"|  d}|s&|}||fS )Nz	sel.firstzsel.lastinsert)rL   r   )r8   r;   r<   r
   r
   r   r4      s   

r4   c                 C   s   	 t t| d\}}||fS )NrJ   )rM   rN   rO   )rL   r>   r3   r
   r
   r   r5      s   r5   __main__)mainz#idlelib.idle_test.test_searchengine   )	verbosity)r$   tkinterr   r   r   r   r   r   rK   r4   r5   rQ   ZunittestrZ   r
   r
   r
   r   <module>   s     +