o
    VÌhÈ]  ã                   @  s
  d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dl
mZ d dl
mZ d d	l
mZ d d
l
mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ erjd dlmZ eeeef  Zeeeef  Z eZ!G dd„ dƒZ"dS )é    )ÚannotationsN)Úsuppress)Údeepcopy)Úrepeat)ÚTYPE_CHECKING)ÚIterator)ÚList)ÚUnion)Úcast)Ú	Formatter)ÚOutput)Ú	TableCell)ÚTableCellStyle)ÚTableSeparator)Ú
TableStyle)ÚIOc                   @  sÖ  e Zd ZU dZded< dZded< dZded< dZded	< dZded
< dZ	ded< dZ
ded< dvdwdd„Zedxdd„ƒZdydd„Zdzdd „Zd{d"d#„Zd|d%d&„Zd}d)d*„Zd|d+d,„Zd~d/d0„Zdd3d4„Zdd5d6„Zd€d9d:„Zdd<d=„Zd‚d?d@„Zdƒd„dDdE„Zd…dFdG„Zeddfd†dKdL„Zefd‡dMdN„Z	dvdˆdRdS„Zd‰dVdW„ZdŠdXdY„Z d‹d[d\„Z!dŒd]d^„Z"dd`da„Z#dŽdbdc„Z$dddde„Z%ddfdg„Z&d‘dhdi„Z'dŠdjdk„Z(dŒdldm„Z)d’dndo„Z*d…dpdq„Z+e,d…drds„ƒZ-e,d“dtdu„ƒZ.dS )”ÚTabler   ÚintÚSEPARATOR_TOPé   ÚSEPARATOR_TOP_BOTTOMé   ÚSEPARATOR_MIDé   ÚSEPARATOR_BOTTOMÚBORDER_OUTSIDEÚBORDER_INSIDENzdict[str, TableStyle] | NoneÚ_stylesÚioúIO | OutputÚstyleú
str | NoneÚreturnÚNonec                 C  sp   || _ |d u r	d}d | _d | _g | _g | _d| _i | _d | _i | _i | _	i | _
d| _d | _|  ¡  |  |¡ d S )NÚdefaultF)Ú_ioÚ_header_titleÚ_footer_titleÚ_headersÚ_rowsÚ_horizontalÚ_effective_column_widthsÚ_number_of_columnsÚ_column_stylesÚ_column_widthsÚ_column_max_widthsÚ	_renderedÚ_styleÚ_init_stylesÚ	set_style)Úselfr   r    © r5   úa/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/cleo/ui/table.pyÚ__init__*   s"   zTable.__init__r   c                 C  s   | j d usJ ‚| j S ©N)r1   ©r4   r5   r5   r6   r    F   s   zTable.styleÚnameÚstrc                 C  s   |   ¡  |  |¡| _| S r8   )r2   Ú_resolve_styler1   )r4   r:   r5   r5   r6   r3   K   s   zTable.set_styleÚcolumn_indexc                 C  s   || j v r
| j | S | jS r8   )r-   r    )r4   r=   r5   r5   r6   Úcolumn_styleR   s   

zTable.column_styleústr | TableStylec                 C  s   |   |¡| j|< | S r8   )r<   r-   )r4   r=   r    r5   r5   r6   Úset_column_styleX   s   zTable.set_column_styleÚwidthc                 C  ó   || j |< | S r8   ©r.   ©r4   r=   rA   r5   r5   r6   Úset_column_width]   ó   
zTable.set_column_widthÚwidthsú	list[int]c                 C  s&   i | _ t|ƒD ]	\}}|| j |< q| S r8   )r.   Ú	enumerate)r4   rG   ÚirA   r5   r5   r6   Úset_column_widthsb   s   zTable.set_column_widthsc                 C  rB   r8   rC   rD   r5   r5   r6   Úset_column_max_widthj   rF   zTable.set_column_max_widthÚheadersúHeader | list[Header]c                 C  s6   |rt |d tƒstd|ƒ}|g}td|ƒ}|| _| S )Nr   ÚHeaderzList[Header])Ú
isinstanceÚlistr
   r(   )r4   rM   r5   r5   r6   Úset_headerso   s   

zTable.set_headersÚrowsÚRowsc                 C  s   g | _ |  |¡S r8   )r)   Úadd_rows)r4   rS   r5   r5   r6   Úset_rowsz   s   
zTable.set_rowsc                 C  s   |D ]}|   |¡ q| S r8   )Úadd_row)r4   rS   Úrowr5   r5   r6   rU      s   zTable.add_rowsrX   úRow | TableSeparatorc                 C  s*   t |tƒr| j |¡ | S | j |¡ | S r8   )rP   r   r)   Úappend)r4   rX   r5   r5   r6   rW   …   s
   
zTable.add_rowÚheader_titlec                 C  ó
   || _ | S r8   )r&   )r4   r[   r5   r5   r6   Úset_header_title   ó   zTable.set_header_titleÚfooter_titlec                 C  r\   r8   )r'   )r4   r_   r5   r5   r6   Úset_footer_title”   r^   zTable.set_footer_titleTÚ
horizontalÚboolc                 C  r\   r8   )r*   )r4   ra   r5   r5   r6   ra   ™   r^   zTable.horizontalc           
      C  sÌ  t ƒ }| jr[g }| jr| jd ng }t|ƒD ]C\}}| |g¡ | jD ]5}t|t ƒr+q#|| }t|t ƒr6J ‚t|ƒ|krD| || ¡ q#t|d tƒrS|d j	dkrSq#| d¡ q#qng t
d| jƒ¢|‘| j¢}|  |¡ t|  |¡ƒ}|  |¡ | j }| j}	|D ]O}||u rd}d}	q‚t|t ƒr—|  ¡  q‚|sšq‚|sž|	r´|	r©|  | j¡ d}	n|  | j| j| jj¡ | jrÃ|  || jj| jj¡ q‚|  ||rÌ| jjn| jj¡ q‚|  | j| j| jj¡ |  ¡  d| _d S )Nr   r   Ú rT   FT)r   r*   r(   rI   rZ   r)   rP   Úlenr   Úcolspanr
   Ú_calculate_number_of_columnsrQ   Ú_build_table_rowsÚ_calculate_column_widthsÚ_render_row_separatorr   r   r&   r    Úheader_title_formatÚ_render_rowÚcell_row_formatÚcell_header_formatr   r'   Úfooter_title_formatÚ_cleanupr0   )
r4   ÚdividerrS   rM   rJ   ÚheaderrX   Úrows_iÚ	is_headerÚis_first_rowr5   r5   r6   Úrenderž   sx   

óþ


ýÿ
ÿüý
zTable.renderÚtypeÚtitleÚtitle_formatc                 C  sî  | j }|sdS | jj}|d s|d s| jjsdS | jj}|| jkr5|d |d |d |d f\}}}	}
nB|| jkrM|d |d |d |d f\}}}	}
n*|| jkre|d |d |d	 |d
 f\}}}	}
n|d |d |d |d f\}}}	}
|}t|ƒD ]}||| j	|  7 }|||d kr‘|
n|	7 }q}|durê|dusŸJ ‚| 
|¡}t| j |¡ƒ}t|ƒ}|d }||krÔ|}t| j | 
d¡¡ƒ}| 
|d|| d … d ¡}|| d }|d|… | ||| d…  }| j | jj 
|¡¡ dS )zq
        Renders horizontal header separator.

        Example:

            +-----+-----------+-------+
        Nr   r   é   é   r   r   é	   é
   é   é   é   é   rc   z...)r,   r    Úborder_charsÚcrossing_charÚcrossing_charsr   r   r   Úranger+   Úformatrd   r%   Úremove_formatÚ
write_lineÚborder_format)r4   rv   rw   rx   ÚcountÚbordersÚ	crossingsra   Ú	left_charÚmid_charÚ
right_charÚmarkupÚcolumnÚformatted_titleÚtitle_lengthÚmarkup_lengthÚlimitÚformat_lengthÚtitle_startr5   r5   r6   ri   í   sl   
ü
ü
üü
ÿ
ÿþÿzTable._render_row_separatorc                 C  s.   | j j}| j j || jkr|d ¡S |d ¡S )z4
        Renders vertical column separator.
        r   r   )r    r   rˆ   r…   r   )r4   rv   rŠ   r5   r5   r6   Ú_render_column_separator<  s   ÿÿzTable._render_column_separatorú	list[str]Úcell_formatÚfirst_cell_formatc           	      C  s„   |   | j¡}|  |¡}t|ƒd }t|ƒD ]$\}}||  |||r&|dkr&|n|¡7 }||   ||kr4| jn| j¡7 }q| j |¡ dS )z€
        Renders table row.

        Example:

            | 9971-5-0210-0 | A Tale of Two Cities  | Charles Dickens  |
        r   r   N)	r—   r   Ú_get_row_columnsrd   rI   Ú_render_cellr   r%   r‡   )	r4   rX   r™   rš   Úrow_contentÚcolumnsÚlastrJ   r   r5   r5   r6   rk   F  s   

ýÿzTable._render_rowÚRowr   c                 C  sr  z|| }W n t y   d}Y nw | j| }t|tƒr9|jdkr9t|d ||j ƒD ]}||  ¡ | j|  7 }q+|  |¡}t|tƒrN|j	 
|jd | ¡S |t|ƒt| j |¡ƒ 7 }|j 
|¡}|j}	t|tƒr¯t|jtƒr¯t dt|ƒ¡ }
|
r«|jjdur…|jjnd|jj› d}d|v r›| dd¡}|d	8 }d
|v r«| d
d¡}|td
ƒ8 }|jj}	| 
|	|||jƒ¡S )z4
        Renders a table cell with padding.
        rc   r   r   zQ^<(\w+|((?:fg|bg|options)=[\w,]+;?)+)>.+<\/(\w+|((?:fg|bg|options)=[\w,]+;?)+)?>$Nú<z>{}</>z</>r   z<fg=default;bg=default>)Ú
IndexErrorr+   rP   r   re   r„   Ú_get_column_separator_widthr>   r   rˆ   r…   r   rd   r%   r†   Úcell_row_content_formatÚpadr    r   ÚreÚmatchr;   r™   ÚtagÚreplaceÚpadding_char)r4   rX   r   r™   ÚcellrA   Únext_columnr    Úcontentr¥   Úis_not_styled_by_tagr5   r5   r6   rœ   `  sJ   ÿ
ÿÿ

ûÿýzTable._render_cellc                 C  s:   dg}|D ]}t |tƒrq| |  |¡¡ qt|ƒ| _d S )Nr   )rP   r   rZ   Ú_get_number_of_columnsÚmaxr,   )r4   rS   rž   rX   r5   r5   r6   rf   –  s   
z"Table._calculate_number_of_columnsúIterator[Row | TableSeparator]c                 c  sÖ   i }d}|t |ƒk rÇ|  ||¡}t|| ƒD ]¥\}}t|tƒr#|jnd}|| jv rL| j| t | j |¡ƒk rLt| jt	ƒs?J ‚| jj
 || j| | ¡}d|vrQqd dd„ | d¡D ƒ¡}t|tƒrjt||jdn|}| dd¡ d¡}t|ƒD ]B\}	}
