File: //opt/python38/lib/python3.8/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-38.pyc
U
�{�e� � @ s8 d dl Z d dlmZ d dlmZmZ ddlmZ e �d�j Z
ed�eed�d d
��Z
e
feeegef ed�dd
�Zedd�eed�dd��Zedd�eed�dd��Zeeed�dd�Zd#eeeee d�dd�Zedk�r4eed�� edd�D ]Zee� q�eddd �D ]$Zeede�d! � ed"e � �qdS )$� N)� lru_cache)�Callable�List� )�CELL_WIDTHSu ^[ -o ˿Ͱ-҂]*$i )�text�returnc s t � t� fdd�| D ��}|S )a/ Get the number of cells required to display text.
This method always caches, which may use up a lot of memory. It is recommended to use
`cell_len` over this method.
Args:
text (str): Text to display.
Returns:
int: Get the number of cells required to display text.
c 3 s | ]}� |�V qd S �N� ��.0� character�� _get_sizer
�:/tmp/pip-unpacked-wheel-_0scjqea/pip/_vendor/rich/cells.py� <genexpr> s z"cached_cell_len.<locals>.<genexpr>)�get_character_cell_size�sum)r �
total_sizer
r r �cached_cell_len s
r )r � _cell_lenr c s2 t | �dk r|| �S t� t� fdd�| D ��}|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.
i c 3 s | ]}� |�V qd S r r
r r r
r r ) s zcell_len.<locals>.<genexpr>)�lenr r )r r r r
r r �cell_len s
r )�maxsize)r
r c C s t t| ��S )z�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.
)�_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"| |krR|d }n|dkr^dS |S ||k rlqz|| d }q dS )z�Get the cell size of a character.
Args:
codepoint (int): Codepoint of a character.
Returns:
int: Number of cells (0, 1 or 2) occupied by that character.
r r � ���)r r )r Z_tableZlower_boundZupper_bound�index�start�end�widthr
r
r r : s
r )r �totalr c C s� t | �r4t| �}||k r(| d|| S | d|� S |dkr@dS t| �}||krT| S ||k rl| d|| S d}t| �}|| d }| d|d � }t|�}||d kr�t|d �dkr�|dd� d S ||kr�|S ||kr�|}qx|}qxdS )z?Set the length of a string to fit within given number of cells.� Nr � r r r )�_is_single_cell_widthsr r ) r r# �sizeZ cell_sizer r! �pos�beforeZ
before_lenr
r
r �
set_cell_sizeW s0 r* )r �max_size�positionr c s� t � � fdd�| D �}|}g g}|d j}t|�D ]@\}}|| |krb|�|g� |d j}|}q2||7 }||� q2dd� |D �S )z[Break text in to equal (cell) length strings, returning the characters in reverse
orderc s g | ]}|� |�f�qS r
r
r �Z_get_character_cell_sizer
r �
<listcomp>� s zchop_cells.<locals>.<listcomp>r c S s g | ]}d � |��qS )r% )�join)r �liner
r
r r. � s )r �append�reversed) r r+ r, �
charactersr �linesr1 r
r'