
    <6h              
          d dl Z d dlmZ d dlmZmZ ddlmZ  e j                  d      j                  Z
 ed      ded	efd
       Zefdedeegef   d	efdZ ed      ded	efd       Z ed      ded	efd       Zdeded	efdZddededed	ee   fdZedk(  rQ e ed              edd      D ]
  Z ee         eddd      D ]  Z e ede      dz           edez         ! yy)     N)	lru_cache)CallableList   )CELL_WIDTHSu   ^[ -o ˿Ͱ-҂]*$i   textreturnc                 <    t         t        fd| 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   .   K   | ]  } |        y wN .0	character	_get_sizes     [/var/www/panel.atabookie.online/venv/lib/python3.12/site-packages/pip/_vendor/rich/cells.py	<genexpr>z"cached_cell_len.<locals>.<genexpr>        @iYy)@   )get_character_cell_sizesum)r   
total_sizer   s     @r   cached_cell_lenr      s      (I@4@@J    	_cell_lenc                 h    t        |       dk  r ||       S t        t        fd| D              }|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.
    i   c              3   .   K   | ]  } |        y wr   r   r   s     r   r   zcell_len.<locals>.<genexpr>)   r   r   )lenr   r   )r   r   r   r   s      @r   cell_lenr      s5     4y3'I@4@@Jr   )maxsizer   c                 *    t        t        |             S )zGet 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   s    r   r   r   -   s     $C	N33r   	codepointc                     t         }d}t        |      dz
  }||z   dz  }	 ||   \  }}}| |k  r|dz
  }n| |kD  r|dz   }n	|dk(  rdS |S ||k  r	 y||z   dz  }8)zGet 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$   _tablelower_boundupper_boundindexstartendwidths           r   r"   r"   :   s     FKf+/K;&1,E
"5MsEu!)K_!)K1..$ {*q0 r   totalc                 `   t        |       r t        |       }||k  r| d||z
  z  z   S | d| S |dk  ryt        |       }||k(  r| S ||k  r| d||z
  z  z   S d}t        |       }	 ||z   dz  }| d|dz    }t        |      }||dz   k(  rt        |d         dk(  r|dd dz   S ||k(  r|S ||kD  r|}n|}N)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/   size	cell_sizer,   r-   posbefore
before_lens	            r   set_cell_sizer9   W   s    d#4y%<#...FU|zIE5cUY.///E
d)C s{q iaf%
"xr
';q'@#2;$$MCE r   max_sizepositionc                 N   t         }| D cg c]  }| ||      f }}|}g g}|d   j                  }t        |      D ]>  \  }}	||	z   |kD  r$|j                  |g       |d   j                  }|	}2||	z  } ||       @ |D 
cg c]  }
dj                  |
       c}
S c c}w c c}
w )z[Break text in to equal (cell) length strings, returning the characters in reverse
    orderr'   r2   )r   appendreversedjoin)r   r:   r;   _get_character_cell_sizer   
charactersr   linesr=   r4   lines              r   
chop_cellsrD   |   s      7JN=F,Y78J  J TE2YF#J/ 	4x'LL)%2Y%%FJ$J9 ',,dBGGDM,,!  -s   BB"__main__u   😽u]   这是对亚洲语言支持的测试。面对模棱两可的想法，拒绝猜测的诱惑。   P   r'   |x)r   )re	functoolsr   typingr   r   _cell_widthsr   compilematchr3   strintr   r   r   r"   r9   rD   __name__printrC   rangenr   r   r   <module>rV      s   	  ! % $$QRXX  4# #  " ;J 3 8SE3J#7 c   4	4s 	4s 	4 	4 4   8   C  C  J-S -C -3 -tCy -. z	
!&
)*~  AB  C d2q" m  BC  D  GJ  J  	KcAg r   