Ë
    "Tæe¬  ã                  ó¦  — d dl mZ d dlZd dlmZ d dlmZ ddlmZ  ej                  d«      j                  Z ed«      dd	„«       Zefdd
„Z ed¬«      dd„«       Z ed¬«      dd„«       Zdd„Z	 	 	 	 	 	 d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)é    )ÚannotationsN)Ú	lru_cache)ÚCallableé   )ÚCELL_WIDTHSu   ^[ -oÂ Ë¿Í°-Ò‚]*$i   c                ó<   ‡— 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     €ú,/usr/lib/python3/dist-packages/rich/cells.pyú	<genexpr>z"cached_cell_len.<locals>.<genexpr>   ó   øè ø€ Ò@¨i‘Y˜y×)Ñ@ùó   ƒ)Úget_character_cell_sizeÚsum)ÚtextÚ
total_sizer   s     @r   Úcached_cell_lenr      s    ø€ ô (€IÜÓ@¸4Ô@Ó@€JØÐó    c                óh   ‡— t        | «      dk  r || «      S t        Št        ˆfd„| 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  ó.   •K  — | ]  } ‰|«      –— Œ y ­wr
   r   r   s     €r   r   zcell_len.<locals>.<genexpr>+   r   r   )Úlenr   r   )r   Ú	_cell_lenr   r   s      @r   Úcell_lenr      s5   ø€ ô ˆ4ƒy�3‚Ù˜‹ÐÜ'€IÜÓ@¸4Ô@Ó@€JØÐr   )Úmaxsizec                ó*   — 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   s    r   r   r   /   s   € ô $¤C¨	£NÓ3Ð3r   c                ó°   — 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)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   )Ú	codepointÚ_tableÚlower_boundÚupper_boundÚindexÚstartÚendÚwidths           r   r!   r!   <   s“   € ô €FØ€KÜ�f“+ ‘/€KØ˜;Ñ&¨1Ñ,€EØ
Ø" 5™MÑˆˆs�EØ�uÒØ !™)‰KØ˜Š_Ø !™)‰Kà š�1Ð.¨Ð.Ø˜Ò$Øàð ˜{Ñ*¨qÑ0ˆð r   c                ó`  — 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   ÚtotalÚsizeÚ	cell_sizer+   r,   ÚposÚbeforeÚ
before_lens	            r   Úset_cell_sizer8   Y   s  € ô ˜dÔ#Ü�4‹yˆØ�%Š<Ø˜# ¨¡Ñ.Ñ.Ð.Ø�F�Uˆ|Ðà�‚zØÜ˜“€IØ�EÒØˆØ�5ÒØ�c˜U YÑ.Ñ/Ñ/Ð/à€EÜ
ˆd‹)€Cð Ø�s‰{˜qÑ ˆØ�i˜˜a™�ˆÜ˜fÓ%ˆ
Ø˜ ™Ò"¤x°°r±
Ó';¸qÒ'@Ø˜#˜2�; Ñ$Ð$Ø˜ÒØˆMØ˜ÒØ‰CàˆEð r   c                ó  — t         }g g}|j                  }|d   j                  }d}| D ]<  } ||«      }||z   |kD  }	|	r ||g«       |d   j                  }|}Œ0 ||«       ||z  }Œ> |D �
cg c]  }
dj                  |
«      ‘Œ c}
S c c}
w )ah  Split text into lines such that each line fits within the available (cell) width.

    Args:
        text: The text to fold such that it fits in the given width.
        width: The width available (number of cells).

    Returns:
        A list of strings such that each string in the list has cell width
        less than or equal to the available width.
    r%   r   r0   )r   ÚappendÚjoin)r   r-   Ú_get_character_cell_sizeÚlinesÚappend_new_lineÚappend_to_last_lineÚtotal_widthr   Ú
cell_widthÚchar_doesnt_fitÚlines              r   Ú
chop_cellsrD   |   s©   € ô  7ÐØ ˜T€Eà—l‘l€OØ ™)×*Ñ*Ðà€Kàò 
&ˆ	Ù-¨iÓ8ˆ
Ø%¨
Ñ2°UÑ:ˆáÙ˜Y˜KÔ(Ø"'¨¡)×"2Ñ"2ÐØ$‰Ká 	Ô*Ø˜:Ñ%‰Kð
&ð ',Ö,˜dˆB�G‰G�D�MÒ,Ð,ùÒ,s   Á,BÚ__main__u   ðŸ˜½u]   è¿™æ˜¯å¯¹äºšæ´²è¯­è¨€æ”¯æŒ�çš„æµ‹è¯•ã€‚é�¢å¯¹æ¨¡æ£±ä¸¤å�¯çš„æƒ³æ³•ï¼Œæ‹’ç»�çŒœæµ‹çš„è¯±æƒ‘ã€‚é   éP   r%   ú|Úx)r   ÚstrÚreturnÚint)r   rJ   r   zCallable[[str], int]rK   rL   )r   rJ   rK   rL   )r&   rL   rK   rL   )r   rJ   r2   rL   rK   rJ   )r   rJ   r-   rL   rK   z	list[str])Ú
__future__r   ÚreÚ	functoolsr   Útypingr   Ú_cell_widthsr   ÚcompileÚmatchr1   r   r   r   r!   r8   rD   Ú__name__ÚprintrC   ÚrangeÚnr   r   r   ú<module>rX      s7  ðÝ "ã 	Ý Ý å %ð $˜Ÿ™Ð$QÓR×XÑXÐ ñ ˆ4ƒòó ðð" ;Jô ñ  �4Ôò	4ó ð	4ñ �4Ôòó ðó8 ðF"-Ø
ð"-àð"-ð ó"-ðJ ˆzÒÙ	Ñ
! &Ó
)Ô*ÙÐ~ð  ABó  Cò ˆÙˆd�ðá�2�q˜"Óò ˆÙ‰mÐð  BCó  Dð  GJñ  Jô  	KÙˆc�A‰g�ñð	 r   