U
    祡cN)                     @   s  d dl mZmZ ddlmZ ddlmZmZ ddlm	Z	 ddl
mZ ddlmZmZ ddlmZmZ dd	lmZ dd
lmZmZ ddlmZmZ erddlmZmZmZmZ G dd deZe dkrddlmZ e Z!ddlm"Z"mZ ddlmZ eddde"ddZ#e!$  e!$e# dS )    )TYPE_CHECKINGOptional   )AlignMethod)ROUNDEDBox)cell_len)JupyterMixin)Measurementmeasure_renderables)PaddingPaddingDimensions)Segment)Style	StyleType)TextTextType)ConsoleConsoleOptionsRenderableTypeRenderResultc                   @   s  e Zd ZdZefdddddddddddddd	eee eee eee	 e	e
e
ee ee ee	dd
ddZeefdddddddddd	d	eee eee eee	 e
e
ee ed dddZeee dddZeee dddZddddddZddddddZdS )Panela  A console renderable that draws a border around its contents.

    Example:
        >>> console.print(Panel("Hello, World!"))

    Args:
        renderable (RenderableType): A console renderable object.
        box (Box, optional): A Box instance that defines the look of the border (see :ref:`appendix_box`.
            Defaults to box.ROUNDED.
        safe_box (bool, optional): Disable box characters that don't display on windows legacy terminal with *raster* fonts. Defaults to True.
        expand (bool, optional): If True the panel will stretch to fill the console
            width, otherwise it will be sized to fit the contents. Defaults to True.
        style (str, optional): The style of the panel (border and contents). Defaults to "none".
        border_style (str, optional): The style of the border. Defaults to "none".
        width (Optional[int], optional): Optional width of panel. Defaults to None to auto-detect.
        height (Optional[int], optional): Optional height of panel. Defaults to None to auto-detect.
        padding (Optional[PaddingDimensions]): Optional padding around renderable. Defaults to 0.
        highlight (bool, optional): Enable automatic highlighting of panel title (if str). Defaults to False.
    NcenterTnone)r   r   F)titletitle_alignsubtitlesubtitle_alignsafe_boxexpandstyleborder_stylewidthheightpadding	highlightr   )
renderableboxr   r   r   r   r   r   r    r!   r"   r#   r$   r%   returnc                C   sX   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _d S )N)r&   r'   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   )selfr&   r'   r   r   r   r   r   r   r    r!   r"   r#   r$   r%    r*   ./tmp/pip-unpacked-wheel-qkhzhrww/rich/panel.py__init__&   s    zPanel.__init__)	r   r   r   r   r   r    r!   r"   r$   )r&   r'   r   r   r   r   r   r    r!   r"   r$   r(   c       	         C   s    | |||||||||	|
|ddS )z2An alternative constructor that sets expand=False.F)
r   r   r   r   r   r    r!   r"   r$   r   r*   )clsr&   r'   r   r   r   r   r   r    r!   r"   r$   r*   r*   r+   fitG   s    z	Panel.fit)r(   c                 C   s^   | j rZt| j trt| j n| j  }d|_|jdd|_d|_	|
  |d |S d S N 
 Tr   )r   
isinstancestrr   from_markupcopyendplainreplaceno_wrapexpand_tabspad)r)   
title_textr*   r*   r+   _titleg   s    

zPanel._titlec                 C   s^   | j rZt| j trt| j n| j  }d|_|jdd|_d|_	|
  |d |S d S r/   )r   r3   r4   r   r5   r6   r7   r8   r9   r:   r;   r<   )r)   subtitle_textr*   r*   r+   	_subtitlew   s    

zPanel._subtitler   r   r   )consoleoptionsr(   c                 c   s  t | j}t|r t | j|n| j}|| j}||| j }| jd krR|j	nt
|j	| j}| jd krp|jn| j}| jj||d}	ttttttddd}
| j}|d k	r|| | jr|d n|j|||d dj}| jp|jpd }|r|d8 }|d k	r t
|j	d t||jd }|d }|j||| jd}|j|||d}t|	j|}t|	j  |}t! }|d ks|d	krt|	"|d g|V  n\|
||d	 | j#|	j$|}t|	j%|	j$ |V  |&|||d	 E d H  t|	j$|	j' |V  |V  |D ]"}|V  |E d H  |V  |V  q | j(}|d k	r>|| |d ksR|d	krlt|	)|d g|V  n\|
||d	 | j*|	j+|}t|	j,|	j+ |V  |&|||d	 E d H  t|	j+|	j- |V  |V  d S )
N)safe)textr"   align	characterr    r(   c                 S   s   |   } | | |t| j }|r|dkrFtj| || |fdddS |dkr~|d }tj|| |f| |||  |fdddS tj|| |f| dddS | S )ac  Gets new aligned text.

            Args:
                text (Text): Title or subtitle text.
                width (int): Desired width.
                align (str): Alignment.
                character (str): Character for alignment.
                style (Style): Border style

            Returns:
                Text: New text instance
            leftTr0   )r:   r7   r      )r6   truncater   r8   r   Zassemble)rD   r"   rE   rF   r    Zexcess_spacerG   r*   r*   r+   
align_text   s6    



z*Panel.__rich_console__.<locals>.align_textrH   )rB   )r"   r#   r%   )r       ).r   unpackr$   anyr&   Z	get_styler    r!   r"   	max_widthminr   r'   
substituter   intr4   r   r>   Zstylize_beforer   measureupdate_widthmaximumr#   maxr   updater%   Zrender_linesr   Zmid_leftZ	mid_rightlineZget_topr   topZtop_leftrenderZ	top_rightr@   Z
get_bottomr   ZbottomZbottom_leftZbottom_right)r)   rA   rB   Z_paddingr&   r    r!   r"   r   r'   rJ   r=   Zchild_widthZchild_heightZchild_optionslinesZ
line_startZline_endnew_linerW   r?   r*   r*   r+   __rich_console__   s        ,

 
   



 
zPanel.__rich_console__r
   c           
      C   sz   | j }t| j\}}}}|| }|r0| j|gn| jg}| jd krjt|||j| d |j	| d }	n| j}	t
|	|	S )NrH   )r>   r   rL   r$   r&   r"   r   rS   rN   rT   r
   )
r)   rA   rB   r>   _rightrG   r$   Zrenderablesr"   r*   r*   r+   __rich_measure__  s"    

zPanel.__rich_measure__)__name__
__module____qualname____doc__r   r   r   r   r   boolr   rQ   r   r,   classmethodr.   propertyr   r>   r@   r\   r_   r*   r*   r*   r+   r      s   !   r   __main__)r   )DOUBLEr   )r   zHello, World!z
rich.Panelzwhite on blue)r   r    r'   r$   N)%typingr   r   rE   r   r'   r   r   cellsr   Zjupyterr	   rR   r
   r   r$   r   r   segmentr   r    r   r   rD   r   r   rA   r   r   r   r   r   r`   crh   pprintr*   r*   r*   r+   <module>   s8     