|dkr‡t|
|d}
|	dkr›|| }t|tƒr–J ‚|
||< qy||vr£i ||< |	|| vr³|  ||¡|| |	< |
|| |	 |< qyq|d7 }|t |ƒk st|ƒD ]\}}|  |¡V  ||v rè||  ¡ D ]}|  |¡V  qßqËd S )Nr   r   Ú
c                 s  s    | ]}t  |¡V  qd S r8   )r   Úescape_trailing_backslash)Ú.0Úcr5   r5   r6   Ú	<genexpr>µ  s   € 

ÿz*Table._build_table_rows.<locals>.<genexpr>©re   ú<fg=default;bg=default>
</>)rd   Ú_fill_next_rowsrI   rP   r   re   r/   r%   r†   r   Ú	formatterÚformat_and_wrapÚjoinÚsplitr©   r   Ú	_copy_rowÚ_fill_cellsÚvalues)r4   rS   Úunmerged_rowsÚrow_keyr   r«   re   ÚescapedÚlinesÚline_keyÚlinerX   Úunmerged_rowr5   r5   r6   rg      sd   €ÿþÿ
ÿÿý
ÿïÑ1€ûzTable._build_table_rowsc                 C  sJ   t t|  g td| jƒ¢tƒ ‘| j¢¡ƒƒ}| jr|d7 }| jr#|d7 }|S )NrT   r   )rd   rQ   rg   r
   r(   r   r)   )r4   Únumber_of_rowsr5   r5   r6   Ú_calculate_row_countÛ  s   ÿÿÿzTable._calculate_row_countrÆ   c                 C  s>  i }t || ƒD ]©\}}t|tƒr±|jdkr±|jd }|g}d|v rN| dd¡ d¡}t|ƒ|kr6| d¡}|| }t|tƒrAJ ‚t|d |j	|j
