a
    [f                     @   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eeeef ed	d
dZeddeedddZeddeedddZeeedddZd!eeeee dddZedkr*eed eddD ]Zee qedddD ]$Zeeded  ed e  q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rV||| < |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   hC:\Users\91910\OneDrive\Desktop\vts_admin_rebuild-master\vts\Lib\site-packages\pip/_vendor/rich/cells.py	<genexpr>       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   )maxsize)r   r
   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   )	codepointr
   c                 C   s~   t }d}t|d }|| d }|| \}}}| |k r@|d }n"| |krR|d }n|dkr^dS |S ||k rlqz|| d }q dS )r   r   r      )r   r   )r!   _tablelower_boundupper_boundindexstartendwidthr   r   r   r   3   s    

r   )r   totalr
   c           	      C   s   t | r4t| }||k r(| d||   S | d| S |s<dS t| }||krP| S ||k rh| d||   S d}t| }|| d }| d|d  }t|}||d krt|d dkr|dd d S ||kr|S ||kr|}qt|}qtdS )z?Set the length of a string to fit within given number of cells. N r   r"   r   r#   )r   r   r   )	r   r+   size	cell_sizer(   r)   posbefore
before_lenr   r   r   set_cell_sizeP   s0    r3   )r   max_sizepositionr
   c           
         s   t   fdd| D ddd }|}g g}|d j}|j}|r| \}}	||	 |krp||g |d j}|	}q:||	7 }|| q: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   r8      r   )r   appendpop)
r   r4   r5   
charactersr   linesr;   r<   r   r.   r   r6   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   r3   r?   __name__printr:   rangenr   r   r   r   <module>   s&   "%

