B
    _Ҕa$                 @   s   G d d de ZdS )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 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/d0 Zd1d2 Zd3S )4BaseStemmerc             C   s   |  d d S )N )set_current)self r   :lib/python3.7/site-packages/snowballstemmer/basestemmer.py__init__   s    zBaseStemmer.__init__c             C   s2   || _ d| _t| j | _d| _| j| _| j| _dS )z.
        Set the self.current string.
            N)currentcursorlenlimitlimit_backwardbraket)r   valuer   r   r   r      s    zBaseStemmer.set_currentc             C   s   | j S )z.
        Get the self.current string.
        )r	   )r   r   r   r   get_current   s    zBaseStemmer.get_currentc             C   s4   |j | _ |j| _|j| _|j| _|j| _|j| _d S )N)r	   r
   r   r   r   r   )r   otherr   r   r   	copy_from   s    zBaseStemmer.copy_fromc             C   sn   | j | jkrdS t| j| j  }||ks0||k r4dS ||8 }||d?  d|d@ > @ dkr\dS |  j d7  _ dS )NF         r   T)r
   r   ordr	   )r   sminmaxchr   r   r   in_grouping   s    zBaseStemmer.in_groupingc             C   sp   xj| j | jk rjt| j| j  }||ks.||k r2dS ||8 }||d?  d|d@ > @ dkrZdS |  j d7  _ qW dS )NTr   r   r   r   F)r
   r   r   r	   )r   r   r   r   r   r   r   r   go_in_grouping*   s    zBaseStemmer.go_in_groupingc             C   sr   | j | jkrdS t| j| j d  }||ks4||k r8dS ||8 }||d?  d|d@ > @ dkr`dS |  j d8  _ dS )NFr   r   r   r   T)r
   r   r   r	   )r   r   r   r   r   r   r   r   in_grouping_b5   s    zBaseStemmer.in_grouping_bc             C   st   xn| j | jkrnt| j| j d  }||ks2||k r6dS ||8 }||d?  d|d@ > @ dkr^dS |  j d8  _ qW dS )Nr   Tr   r   r   F)r
   r   r   r	   )r   r   r   r   r   r   r   r   go_in_grouping_bA   s    zBaseStemmer.go_in_grouping_bc             C   s|   | j | jkrdS t| j| j  }||ks0||k rB|  j d7  _ dS ||8 }||d?  d|d@ > @ dkrx|  j d7  _ dS dS )NFr   Tr   r   r   )r
   r   r   r	   )r   r   r   r   r   r   r   r   out_groupingL   s    zBaseStemmer.out_groupingc             C   sh   xb| j | jk rbt| j| j  }||krR||krR||8 }||d?  d|d@ > @ rRdS |  j d7  _ qW dS )Nr   r   r   TF)r
   r   r   r	   )r   r   r   r   r   r   r   r   go_out_groupingY   s    zBaseStemmer.go_out_groupingc             C   s   | j | jkrdS t| j| j d  }||ks4||k rF|  j d8  _ dS ||8 }||d?  d|d@ > @ dkr||  j d8  _ dS dS )NFr   Tr   r   r   )r
   r   r   r	   )r   r   r   r   r   r   r   r   out_grouping_bc   s    zBaseStemmer.out_grouping_bc             C   sl   xf| j | jkrft| j| j d  }||krV||krV||8 }||d?  d|d@ > @ rVdS |  j d8  _ qW dS )Nr   r   r   TF)r
   r   r   r	   )r   r   r   r   r   r   r   r   go_out_grouping_bp   s    zBaseStemmer.go_out_grouping_bc             C   sP   | j | j t|k rdS | j| j| jt|  |kr:dS |  jt|7  _dS )NFT)r   r
   r   r	   )r   r   r   r   r   eq_sz   s    zBaseStemmer.eq_sc             C   sP   | j | j t|k rdS | j| j t| | j  |kr:dS |  j t|8  _ dS )NFT)r
   r   r   r	   )r   r   r   r   r   eq_s_b   s    zBaseStemmer.eq_s_bc             C   sv  d}t |}| j}| j}d}d}d}x||| d?  }	d}
t||}||	 }x\t|t |jD ]H}|| |krtd}
P t| j||  t|j|  }
|
dkrP |d7 }q^W |
dk r|	}|}n|	}|}|| dkr&|dkrP ||krP |rP d}q&W x~|| }|t |jkr\|t |j | _|jd kr.|j	S t
| |j}| }|t |j | _|r\|j	S |j}|dk rdS qW dS )Nr   Fr   T)r   r
   r   r   ranger   r   r	   methodresultgetattrsubstring_i)r   vijclcommon_icommon_jfirst_key_inspectedkdiffcommonwi2r(   resr   r   r   
find_among   s`    
 zBaseStemmer.find_amongc             C   s  d}t |}| j}| j}d}d}d}x||| d?  }	d}