d||< dd„ t|d |d | ƒD ƒ}	| ¡ D ]\}
}|
|	v r|||
  ¡ D ]
\}}||	|
 |< qpqb||	|
< qb|	}| ¡ D ])\}}d}|| t|ƒk r›|||  }t||j	|j
d|| |< ||| kr° nq‡q| ¡ D ]f\}}| jd	usÁJ ‚|t|ƒkrÉd	n|| }|d	urùt|tƒsù|  |¡|  t||  ¡ ƒ¡ | jkrù| ¡ D ]
\}}| ||¡ qíq¶|  ||d ¡}| ¡ D ]\}}t|ƒr|| ||< q| ||¡ q¶|S )
z6
        Fill rows that contains rowspan > 1.
        r   r²   r¸   r   )re   r    c                 S  s   i | ]}|i “qS r5   r5   )r´   Úkr5   r5   r6   Ú
<dictcomp>  s    ÿz)Table._fill_next_rows.<locals>.<dictcomp>rc   N)rI   rP   r   Úrowspanr©   r½   rd   r‰   r   re   r    r„   Úitemsr,   r¯   rQ   rÀ   Úinsertr¾   )r4   rS   rÆ   rÁ   r   r«   Únb_linesrÄ   rX   ÚplaceholderrÊ   ÚvÚlÚmÚunmerged_row_keyÚ_ÚvaluerÇ   Úthis_rowÚcell_keyr5   r5   r6   r¹   ì  sx   
ÿ

