
    d]                        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 erd dlmZ e	e
eef                  Ze	e
eef                  ZeZ G d d          ZdS )    )annotationsN)deepcopy)TYPE_CHECKING)Iterator)List)Union)cast)	Formatter)Output)	TableCell)TableCellStyle)TableSeparator)
TableStyle)IOc                     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<   dTdUdZedVd            ZdWdZdXdZdYdZdZd Zd[d#ZdZd$Zd\d'Zd]d*Zd]d+Zd^d.Zd_d0Zd`d2Zdadbd6Zdcd7Zeddfddd;Zefded<Z	 dTdfd@ZdgdCZdhdDZ didFZ!djdGZ"dkdIZ#dldJZ$dmdKZ%dndLZ&dodMZ'dhdNZ(djdOZ)dpdPZ*dcdQZ+e,dcdR            Z-e,dqdS            Z.dS )r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                   || _         |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    s      Q/home/feoh/.local/pipx/venvs/poetry/lib/python3.11/site-packages/cleo/ui/table.py__init__zTable.__init__)   s    =E)-)-&(
 8:%.257.024)-u    r   c                "    | j         J | j         S N)r2   r5   s    r6   r    zTable.styleE   s    {&&&{r8   namestrc                b    |                                   |                     |          | _        | S r:   )r3   _resolve_styler2   )r5   r<   s     r6   r4   zTable.set_styleJ   s.    ))$//r8   column_indexc                <    || j         v r| j         |         S | j        S r:   )r.   r    )r5   r@   s     r6   column_stylezTable.column_styleQ   s&    4...&|44zr8   str | TableStylec                @    |                      |          | j        |<   | S r:   )r?   r.   )r5   r@   r    s      r6   set_column_stylezTable.set_column_styleW   s"    ,0,?,?,F,FL)r8   widthc                    || j         |<   | S r:   r/   r5   r@   rF   s      r6   set_column_widthzTable.set_column_width\       ,1L)r8   widths	list[int]c                R    i | _         t          |          D ]\  }}|| j         |<   | S r:   )r/   	enumerate)r5   rL   irF   s       r6   set_column_widthszTable.set_column_widthsa   s:     !&)) 	+ 	+HAu%*D""r8   c                    || j         |<   | S r:   rH   rI   s      r6   set_column_max_widthzTable.set_column_max_widthi   rK   r8   headersHeader | list[Header]c                    |r.t          |d         t                    st          d|          }|g}t          d|          }|| _        | S )Nr   HeaderzList[Header])
isinstancelistr	   r)   )r5   rT   s     r6   set_headerszTable.set_headersn   sP     	 :gaj$77 	 8W--GiG~w//r8   rowsRowsc                :    g | _         |                     |          S r:   )r*   add_rows)r5   r[   s     r6   set_rowszTable.set_rowsy   s    
}}T"""r8   c                :    |D ]}|                      |           | S r:   )add_row)r5   r[   rows      r6   r^   zTable.add_rows~   s+     	 	CLLr8   rb   Row | TableSeparatorc                    t          |t                    r| j                            |           | S | j                            |           | S r:   )rX   r   r*   append)r5   rb   s     r6   ra   zTable.add_row   sJ    c>** 	Jc"""K
#r8   header_titlec                    || _         | S r:   )r'   )r5   rf   s     r6   set_header_titlezTable.set_header_title       )r8   footer_titlec                    || _         | S r:   )r(   )r5   rj   s     r6   set_footer_titlezTable.set_footer_title   ri   r8   T
horizontalboolc                    || _         | S r:   )r+   )r5   rm   s     r6   rm   zTable.horizontal   s    %r8   c                p   t                      }| j        rg }| j        r| j        d         ng }t          |          D ]\  }}|                    |g           | j        D ]}t          |t                     r||         }t          |t                     rJ t          |          |k    r|                    ||                    ft          |d         t                    r|d         j	        dk    r|                    d           n!t          d| j                  |gz   | j        z   }|                     |           t          |                     |                    }|                     |           | j         }| j        }	|D ]}||u rd}d}	t          |t                     r|                                  5|s8|s|	rJ|	r|                     | j                   d}	n+|                     | j        | j        | j        j                   | j        r,|                     || j        j        | j        j                   |                     ||r| j        j        n| j        j                   |                     | j        | j        | j        j                   |                                  d| _        d S )Nr   r    r\   FT)r   r+   r)   rO   re   r*   rX   lenr   colspanr	   _calculate_number_of_columnsrY   _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_cleanupr1   )
r5   dividerr[   rT   rP   headerrb   rows_i	is_headeris_first_rows
             r6   renderzTable.render   s
    "" 	HD*.-?dmA&&RG&w// * *	6VH%%%: * *C!#~66 ! !!WF)&.AAAAA3xx!||c!f----#F1Iy99 *fQi>OST>T>Tb))))**" ..':TZGD))$///D**40011%%d+++((	' $	 $	Cg~~!	##~.. **,,,  	L 	 ..t/HIII#(LL..**
6    
  3TZ5R       4DJ113	    	""!J*	
 	
 	
 	r8   typetitletitle_formatc                   | j         }|sdS | j        j        }|d         s|d         s| j        j        sdS | j        j        }|| j        k    r$|d         |d         |d         |d         f\  }}}	}