t||}||	 }xjtt |jd | ddD ]L}|| |kr~d}
P t| j|d |  t|j|  }
|
dkrP |d7 }qhW |
dk r|	}|}n|	}|}|| dkr&|dkrP ||krP |rP d}q&W x|| }|t |jkrj|t |j | _|jdkr<|j	S t
| |j}| }|t |j | _|rj|j	S |j}|dk rdS qW dS )zO
        find_among_b is for backwards processing. Same comments apply
        r   Fr   r&   TN)r   r
   r   r   r'   r   r   r	   r(   r)   r*   r+   )r   r,   r-   r.   r/   Zlbr1   r2   r3   r4   r5   r6   r7   r8   r(   r9   r   r   r   find_among_b   s`    
 $

zBaseStemmer.find_among_bc             C   sn   t |||  }| jd| | | j|d  | _|  j|7  _| j|krZ|  j|7  _n| j|krj|| _|S )z
        to replace chars between c_bra and c_ket in self.current by the
        chars in s.

        @type c_bra int
        @type c_ket int
        @type s: string
        r   N)r   r	   r   r
   )r   c_brac_ketr   
adjustmentr   r   r   	replace_s   s    	"

zBaseStemmer.replace_sc             C   s:   | j dk s2| j | jks2| j| jks2| jt| jkr6dS dS )Nr   FT)r   r   r   r   r	   )r   r   r   r   slice_check  s    2zBaseStemmer.slice_checkc             C   s&   d}|   r"| | j| j| d}|S )z 
        @type s string
        FT)r@   r?   r   r   )r   r   r)   r   r   r   
slice_from  s
    zBaseStemmer.slice_fromc             C   s
   |  dS )Nr   )rA   )r   r   r   r   	slice_del  s    zBaseStemmer.slice_delc             C   sB   |  |||}|| jkr&|  j|7  _|| jkr>|  j|7  _dS )zQ
        @type c_bra int
        @type c_ket int
        @type s: string
        N)r?   r   r   )r   r<   r=   r   r>   r   r   r   insert"  s
    

zBaseStemmer.insertc             C   s"   d}|   r| j| j| j }|S )z/
        Return the slice as a string.
        r   )r@   r	   r   r   )r   r)   r   r   r   slice_to.  s    zBaseStemmer.slice_toc             C   s   | j d| j S )z<
        Return the current string up to the limit.
        r   )r	   r   )r   r   r   r   	assign_to7  s    zBaseStemmer.assign_toc             C   s   |  | |   |  S )N)r   Z_stemr   )r   wordr   r   r   stemWord=  s    
zBaseStemmer.stemWordc                s    fdd|D S )Nc                s   g | ]}  |qS r   )rG   ).0rF   )r   r   r   
<listcomp>C  s    z)BaseStemmer.stemWords.<locals>.<listcomp>r   )r   Zwordsr   )r   r   	stemWordsB  s    zBaseStemmer.stemWordsN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r:   r;   r?   r@   rA   rB   rC   rD   rE   rG   rJ   r   r   r   r   r      s2   

::
	r   N)objectr   r   r   r   r   <module>       