ÿÿÿ

ÿÿ€ÿÿÿú
ÿ
€zTable._fill_next_rowsc                 C  sJ   g }|D ]}|  |¡ t|tƒr |jdkr | td|jd ƒ¡ q|p$|S )zB
        Fills cells for a row that contains colspan > 1.
        r   rc   )rZ   rP   r   re   Úextendr   )r4   rX   Únew_rowr«   r5   r5   r6   r¿   :  s   
€zTable._fill_cellsc                 C  sF   t || ƒ}t|ƒD ]\}}d||< t|tƒr td|jd||< q
|S )z
        Copies a row.
        rc   r·   )rQ   rI   rP   r   re   )r4   rS   rÆ   rX   rØ   Ú
cell_valuer5   r5   r6   r¾   I  s   
€zTable._copy_rowc                 C  s.   t |ƒ}|D ]}t|tƒr||jd 7 }q|S )z0
        Gets number of columns by row.
        r   )rd   rP   r   re   )r4   rX   rž   r   r5   r5   r6   r¯   V  s   
€zTable._get_number_of_columnsc                   sZ   | j dusJ ‚tt| j ƒƒ}t|ƒD ]\‰‰ tˆ tƒr*ˆ jdkr*‡ ‡fdd„|D ƒ}q|S )z9
        Gets list of columns for the given row.
        Nr   c                   s(   g | ]}|t ˆd  ˆˆ j ƒvr|‘qS )r   )r„   re   )r´   r   ©r«   rØ   r5   r6   Ú
<listcomp>k  s
    þz*Table._get_row_columns.<locals>.<listcomp>)r,   rQ   r„   rI   rP   r   re   )r4   rX   rž   r5   rÜ   r6   r›   a  s   þ€zTable._get_row_columnsc                   s  | j dusJ ‚t| j ƒD ]{}dg}|D ]d}t|tƒrq| ¡ }t|ƒD ]J\}}t|tƒrm| j |¡‰t	ˆƒ}|rmt
 ||j ¡‰ ‡ ‡fdd„td|ˆ ƒD ƒ}	t|	ƒD ]\}
}z||||
 < W qR tyl   | |¡ Y qRw q#| |  ||¡¡ qt|ƒt	| jjƒ d | j|< qdS )z+
        Calculates column widths.
        Nr   c                   s   g | ]
}ˆ||ˆ  … ‘qS r5   r5   )r´   rJ   ©ÚlengthÚtext_contentr5   r6   rÝ   …  s    ÿÿz2Table._calculate_column_widths.<locals>.<listcomp>r   )r,   r„   rP   r   ÚcopyrI   r   r%   r†   rd   ÚmathÚceilre   r¢   rZ   Ú_get_cell_widthr°   r    r¤   r+   )r4   rS   r   ÚlengthsrX   Úrow_rJ   r«   Útext_lengthÚcontent_columnsÚpositionr­   r5   rÞ   r6   rh   s  s6   


