o
    Mf                  
   @   s@  d dl mZ d dlZd dlmZmZ ddlmZ ddlm	Z	 e
djZe	dfd	ed
eeef defddZedddedefddZedddedefddZd	ededefddZd$d	edededee fddZedkreed eddD ]Zee q}ed dd!D ]Zeeded"  ed#e  qdS dS )%    )	lru_cacheN)DictList   )CELL_WIDTHS)LRUCacheu   ^[ -o ˿Ͱ-҂]*$i   text_cachereturnc                    sZ   t | rt| S || d}|dur|S t t fdd| D }t| dkr+||| < |S )zGet the number of cells required to display text.

    Args:
        text (str): Text to display.

    Returns:
        int: Get the number of cells required to display text.
    Nc                 3   s    | ]} |V  qd S )N .0	character	_get_sizer   X/var/www/html/analyze/labelStudio/lib/python3.10/site-packages/pip/_vendor/rich/cells.py	<genexpr>   s    zcell_len.<locals>.<genexpr>@   )_is_single_cell_widthslengetget_character_cell_sizesum)r   r	   cached_result
total_sizer   r   r   cell_len   s   
r   )maxsizer   c                 C   s   t | rdS tt| S )Get the cell size of a character.

    Args:
        character (str): A single character.

    Returns:
        int: Number of cells (0, 1 or 2) occupied by that character.
    r   )r   _get_codepoint_cell_sizeord)r   r   r   r   r   #   s   
r   	codepointc                 C   s   t }d}t|d }|| d }	 || \}}}| |k r!|d }n| |kr*|d }n|dkr0dS |S ||k r9	 dS || d }q)r   r   r      T)r   r   )r    _tablelower_boundupper_boundindexstartendwidthr   r   r   r   3   s    

r   totalc           	      C   s   t | rt| }||k r| d||   S | d| S |sdS t| }||kr(| S ||k r4| d||   S d}t| }	 || d }| d|d  }t|}||d krct|d dkrc|dd d S ||kri|S ||krp|}n|}q;)	z?Set the length of a string to fit within given number of cells. N r   Tr!   r   r"   )r   r   r   )	r   r*   size	cell_sizer'   r(   posbefore
before_lenr   r   r   set_cell_sizeP   s4   r2   max_sizepositionc           
         s   t   fdd| D ddd }|}g g}|d j}|j}|rB| \}}	||	 |kr8||g |d j}|	}n||	7 }|| |sdd |D S )z-Break text in to equal (cell) length strings.c                    s   g | ]}| |fqS r   r   r   _get_character_cell_sizer   r   
<listcomp>x   s    zchop_cells.<locals>.<listcomp>Nr"   c                 S   s   g | ]}d  |qS )r,   )join)r   liner   r   r   r7      s    )r   appendpop)
r   r3   r4   
charactersr   linesr:   r;   r   r-   r   r5   r   
chop_cellsu   s(   



	r>   __main__u   😽u]   这是对亚洲语言支持的测试。面对模棱两可的想法，拒绝猜测的诱惑。   P   r"   |x)r   )	functoolsr   retypingr   r   _cell_widthsr   
_lru_cacher   compilematchr   strintr   r   r   r2   r>   __name__printr9   rangenr   r   r   r   <module>   s,    & %
