o
    G1b/                     @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZmZm	Z	m
Z
 d dlmZmZ edZdddZdd	d
ZG dd dZG dd deZG dd deZG dd deZG dd deZdS )    N)
TableStyle)pisaTag)getAligngetBorderStylegetSize	set_value)PmlKeepInFramePmlTableZ	xhtml2pdfc                 C   *   | d u rd S t | } | dr| S t| S N%strendswithr   value r   /xhtml2pdf/tables.py_width      
r   c                 C   r
   r   r   r   r   r   r   _height%   r   r   c                   @   s@   e Zd Zdd ZdddZdd Zdd	 Zd
d ZdddZdS )	TableDatac                 C   s(   g | _ g | _g | _d| _d| _d| _d S )N r   )datastylesspanmodepaddingcol)selfr   r   r   __init__0   s   
zTableData.__init__Nc                 C   s,   |  j d7  _ | jt| jd  | d S N   )r   r   lenappendr   r   r   r   r   add_cell8   s   zTableData.add_cellc                 C   s   | j t| d S N)r   r$   copyr%   r   r   r   	add_style<   s   zTableData.add_stylec                 C   s   | j ||f d S r'   )r   r$   )r   xyr   r   r   	add_empty?      zTableData.add_emptyc                 C   s6   | j }| jD ]\}}|t|k r|| |d q|S )Nr   )r   r   r#   insert)r   r   r*   r+   r   r   r   get_dataB   s   zTableData.get_datatdc                 C   s  |  | _|jjr|dkr| d|||jjf 	 t|jjr>|jjr>|jj	d ur>| d||d |d f|jj|jj	df t|jjrc|jjrc|jjd urc| d||d |d f|jj|jjdf t|jjr|jjr|jjd ur| d	|d |d f||jj|jjdf t|jjr|jj
r|jjd ur| d
|d |d f||jj
|jjdf | d|||jjp| jf | d|||jjp| jf | d|||jjp| jf | d|||jjp| jf d S )Ntr
BACKGROUNDr   z%rZ	LINEABOVEr"   ZsquaredZ
LINEBEFOREZ	LINEAFTERZ	LINEBELOWZLEFTPADDINGZRIGHTPADDINGZ
TOPPADDINGZBOTTOMPADDING)upperr   frag	backColorr)   logdebugborderTopWidthborderTopStyleborderTopColorborderBottomWidthborderBottomStyleborderBottomColorborderLeftWidthborderLeftStyleborderLeftColorborderRightWidthborderRightStyleborderRightColorr   paddingLeftr   paddingRightZ
paddingTopZpaddingBottom)r   cbeginendr   r   r   r   add_cell_stylesL   s\   
   
zTableData.add_cell_stylesr'   )r0   )	__name__
__module____qualname__r    r&   r)   r,   r/   rI   r   r   r   r   r   .   s    

r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )pisaTagTABLEc                 C   s,   t |d|j t |d|j t |dd d S )N)r@   rC   r:   r=   r>   rA   r8   r;   )r<   r?   r9   rB   Zsolid)r   bordercolorborder)r   r4   attrsr   r   r   set_borders   s   zpisaTagTABLE.set_bordersc                 C   s   |   | j}t |j|_| _|j}|jr |jr | |j| |j|_	|
|ddd |j |_d|_d|_g |_g |_|j|_t|j|_d S )N)r   r   )rS   tabler   )addParaattrr   	tableDatarP   rO   rR   r4   Zcellpaddingr   rI   alignr3   r   rowcolwrowhrepeatr   width)r   rF   rQ   tdatar   r   r   start   s   zpisaTagTABLE.startc              
   C   s(  |j }| }ztdd |D pdg}W n ty)   t|d dg}Y nw t|D ]\}}||  dg|t|  7  < q.td	t
|j |jr~t||j|jd|j|jdt|jd	}t|j|_|jj|_|jj|_|jj|_|| nt|d
 |  | j d |_ | _ d S )Nc                 S   s   g | ]}t |qS r   )r#   ).0rY   r   r   r   