þÿ€
ÿæzTable._calculate_column_widthsc                 C  s   t | jj | jjd ¡ƒS )Nr   )rd   r    rˆ   r…   r   r9   r5   r5   r6   r£   –  s   z!Table._get_column_separator_widthc                 C  s„   d}t tƒ || }t| j |¡ƒ}W d  ƒ n1 sw   Y  || jv r,| j| nd}t||ƒ}|| jv r@t| j| |ƒS |S )z"
        Gets cell width.
        r   N)	r   r¢   rd   r%   r†   r.   r°   r/   Úmin)r4   rX   r   Ú
cell_widthr«   Úcolumn_widthr5   r5   r6   rä   ™  s   
þÿ

zTable._get_cell_widthc                 C  s   i | _ d | _d S r8   )r.   r,   r9   r5   r5   r6   ro   ­  s   
zTable._cleanupc                 C  s¶   | j d urd S tƒ  d¡ d¡ d¡}tƒ  d¡ d¡ d¡ d¡}tƒ  d¡ d¡ ddd	d
ddddd¡	}tƒ  dd¡ dd¡ dddddddddddd¡}tƒ ||||dœ| _ d S )Nú=ú rc   z{}u   â”€u   â”‚u   â”¼u   â”Œu   â”¬u   â”u   â”¤u   â”˜u   â”´u   â””u   â”œu   â•u   â•‘u   â•”u   â•¤u   â•—u   â•¢u   â•u   â•§u   â•šu   â•Ÿu   â• u   â•ªu   â•£)r$   Ú
borderlessÚcompactÚboxz
box-double)r   r   Úset_horizontal_border_charsÚset_vertical_border_charsÚset_default_crossing_charÚset_cell_row_content_formatÚset_crossing_chars)Úclsrï   rð   rñ   Ú
box_doubler5   r5   r6   r2   ±  s>   
üû	üÿü
ûzTable._init_stylesc                 C  sD   t |tƒr|S | jd usJ ‚|| jv rt| j| ƒS td|› dƒ‚)NzTable style "z" is not defined.)rP   r   r   r   Ú
ValueError)r÷   r:   r5   r5   r6   r<   Ý  s   

zTable._resolve_styler8   )r   r   r    r!   r"   r#   )r"   r   )r:   r;   r"   r   )r=   r   r"   r   )r=   r   r    r?   r"   r   )r=   r   rA   r   r"   r   )rG   rH   r"   r   )rM   rN   r"   r   )rS   rT   r"   r   )rX   rY   r"   r   )r[   r;   r"   r   )r_   r;   r"   r   )T)ra   rb   r"   r   )r"   r#   )rv   r   rw   r!   rx   r!   r"   r#   )rv   r   r"   r;   )rX   r˜   r™   r;   rš   r!   r"   r#   )rX   r    r   r   r™   r;   r"   r;   )rS   rT   r"   r#   )rS   rT   r"   r±   )r"   r   )rS   rT   rÆ   r   r"   rT   )rX   rY   r"   rY   )rS   rT   rÆ   r   r"   r    )rX   r    r"   r   )rX   r    r"   rH   )rX   r    r   r   r"   r   )r:   r?   r"   r   )/Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__r   r   r   r   r   r   r7   Úpropertyr    r3   r>   r@   rE   rK   rL   rR   rV   rU   rW   r]   r`   ra   ru   ri   r—   rk   rœ   rf   rg   rÉ   r¹   r¿   r¾   r¯   r›   rh   r£   rä   ro   Úclassmethodr2   r<   r5   r5   r5   r6   r      sb   
 













QüOÿ

6


;

N




#

+r   )#Ú
__future__r   râ   r¦   Ú
contextlibr   rá   r   Ú	itertoolsr   Útypingr   r   r   r	   r
   Úcleo.formatters.formatterr   Úcleo.io.outputs.outputr   Úcleo.ui.table_cellr   Úcleo.ui.table_cell_styler   Úcleo.ui.table_separatorr   Úcleo.ui.table_styler   Ú
cleo.io.ior   r;   r    rT   rO   r   r5   r5   r5   r6   Ú<module>   s.    