o
    Ëý°j½  ã                
   @   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rœeedƒƒ eddƒD ]Zeeƒ q}ed dd!ƒD ]Zeedeƒd" ƒ ed#e ƒ qŠd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 )z³Get 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   ú‰/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/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,    & %
ù