a
    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.9/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maxZchr   r   r   in_grouping   s    zBaseStemmer.in_groupingc                 C   sl   | j | jk rht| j| j  }||ks,||k r0dS ||8 }||d?  d|d@ > @ dkrXdS |  j d7  _ q dS )NTr   r   r   r
   Fr   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   in_grouping_b5   s    zBaseStemmer.in_grouping_bc                 C   sp   | j | jkrlt| j| j d  }||ks0||k r4dS ||8 }||d?  d|d@ > @ dkr\dS |  j d8  _ q dS )Nr   Tr   r   r
   Fr"   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   out_groupingL   s    zBaseStemmer.out_groupingc                 C   sd   | j | jk r`t| j| j  }||krP||krP||8 }||d?  d|d@ > @ rPdS |  j d7  _ q dS )Nr   r   r   TFr   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 r%   r"   r   r   r   r   out_grouping_bc   s    zBaseStemmer.out_grouping_bc                 C   sh   | j | jkrdt| j| j d  }||krT||krT||8 }||d?  d|d@ > @ rTdS |  j d8  _ q dS )Nr   r   r   TFr"   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 r*   )r   r   r   r   r+   r   r   r   eq_s_b   s    zBaseStemmer.eq_s_bc                 C   sn  d}t |}| j}| j}d}d}d}||| d?  }	d}
t||}||	 }t|t |jD ]L}|| |krrd}
 qt| j||  t|j|  }
|
dkr q|d7 }qZ|
dk r|	}|}n|	}|}|| dkr$|dkrq||krq|rqd}q$|| }|t |jkrV|t |j | _|jd u r(|j	S t
| |j}| }|t |j | _|rV|j	S |j}|dk rdS qd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i2r0   resr   r   r   
find_among   s\    
 
zBaseStemmer.find_amongc                 C   s|  d}t |}| j}| j}d}d}d}||| d?  }	d}
t||}||	 }tt |jd | ddD ]P}|| |kr|d}
 qt| j|d |  t|j|  }
|
dkr q|d7 }qd|
dk r|	}|}n|	}|}|| dkr$|dkrq||krq|rqd}q$|| }|t |jkrd|t |j | _|jdu r6|j	S t
| |j}| }|t |j | _|rd|j	S |j}|dk rdS qdS )zO
        find_among_b is for backwards processing. Same comments apply
        r
   Fr   r.   TN)r   r   r   r   r/   r   r   r   r0   r1   r2   r3   )r   r4   r5   r6   r7   Zlbr9   r:   r;   r<   r=   r>   r?   r@   r0   rA   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   Zc_braZc_ketr   Z
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)rF   rE   r   r   )r   r   r1   r   r   r   
slice_from  s
    zBaseStemmer.slice_fromc                 C   s
   |  dS r   )rG   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)rE   r   r   rD   r   r   r   insert"  s
    

zBaseStemmer.insertc                 C   s"   d}|   r| j| j| j }|S )z/
        Return the slice as a string.
        r   )rF   r   r   r   )r   r1   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 r   )r   Z_stemr   )r   wordr   r   r   stemWord=  s    
zBaseStemmer.stemWordc                    s    fdd|D S )Nc                    s   g | ]}  |qS r   )rM   ).0rL   r   r   r   
<listcomp>C      z)BaseStemmer.stemWords.<locals>.<listcomp>r   )r   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-   rB   rC   rE   rF   rG   rH   rI   rJ   rK   rM   rR   r   r   r   r   r      s2   

::
	r   N)objectr   r   r   r   r   <module>   rP   