a
    hbò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ƒ qêe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 )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   úS/home/httpd/docs/test/DocsMgr/lib/python3.9/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rÄt|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&   "%