n|| j        k    r$|d         |d         |d         |d         f\  }}}	}
nR|| j        k    r$|d         |d         |d	         |d
         f\  }}}	}
n#|d         |d         |d         |d         f\  }}}	}
|}t          |          D ]%}||| j	        |         z  z  }|||dz
  k    r|
n|	z  }&||J |
                    |          }t          | j                            |                    }t          |          }|dz
  }||k    rb|}t          | j                            |
                    d                              }|
                    |d||z
  dz
           dz             }||z
  dz  }|d|         |z   |||z   d         z   }| j                            | j        j        
                    |                     dS )zq
        Renders horizontal header separator.

        Example:

            +-----+-----------+-------+
        Nr   r         r   r   	   
               rq   z...)r-   r    border_charscrossing_charcrossing_charsr   r   r   ranger,   formatrr   r&   remove_format
write_lineborder_format)r5   r   r   r   countborders	crossingsrm   	left_charmid_char
right_charmarkupcolumnformatted_titletitle_lengthmarkup_lengthlimitformat_lengthtitle_starts                      r6   rw   zTable._render_row_separator   s    ' 	F*)qz 	'!* 	TZ5M 	FJ-	4%%%
!!!	;7J	8ZZ T'''
!!!	;7J	8ZZ T...
!""	;7J	8ZZ 
!!!	;7J	8Z Ell 	F 	FFj4#@#HHHFFeai$7$7jjXEFF+++*11%88Otx55oFFGGLKKM!A%Ee##$ #DH$:$:<;N;Nr;R;R$S$S T T"."5"55EM1A556># # )<7A=K||$!"|35567  	DJ4;;FCCDDDDDr8   c                    | j         j        }| j         j                            || j        k    r|d         n|d                   S )z4
        Renders vertical column separator.
        r   r   )r    r   r   r   r   )r5   r   r   s      r6   _render_column_separatorzTable._render_column_separator;  sG     *)z'..$"555GAJJ71:
 
 	
r8   	list[str]cell_formatfirst_cell_formatc                   |                      | j                  }|                     |          }t          |          dz
  }t	          |          D ]l\  }}|r!|dk    r||                     |||          z  }n||                     |||          z  }||                      ||k    r| j        n| j                  z  }m| 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_columnsrr   rO   _render_cellr   r&   r   )	r5   rb   r   r   row_contentcolumnslastrP   r   s	            r6   ry   zTable._render_rowE  s     33D4GHH'',,7||a"7++ 	 	IAv  KQ!VVt00f>OPPPt00fkJJJ488'(Dyy##d6H  KK 	K(((((r8   Rowr   c                d   	 ||         }n# t           $ r d}Y nw xY w| j        |         }t          |t                    rN|j        dk    rCt          |dz   ||j        z             D ]'}||                                 | j        |         z   z  }(|                     |          }t          |t                    r(|j	        
                    |j        d         |z            S |t          |          t          | j                            |                    z
  z  }|j        
                    |          }|j        }	t          |t                    rt          |j        t$                    rt'          j        dt+          |                     }
|
rs|j        j        |j        j        nd|j        j         d}d|v r|                    dd          }|d	z  }d
|v r(|                    d
d          }|t          d
          z  }|j        j        }	|
                     |	|||j                            S )z4
        Renders a table cell with padding.
        rq   r   r   zQ^<(\w+|((?:fg|bg|options)=[\w,]+;?)+)>.+<\/(\w+|((?:fg|bg|options)=[\w,]+;?)+)?>$N<z>{}</>z</>r   z<fg=default;bg=default>)
IndexErrorr,   rX   r   rs   r   _get_column_separator_widthrB   r   r   r   r   rr   r&   r   cell_row_content_formatpadr    r   rematchr=   r   tagreplacepadding_char)r5   rb   r   r   cellrF   next_columnr    contentr   is_not_styled_by_tags              r6   r   zTable._render_cell^  sZ   	v;DD 	 	 	DDD	 -f5dI&& 	4<!+;+;$VaZ$,1FGG  44663K@A
 !!&))dN++ 	M&--e.@.Ce.KLLLTS!7!7!=!=>>>>/66t<<idI&& 	!:dj.+Q+Q 	!')xC D		( ( $  $ < z-9 J**5TZ^555  G##%ooeR88GQJE,77%oo.GLLGS!:;;;E*.C!!##gue6H"I"IJJJs    c                    dg}|D ]@}t          |t                    r|                    |                     |                     At	          |          | _        d S )Nr   )rX   r   re   _get_number_of_columnsmaxr-   )r5   r[   r   rb   s       r6   rt   z"Table._calculate_number_of_columns  sd    # 	= 	=C#~.. NN466s;;<<<<"%g,,r8   Iterator[Row | TableSeparator]c              #  6  K   i }d}|t          |          k     r|                     ||          }t          ||                   D ]\  }}t          |t                    r|j        nd}|| j        v r| j        |         t          | j                            |                    k     rJt          | j        t                    sJ | j        j
                            || j        |         |z            }d|vrd                    d |                    d          D                       }t          |t                    rt	          ||j                  n|}|                    dd                              d          }t          |          D ]\  }	}
|dk    rt	          |
|          }
|	dk    r%||         }t          |t                    rJ |
||<   G||vri ||<   |	||         vr|                     ||          ||         |	<   |
||         |	         |<   |dz  }|t          |          k     t          |          D ]T\  }}|                     |          V  ||v r4||                                         D ]}|                     |          V  Ud S )Nr   r   
c              3  >   K   | ]}t          j        |          V  d S r:   )r
   escape_trailing_backslash).0cs     r6   	<genexpr>z*Table._build_table_rows.<locals>.<genexpr>  s>       $ $?@I7::$ $ $ $ $ $r8   rs   <fg=default;bg=default>
</>)rr   _fill_next_rowsrO   rX   r   rs   r0   r&   r   r   	formatterformat_and_wrapjoinsplitr   r   	_copy_row_fill_cellsvalues)r5   r[   unmerged_rowsrow_keyr   r   rs   escapedlinesline_keylinerb   unmerged_rows                r6   ru   zTable._build_table_rows  s     35D		!!''g66D !*$w- 8 8 )H )H*4T9*E*EL$,,1T4449P:..t4455:6 :6 &dh777778-==d5f=G D t##)) $ $DHJJtDTDT$ $ $  
 "$	22!Igt|<<<<  
 T+IJJPPQUVV&/&6&6 H HNHd{{(w???1}}"7m#-c>#B#BBBB&*F"-7757M'2#=+AAA?C~~ $g@ @M'28< DHg.x8@@#H& qLG_ D		!!b &dOO 	9 	9LGS""3'''''-''$1'$:$A$A$C$C 9 9L**<888888	9 	9r8   c           
        t          t          |                     t          d| j                  t                      gz   | j        z                                 }| j        r|dz  }t          | j                  dk    r|dz  }|S )Nr\   r   r   )rr   rY   ru   r	   r)   r   r*   )r5   number_of_rowss     r6   _calculate_row_countzTable._calculate_row_count  s    &&//>3C3C2DDtzQ  
 
 = 	 aNtz??QaNr8   r   c                "   i }t          ||                   D ]\  }}t          |t                    r|j        dk    r|j        dz
  }|g}d|v r|                    dd                              d          }t          |          |k    r|                    d          }||         }t          |t                    rJ t          |d         |j	        |j
                  ||<   d t          |dz   |dz   |z             D             }	|                                D ]:\  }
}|
|	v r,||
                                         D ]\  }}||	|
         |<   5||	|