<listcomp>   s    z$pisaTagTABLE.end.<locals>.<listcomp>r   z$<table> rows seem to be inconsistentr   zCol widths: {}r"   ZTOP)Z	colWidthsZ
rowHeightsZ
splitByRowZ
repeatRowsZhAlignvAlignstylez<table> is empty)rW   r/   max
ValueErrorr6   warning	enumerater#   r7   formatlistrZ   r   r	   r[   r\   rX   r   r   r   r]   Z
totalWidthr4   ZspaceBeforeZ
spaceAfterZkeepWithNextZaddStory	clearFrag)r   rF   r^   r   ZmaxcolsirY   tr   r   r   rH      s<   
 


zpisaTagTABLE.endN)rJ   rK   rL   rR   r_   rH   r   r   r   r   rM      s    rM   c                   @      e Zd Zdd Zdd ZdS )	pisaTagTRc                 C   st   |j }|j}d|f}d|f}||||d | jjp|jj|j_|jjr/|d|||jjf d|_	|j
g  d S )Nr   rS   r1   r2   )rW   rY   rI   rV   valignr4   rb   r5   r)   r   r   r$   )r   rF   r^   rY   rG   rH   r   r   r   r_      s   zpisaTagTR.startc                 C   s   |j  jd7  _d S r!   )rW   rY   )r   rF   r   r   r   rH      r-   zpisaTagTR.endNrJ   rK   rL   r_   rH   r   r   r   r   rn      s    rn   c                   @   rm   )	pisaTagTDc                 C   s  | j jd urt| j j|j_|  | | _| j }|j}|j	}|j
}|j}|j}	 |jD ]\}}	||krD|	|krD|d7 }| jd7  _q-	 ||f}
||f}|r\|d | d |d f}|rj|d |d | d f}|
|kr|d|
|f t|
d |d d D ]"}t|
d |d d D ]}	||
d ks|	|
d kr|||	 qq|||
|d |d t|jkr|j|d t|j t g  |_|s|jjp| j j}|d urt||j|< td|| n+t| t| jjdkr|jj|jj }td|| |rt||j|< n	 |d t|jkr,|j|d t|j t g  |_|sY|jjp:| j dd }|d urYt ||j|< |d|
|df |d	|
|df | j j!pa|jj"}|d urr|d
|
||# f |j}t$|dd t$|dd  d S )Nr"   r   ZSPANr0   zCol {} has width {}heightZFONTSIZEg      ?ZLEADINGZVALIGNrN   )r@   r?   rC   rB   r:   r9   r=   r<   )%rV   rX   r   r4   	alignmentrj   	swapStorystoryrW   ZcolspanZrowspanrY   r   r   r)   ranger,   rI   r#   rZ   r   r]   r6   r7   rh   nodeZ
childNodesrD   rE   r[   rr   getr   ro   rb   r3   r   )r   rF   rQ   r^   ZcspanZrspanrY   r   r*   r+   rG   rH   r]   rr   ro   r4   r   r   r   r_      s   



zpisaTagTD.startc                 C   sT   |j }|  |j}|jjs|jdd}tdd||d}|| j |	| d S )Nz-pdf-keep-in-frame-modeshrinkr   )ZmaxWidthZ	maxHeightr   content)
rW   rU   ru   r4   ZinsideStaticFrameZcssAttrrx   r   rt   r&   )r   rF   r^   cellr   r   r   r   rH   P  s   zpisaTagTD.endNrp   r   r   r   r   rq      s    crq   c                   @   s   e Zd ZdS )	pisaTagTHN)rJ   rK   rL   r   r   r   r   r|   f  s    r|   r'   )r(   loggingZreportlab.platypus.tablesr   Zxhtml2pdf.tagsr   Zxhtml2pdf.utilr   r   r   r   Zxhtml2pdf.xhtml2pdf_reportlabr   r	   	getLoggerr6   r   r   r   rM   rn   rq   r|   r   r   r   r   <module>   s   


		TU{