o 7]h @s@ddlmZddlZddlmZmZddlmZddlm Z e dj Z e dfd e d ee efd efd d Zeddde d efddZeddded efddZd e ded e fddZd$d e deded ee fddZedkreededdD]Zeeq}ed dd!D]Zeeded"ed#eqdSdS)%) lru_cacheN)DictList) CELL_WIDTHS)LRUCacheu^[ -o ˿Ͱ-҂]*$itext_cachereturncsZt|rt|S||d}|dur|Sttfdd|D}t|dkr+|||<|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. Nc3s|]}|VqdS)N.0 character _get_sizer 8/usr/lib/python3/dist-packages/pip/_vendor/rich/cells.py szcell_len..@)_is_single_cell_widthslengetget_character_cell_sizesum)rr cached_result total_sizer rrcell_len s   r)maxsizercCst|rdStt|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_sizeord)rr r rr#s  r codepointcCst}d}t|d}||d} ||\}}}||kr!|d}n||kr*|d}n|dkr0dS|S||kr9 dS||d}q)rrrT)rr)r _table lower_bound upper_boundindexstartendwidthr r rr3s       rtotalc Cst|rt|}||kr|d||S|d|S|sdSt|}||kr(|S||kr4|d||Sd}t|} ||d}|d|d}t|}||dkrct|ddkrc|dddS||kri|S||krp|}n|}q;) z?Set the length of a string to fit within given number of cells. NrTr!rr")rrr) rr*size cell_sizer'r(posbefore before_lenr r r set_cell_sizePs4  r2max_sizepositionc stfdd|Dddd}|}gg}|dj}|j}|rB|\}} || |kr8||g|dj}| }n|| 7}|||sdd|DS)z-Break text in to equal (cell) length strings.csg|]}||fqSr r r _get_character_cell_sizer r xs zchop_cells..Nr"cSsg|]}d|qS)r,)join)r liner r rr7s)rappendpop) rr3r4 charactersrlinesr:r;rr-r r5r chop_cellsus(       r>__main__u😽u]这是对亚洲语言支持的测试。面对模棱两可的想法,拒绝猜测的诱惑。Pr"|x)r) functoolsrretypingrr _cell_widthsr _lru_cachercompilematchrstrintrrrr2r>__name__printr9rangenr r r rs,    & %