<   ;|	}|                                D ]X\  }}d}||z
  t          |          k     r|||z
           }t          ||j	        |j
                  ||         |<   |||z
  k    r nY|                                D ]0\  }}| j        J |t          |          k    rdn||         }|t          |t                    s|                     |          |                     t          ||                                                             z   | j        k    r1|                                D ]\  }}|                    ||           |                     ||dz
            }|                                D ]\  }}t          |          r||         ||<    |                    ||           2|S )	z6
        Fill rows that contains rowspan > 1.
        r   r   r   r   )rs   r    c                    i | ]}|i S  r   )r   ks     r6   
<dictcomp>z)Table._fill_next_rows.<locals>.<dictcomp>  s-     F F FArF F Fr8   rq   N)rO   rX   r   rowspanr   r   rr   r   r   rs   r    r   itemsr-   r   rY   r   insertr   )r5   r[   r   r   r   r   nb_linesr   rb   placeholderr   vlmunmerged_row_key_valuer   this_rowcell_keys                       r6   r   zTable._fill_next_rows  s    @B%d4j11 (	 (	LFD$	** 't|a/?/?<!+"V4<< LL/MNNTT E 5zzH,,#'::d#3#3t*C)#~>>>>>"+a$,dj# # #CK
F F#(4!8h3F#G#GF F F *//11 + +DAqK''$1!$4$:$:$<$< 2 2DAq01KN1--2 *+A ++8+>+>+@+@ 	 	'$aE'$.U;; %&6&= >>Gt|4:? ? ?M"23F;  #3d#::: ; /<.A.A.C.C 	3 	3*l*666/3t99<<tt$GWBXH$"8^<< % 33H==55 /?!@!G!G!I!IJJ 
 ./ / '3&8&8&:&: 4 4NHdOOHd33334 nnT+;a+?@@$0$6$6$8$8 ; ;LFD4yy ;&26&:F,c2222r8   c                   g }t          |          D ]m\  }}|                    |           t          |t                    r>|j        dk    r3t          |dz   ||j        z             D ]}|                    d           n|r|S |S )zB
        Fills cells for a row that contains colspan > 1.
        r   rq   )rO   re   rX   r   rs   r   )r5   rb   new_rowr   r   r   s         r6   r   zTable._fill_cells8  s     %cNN 	' 	'LFDNN4   $	** 't|a/?/?vz6DL+@AA ' 'ANN2&&&& 	N
r8   c                    t          ||                   }t          |          D ]8\  }}d||<   t          |t                    rt          d|j                  ||<   9|S )z
        Copies a row.
        rq   r   )rY   rO   rX   r   rs   )r5   r[   r   rb   r   
cell_values         r6   r   zTable._copy_rowK  sl     4:$-cNN 	J 	J HjCM*i00 J )"j6H I I IH
r8   c                r    t          |          }|D ]$}t          |t                    r||j        dz
  z  }%|S )z0
        Gets number of columns by row.
        r   )rr   rX   r   rs   )r5   rb   r   r   s       r6   r   zTable._get_number_of_columnsX  sG     c(( 	. 	.F&),, .6>A--r8   c                    | j         J t          t          d| j                             }t          |          D ]4\  t	          t
                    rj        dk    rfd|D             }5|S )z9
        Gets list of columns for the given row.
        Nr   r   c           
     h    g | ].}|t          t          d z   j        z                       v,|/S )r   )rY   r   rs   )r   xr   r   s     r6   
