U
    祡cy                     @   s   d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
 e
rdddlmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZ e	dZG d	d
 d
ZG dd dZdS )    )zip_longest)IteratorIterableListOptionalUnionoverloadTypeVarTYPE_CHECKING   )ConsoleConsoleOptionsJustifyMethodOverflowMethodRenderResultRenderableTypeText)cell_len)MeasurementTc                   @   sp   e Zd ZdZdeed  ddddZddd	d
ddZdddd
ddZdddddZ	ed dddZ
dS )Renderablesz:A list subclass which renders its contents to the console.Nr   )renderablesreturnc                 C   s   |d k	rt |ng | _d S N)list_renderables)selfr    r   3/tmp/pip-unpacked-wheel-qkhzhrww/rich/containers.py__init__!   s    zRenderables.__init__r   r   r   consoleoptionsr   c                 c   s   | j E dH  dS z,Console render method to insert line-breaks.N)r   r   r"   r#   r   r   r   __rich_console__(   s    zRenderables.__rich_console__r   c                    sR    fdd| j D }|s$tddS tdd |D }tdd |D }t||S )Nc                    s   g | ]}t  |qS r   )r   get).0
renderabler"   r#   r   r   
<listcomp>1   s   z0Renderables.__rich_measure__.<locals>.<listcomp>r   c                 s   s   | ]}|j V  qd S r   )Zminimumr(   Z	dimensionr   r   r   	<genexpr>7   s     z/Renderables.__rich_measure__.<locals>.<genexpr>c                 s   s   | ]}|j V  qd S r   )maximumr,   r   r   r   r-   8   s     )r   r   max)r   r"   r#   Z
dimensionsZ_minZ_maxr   r*   r   __rich_measure__.   s    
zRenderables.__rich_measure__)r)   r   c                 C   s   | j | d S r   )r   append)r   r)   r   r   r   r1   ;   s    zRenderables.appendr   c                 C   s
   t | jS r   )iterr   r   r   r   r   __iter__>   s    zRenderables.__iter__)N)__name__
__module____qualname____doc__r   r   r    r&   r0   r1   r5   r   r   r   r   r      s     
  r   c                   @   s  e Zd ZdZd,ed ddddZedd	d
Zed dddZ	e
eddddZe
eed dddZeeef eded f dddZedd dddZedddZddddddZdddddZed ddd d!Zd-eddd#d$Zd.ded'd(dd)d*d+ZdS )/Linesz0A list subclass which can render to the console.r   r   N)linesr   c                 C   s   t || _d S r   )r   _linesr   r;   r   r   r   r    E   s    zLines.__init__r2   c                 C   s   d| j dS )NzLines()r<   r4   r   r   r   __repr__H   s    zLines.__repr__c                 C   s
   t | jS r   )r3   r<   r4   r   r   r   r5   K   s    zLines.__iter__)indexr   c                 C   s   d S r   r   r   rA   r   r   r   __getitem__N   s    zLines.__getitem__c                 C   s   d S r   r   rB   r   r   r   rC   R   s    c                 C   s
   | j | S r   r?   rB   r   r   r   rC   V   s    )rA   valuer   c                 C   s   || j |< | S r   r?   )r   rA   rD   r   r   r   __setitem__Y   s    
zLines.__setitem__c                 C   s
   | j  S r   )r<   __len__r4   r   r   r   rF   ]   s    zLines.__len__r   r   r   r!   c                 c   s   | j E dH  dS r$   r?   r%   r   r   r   r&   `   s    zLines.__rich_console__)liner   c                 C   s   | j | d S r   )r<   r1   )r   rG   r   r   r   r1   f   s    zLines.appendc                 C   s   | j | d S r   )r<   extendr=   r   r   r   rH   i   s    zLines.extendc                 C   s   | j |S r   )r<   poprB   r   r   r   rJ   l   s    z	Lines.popleftfoldr   r   )r"   widthjustifyoverflowr   c                 C   s2  ddl m} |dkr4| jD ]}|j||dd qn|dkr| jD ]F}|  |j||d ||t|j d  ||t|j  qBn|d	kr| jD ].}|  |j||d ||t|j  qn^|d
kr.t	| jD ]F\}}|t
| jd kr q.|d}tdd |D }	t
|d }
dd t|
D }d}|r|	|
 |k r|t
|| d   d7  < |
d7 }
|d t
| }qLg }t	t||dd D ]l\}\}}|| |t
|k r||d}||d}||kr|n|j}||d||  |d q|d|| |< qdS )a  Justify and overflow text to a given width.

        Args:
            console (Console): Console instance.
            width (int): Number of characters per line.
            justify (str, optional): Default justify method for text: "left", "center", "full" or "right". Defaults to "left".
            overflow (str, optional): Default overflow for text: "crop", "fold", or "ellipsis". Defaults to "fold".

        r   r   rK   T)rO   padcenter)rO      rightfull c                 s   s   | ]}t |jV  qd S r   )r   plain)r(   wordr   r   r   r-      s     z Lines.justify.<locals>.<genexpr>c                 S   s   g | ]}d qS )r   r   )r(   _r   r   r   r+      s     z!Lines.justify.<locals>.<listcomp>r   NrI   )style )textr   r<   truncaterstripZpad_leftr   rV   Z	pad_right	enumeratelensplitsumranger   r1   Zget_style_at_offsetrY   join)r   r"   rM   rN   rO   r   rG   Z
line_indexwordsZ
words_sizeZ
num_spacesspacesrA   tokensrW   Z	next_wordrY   Z
next_styleZspace_styler   r   r   rN   o   sP    





zLines.justify)r   )rI   )rK   rL   )r6   r7   r8   r9   r   r    strr@   r   r5   r   intrC   slicer   r   rE   rF   r&   r1   rH   rJ   rN   r   r   r   r   r:   B   s6   $   r:   N)	itertoolsr   typingr   r   r   r   r   r   r	   r
   r"   r   r   r   r   r   r   r[   r   cellsr   Zmeasurer   r   r   r:   r   r   r   r   <module>   s   ( $