o
    i                     @   s,   d dl mZ G dd dZG dd dZdS )    )replacec                   @   s   e Zd ZdZdddZdS )TreeNodezj
    Private class that creates the tree data structure from the orthography profile for
    parsing.
    Fc                 C   s   || _ i | _|| _d S )N)charchildrensentinel)selfr   r    r   A/home/ubuntu/.local/lib/python3.10/site-packages/segments/tree.py__init__
   s   
zTreeNode.__init__N)F)__name__
__module____qualname____doc__r
   r   r   r   r	   r      s    r   c                   @   s(   e Zd Zdd ZefddZdd ZdS )Treec                 C   s0   dd }t ddd| _|D ]}|| j| qd S )Nc                 S   s&   |D ]}| j |t|} qd| _d S )NT)r   
setdefaultr   r   )nodeliner   r   r   r	   _multigraph   s   
z"Tree.__init__.<locals>._multigraph T)r   )r   root)r   	graphemesr   graphemer   r   r	   r
      s
   zTree.__init__c                 C   st   |  | j|d\}}||d  }|r8|||d  |dd  }|  | j|d\}}|| ||d  }|s|S )Nr      )_parser   appendextend)r   r   errorresidxremrir   r   r	   parse   s   
z
Tree.parsec           	      C   s   t |dkr
g |fS g }d}|}|}|t |k rK|j|| }|d7 }|s'n$|jrE| |||d || \}}|d| g}|| |t |k s|rO|}||fS )z
        :param root: Tree node.
        :param line: String to parse.
        :param idx: Global counter of characters parsed.
        :return: (list of parsed graphemes, incremented character count)
        r   r   N)lenr   getr   r   r   )	r   r   r   r   r"   currr   cidxsubparser   r   r	   r   (   s&   
zTree._parseN)r   r   r   r
   r   r"   r   r   r   r   r	   r      s    r   N)segments.errorsr   r   r   r   r   r   r	   <module>   s    