<listcomp>z*Table._get_row_columns.<locals>.<listcomp>m  sK       U8a<DL9P%Q%Q R RRR RRRr8   )r-   rY   r   rO   rX   r   rs   )r5   rb   r   r   r   s      @@r6   r   zTable._get_row_columnsc  s     &222uQ 78899'nn 	 	NHd$	** t|a/?/?    $   r8   c           	        | j         J t          d| j                   D ]f}dg}|D ](}t          |t                    r|                                }t          |          D ]\  }}t          |t                    r| j                            |          t                    }|r}t          j        ||j        z            fdt          d|          D             }	t          |	          D ]3\  }
}	 ||||
z   <   # t          $ r |                    |           Y 0w xY w|                    |                     ||                     *t!          |          t          | j        j                  z   dz
  | j        |<   hdS )z+
        Calculates column widths.
        Nr   c                *    g | ]}||z            S r   r   )r   rP   lengthtext_contents     r6   r   z2Table._calculate_column_widths.<locals>.<listcomp>  s6     / / /$% !-QV^ </ / /r8   r   )r-   r   rX   r   copyrO   r   r&   r   rr   mathceilrs   r   re   _get_cell_widthr   r    r   r,   )r5   r[   r   lengthsrb   row_rP   r   text_lengthcontent_columnspositionr   r   r   s               @@r6   rv   zTable._calculate_column_widthsu  s    &222At677 	 	FcG C Cc>22 xxzz( 9 9GAt!$	22 9'+x'='=d'C'C&),&7&7& 9%)Y{T\/I%J%JF/ / / / /).q+v)F)F/ / /O
 6?5O5O 9 9 1'!99@DX$6$6'1 !9 !9 !9$(KK$8$8$8$8$8!9 t33D&AABBBB Gs4:#EFFFJ )&115	 	s   9DD$#D$c                z    t          | j        j                            | j        j        d                             S )Nr   )rr   r    r   r   r   r;   s    r6   r   z!Table._get_column_separator_width  s-    4:+224:3J13MNNOOOr8   c                $   d}	 ||         }t          | j                            |                    }n# t          $ r Y nw xY w|| j        v r| j        |         nd}t          ||          }|| j        v rt          | j        |         |          S |S )z"
        Gets cell width.
        r   )rr   r&   r   r   r/   r   r0   min)r5   rb   r   
cell_widthr   column_widths         r6   r  zTable._get_cell_width  s     
	v;DTX33D99::JJ 	 	 	D	 ,2T5H+H+HD''a 	 \22
T,,,t.v6
CCCs   /4 
A Ac                "    i | _         d | _        d S r:   )r/   r-   r;   s    r6   r}   zTable._cleanup  s     "&r8   c                   | j         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= rq   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_doubles        r6   r3   zTable._init_styles  s   ;"F\\
..s333,,S111,,S111,,++B///))#...))"---++D111ll''...%%e,,,ueUE5%PUW\]]]\\
..ue<<<,,UE:::%%5%ueUE5RWY^	
 	
 	

 "||$$
 
r8   c                    t          |t                    r|S | j        J || j        v rt          | j        |                   S t	          d| d          )NzTable style "z" is not defined.)rX   r   r   r   
ValueError)r  r<   s     r6   r?   zTable._resolve_style  sc    dJ'' 	K{&&&3;CK-...@@@@AAAr8   r:   )r   r   r    r!   r"   r#   )r"   r   )r<   r=   r"   r   )r@   r   r"   r   )r@   r   r    rC   r"   r   )r@   r   rF   r   r"   r   )rL   rM   r"   r   )rT   rU   r"   r   )r[   r\   r"   r   )rb   rc   r"   r   )rf   r=   r"   r   )rj   r=   r"   r   )T)rm   rn   r"   r   )r"   r#   )r   r   r   r!   r   r!   r"   r#   )r   r   r"   r=   )rb   r   r   r=   r   r!   r"   r#   )rb   r   r   r   r   r=   r"   r=   )r[   r\   r"   r#   )r[   r\   r"   r   )r"   r   )r[   r\   r   r   r"   r\   )rb   rc   r"   rc   )r[   r\   r   r   r"   r   )rb   r   r"   r   )rb   r   r"   rM   )rb   r   r   r   r"   r   )r<   rC   r"   r   )/__name__
__module____qualname__r   __annotations__r   r   r   r   r   r   r7   propertyr    r4   rB   rE   rJ   rQ   rS   rZ   r_   r^   ra   rh   rl   rm   r   rw   r   ry   r   rt   ru   r   r   r   r   r   r   rv   r   r  r}   classmethodr3   r?   r   r8   r6   r   r      s        M !!!!!MNM,0G0000    8    X         
   
      
	 	 	 	# # # #
         
   
    
M M M Mb " #'	ME ME ME ME ME^ 4B 
 
 
 
 
 QU) ) ) ) )24K 4K 4K 4Kl/ / / /99 99 99 99v   "L L L L\   &   	 	 	 	   $! ! ! !FP P P P   ,' ' ' ' !
 !
 !
 [!
F B B B [B B Br8   r   )
__future__r   r   r   r   r   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   r\   rW   r   r   r8   r6   <module>r,     s   " " " " " "  				                                           / / / / / / ) ) ) ) ) ) ( ( ( ( ( ( 3 3 3 3 3 3 2 2 2 2 2 2 * * * * * *  
5i !E#~%&'	EB EB EB EB EB EB EB EB EB EBr8   