B
    v9a0  ã               @   sz   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rvd dlmZ eddd dS )é    N)Ú	StringVarÚ
BooleanVarÚTclErrorc             C   s   t | dƒst| ƒ| _| jS )NÚ_searchengine)ÚhasattrÚSearchEnginer   )Úroot© r	   ú"/usr/lib/python3.7/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   sR   || _ 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   s
   | j  ¡ S )N)r   r   )r   r	   r	   r
   Úgetpat%   s    zSearchEngine.getpatc             C   s   | j  |¡ d S )N)r   Úset)r   Úpatr	   r	   r
   Úsetpat(   s    zSearchEngine.setpatc             C   s
   | j  ¡ S )N)r   r   )r   r	   r	   r
   Úisre+   s    zSearchEngine.isrec             C   s
   | j  ¡ S )N)r   r   )r   r	   r	   r
   Úiscase.   s    zSearchEngine.iscasec             C   s
   | j  ¡ S )N)r   r   )r   r	   r	   r
   Úisword1   s    zSearchEngine.iswordc             C   s
   | j  ¡ S )N)r   r   )r   r	   r	   r
   Úiswrap4   s    zSearchEngine.iswrapc             C   s
   | j  ¡ S )N)r   r   )r   r	   r	   r
   Úisback7   s    zSearchEngine.isbackc             C   s    |   ¡ rt |¡}|  |¡ d S )N)r   ÚreÚescaper   )r   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	   r
   ÚgetcookedpatC   s    
zSearchEngine.getcookedpatc          
   C   s¨   |   ¡ }|s|  |d¡ d S |  ¡ }d}|  ¡ s:|tjB }yt ||¡}W nX tjk
r¢ } z8|j}|d }t	|ƒdkr€|d nd}|  |||¡ d S d }~X Y nX |S )NzEmpty regular expressionr   é   é   éÿÿÿÿ)
r   Úreport_errorr!   r   r   Ú
IGNORECASEÚcompileÚerrorÚargsÚlen)r   r   ÚflagsÚprogZwhatr)   ÚmsgÚcolr	   r	   r
   ÚgetprogK   s"    
zSearchEngine.getprogr$   c             C   sN   dt |ƒ }|r |d t |ƒ }|dkr8|d t |ƒ }tjd|| jd d S )NzError: z

Pattern: r   z	
Offset: zRegular expression error)Zmaster)ÚstrÚtkMessageBoxZ	showerrorr   )r   r   r-   r.   r	   r	   r
   r%   _   s    zSearchEngine.report_errorNr   c             C   s”   |s|   ¡ }|sd S | j ¡ }t|ƒ\}}|  ¡ rb|r<|}n|}t|ƒ\}}	|  ||||	||¡}
n.|rl|}n|}t|ƒ\}}	|  ||||	||¡}
|
S )N)r/   r   r   Úget_selectionr   Úget_line_colÚsearch_backwardÚsearch_forward)r   Útextr,   ÚokÚwrapÚfirstÚlastÚstartÚliner.   Zresr	   r	   r
   Úsearch_texti   s$    
zSearchEngine.search_textc             C   s´   d}|}|  d| d|d  ¡}	xŽ|	r®| |	d d… |¡}
|
rV|sN|
 ¡ |krV||
fS |d }|rl||krlP d}d}|  d| d|d  ¡}	|	s"|r"d}d}d}|  dd¡}	q"W d S )Nr   z%d.0r#   r$   z1.0z2.0)r   ÚsearchÚend)r   r6   r,   r<   r.   r8   r7   ÚwrappedÚ	startlineÚcharsÚmr	   r	   r
   r5   ‘   s(    zSearchEngine.search_forwardc             C   sÌ   d}|}|  d| d|d  ¡}	x¦t||	d d… |ƒ}
|
rR|sJ|
 ¡ |k rR||
fS |d }|rh||k rhP d}|dkr |szP d}d}| d¡}tt| d¡ƒ\}}|  d| d|d  ¡}	t|	ƒd }q"W d S )Nr   z%d.0r#   r$   zend-1cÚ.)r   Úsearch_reverser;   ÚindexÚmapÚintÚsplitr*   )r   r6   r,   r<   r.   r8   r7   r@   rA   rB   rC   Úposr	   r	   r
   r4   §   s,    
zSearchEngine.search_backward)r$   )Nr   )r   )r   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   r    r!   r/   r%   r=   r5   r4   r	   r	   r	   r
   r      s   


(
r   c             C   sn   |   |¡}|sd S d }| ¡ \}}xF||k rh||krh|}||krH|d }|   ||¡}|sZP | ¡ \}}q$W |S )Nr#   )r>   Úspan)r,   rB   r.   rC   ÚfoundÚiÚjr	   r	   r
   rE   À   s    
rE   c             C   sT   y|   d¡}|   d¡}W n tk
r4   d  }}Y nX |sD|   d¡}|sL|}||fS )Nz	sel.firstzsel.lastÚinsert)rF   r   )r6   r9   r:   r	   r	   r
   r2   ×   s    

r2   c             C   s   t t|  d¡ƒ\}}||fS )NrD   )rG   rH   rI   )rF   r<   r.   r	   r	   r
   r3   å   s    r3   Ú__main__)Úmainz#idlelib.idle_test.test_searchenginer"   )Ú	verbosity)r   Ztkinterr   r   r   Ztkinter.messageboxZ
messageboxr1   r   r   rE   r2   r3   rK   ZunittestrT   r	   r	   r	   r
   Ú<module>   s    .