o
    MEgL                  
   @   s"  d dl mZ d dlmZmZ ddlmZ ddlmZ edfde	dee	e
f d	e
fd
dZ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 qnedddD ]Zeeded   ed!e  q{d"S d"S )$    )	lru_cache)DictList   )CELL_WIDTHS)LRUCachei   text_cachereturnc                    sJ   | | 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: Number of cells required to display the text.
    Nc                 3   s    | ]} |V  qd S )N .0	character	_get_sizer   d/var/www/eduai.edurigo.com/doc_train/edurigo_ai/Puru/venv/lib/python3.10/site-packages/rich/cells.py	<genexpr>   s    zcell_len.<locals>.<genexpr>@   )getget_character_cell_sizesumlen)r   r	   cached_result
total_sizer   r   r   cell_len   s   	r   r   c                 C   s0   t | }d|  krdkrdS  t|S 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   )ord_get_codepoint_cell_size)r   	codepointr   r   r   r      s
   
r   )maxsizer    c                 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   -   s    

r   totalc                    s   t | }||kr
| S ||k r| d||   S t  fdd| D }|| }|j}|dkr9|r9|| 8 }|dkr9|s.| dt| } |dkrI| d7 } | S )z?Set the length of a string to fit within given number of cells. c                    s   g | ]} |qS r   r   r   _get_character_cell_sizer   r   
<listcomp>S   s    z!set_cell_size.<locals>.<listcomp>r   Nr#   )r   r   popr   )r   r+   	cell_sizecharacter_sizesexcessr0   r   r-   r   set_cell_sizeJ   s    
r4   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   r-   r   r   r/   a   s    zchop_cells.<locals>.<listcomp>Nr#   c                 S   s   g | ]}d  |qS ) )join)r   liner   r   r   r/   r   s    )r   appendr0   )
r   r5   r6   
charactersr   linesr:   r0   r   sizer   r-   r   
chop_cells^   s(   



	r>   __main__u   😽u]   这是对亚洲语言支持的测试。面对模棱两可的想法，拒绝猜测的诱惑。   P   r#   |xN)r   )	functoolsr   typingr   r   _cell_widthsr   
_lru_cacher   strintr   r   r   r4   r>   __name__printr9   rangenr   r   r   r   <module>   s&    & 
