
    kh                     N    d Z ddlmZ ddlmZ ddlmZ ddlmZ  G d de      Zy	)
a  Table block object parsed from raw image and text blocks.

Data Structure::

    {
        'type': int
        'bbox': (x0, y0, x1, y1),
        'rows': [
            {
                "bbox": (x0, y0, x1, y1),
                "height": float,
                "cells": [
                    {
                        'bbox': (x0, y0, x1, y1),
                        'border_color': (sRGB,,,), # top, right, bottom, left
                        'bg_color': sRGB,
                        'border_width': (,,,),
                        'merged_cells': (x,y), # this is the bottom-right cell of merged region: x rows, y cols
                        'blocks': [ {text blocks} ]
                    }, # end of cell
                    {},
                    None, # merged cell
                    ...
                ]
            }, # end of row
            {...} # more rows
        ] # end of row
    }
   )Row)Rows   )Block)docxc                        e Zd ZdZddef fdZd Zd Zd Ze	d        Z
e	d        Ze	d	        Ze	d
        ZdefdZ fdZdefdZdefdZd Zd Zd Z xZS )
TableBlockzTable block.rawc                     |i }t         |   |       t        |       j                  |j	                  dg             | _        | j                          y )N)parentrows)super__init__r   restoreget_rowsset_lattice_table_block)selfr
   	__class__s     U/var/www/teggl/fontify/venv/lib/python3.12/site-packages/pdf2docx/table/TableBlock.pyr   zTableBlock.__init__*   sK    ;b &..swwvr/BC
 	$$&    c                 b    	 | j                   |   }|S # t        $ r d| d}t        |      w xY w)Nz
Row index z out of range)r   
IndexError)r   idxrowmsgs       r   __getitem__zTableBlock.__getitem__4   sD    	**S/C
 J	  	"se=1CS/!	"s    .c                 (    d | j                   D        S )Nc              3       K   | ]  }|  y wN ).0r   s     r   	<genexpr>z&TableBlock.__iter__.<locals>.<genexpr>>   s     **s   )r   r   s    r   __iter__zTableBlock.__iter__=   s    *tzz**r   c                 ,    t        | j                        S r    lenr   r$   s    r   __len__zTableBlock.__len__@   s    4::r   c                 ,    t        | j                        S )zCount of rows.r'   r$   s    r   num_rowszTableBlock.num_rowsC   s     4::r   c                 N    | j                   rt        | j                  d         S dS )zCount of columns.    )r+   r(   r   r$   s    r   num_colszTableBlock.num_colsH   s"     &*]]s4::a=!99r   c                     | j                   D cg c]  }|D cg c]  }|j                   c} c}}S c c}w c c}}w )zGet text contained in each cell.

        Returns:
            list: 2D-list with each element representing text in cell.
        )r   text)r   r   cells      r   r0   zTableBlock.textM   s.     9=

D,$)),DD,Ds   	:5::c                     | j                   \  }}}}| d   d   j                  \  }}}}| d   d   j                  \  }	}
}}||dz  z
  ||dz  z
  ||
dz  z   ||dz  z   fS )z"Outer bbox with border considered.r-   g       @)bboxborder_width)r   x0y0x1y1w0_topw0_right	w0_bottomw0_leftw1_topw1_right	w1_bottomw1_lefts                r   
outer_bboxzTableBlock.outer_bboxV   s}     BB/3Awqz/F/F,)W/3Bx|/H/H,)W73;6#:r(3,9S=@PQQr   r   c                 :    | j                   j                  |       y)zrAppend row to table and update bbox accordingly.

        Args:
            row (Row): Target row to add.
        N)r   append)r   r   s     r   rD   zTableBlock.append_   s     	

#r   c                 z    t         |          }|j                  d| j                  j                         i       |S )Nr   )r   storeupdater   )r   resr   s     r   rF   zTableBlock.storeh   s8    gmo

DJJ$$&
 	 
r   blocksc                 \    | j                   D ]  }|D ]  }|s|j                  |         y)zuAssign ``blocks`` to associated cell.

        Args:
            blocks (list): A list of text/table blocks.
        N)r   assign_blocks)r   rI   r   r1   s       r   rK   zTableBlock.assign_blocksp   9     :: 	+C +X""6*+	+r   shapesc                 \    | j                   D ]  }|D ]  }|s|j                  |         y)ziAssign ``shapes`` to associated cell.

        Args:
            shapes (list): A list of Shape.
        N)r   assign_shapes)r   rM   r   r1   s       r   rO   zTableBlock.assign_shapes|   rL   r   c                 ^    | j                   D ]  }|D ]  }|s |j                  di |    y)znParse layout under cell level.

        Args:
            settings (dict): Layout parsing parameters.
        Nr!   )r   parse)r   settingsr   r1   s       r   rQ   zTableBlock.parse   s<     :: 	'C 'X

&X&'	'r   c                 \    | j                   D ]  }|D ]  }|s|j                  |         y)a`  Plot table block, i.e. cell/line/span, for debug purpose.
        
        Args:
            page (fitz.Page): pdf page.
            content (bool): Plot text blocks contained in cells if True.
            style (bool): Plot cell style if True, e.g. border width, shading.
            color (bool): Plot border stroke color if ``style=False``.
        N)r   plot)r   pager   r1   s       r   rT   zTableBlock.plot   s6     :: 	 C  X		$ 	 r   c                     t        j                  || j                         t        t	        |j
                              D ]!  }| j                  |   j                  ||       # y)zmCreate docx table.
        
        Args:
            table (Table): ``python-docx`` table instance.
        N)r   indent_table
left_spaceranger(   r   r   	make_docx)r   tableidx_rows      r   rZ   zTableBlock.make_docx   sO     	%1 S_- 	:GJJw))%9	:r   r    )__name__
__module____qualname____doc__dictr   r   r%   r)   propertyr+   r.   r0   rB   r   rD   rF   listrK   rO   rQ   rT   rZ   __classcell__)r   s   @r   r	   r	   (   s    '4 '+   : : E E R R 	+4 	+	+4 	+	' :r   r	   N)r`   r   r   common.Blockr   commonr   r	   r!   r   r   <module>rg      s&   >     F: F:r   