U
    祡c^                  	   @   s   d dl mZmZmZmZmZmZ er<ddlmZm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZ ddlmZ eeee eeef eeeeef f ZG dd	 d	eZed
krd dlmZ eedddd dS )    )castListOptionalTupleTYPE_CHECKINGUnion   )ConsoleConsoleOptionsRenderableTypeRenderResult)JupyterMixin)Measurement)Style)Segmentc                   @   s   e Zd ZdZddddddeeef edd	d
Ze	de
d dddZedee
e
e
e
f dddZedddZddddddZddddddZdS )Paddinga
  Draw space around content.

    Example:
        >>> print(Padding("Hello", (2, 4), style="on blue"))

    Args:
        renderable (RenderableType): String or other renderable.
        pad (Union[int, Tuple[int]]): Padding for top, right, bottom, and left borders.
            May be specified with 1, 2, or 4 integers (CSS style).
        style (Union[str, Style], optional): Style for padding characters. Defaults to "none".
        expand (bool, optional): Expand padding to fit available width. Defaults to True.
    r   r   r   r   noneT)styleexpandr   PaddingDimensions)
renderablepadr   r   c                C   s0   || _ | |\| _| _| _| _|| _|| _d S )N)r   unpacktoprightbottomleftr   r   )selfr   r   r   r    r   0/tmp/pip-unpacked-wheel-qkhzhrww/rich/padding.py__init__!   s    zPadding.__init__)r   levelreturnc                 C   s   t |ddd|fddS )zMake padding instance to render an indent.

        Args:
            renderable (RenderableType): String or other renderable.
            level (int): Number of characters to indent.

        Returns:
            Padding: A Padding instance.
        r   F)r   r   )r   )clsr   r"   r   r   r    indent.   s    zPadding.indent)r   r#   c                 C   s   t | tr| | | | fS t| dkr6| d }||||fS t| dkrdttttf | \}}||||fS t| dkrttttttf | \}}}}||||fS tdt|  ddS )z&Unpack padding specified in CSS style.r   r         z)1, 2 or 4 integers required for padding; z givenN)
isinstanceintlenr   r   
ValueError)r   Z_padZpad_topZ	pad_rightr   r   r   r   r   r   r    r   <   s    
zPadding.unpack)r#   c                 C   s.   d| j d| j d| j d| j d| j dS )NzPadding(z, (,z)))r   r   r   r   r   )r   r   r   r    __repr__L   s    zPadding.__repr__r	   r
   r   )consoleoptionsr#   c                 c   s  | | j}| jr|j}n&tt||| jj| j	 | j
 |j}||| j	 | j
 }|jd k	rz|j|j| j | j d}|j| j||dd}t}| j	r|d| j	 |nd }| j
r|d| j
  || gn| g}	d }
| jr|d|  d|g}
|
| j E d H  |r6|D ] }|V  |E d H  |	E d H  qn |D ]}|E d H  |	E d H  q:| jr|
px|d|  d|g}
|
| j E d H  d S )N)heightT)r   r    
)Z	get_styler   r   	max_widthminr   getr   maximumr   r   Zupdate_widthr0   Zupdate_heightr   r   Zrender_linesr   line)r   r.   r/   r   widthZrender_optionslinesZ_Segmentr   r   Z
blank_liner7   r   r   r    __rich_console__O   sV    
   

zPadding.__rich_console__r   c                 C   s\   |j }| j| j }|| dk r(t||S t||| j\}}t|| || }||}|S )Nr   )r3   r   r   r   r5   r   Zwith_maximum)r   r.   r/   r3   Zextra_widthZmeasure_minZmeasure_maxZmeasurementr   r   r    __rich_measure__}   s    

zPadding.__rich_measure__N)r   )__name__
__module____qualname____doc__r   strr   boolr!   classmethodr)   r%   staticmethodr   r   r-   r:   r;   r   r   r   r    r      s0    
 / r   __main__)printzHello, World)r&   r'   zon blue)r   N)typingr   r   r   r   r   r   r.   r	   r
   r   r   Zjupyterr   Zmeasurer   r   r   segmentr   r)   r   r   r<   ZrichrE   r   r   r   r    <module>   s    (w