� J�gї���ddlmZmZddlmZddlmZmZddlm Z m Z m Z m Z m Z mZmZmZmZddlmZddlmZmZddlmZed � ��ZGd �d ��ZGd �d��Zed���Gd�d����Zed���Gd�d����Zed���Gd�d����Zdd�ZdS)�)� dataclass�replace)�Number)�Optional�Union�) �Align�MethodReturnValue�TableBordersLayout�TableCellFillMode�TableHeadingsDisplay�WrapMode�VAlign� TableSpan�CellBordersLayout)� FPDFException)� CORE_FONTS�FontFace)�Padding�BOLD)�emphasisc��eZdZdZ dddejdejddddeddd de j ddd d d �d �Z dd �Z d�Z d�Zd�Z dd�Zdd�Zd�ZdS)�Tablez� Object that `fpdf.FPDF.table()` yields, used to build a table in the document. Detailed usage documentation: https://py-pdf.github.io/fpdf2/Tables.html ��CENTER�MIDDLENTrF�JUSTIFYr)�align�v_align�borders_layout�cell_fill_color�cell_fill_mode� col_widths�first_row_as_headings� gutter_height� gutter_width�headings_style� line_height�markdown� text_align�width�wrapmode�padding�outer_border_width�num_heading_rows�repeat_headingsc��||_tj|��|_t j|��|_t j|��|_||_||_ tj|��|_ ||_ | |_ | |_| |_| |_| � d|jzn| |_||_||_||_||_||_t1j|��|_d|_g|_|�t9jd��|_nt9j|��|_|jt jt j fvr|�tCd���d|_|jr| |dz z| |dz zf|_"nd|_"|jdkrC|jdkr|j rtCd���|jdkr|j stCd���n|j sd|_|D]}|�#|���dS) a. Args: fpdf (fpdf.FPDF): FPDF current instance rows: optional. Sequence of rows (iterable) of str to initiate the table cells with text content align (str, fpdf.enums.Align): optional, default to CENTER. Sets the table horizontal position relative to the page, when it's not using the full page width borders_layout (str, fpdf.enums.TableBordersLayout): optional, default to ALL. Control what cell borders are drawn cell_fill_color (float, tuple, fpdf.drawing.DeviceGray, fpdf.drawing.DeviceRGB): optional. Defines the cells background color cell_fill_mode (str, fpdf.enums.TableCellFillMode): optional. Defines which cells are filled with color in the background col_widths (float, tuple): optional. Sets column width. Can be a single number or a sequence of numbers. When `col_widths` is a single number, it is interpreted as a fixed column width in document units. When `col_widths` is provided as an array, the values are considered to be fractions of the full effective page width, meaning that `col_widths=(1, 1, 2)` is strictly equivalent to `col_widths=(25, 25, 50)`. first_row_as_headings (bool): optional, default to True. If False, the first row of the table is not styled differently from the others gutter_height (float): optional vertical space between rows gutter_width (float): optional horizontal space between columns headings_style (fpdf.fonts.FontFace): optional, default to bold. Defines the visual style of the top headings row: size, color, emphasis... line_height (number): optional. Defines how much vertical space a line of text will occupy markdown (bool): optional, default to False. Enable markdown interpretation of cells textual content text_align (str, fpdf.enums.Align, tuple): optional, default to JUSTIFY. Control text alignment inside cells. v_align (str, fpdf.enums.AlignV): optional, default to CENTER. Control vertical alignment of cells content width (number): optional. Sets the table width wrapmode (fpdf.enums.WrapMode): "WORD" for word based line wrapping (default), "CHAR" for character based line wrapping. padding (number, tuple, Padding): optional. Sets the cell padding. Can be a single number or a sequence of numbers, default:0 If padding for left and right ends up being non-zero then c_margin is ignored. outer_border_width (number): optional. Sets the width of the outer borders of the table. Only relevant when borders_layout is ALL or NO_HORIZONTAL_LINES. Otherwise, the border widths are controlled by FPDF.set_line_width() num_heading_rows (number): optional. Sets the number of heading rows, default value is 1. If this value is not 1, first_row_as_headings needs to be True if num_heading_rows>1 and False if num_heading_rows=0. For backwards compatibility, first_row_as_headings is used in case num_heading_rows is 1. repeat_headings (fpdf.enums.TableHeadingsDisplay): optional, indicates whether to print table headings on every page, default to 1. N�rzTouter_border_width is only allowed when borders_layout is ALL or NO_HORIZONTAL_LINES)rrrz@first_row_as_headings needs to be False if num_heading_rows == 0z>first_row_as_headings needs to be True if num_heading_rows > 0)$�_fpdfr �coerce� _table_alignr�_v_alignr �_borders_layout�_outer_border_width�_cell_fill_colorr �_cell_fill_mode� _col_widths�_first_row_as_headings�_gutter_height� _gutter_width�_headings_style� font_size� _line_height� _markdown� _text_align�_width� _wrapmode�_num_heading_rowsr �_repeat_headings�_initial_style�rowsr�new�_padding�ALL�NO_HORIZONTAL_LINES� ValueError�_outer_border_margin�row)�self�fpdfrIrrr r!r"r#r$r%r&r'r(r)r*r+r,r-r.r/r0rPs �Z/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/fpdf/table.py�__init__zTable.__init__sD��z�� �!�L��/�/���� �g�.�.�� �1�8��H�H���#5�� � /���0�7��G�G���%���&;��#�+���)���-���2=�2E�A���.�.�;���!���%����� �!���!1��� 4� ;�O� L� L���"����� � �?�#�K��N�N�D�M�M�#�K��0�0�D�M� � � � "� � 2�( � � �"�-� �j����()�D� $� � #� /�� 2�Q� 6�6��!3�a�!7�7�)�D� %� %� )/�D� %� � !�Q� &� &��%��*�*�t�/J�*� �V�����%��)�)�$�2M�)� �T����� �.� +�)*��&�� � �C� �H�H�S�M�M�M�M� � �c� �|j�|j���|_t||���}|j�|��|D]:}t |t��r|jdi|���%|�|���;|S)z0Adds a row to the table. Returns a `Row` object.N)�styler) rHr3� font_face�RowrI�append� isinstance�dict�cell)rQ�cellsrWrPr]s rSrPz Table.row�s��� � � &�"&�*�"6�"6�"8�"8�D� ��$�e�$�$�$�� � �������� � �D��$��%�%� ���� � �4� � � � ���������� rUc�� �|jrtd�|jD����nd|_|j�H|jr/t |jt ��r|j|jz|_nj|jj|_nX|jrQt |jt ��r7|j|jz|jkrtd|j�d|j�����|j|jjkr$td|j�d|jj�����|j tj krtd���|j dkr�|jstd���|jj}|�f|jjp |jj}|���|jz}|t(vr)||jjvrt-d |�d |j�d ����|jj|jj|jj}}}|j tjkr8|jj|jz d z |j_|jj|j_n�|j tjkrB|jj|jjz |jz |j_|jj|j_n0|jj|jjkr|jj|j_|jj|jdz}|g}|jrOt?|j��D]:} ||� d| ��z }||j!z }|�"|���;tG|�$����} |j%tLj'u} |jxj|jd z c_t?tQ|j����D�]!} | | j)} |j�*| ��} | rT|jj| z|jj+kr7||j_||j_||j_td| �d����| rb| r`| |j krU|jxj|jd z c_t?|j ��D] }|�,|| ||����!| dkr|jxj|j-z c_|�,| | | |����#||j_|jj|j_dS)zSThis is an internal method called by `fpdf.FPDF.table()` once the table is finishedc3�$K�|] }|jV�� dS�N)� cols_count��.0rPs rS� <genexpr>zTable.render.<locals>.<genexpr>�s$����C�C�#�s�~�C�C�C�C�C�CrUrNzInvalid value provided width=z$ should be a multiple of col_widths=z: effective page width is z>JUSTIFY is an invalid value for FPDF.table() 'align' parameterzcheadings_style must be provided to FPDF.table() if num_heading_rows>1 or first_row_as_headings=Truez Using font 'z' with emphasis 'zU' in table headings require the corresponding font style to be added using add_font()r2rzThe row with index z4 is too high and cannot be rendered on a single page)�cell_x_positions).rI�max� _cols_countrDr;r[rr3�epwrNr5r �JrFr?r�family� font_family�lowerrWr�fontsr�x�y�l_margin�C�w�R�r_marginrO�range�_get_col_widthr>rZ�list�_process_rowpans_entriesrGr �ON_TOP_OF_EVERY_PAGE�len�pagebreak_height�_perform_page_break_if_need_be�page_break_trigger�_render_table_rowr=)rQrrk�font_key�prev_x�prev_y� prev_l_margin�xxrf�i�row_infor0r|� page_break�row_idxs rS�renderz Table.render�s ��HL�y�W�3�C�C���C�C�C�C�C�C�VW��� �;� ��� -�J�t�/?��$H�$H� -�"�.��1A�A�� � �"�j�n�� � � � � �*�T�-=�v�"F�"F� ���$�"2�2�d�k�A�A� �w�D�K�w�w�ei�eu�w�w���� �;���� '� '��g�� �g�g�W[�Wa�We�g�g��� � � ��� '� '��P��� � � !�A� %� %��'� � �y�����+�4�H��#��-�4�N�� �8N��!�<�<�>�>�H�N�:���:�-�-�(�$�*�BR�2R�2R�'�8�v�8�8���8�8�8����)-� � �d�j�l�D�J�DW� ��� � ��� '� '�#'�:�<�$�+�#=��"B�D�J� ��:�.�D�J�L�L� � �%�'� )� )�"&�*�,���1D�"D�t�{�"R�D�J� ��:�.�D�J�L�L� �Z�\�T�Z�0� 0� 0�"&�*�,�D�J� ��Z� �4�#<�Q�#?� ?���4�� �9� ,��4�+�,�,� ,� ,���d�)�)�!�Q�/�/�/���d�(�(�� �'�'��+�+�+�+���5�5�7�7�8�8�� � !�%9�%N� N� � � � � ��1�!�4�4� � ��s�4�9�~�~�&�&� E� E�A�'��{�;� ���B�B�CS�T�T�J�� ��J�L�#3�3�d�j�6S�S�S� &�� � �%�� � �&3�� �#� �a�!�a�a�a����� �o� �!�t�7M�2M�2M�� � � �� 9�!� <�<� � �$�T�%;�<�<���G��*�*�� ��)�)9�+����� �1�u�u�� � � �� 3�3� � � � "� "�1�h�q�k�3C� D� D� D� D�,�� ���z�*�� � � � rUc�f�|jtjkrt|j��S|jt jkrdS|jt jkrdS||jzt|j |j ��k}t|j ��}||j z|k}td��}|jt jkrd|dkr|�d��|r|�d��|dkr|�d��|r|�d��|jt jkr�|dks||jks|dkr|�d��||jdz kr|�d��|dkr|�d��|r|�d��|jt jkr7||jkr|�d��|s|�d��|jt jkrN|dkrdStd��}|dkrd|vr|�d��n|r|�d��|jt jkr|dkrdS||jkrdndSd �|��S) z� Defines which cell borders should be drawn. Returns a string containing some or all of the letters L/R/T/B, to be passed to `fpdf.FPDF.multi_cell()`. Can be overriden to customize this logic rr�LRTB�T�B�Lrt�TB�)�borderr�INHERIT�strr7r rL�NONE�colspanr{rIr^�rowspanrx�INTERNAL�remove�MINIMALrFrM�HORIZONTAL_LINES�SINGLE_TOP_LINE�join)rQr��jr]�is_rightmost_column� rows_count� is_bottom_rowr�s rS�get_cell_borderzTable.get_cell_border s��� �;�+�3� 3� 3��t�{�#�#� #� � �#5�#9� 9� 9��1� � �#5�#:� :� :��1��$�,�.�#�d�i��l�6H�2I�2I�I�����^�^� ��D�L�(�J�6� ��f���� � �#5�#>� >� >��A�v�v�� � �c�"�"�"�� #�� � �c�"�"�"��A�v�v�� � �c�"�"�"�"� #�� � �c�"�"�"� � �#5�#=� =� =��A�v�v��T�3�3�3�z�Q���� � �c�"�"�"��4�)�A�-�-�-�� � �c�"�"�"��A�v�v�� � �c�"�"�"�"� #�� � �c�"�"�"� � �#5�#I� I� I��4�)�)�)�� � �c�"�"�"� � #�� � �c�"�"�"� � �#5�#F� F� F��Q����q��$�Z�Z�F��A�v�v�#��-�-�� � �c�"�"�"�"�� #�� � �c�"�"�"� � �#5�#E� E� E��Q����q��d�4�4�4�3�3�!� ;��w�w�v���rUc ��|j|}|jj}t|j��D];\}}|��|j|||f|j||d�|��|j�|���<|j�|j ��dS)N)� row_height�cell_height_inforf) rIr3rp� enumerater^�_render_table_cellrA�set_y�ln�height) rQr��row_layout_inforf�kwargsrPrpr�r]s rSrzTable._render_table_rowCs����i��l�� �J�L�� ���+�+� � �G�A�t��|�� #�D� #���� � �,�!0�!1�  � �� � � � �J� � �Q� � � � � � � � �o�,�-�-�-�-�-rUc �| �|�d}d} n)|jdkr|j|j}d} n |j}d} d} d} |j|} |�|||j��} d}|jp|j}t|ttf��s||}|j }|j � ||��}|r"|jr|�|j���}||jkrt#j||j��}t#j|| j��}t#j||j��}|jrt-j|j��n|j}|jr|jn|j}| rd}n||}|j�|��| �s�|jj}|jj}|| z}||z}t?|j|||||� |||��|r|j!nd���|j"�r.|jj#}|j�$|j"��|jj%}||j&z}||j'dz }||j'dz}|dkr|j�(||||��||jz|j)kr}|j�(||||��|dkr|j�(||||��||jztU|j��kr|j�(||||��|j�$|��|j+�r |jj|jj}}|j,p|du}|jj#}|jxj|j-|dz zz c_|jxj|j.|dz zz c_|j�/|j+| |j-z |j0z |z |rdn||j.z |j1z |z d|j2���}|j3|j.z|j1z|z}||z|jj4krd} |j�5||��|j6r�d}|�;|j7|} |tpj9kr || z dz }n|tpj:kr|| z }|jxj|z c_|j�;|��5|jj<d | ||j6|j=d|d d d|j>t~j@t~jAz|jB||j2d �|��\} }ddd��n #1swxYwY|jxj|zc_nd}| p| }!|!||fS) NTrFr)� fill_color)r�r�r2)rs�h�keep_aspect_ratio�link�RIGHT�TOP)rsr��text�max_line_heightr�r�new_x�new_y�fillr)�outputr,r-r�r)Cr��merged_heightsr�rIrwr�rrCr[r r�rHr:�should_fill_cellr9rrFr�combiner?rWr-rrJrKrr6r3�set_xrorp�draw_box_bordersr�r�r8� line_width�set_line_widthrqrDrO�linerhr{�img�img_fill_width�left�top�image�right�bottomr��rendered_heightr~�set_xyr��rendered_heightsr�Mr�� use_font_face� multi_cellrArBr � PAGE_BREAK�HEIGHTrE)"rQr�r�r]r�r�rfr�� cell_height�height_query_only�page_break_text�page_break_imagerP� col_width� img_heightr*rW�cell_mode_fillr-r�cell_x�x1�y1�x2�y2�_remember_linewidthrorp� auto_height�cell_border_line_widthr��dy�actual_text_height� do_pagebreaks" rSr�zTable._render_table_cellWs�� � #��K� $� � � �\�A� � �*�9�$�,�G�K� %� � �*�1�K� %� ��� ���i��l���'�'��1�d�l�;�;� �� ��Z�3�4�#3� ��*�u�c�l�3�3� '�#�A��J��#���-�>�>�q�!�D�D�� � D�d�3� D��M�M�T�-B�M�C�C�E� �t�%� %� %��$�U�D�,@�A�A�E�� ��� �2�2��� ��� �3�3��/3�|�N�'�+�d�l�+�+�+����"&�,�A�$�,�,�D�M�� � )��F�F�%�a�(�F� � ���� � � �!�- ?����B����B��Y�� ��k�!�B� �� ������+�+�A�q�$�7�7�/4�>�5�+�+�$� � � � ��'� ?�&*�j�&;�#�� �)�)�$�*B�C�C�C� �Z�(���$�+�%���$�3�A�6�6���$�3�A�6�6����6�6��J�O�O�B��B��3�3�3��t�|�#�t�'7�7�7��J�O�O�B��B��3�3�3��A�v�v�� ����B��B�7�7�7��4�<�'�3�t�y�>�>�9�9�� ����B��B�7�7�7�� �)�)�*=�>�>�>� �8�% $��:�<����q�A��-�D���1D�K�%)�Z�%:� "� �J�L�L�G�L�+A�A�+E�E� E�L�L� �J�L�L�G�K�*@�1�*D�D� D�L�L��J�$�$����g�l�*�W�]�:�=S�S�#�-�A�A�$��k�"��n�%�-�-� #'��Y�%� � �E� �%��+���.�!�)�)� ��A�~�� � =�=�=�#'� � �J� � �a�� #� #� #� �9�" ��B��&�%5�%F�q�%I�"��f�h�&�&�%�(:�:�a�?�B�B����(�(�$�'9�9�B� �J�L�L�B� �L�L���)�)�%�0�0� � �/D�t�z�/D�0�� ���$(�$5��$�!���!�^�,�7�:K�:R�R�!�^�#���0�0��0�0�,��� � � � � � � � � � � ���� � � � �& �J�L�L�B� �L�L�L��K�&�:�*:� ��Z��4�4s�1AT�T�Tc��|j}|j|dz |jzz d|jdzz }t |dz |jzd��}|js |||z z|zSt |jt��r ||jz|zS|t|j��krtd|dz�d|dz�����d}t|||z��D]<}|j|t|j��z } || |zz }||kr ||jz }�=|S)z�Gets width of a column in a table, this excludes the outer gutter (outside the table) but includes the inner gutter between columns if the cell spans multiple columns.rr2rz@Invalid .col_widths specified: missing width for table() column z on row ) rhrDr>rOrgr;r[rr{rNrv�sum) rQr�r�r�rbr+�gutter_within_cellr��k� col_ratios rSrwzTable._get_col_width"s_���%� � �K��A�~��!3�3� 4��$�+�A�.�.� /� � !�'�A�+��1C�!C�Q�G�G���� G��e�j�0�1�4F�F� F� �d�&�� /� /� C��T�-�-�0B�B� B� ��D�$�%�%� %� %��i�ST�WX�SX�i�i�bc�fg�bg�i�i��� �� ��q�!�g�+�&�&� 0� 0�A��(��+�c�$�2B�.C�.C�C�I� ��U�*� *�I��A�v�v��T�/�/� ���rUc #�p K�i}i}t|j��D]�\}}|�|��\}}|D]:}||}|�.|j|}t ||jdz���|j|<�;t|j��D]B\} }t |t��r(||| <t| dz| |j z��D]} d|| <��C��t|��dkrtd���g} g} g} g}|j � ��5t|j��D�]l\}}g}g}|�i��t|j��D]�\} }|��|�|| ||j���\}}}|jr|}n|}|||| <|jdkr^| �t%| ||j|p|����||jk}||jz|jk}|r|rtd�����|�|��|�|����d}|r$t)|��}|dkrt)|��}|dkr|j}| �|��| �|j����n ddd��n #1swxYwYt-| d����} d �|jD��}| D]�}d}|j|jdz z}d}|���D].}t)|||��}|| |z }|||z }�/||z|jkr�|j||j|zzkr/|j|z |jz }|���D]}|||<���|j|z |z }|���D]}||xx||jz z cc<���t|j��D]�\}}| |||z}d|g} t|dz|| |z��D]7} | �| d |jz| | z|| z���8|}!|| |z}"|dz} | |"kr@t)|"| | | z��}"|!|j| | z|| zz }!| dz } | |"k�@t7| d|!||| ��V���dS) Nr�r�rz#Rowspan extends beyond end of table)r�z:Heading includes rowspan beyond the number of heading rowsc��|jSra)�length)�spans rS�<lambda>z0Table._process_rowpans_entries.<locals>.<lambda>�s��T�[�rU)�keyc��g|]}d��S)rrrcs rS� <listcomp>z2Table._process_rowpans_entries.<locals>.<listcomp>�s��3�3�3�#�A�3�3�3rU�����)r�rI� convert_spansr^rr�r[�Cellrvr�r{rr3�_disable_writingrZr�rAr��RowSpanLayoutInforFrg� max_rowspan�sortedr=r�� row_range�contents_height� RowLayoutInfo)#rQ�active_rowspans�prev_row_in_colr�rP�prior_rowspans�col_idx�prev_rowr]r�r�� rowspan_list�row_min_heights� row_span_maxr��dictated_heights� img_heights�_r�� text_height�dictated_height� is_heading�span_outside_heading� min_height�row_span_paddingr�� max_padding�assigned_height�assigned_paddingr-�extrar�� merged_sizesr|� pagebreak_rows# rSryzTable._process_rowpans_entries>s����������� �*�*� 2� 2�F�A�s�.1�.?�.?��.P�.P� +�O�^�)� V� V��*�7�3���'�#�>�'�2�D�.5�d�D�L�ST�DT�.U�.U�.U�H�N�7�+��$�S�Y�/�/� 2� 2���4��d�D�)�)�2�),�O�A�&�"�1�q�5�!�d�l�*:�;�;�2�2��-1���*�*��  2� �� � �1� $� $�� E�F�F� F�� ���� ��� �Z� (� (� *� *�8 5�8 5�#�D�I�.�.�7 5�7 5���3�#%� � � � �'�'��+�+�+�(���3�3�#7�#7�G�A�t��|� �26�1H�1H����#'�#4� 2I�2�2�.�A�z�;� �*�6�*4���*5��.=�$�Q�'��*��|�a�'�'�$�+�+�-� !�1�d�l�O�4Q�z������ &'��)?�%?� �/0�4�<�/?�$�BX�/X�,�%��*>��"/� \�#�#���)�/�/��@�@�@�#�*�*�:�6�6�6�6� � �#�6�!$�%5�!6�!6�J�!�Q���%(��%5�%5� ���?�?�!%�!2�J��&�&�z�2�2�2��#�#�C�O�4�4�4�4�o7 5�8 5�8 5�8 5�8 5�8 5�8 5�8 5�8 5�8 5�8 5�8 5����8 5�8 5�8 5�8 5�v�l�0H�0H�I�I�I� �4�3���3�3�3�� � C� C�D��K�"�1�T�[�1�_�E�O� � ��^�^�%�%� 8� 8��!�+�/?��/B�C�C� ��?�1�#5�5�� �$4�Q�$7�7� � ��!1�1�D�4H�H�H��'�/�D�K�+�<U�*U�U�U�#�3�o�E���T�G�!�^�^�-�-�6�6��.5�(��+�+�6�!�0�?�B�EU�U�E�!�^�^�-�-�C�C��(��+�+�+�u�t�{�/B�B�+�+�+�+�� �� �*�*� � �F�A�s�(��+�.>�q�.A�A�J��z�?�L��1�q�5�!�l�1�o�"5�6�6� � ���#�#� ��$��)�*�%�a�(�)�'�q�)�*����� *� �� �Q��/�M��A��A��m�#�#� #�M�1�|�A��3F� G� G� � ��'�/�!�*<�<�?O�PQ�?R�R�� ��Q��� �m�#�#� ��Q��!1�3C�A�3F� ��� � � � �3 � s�FJ � J$�'J$)r)rN)NN)r)�__name__� __module__� __qualname__�__doc__r rLr r��DEFAULT_HEADINGS_STYLEr�WORDrTrPr�r�rr�rwryrrUrSrrs���������z� ��)�-��(�-��"���-�����������/z�z�z�z�z�x � � � �a+�a+�a+�H7�7�7�r.�.�.�4��I5�I5�I5�I5�V����8P�P�P�P�PrUrc �t�eZdZdZd d�Zed���Zed���Zd�Zddddddd d dde j f d �Z dS) rYz@Object that `Table.row()` yields, used to build a row in a tableNc�0�||_g|_||_dSra)�_tabler^rW)rQ�tablerWs rSrTz Row.__init__�s���� ��� ��� � � rUc�>�td�|jD����S)Nc3�<K�|]}t|d|du��V��dS)r�N)�getattr�rdr]s rSrez!Row.cols_count.<locals>.<genexpr>�s3����U�U�$�7�4��D��,<�=�=�U�U�U�U�U�UrU)r�r^�rQs rSrbzRow.cols_count�s!���U�U�$�*�U�U�U�U�U�UrUc�d�d�|jD��}t|��rt|��ndS)Nc� �h|] }|�|j�� Srar�rs rS� <setcomp>z"Row.max_rowspan.<locals>.<setcomp>�s��I�I�I�$��8H���8H�8H�8HrUr)r^r{rg)rQ�spanss rSr�zRow.max_rowspan�s2��I�I�$�*�I�I�I�� ��Z�Z�.�s�5�z�z�z�Q�.rUc�z�d}g}t|j��D]�\}}|��|tjkr^||}t |t ��st d���t||jdz���||<|� d���v|� |��|}t |t ��r,|jdkr!|� dg|jdz z����i}|� ��D])\}} |� |d��| dkr| dz ||<�*g} t|��D]x\}}t |t ��r4|j dkr)t|||jz��D]}|j dz ||<��N|tjkr| � |��d||<�y||_|| fS)Nrz4Invalid location for TableSpan.COL placeholder entryr)r�)r�r^r�COLr[r�rrr�rZ�extend�items�insertr�rv�ROW) rQr��prev_colr^r�r]� prev_cell�remaining_rowspansr��v�reverse_rowspanss rSr�zRow.convert_spans�s������ ���,�,� >� >�G�A�t��|���y�}�$�$�!�(�O� �!�)�T�2�2��'�N����#*�)�Y�=N�QR�=R�"S�"S�"S��h��� � �T�"�"�"�"�� � �T�"�"�"����d�D�)�)�>�d�l�Q�.>�.>��L�L�$��4�<�!�+;�!<�=�=�=����#�)�)�+�+� .� .�D�A�q� �L�L��D� !� !� !��1�u�u�()�A��"�1�%���� ��'�'� � �G�A�t��$��%�%� �$�,��*:�*:��q�!�d�l�"2�3�3�=�=�A�,0�L�1�,<�&�q�)�)�=����&�&� �'�'��*�*�*���a����� �!�#3�3�3rUr�Frc ��|r|rtd���t|t��r|j�|��|S|s5|jj���} | |j|jj fvr| }t||||||||| | tj | ��� � } |j�| ��| S)a� Adds a cell to the row. Args: text (str): string content, can contain several lines. In that case, the row height will grow proportionally. align (str, fpdf.enums.Align): optional text alignment. v_align (str, fpdf.enums.AlignV): optional vertical text alignment. style (fpdf.fonts.FontFace): optional text style. img: optional. Either a string representing a file path to an image, an URL to an image, an io.BytesIO, or a instance of `PIL.Image.Image`. img_fill_width (bool): optional, defaults to False. Indicates to render the image using the full width of the current table column. colspan (int): optional number of columns this cell should span. rowspan (int): optional number of rows this cell should span. padding (tuple): optional padding (left, top, right, bottom) for the cell. link (str, int): optional link, either an URL or an integer returned by `FPDF.add_link`, defining an internal link to a page border (fpdf.enums.CellBordersLayout): optional cell borders, defaults to `CellBordersLayout.INHERIT` u�fpdf2 currently does not support inserting text with an image in the same table cell. Pull Requests are welcome to implement this 😊) �NotImplementedErrorr[rr^rZrr3rXrWrHr�rr4)rQr�rrrWr�r�r�r�r-r�r�rXr]s rSr]zRow.cells���D � �C� �%�D��� � �d�I� &� &� � �J� � �d� #� #� #��K�� "�� �)�3�3�5�5�I����T�[�-G� H�H�H�!��� � � � � � � � � � � � $�V� ,� ,�  �  �� � ���$����� rUra) rrrrrT�propertyrbr�r�rr�r]rrUrSrYrY�s�������F�F����� �V�V��X�V��/�/��X�/�$4�$4�$4�P���� ����� � �(�B�B�B�B�B�BrUrYT)�frozenc�6�eZdZUdZdZeed<eeee fed<eeee fed<ee ed<eeed<e ed<e ed <e ed <eee eed ��fed <eeee fed <eeed<dd�Zd S)r�z'Internal representation of a table cell) r�rrrWr�r�r�r�r-r�r�r�rrrWr�r�r�r�Nr-r�r�c� �td���)NzNot implemented yet)r0)rQr�rs rS�writez Cell.writeis��!�"7�8�8�8rUra)rrrr� __slots__r��__annotations__rrr rr�bool�int�tuple�typerr5rrUrSr�r�Ms�������-�-� �I� �I�I�I� �E�#�u�*�%� &�&�&�&� �e�C��K�(� )�)�)�)� �H� ���� �#��������� �L�L�L� �L�L�L� �e�C����T� � �2�3� 4�4�4�4� �5��c��?� #�#�#�#� �&� '�'�'�'�9�9�9�9�9�9rUr�c�8�eZdZUeed<eed<eed<eed<dS)r�r�r|r�r�N)rrr�floatr7r\rxrrUrSr�r�ms?������� �M�M�M��������������rUr�c�>�eZdZUeed<eed<eed<eed<d�ZdS)r��column�startr�r�c�F�t|j|j|jz��Sra)rvr@r�rs rSr�zRowSpanLayoutInfo.row_range~s���T�Z���d�k�!9�:�:�:rUN)rrrr9r7r=r�rrUrSr�r�wsL������� �K�K�K� �J�J�J� �K�K�K�����;�;�;�;�;rUr�Nc ���|r|j}|�|��g}|j} |j|z }|j|z }|| z}|| z}|| z}|| z}t |t ��r$t |���d��rd}|r8|dkrdnd} |�|d�d|d�d||z d�d||z d�d| �� ��n1|dkr+|�|d�d|d�d||z d�d||z d�d���t |t ��r�d |vr%|�|d�d|d�d |d�d|d�d ���d|vr%|�|d�d|d�d |d�d|d�d ���d |vr%|�|d�d|d�d |d�d|d�d ���d |vr%|�|d�d|d�d |d�d|d�d ���d� |��} |� | ��|r|�|��dSdS)aDraws a box using the provided style - private helper used by table for drawing the cell and table borders. Difference between this and rect() is that border can be defined as "L,R,T,B" to draw only some of the four borders; compatible with get_border(i,k) See Also: rect()�LTRBrr��fz.2f� z re z re Sr�z m z l Srtr�N) r��set_fill_colorr�r�r[r��set� issupersetrZr��_out) �pdfr�r�r�r�r�r��prev_fill_color�slr��op�ss rSr�r��s����'��.�� ���:�&�&�&� �B� ��A� ����B� ����B��!�G�B��!�G�B��!�G�B��!�G�B��&�#����3�v�;�;�#9�#9�&�#A�#A�����M��a�K�K�S�S�S�� � � �R�'�N�N�b�'�N�N�2��7�(N�N�N��b��(N�N�N�"�N�N�O�O�O�O� �1��� � � �R�'�K�K�b�'�K�K�2��7�(K�K�K��b��(K�K�K�K�L�L�L��&�#���H� �&�=�=� �I�I��-�F�F�"�-�F�F��.F�F�F�"�.F�F�F�F� G� G� G� �&�=�=� �I�I��-�F�F�"�-�F�F��.F�F�F�"�.F�F�F�F� G� G� G� �&�=�=� �I�I��-�F�F�"�-�F�F��.F�F�F�"�.F�F�F�F� G� G� G� �&�=�=� �I�I��-�F�F�"�-�F�F��.F�F�F�"�.F�F�F�F� G� G� G� ���� � �A��H�H�Q�K�K�K��,� ���?�+�+�+�+�+�,�,rUra) � dataclassesrr�numbersr�typingrr�enumsr r r r r rrrr�errorsrrnrr�utilrrrrYr�r�r�r�rrUrS�<module>rUsL��*�*�*�*�*�*�*�*�������"�"�"�"�"�"�"�"� � � � � � � � � � � � � � � � � � � � � � �"�!�!�!�!�!�'�'�'�'�'�'�'�'�������!��6�2�2�2��w �w �w �w �w �w �w �w �ty�y�y�y�y�y�y�y�x ��$����9�9�9�9�9�9�9���9�> ��$�������������� ��$����;�;�;�;�;�;�;���;�0,�0,�0,�0,�0,�0,rU
Memory