o
    ¾y}[ ã                	   @   sž  d Z dZddlmZmZ ddlmZmZmZ ddl	m
Z
mZmZ ddlmZ ddlmZmZmZmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlm Z  ddddddœZ!ddddddœZ"G dd„ de
ƒZ#G dd„ dƒZ$dd„ Z%dd„ Z&ej'fdd„Z(dd„ Z)dd„ Z*d d!„ Z+dej'fd"d#„Z,G d$d%„ d%e-ƒZ.G d&d'„ d'eƒZ/d(d)d)d*d+d,d-d.d/œZ0G d0d1„ d1e/ƒZ1e2e0 3¡ ƒZ4d2d3„ Z5d4d5„ Z6e$d6d7d8d9ej7fd:gƒZ8e$d;d7d8d<ej7fd:gƒZ9e$d=d7d8d9ej7fd;d7d8dej7fd>d7d?dej7fd@d7dAdej7fd:gƒZ:e$d=d7d8d9ej7fd;d7d8dej;fd>d7d?dej7fd@d7dAdej7fd:gƒZ<e$dBd7d?dej=fdBdCd8d9ej7fd>dAd8dej=fd:gƒZ>e?dDk�rMddEl@mAZA eAƒ  dS dS )Fz3.3.0aØ  
Tables are created by passing the constructor a tuple of column widths, a tuple of row heights and the data in
row order. Drawing of the table can be controlled by using a TableStyle instance. This allows control of the
color and weight of the lines (if any), and the font, alignment and padding of the text.

None values in the sequence of row heights or column widths, mean that the corresponding rows
or columns should be automatically sized.

All the cell values should be convertible to strings; embedded newline '\n' characters
cause the value to wrap (ie are like a traditional linefeed).

See the test output from running this module as a script for a discussion of the method for constructing
tables and table styles.
é    )ÚFlowableÚPreformatted)Ú	rl_configÚxrangeÚascii)ÚPropertySetÚParagraphStyleÚ_baseFontName)Úcolors)ÚannotateExceptionÚIdentStrÚflattenÚisStrÚasNativeÚstrTypes)Úfp_str)ÚABag©ÚstringWidth)ÚIndenterÚNullActionFlowable)Ú
LIIndenterNé   é   )NÚbuttÚroundÚ
projectingÚsquared)NÚmiterÚmitrer   Úbevelc                   @   sX   e Zd ZeZdZdZdZdZdZ	dZ
dZdZdZdZd	Zd
Zd
Zddd„Zddd„Zd
S )Ú	CellStyleé
   é   é   é   r   ÚblackÚLEFTÚwhiteÚBOTTOMNc                 C   s    || _ |d ur| | ¡ d S d S ©N)ÚnameÚcopy)Úselfr+   Úparent© r/   úK/var/www/html/env/lib/python3.10/site-packages/reportlab/platypus/tables.pyÚ__init__1   s   ÿzCellStyle.__init__c                 C   s2   |d u rt ƒ }t| ƒD ]}t||t| |ƒƒ q|S r*   )r!   ÚdirÚsetattrÚgetattr)r-   Úresultr+   r/   r/   r0   r,   5   s
   zCellStyle.copyr*   )Ú__name__Ú
__module__Ú__qualname__r	   ÚfontnameÚfontsizeÚleadingÚleftPaddingÚrightPaddingÚ
topPaddingÚbottomPaddingÚfirstLineIndentÚcolorÚ	alignmentÚ
backgroundÚvalignÚhrefÚdestinationr1   r,   r/   r/   r/   r0   r!   "   s"    
r!   c                   @   s.   e Zd Zd
dd„Zdd„ Zdd„ Zdd	„ ZdS )Ú
TableStyleNc                 K   sp   |r"|  ¡ d d … }|j| _dD ]}t||ƒr t| |t||ƒƒ qng }|t|p)g ƒ | _i | _| j |¡ d S ©N)ÚspaceBeforeÚ
spaceAfter)ÚgetCommandsÚ_optsÚhasattrr3   r4   ÚlistÚ_cmdsÚupdate)r-   Úcmdsr.   ÚkwÚpcmdsÚar/   r/   r0   r1   =   s   
€þzTableStyle.__init__c                 G   s   | j  |¡ d S r*   )rO   Úappend)r-   Úcmdr/   r/   r0   ÚaddM   s   zTableStyle.addc                 C   s   dd  tt| jƒ¡ S )Nz!TableStyle(
%s
) # end TableStylez  
)ÚjoinÚmapÚreprrO   ©r-   r/   r/   r0   Ú__repr__O   s   zTableStyle.__repr__c                 C   s   | j S r*   )rO   r[   r/   r/   r0   rK   Q   s   zTableStyle.getCommands©NN)r6   r7   r8   r1   rW   r\   rK   r/   r/   r/   r0   rG   <   s
    
rG   c                 C   s   t | ttfƒ r
dpt| ƒS ©Nr   )Ú
isinstanceÚtuplerN   Úlen)Úxr/   r/   r0   Ú_rowLenT   s   rc   c                 C   sT  g }|j }g }|j }g }|j }|}d }	}
| D ]S}t|tƒrYt|ƒ ¡ }|s-d}|
d7 }
n9| d¡rEt|dd… ƒ}|	|7 }	|t|ƒƒ n!|dkrP|t|ƒƒ nt|ƒ}||8 }n|du rb|
d7 }
n||8 }||ƒ qtd|ƒ}|td|	ƒ }|D ]}||  |9  < ||| 8 }qytd|ƒ}t|ƒ}|r¨|
dkr�|| pžd}|D ]}|||< q¡|S )	a  check list V for percentage or * values
    1) absolute values go through unchanged
    2) percentages are used as weights for unconsumed space
    3) if no None values were seen '*' weights are
    set equally with unclaimed space
    otherwise * weights are assigned as Noneç        Nr   ú%éÿÿÿÿÚ*g      Y@r   )	rU   r_   r   ÚstrÚstripÚendswithÚfloatra   Úmax)ÚVÚavailÚRÚrÚIÚiÚJÚjÚsÚwÚnÚvÚfÚmr/   r/   r0   Ú_calc_pcW   sL   








r{   c                 C   s   |r|  |d¡}|r||d d | ks||d d | kr'| ||||ƒ dS d}t|ƒ}||| k ro||k ro|| \}}	|	|| ksI||| krN|d7 }q-t||ƒ}
t||	ƒ}|
|krc| |||
|ƒ |}||| k ro||k s7||| k r~| ||||ƒ dS dS )z’
    Draw horizontal lines; do not draw through regions specified in hBlocks
    This also serves for vertical lines with a suitable canvLine
    Nrf   r   r   )Úgetra   rl   Úmin)ÚcanvLineÚscpÚecpÚyÚhBlocksÚFUZZrr   rw   Úx0Úx1Úi0Úi1r/   r/   r0   Ú_hLine‡   s    ,

ø"	rˆ   c                 C   s@   d|d  | }||7 }t |ƒD ]}|| |||ƒ ||8 }qd S )Nç      à?r   )r   )r   r€   r�   r~   ÚwsÚcountÚoffsetÚidxr/   r/   r0   Ú
_multiLine�   s   
þrŽ   c              	   C   sl   z||  W S  t y*   zt| ƒ}||  kr|kr"n n|W  Y S W n   Y Y nw td|| t|ƒf ƒ‚)zLprivate converter tries map(value) low<=int(value)<=high or finally an errorzBad %s value %s in %s)ÚKeyErrorÚintÚ
ValueErrorr   )ÚvaluerY   ÚlowÚhighr+   rV   Úivaluer/   r/   r0   Ú_convert2int¤   s   
"€€ûr–   c                 C   s   z|   |¡W S    Y dS ©Nr   )rj   )Úobjru   r/   r/   r0   Ú	_endswith°   s   r™   c                    sð   i ‰ |st ˆƒ}ttdd„ | ¡ D ƒƒƒD ]O\}\}}||kr q|d7 }t‡ ‡fdd„t||ƒD ƒƒ}||| kr:q‡fdd„t||ƒD ƒ}	|	sIq||8 }|tt |	ƒƒ }|	D ]}
ˆ  |
d¡| ˆ |
< qWqˆ  ¡ D ]\}
}ˆ|
  |7  < qid S )Nc                 s   s   � | ]	\}}||fV  qd S r*   r/   )Ú.0ÚikÚivr/   r/   r0   Ú	<genexpr>¼   s   € zspanFixDim.<locals>.<genexpr>r   c                    s    g | ]}ˆ| ˆ   |d ¡ ‘qS ©r   )r|   ©rš   rb   )ÚMrm   r/   r0   Ú
<listcomp>¿   s     zspanFixDim.<locals>.<listcomp>c                    s   g | ]
}ˆ | d u r|‘qS r*   r/   rŸ   )ÚV0r/   r0   r¡   Á   s    r   )ra   ÚreversedÚsortedÚitemsÚsumr   rk   r|   )r¢   rm   ÚspanConsÚlimrƒ   rx   r„   r…   ÚtÚXrb   r/   )r    rm   r¢   r0   Ú
spanFixDim¶   s"   &
ÿÿr«   c                   @   s   e Zd ZdS )Ú_ExpandedCellTupleN)r6   r7   r8   r/   r/   r/   r0   r¬   Ê   s    r¬   c                   @   s’  e Zd Z				d_dd„Zdd„ Zdd	„ Zd`dd„Zdd„ Zdd„ Zdadd„Z	dbdd„Z
dcdd„Zdd„ Zdddd„Zdd„ Zdd„ Zdcd d!„Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Zd>d?„ Zd@dA„ Z dBdC„ Z!dDdE„ Z"dFdG„ Z#dedHdI„Z$dfdKdL„Z%dfdMdN„Z&dfdOdP„Z'dQdR„ Z(dSdT„ Z)e*e)ƒZ)dUdV„ Z+dWdX„ Z,dYdZ„ Z-d[d\„ Z.d]d^„ Z/dS )gÚTableNr   r   c                 C   sÖ  |	| _ |
pd| _|pd| _t|ttfƒstd|  ¡  ƒ‚t|ƒ | _	}g | _
t|ttfƒ}t|ttfƒ}|rCtttt|ƒƒƒ | _}n|rL|rLt|ƒ}nd}|sStj}|d u r^t| dtjƒn|| _|re|s°|dkrqtd|  ¡  ƒ‚|dkr�t| _d	ttƒ  ¡ ƒvr�td	ƒatjt_tjt_t | d
| jj ||f t¡ d S |dkr¦t!| _d S td|  ¡ |f ƒ‚|r¶|| _
n|  "|¡ | _
}|sÆ||g }n8t|ƒ|krþtj#rñt|tƒrñt|ƒ}||k rê|| |d g ||d …< n|d |… }ntd|  ¡ |t|ƒf ƒ‚|�s||g }nt|ƒ|k�rtd|  ¡ |t|ƒf ƒ‚t$|ƒD ]1\}}t|ƒ}||k�rOtj#�rCt|tƒ�rC|| dg ||d …< �qtd|  ¡ |||f ƒ‚�q| | _%| _&| | _'| _(|d u �rŠg }t)|ƒD ]}g }t)|ƒD ]}| *t+t,||fƒƒ¡ �qp| *|¡ �qh|| _-n|| _-g | _.g | _/g | _0g | _1g | _2|| _3|| _4|| _5|�r­|  6|¡ || _7|d u�r¸|| _8|d u�rÀ|| _9|d k�ræt|ƒ}|�sÖtd|  ¡ |f ƒ‚||k �ræ||| | d¡  }|| _:d S )NÚCENTERÚMIDDLEz%s invalid data typer   Ú_longTableOptimizeÚerrorz&%s must have at least a row and columnÚindicateÚ_emptyTableStylez	%s(%d,%d)Úignorez%s bad emptyTableAction: "%s"rf   z:%s data error - %d columns in data but %d in column widthsz5%s data error - %d rows in data but %d in row heightsÚ z(%s expected %d not %d columns in row %d!z8%s Supplied mismatching minimum row heights of length %drž   );ÚidentÚhAlignÚvAlignr_   r`   rN   r‘   Úidentityra   Ú_nrowsÚ_cellvaluesrl   rY   rc   Ú_ncolsr   ÚemptyTableActionr4   ÚlongTableOptimizer°   r   Ú	__class__ÚglobalsÚkeysr   r³   r
   ÚredÚ	textColorÚyellowÚ	backColorr1   r6   r   ÚnormalizeDataÚallowShortTableRowsÚ	enumerateÚ_rowHeightsÚ_argHÚ
_colWidthsÚ_argWr   rU   r!   rZ   Ú_cellStylesÚ_bkgrndcmdsÚ	_linecmdsÚ	_spanCmdsÚ_nosplitCmdsÚ	_srflcmdsÚ
repeatRowsÚ
repeatColsÚ
splitByRowÚsetStyleÚ_rowSplitRangerI   rJ   Ú_minRowHeights)r-   ÚdataÚ	colWidthsÚ
rowHeightsÚstylerÓ   rÔ   rÕ   r½   r¶   r·   r¸   ÚnormalizedDataÚ
cellStylesÚrowSplitRangerI   rJ   r¾   ÚminRowHeightsÚnrowsÚ_seqCWÚ_seqRHÚncolsrw   rr   ÚdÚcellrowsÚcellcolsrt   Úlmrhr/   r/   r0   r1   Î   s¬   


ÿÿüÿ
ü






zTable.__init__c                 C   sV   t | ddƒ}t | ddƒ}t | ddƒ}ddl}| |¡}| dd¡}d	| jj|||f S )
z#incomplete, but better than nothingrÉ   z	[unknown]rË   r»   r   NÚ
z
  z3%s(
 rowHeights=%s,
 colWidths=%s,
%s
) # end table)r4   ÚpprintÚpformatÚreplacer¿   r6   )r-   rp   ÚcÚcvrê   r/   r/   r0   r\   4  s   
zTable.__repr__c                    sB   dd„ ‰ g }|D ]}‡ fdd„|D ƒ}|  |¡ qddlm} |S )zœTakes a block of input data (list of lists etc.) and
        - coerces unicode strings to non-unicode UTF8
        - coerces nulls to ''
        -

        c                 S   s    | d u rdS t | ƒrt| ƒS | S )Nrµ   )r   r   )Ústuffr/   r/   r0   ÚnormCellE  s
   z%Table.normalizeData.<locals>.normCellc                    s   g | ]}ˆ |ƒ‘qS r/   r/   )rš   Úcell©rð   r/   r0   r¡   N  ó    z'Table.normalizeData.<locals>.<listcomp>r   )rê   )rU   rê   )r-   rÙ   ÚoutDataÚrowÚoutRowÚppr/   rò   r0   rÆ   >  s   zTable.normalizeDataé   c                 C   s¦  | j r| j S d}t| ddƒ}t| ddƒ}t| ddƒ}t| ddƒ}|rªd||fvrªd}t|ƒD ]{}t|ƒD ]p}	|| |	 }
t|
tttfƒr{t|
ttfƒsN|
f}
d}|
D ]}| |¡}|re|d	d… d
kre nqR|rz|d	d… d
krz||	|df\}}}}n%|
du r�dp„t|
ƒ}
||	|
}}}|r–t|
t	ƒr–dp—d}|r |d|… }|r¤ nq4|r© nq.|rµdt
t|ƒƒ }nd}|rÃd||t|ƒf }nd}d| jjt| ƒ||||f S )z'Identify our selves as well as possibleNrº   Úunknownr¼   r»   rÉ   r   rµ   éüÿÿÿz>...r   z(tallest row %d)z with cell(%d,%d) containing
%sz...z"<%s@0x%8.8X %s rows x %s cols%s>%s)r¶   r4   r   r_   rN   r`   r   r¹   rh   r   r�   rl   rZ   r¿   r6   Úid)r-   ÚmaxLenÚvxÚnrÚncrî   ÚrhÚbrr   rt   rx   rp   ÚvijÚixÚjxÚtallestr/   r/   r0   r¹   T  sF   
€€

zTable.identityc                 c   sJ   � t | dd ƒ}|D ]}t |dd ƒr| |||¡D ]}|V  qq	|V  q	d S )NÚcanvÚ__split_only__)r4   ÚsplitOn)r-   ÚCÚaWÚaHr  rí   rå   r/   r/   r0   Ú_cellListIter|  s   €ÿûzTable._cellListIterc                 C   s˜   t |tƒsJd }g j}|  |||¡D ]3}t |tƒr2|s tddd�}| |¡ |jdk r1|jdk r1d }q|r@|t	||j|jd�ƒ q||ƒ qt|j
ƒ}|S )Nr   )Ú_leftExtraIndentÚ_rightExtraIndentg:Œ0âŽyE>)Ú
leftIndentÚrightIndent)r_   r¬   rU   r  r   Ú	CellFrameÚframeActionr  r  r   Ú__self__)r-   r	  r
  r  Úframero   rí   r/   r/   r0   Ú_cellListProcess…  s    




zTable._cellListProcessé@ c                 C   sÆ   |sdS ||j  |j }||j |j }d}d}t| dd ƒ}	d }
|D ]8}| |	||¡\}}| ¡ }| ¡ }|d ur>| |¡ |d urG| |¡ t	||ƒ}||| | 7 }|
d u rZ|}
q"|||
 | fS )N©r   r   r   r  )
r<   r=   r>   r?   r4   ÚwrapOnÚgetSpaceBeforeÚgetSpaceAfterrU   rl   )r-   rm   rv   ru   ÚWÚHr  r
  r©   r  Úsb0rx   ÚvwÚvhÚsbÚsar/   r/   r0   Ú_listCellGeom˜  s&   
€zTable._listCellGeomc                    s6   |sdS d}d}t | dd ƒ‰t‡ ‡‡fdd„|D ƒƒS )Nr  r   r  c                    s   g | ]}|  ˆˆˆ ¡d  ‘qS rž   )r  )rš   rx   ©r  r
  r  r/   r0   r¡   ±  s    z)Table._listValueWidth.<locals>.<listcomp>)r4   rl   )r-   rm   r  r
  r©   rv   r/   r#  r0   Ú_listValueWidth¬  s
   zTable._listValueWidthc              	   C   s  t | dd ƒrd S |st| j|ƒ}d |v rát | dd ƒ}d }| jr&| j}| j}nd}i }i }|| ju r:|}|d d … }n|d d … }| j}	| j}
d |v rÆ| d ¡}d}t	|	ƒD ]h\}}|| }|
| | }||f}| 
|d ¡}||v rv|svd}nA|  ||¡}|d u r�td| d¡|||  d¡f ƒ‚||j|j 7 }|r·|d }|d }||kr·||f}t| 
||¡|ƒ||< d}||kr½|}qU|||< d |v sJ|rázt|||ƒ W n   td	|  ¡ |||f ƒ Y || _d}dg| _|D ]}|| }| j |¡ qì|| _d
| _d S )NÚ_width_calculated_oncer  r/   r   rd   z3Flowable %s in cell(%d,%d) can't have auto width
%srø   r   z.
spanning problem in %s
W0=%r W=%r
spanCons=%rr   )r4   r{   rÌ   rÐ   Ú_colSpanCellsÚ_spanRangesr»   rÍ   ÚindexrÈ   r|   Ú_elementWidthr‘   r¹   r<   r=   rl   r«   r   rË   Ú_colpositionsrU   Ú_widthr%  )r-   Ú
availWidthr  r  ÚsavedÚcolSpanCellsÚ
spanRangesr§   ÚW0rm   ÚSrt   rv   rr   ÚVirx   ru   ÚjiÚspanr©   Úc0Úc1rb   Úwidthr/   r/   r0   Ú_calc_width³  sn   

 €è
zTable._calc_widthc                    s"  t |ttfƒr"d}|D ]}|  ||¡}|d u r d S t||ƒ}q|S t |tƒrJ|jrJt|dƒr:t |jt	t
fƒr:|jS t|dƒrJt |jt	t
fƒrJ|jS t|dƒriz| ¡ }t |t
t	fƒr^|W S W n	 tyh   Y nw |d u rodS z	t|ƒ d¡}W n   Y dS |j‰ |j‰t‡ ‡fdd„|D ƒƒS )Nr   r7  Ú	drawWidthÚminWidthré   c                    s   g | ]}t |ˆ ˆƒ‘qS r/   r   rŸ   ©ÚfontNameÚfontSizer/   r0   r¡     s    z'Table._elementWidth.<locals>.<listcomp>)r_   rN   r`   r)  rl   r   Ú_fixedWidthrM   r7  r�   rk   r9  r:  ÚAttributeErrorrh   Úsplitr9   r:   )r-   rx   ru   rv   ÚeÚewr/   r;  r0   r)  ò  s4     
ÿzTable._elementWidthc           &      C   sd  | j }|st| j|ƒ}t|ƒ }}| j}d |v �rõ| j}t| dd ƒ}	d }
| jr4| j}| j	}| j
}| j}nd }}i }|	rD|	j|	j|	jf}
|}|d d … }|| _i }tj}d |v �rÎ| d ¡}| j| }| j| }d}d}ttt|||ƒƒƒD �]\}\}}}||f}| |d ¡}||v r�|s�qvt|tttfƒ�rGt|tƒr¡|f}nt|ƒ}|  ||d ¡ }||< |d u rË|  |¡sËtd|d   d¡|||   d¡f ƒ‚|	rà|j!|j"|j#pØd|j" |	_|	_|	_||v rú|sçqvt$||d d  ||d   |pødƒ}|  %||�p|  &|¡|¡\}}|	�r|
\|	_|	_|	_||j' |j( }tj)�sF||k�rFdd	l*m+} |d
|d   d¡t,|ƒt,|ƒ||t,|ƒ|   d¡f ƒ‚n|d u�rQt-|ƒ�pRd .d¡}|j#�p^d|j" t|ƒ }||j/|j0 7 }|�rŒ|d }|d } || k�rŒ|| f}!t$| |!|¡|ƒ||!< d}||k�r“|}qv|�ržt$|| |ƒn|||< |�rÊ|d }t1|d |… ƒ}"|"|k�rÊ|�rÊt$dd„ | 2¡ D ƒƒ}#||#k�rÊnd |v sYd |v�rÕ|}|�rõzt3|||ƒ W n   t4d|   ¡ |||||||f ƒ Y g  | _5}d }"}$t6|d ddƒD ]}| 7|"¡ || |$ }%|"|% }||" |% }$|}"�q| 7|"¡ |"| _8| 9¡  || _:d S )Nr  r/   r   z6Flowable %s in cell(%d,%d) can't have auto width in
%srø   ç333333ó?r   r   )ÚLayoutErrorzGFlowable %s (%sx%s points) too wide for cell(%d,%d) (%sx* points) in
%srµ   ré   r%   c                 s   s   � | ]}|d  V  qdS )r   Nr/   rŸ   r/   r/   r0   r�   \  s   € z%Table._calc_height.<locals>.<genexpr>zK
spanning problem in %s hmax=%s lim=%s avail=%s x %s
H0=%r H=%r
spanCons=%rrf   );rÊ   r{   rÌ   ra   r°   rØ   r4   rÐ   Ú_rowSpanCellsr&  r'  r*  Ú	_fontnameÚ	_fontsizeÚ_leadingrÉ   r   Ú_FUZZr(  r»   rÍ   rÈ   rN   Úzipr|   r_   r`   r   r   r  Ú_canGetWidthr‘   r¹   r9   r:   r;   rl   r"  r$  r<   r=   ÚallowTableBoundsErrorsÚreportlab.platypus.doctemplaterD  r   rh   r@  r?   r>   r¦   rÁ   r«   r   Ú_rowpositionsr   rU   Ú_heightÚreverseÚ_hmax)&r-   ÚavailHeightr,  r  r  Úhmaxr¨   Ú	longTablerà   r  r-  ÚrowSpanCellsr.  r/  ÚcolpositionsÚH0r§   rƒ   rr   rm   r1  Úhrt   rx   ru   rv   r3  r4  ÚdWr©   rD  Úr0Úr1rb   ÚheightÚmsrrí   r�   r/   r/   r0   Ú_calc_height  s²   




$$*&6€
€

Í4"



zTable._calc_heightc                 C   s”   d | j v s
d| j v r|  ¡ r|  |¡}nd }| jr)|  ¡  d | jv r)| j||d� | jr0|  ¡  | j	|||d� | j||d� | jrH|  
¡  d S d S )Nrg   )r  )rË   Ú_hasVariWidthElementsÚ_calcPreliminaryWidthsrÐ   Ú_calcSpanRangesrÊ   r8  rÑ   Ú_calcNoSplitRangesr^  Ú_calcSpanRects)r-   r,  rR  r  r/   r/   r0   Ú_calcu  s   
þzTable._calcc                 C   s    | j }t|ƒ}| |¡}d| S )zãReturn a string describing the tallest element.

        Usually this is what causes tables to fail to split.  Currently
        tables are the only items to have a '_culprit' method. Doctemplate
        checks for it.
        ztallest cell %0.1f points)rÉ   rl   r(  )r-   r   r  ÚrowNumr/   r/   r0   Ú_culprit–  s   
zTable._culpritc                 C   sX   |du r| j }tt| j |ƒƒD ]}t| jƒD ]}| j| | }|  |¡s(  dS qqdS )z�Check for flowables in table cells and warn up front.

        Allow a couple which we know are fixed size such as
        images and graphics.Nr   r   )rº   r   r}   r¼   r»   rK  )r-   ÚupToRowrõ   Úcolr’   r/   r/   r0   r_  §  s   
ÿþzTable._hasVariWidthElementsc                 C   s@   t |ttfƒr|D ]
}|  |¡s dS q	dS t |tƒr|jS dS )z"Can we work out the width quickly?r   r   )r_   rN   r`   rK  r   r>  )r-   ÚthingÚelemr/   r/   r0   rK  ´  s   
ÿ
zTable._canGetWidthc           %      C   sÜ  t | jƒ}d}d}d}d}d}d}|D ]9}	|	du r|d7 }q|	dkr+|d7 }|d7 }qt|	dƒr?|d7 }|t|	dd… ƒ7 }qt|	ttfƒsHJ ‚||	 }q|r[td| j||| f ƒ g }
g }g }i }d}| j}t	| jƒD ]c}|| }	|	du s€|	dks€t|	dƒrËd}d}t	| j
ƒD ]+}| j| | }| j| | }|||ƒpŸd}||j|j 7 }t||ƒ}|o³|  |¡}q‰|r½| |¡ n| |¡ |||< ||7 }qm|
 |¡ qmt|
ƒ| jkrÚdS |rátd	|
ƒ |rètd
|ƒ |rïtd|ƒ |||  }|dk�rÐ|| d }||7 }|�r |dk �r |�p|}d| | }d}|| | }nd }}g }d}|}| ¡ D ]K\}}|| }	t|	dƒ�rIt|	dd… ƒ| | } n|	dk�rQ|} n	| �rX|�pYd} | |k�re|||< �q.| | | || |f¡ || 7 }||7 }�q.|�rÏ|| }!| ¡  g }"|D ]-\}#}} }|!|  }$|$|k �r­|||< || 8 }||8 }|�r«|| }!�q‰|" || |f¡ �q‰|"D ]\}} }|!|  }$|$|k�sÉJ ‚|$||< �q¹n| ¡ D ]	\}}|||< �qÔ|�rætd|ƒ | | _| _|S )zËFallback algorithm for when main one fails.

        Where exact width info not given but things like
        paragraphs might be present, do a preliminary scan
        and assign some best-guess values.r   rd   Nr   rg   re   rf   zMprelim width calculation.  %d columns, %d undefined width, %0.2f units remainzpredefined width:   zuncomputable width: zcomputable width:   éd   znew widths are:)rN   rÌ   r™   rk   r_   r�   Úprintr¼   r)  r   rº   r»   rÍ   r<   r=   rl   rK  rU   ra   r¥   ÚsortrË   )%r-   r,  r  ÚverboseÚtotalDefinedÚpercentDefinedÚpercentTotalÚnumberUndefinedÚnumberGreedyUndefinedrv   ÚgivenÚsizeableÚ
unsizeableÚminimumsÚtotalMinimumÚelementWidthÚcolNoÚsizÚfinalÚrowNor’   rÜ   ÚnewÚ	remainingÚdefinedPercentageÚ	undefinedÚdefaultWeightÚdefaultDesiredÚdesiredWidthsÚtotalDesiredÚeffectiveRemainingÚminimumÚdesiredÚ
proportionÚfinalSetÚdisappointmentÚadjustedr/   r/   r0   r`  Â  sÊ   




ÿ






ÿ
€€zTable._calcPreliminaryWidthsc                 C   s¾   t | jƒ}d}| j}t| jƒ}| j}| j}tt|ƒƒD ]A}|| }|d u s.|dks.t|dƒrVd}	|D ]}
||
 | }||
 | }|||ƒ|j	 |j
 }t|	|ƒ}	q2||	7 }q|t|ƒ7 }q|S )Nr   rg   re   )rN   rÌ   r)  r   rº   r»   rÍ   ra   r™   r<   r=   rl   rk   )r-   r  r7  ry  ÚrowNosÚvaluesÚstylesrz  rv   r|  r}  r’   rÜ   r~  r/   r/   r0   r:  V  s,   

ÿÿ
zTable.minWidthc                 C   ó¼  i  | _ }t| jƒD ]}t| jƒD ]}||||f|||f< qq
g | _g | _| jj}| jj}| jD ]«\}}}|\}	}
|\}}|	dk rF|	| j }	|dk rO|| j }|
dk rX|
| j }
|dk ra|| j }|	|krj||	}	}|
|krs||
}
}|	|ks{|
|krÛ|	|kr™t|
|d ƒD ]}t|	|d ƒD ]}|||fƒ q�q†|
|kr·t|
|d ƒD ]}t|	|d ƒD ]}|||fƒ q­q¤t|
|d ƒD ]}t|	|d ƒD ]}d|||f< qÇq¾|	|
||f||	|
f< q0dS )a›  Work out rects for tables which do row and column spanning.

        This creates some mappings to let the later code determine
        if a cell is part of a "spanned" range.
        self._spanRanges shows the 'coords' in integers of each
        'cell range', or None if it was clobbered:
        (col, row) -> (col0, row0, col1, row1)

        Any cell not in the key is not part of a spanned region
        r   r   N)r'  r   r¼   rº   r&  rE  rU   rÐ   )r-   r/  rb   r�   ÚcsaÚrsarV   ÚstartÚstopr„   Úy0r…   Úy1r/   r/   r0   ra  l  sH   
ÿÿÿÿ€æzTable._calcSpanRangesc                 C   r�  )ab  
        This creates some mappings to let the later code determine
        if a cell is part of a "nosplit" range.
        self._nosplitRanges shows the 'coords' in integers of each
        'cell range', or None if it was clobbered:
        (col, row) -> (col0, row0, col1, row1)

        Any cell not in the key is not part of a spanned region
        r   r   N)Ú_nosplitRangesr   r¼   rº   Ú_colNoSplitCellsÚ_rowNoSplitCellsrU   rÑ   )r-   ÚnosplitRangesrb   r�   r‘  r’  rV   r“  r”  r„   r•  r…   r–  r/   r/   r0   rb  ›  sH   

ÿÿÿÿ€äzTable._calcNoSplitRangesc                 C   s°  t | di ƒ}t | ddƒ}| j}|r|r|| jks|sdS | j}| j}i }i }t|ƒd }| j ¡ D ]†\}	}
|
du r>d||	< q1|
\}}}}||krIq1|	\}}|| dkrrt|d |d ƒD ]}| 	|| g ¡ 
||d  || f¡ q\|| dkr—t|d |d ƒD ]}| 	|| g ¡ 
|| ||d  f¡ q�|| }||d  }||d  | }|| | }||||f||	< q1||fD ]}| ¡ D ]}
|
 ¡  qÂq¼|| _|| _|| _|| _dS )a±  Work out rects for tables which do row and column spanning.

        Based on self._spanRanges, which is already known,
        and the widths which were given or previously calculated,
        self._spanRects shows the real coords for drawing:

            (col, row) -> (x, y, width, height)

        for each cell.  Any cell which 'does not exist' as another
        has spanned over it will get a None entry on the right
        Ú
_spanRectsrQ  Nr   r   )r4   r°   Ú_hmax_spanRectsr*  rN  ra   r'  r¥   r   Ú
setdefaultrU   rŽ  rm  r›  Ú_vBlocksÚ_hBlocks)r-   Ú	spanRectsrS  rT  rV  ÚrowpositionsÚvBlocksr‚   ÚrlimÚcoordr’   Úcol0Úrow0Úcol1Úrow1rh  rõ   Ú_rb   r�   r7  r\  r/   r/   r0   rc  Ë  sF   

((
ÿ
zTable._calcSpanRectsc                 C   s~   t |tƒs	t|ƒ}| ¡ D ]}|  |¡ q|j ¡ D ]
\}}t| ||ƒ qdD ]}t| |ƒs<t||ƒr<t| |t||ƒƒ q'd S rH   )	r_   rG   rK   Ú_addCommandrL   r¥   r3   rM   r4   )r-   ÚtblstylerV   Úkrx   rT   r/   r/   r0   rÖ   ü  s   
€þzTable.setStylec                 C   sr  |d dv r| j  |¡ d S |d dkr| j |¡ d S |d dkr*| j |¡ d S t|ƒrÑt|ƒ}t|ƒdk r@tdt|ƒ ƒ‚t|ƒdk rL| d¡ nt	|d t
dd	d
|ƒ}||d< t|ƒdk rf| d ¡ t|ƒdk rr| d¡ nt	|d tdd	d|ƒ}||d< t|ƒdk r�| d¡ n|d }|d u r›d}||d< |dks¡J ‚t|ƒdk r¯| |d ¡ n|d }|d u r¿|d }||d< t|ƒdksÇJ ‚| j t|ƒ¡ d S |d d… |dd … \}\}}\}	}
}|dv rñ| j |¡ d S |dk rú|| j }|	dk �r|	| j }	|dk �r|| j }|
dk �r|
| j }
t||
d ƒD ]}t||	d ƒD ]}t| j||||ƒ �q(�qd S )Nr   )Ú
BACKGROUNDÚROWBACKGROUNDSÚCOLBACKGROUNDSÚSPANÚNOSPLITé   zbad line command r$   r   r   Úcapé   é   rX   é	   r"   r%   ©Ú
splitfirstÚ	splitlast)rÎ   rU   rÐ   rÑ   Ú_isLineCommandrN   ra   r‘   r   r–   ÚLINECAPSÚ	LINEJOINSrÏ   r`   rÒ   r¼   rº   r   Ú_setCellStylerÍ   )r-   rV   r³  rX   Ú	lineCountÚspaceÚopÚscÚsrÚecÚerrŽ  rr   rt   r/   r/   r0   rª    sT   (ÿÿzTable._addCommandc                 C   sV  d\}}}| j  ¡  | jD ]“\
}\}}\}}}	}
}}}}}t|tƒr(| d¡r(q|dk r1|| j }|dk r:|| j }|dk rC|| j }|dk rL|| j }|d kr\||kr\| j  |¡ |}|d u sd|g krp|d uro| j  	¡  d }n||kr|| j  	|¡ |}|d urŒ||krŒ| j  
|¡ |}t| t |d¡ƒ||f||f|	|
||ƒ q| j  ¡  d | _d S )N)NNNr@  r   Ú_drawUnknown)r  Ú	saveStaterÏ   r_   r   Ú
startswithr¼   rº   Ú
setLineCapÚsetDashÚsetLineJoinr4   Ú
_LineOpMapr|   ÚrestoreStateÚ	_curcolor)r-   ÚccapÚcdashÚcjoinrÀ  rÁ  rÂ  rÃ  rÄ  ÚweightrA   r³  ÚdashrX   r‹   r¿  r/   r/   r0   Ú
_drawLinesD  s2   

&
€*

zTable._drawLinesc           	      C   s$   dd l }| d¡jd }td| ƒ‚)Nr   r   rÀ  zUnknown line command '%s')ÚsysÚ	_getframeÚf_localsr‘   )	r-   r“  ÚendrÑ  rA   r‹   r¿  rÔ  rÀ  r/   r/   r0   rÅ  ^  s   zTable._drawUnknownc                 C   s,   |   ||||||¡ |  ||||||¡ d S r*   )Ú_drawBoxÚ_drawInnerGrid)r-   r“  r×  rÑ  rA   r‹   r¿  r/   r/   r0   Ú	_drawGridd  s   zTable._drawGridc                 C   s”   |\}}|\}	}
|   ||f|	|f||||¡ |   ||
d f|	|
d f||||¡ |  ||f||
f||||¡ |  |	d |f|	d |
f||||¡ d S r^   ©Ú_drawHLinesÚ_drawVLines©r-   r“  r×  rÑ  rA   r‹   r¿  rÁ  rÂ  rÃ  rÄ  r/   r/   r0   rØ  h  s   $(zTable._drawBoxc                 C   sT   |\}}|\}	}
|   ||d f|	|
f||||¡ |  |d |f|	|
f||||¡ d S r^   rÛ  rÞ  r/   r/   r0   rÙ  p  s    $zTable._drawInnerGridc                 C   sL   |r|| j kr| j |¡ || _ |r"|| jkr$| j |¡ || _d S d S d S r*   )rÍ  r  ÚsetStrokeColorÚ
_curweightÚsetLineWidth)r-   rÑ  rA   r/   r/   r0   Ú	_prepLinev  s   
þzTable._prepLinec                 C   sØ   |\}}|\}	}
| j ||	d … }| j||
d … }t|ƒdks&t|ƒdk r(d S |  ||¡ |d }|d }t| di ƒ}| jj}|dkrS|D ]
}t|||||ƒ qFd S ||| |fdd„}|D ]
}t|||||ƒ q_d S )Nr   r   r   rf   rŸ  c                 S   ó   t | |||||ƒS r*   ©rŽ   ©r„   r•  r…   r–  r~   rŠ   r‹   r/   r/   r0   Ú<lambda>�  ó    z#Table._drawHLines.<locals>.<lambda>)r*  rN  ra   râ  r4   r  Úlinerˆ   )r-   r“  r×  rÑ  rA   r‹   r¿  rÁ  rÂ  rÃ  rÄ  r€   Úrpr   r‚   r~   r�   Úlfr/   r/   r0   rÜ  ~  s$   ÿÿzTable._drawHLinesc                 C   s8   |\}}|\}	}
|   ||d f|	|
d f||||¡ d S r^   )rÜ  rÞ  r/   r/   r0   Ú_drawHLinesB‘  ó   (zTable._drawHLinesBc                 C   sà   |\}}|\}	}
| j ||
d … }| j||	d … }t|ƒdks&t|ƒdk r(d S |  ||¡ |d }|d }t| di ƒ}| jjfdd„}|dkrW|D ]
}t|||||ƒ qJd S ||| |fdd„}|D ]
}t|||||ƒ qcd S )	Nr   r   r   rf   rž  c                 S   s   ||| ||ƒS r*   r/   )r•  r„   r–  r…   Ú_liner/   r/   r0   ræ     s    z#Table._drawVLines.<locals>.<lambda>c                 S   rã  r*   rä  rå  r/   r/   r0   ræ  ¥  rç  )rN  r*  ra   râ  r4   r  rè  rˆ   )r-   r“  r×  rÑ  rA   r‹   r¿  rÁ  rÂ  rÃ  rÄ  ÚerpÚcpÚsrpr¢  r~   rb   rê  r/   r/   r0   rÝ  –  s$   ÿÿzTable._drawVLinesc                 C   s8   |\}}|\}	}
|   |d |f|	d |
f||||¡ d S r^   )rÝ  rÞ  r/   r/   r0   Ú_drawVLinesA©  rì  zTable._drawVLinesAc                 C   s   |   ||¡ || _| j| jfS r*   )rd  r,  r+  rO  ©r-   r,  rR  r/   r/   r0   Úwrap®  s   z
Table.wrapc                 C   s   dS )z†
        This method will be called when the Table is split.
        Special purpose tables can override to do special stuff.
        Nr/   )r-   ÚTÚbyRowr/   r/   r0   ÚonSplit³  s   zTable.onSplitFc           
      C   s®   |D ]R}|dd… \\}}\}}	|dv r'|sq|   |¡ |dkr!q|d  }}	|dk r/||7 }||kr4q|	|kr<|d }	|   |d f||f||	ff t|dd … ƒ ¡ qd S )Nr   r%   r·  r¸  r   ©rª  r`   )
r-   rw   rQ   Únr0Ú	_srflModerí   rÁ  rÂ  rÃ  rÄ  r/   r/   r0   Ú_cr_0º  s   


2özTable._cr_0c           
      C   sÄ  |D ]‚}|dd… \\}}\}}	|dv r%|sq|   |¡ |dkr!q| }}	|dkr:||kr:||k r:|	dkr:|	|k r:q||krE||k rE|}n||krS||krS|| | }|	|kr^|	|k r^|}	n|	|krl|	|krl|	| | }	|   |d f||f||	ff t|dd … ƒ ¡ q| j}|rà|\}}	|dkr§||kr§||k r§|	dkr§|	|k r§d | _d S ||kr²||k r²|}n||krÀ||krÀ|| | }|	|krË|	|k rË|}	n|	|krÙ|	|krÙ|	| | }	||	f| _d S d S ©Nr   r%   r·  r¹  r   )rª  r`   r×   )
r-   rw   rÓ   rQ   rù  rí   rÁ  rÂ  rÃ  rÄ  r/   r/   r0   Ú_cr_1_1Ç  s0   

*2(
÷zTable._cr_1_1c           	      C   sÆ   |D ]^}|dd… \\}}\}}|dv r%|sq|   |¡ |dkr!q| }}|dkr.||k r.q|dkr8||k r8d}||kr@||8 }||krH||8 }|   |d f||f||ff t|dd … ƒ ¡ qd S rû  r÷  )	r-   rw   rQ   rù  rí   rÁ  rÂ  rÃ  rÄ  r/   r/   r0   Ú_cr_1_0á  s   

2õzTable._cr_1_0c           !         s(  ˆ  |¡}ˆj}|t|tƒr|nt|ƒd krg S tˆjƒ}||kr%ˆgS ˆj}|rV|\}}|dk r6||7 }|dk r>||7 }||krPˆ |t	ˆj||… ƒ ¡S ||k rVg S ˆj
}ˆj}ˆj‰ ˆj}	|	rht|	ƒ}	ˆj}
|
rqˆj‰nˆj‰ˆjˆ d |… ˆjˆd |… |||dˆjd |… |	tˆdd ƒ|
d�}ˆj}ˆj}g }ˆjD �]å\
}\}}\}}}}}}}}}t|tƒrâ| d¡râ| |||f||f|||||||f
¡ |dkrÚ|d  }}n|dkrâ|}|}|dk rê||7 }|dk rò||7 }|dk rú||7 }|dk �r||7 }|dv �rµ||k �r¡||k�r¡| d	||f||f|||||||f
¡ | d
||f||f|||||||f
¡ | d||f||f|||||||f
¡ | d||f||f|||||||f
¡ |dk�r | d||d f||d f|||||||f
¡ | d	||f||f|||||||f
¡ | d||f||f|||||||f
¡ q¡| |||f||f|||||||f
¡ q¡|dk�r||k �rî||k�rî| d||d f||d f|||||||f
¡ | d	||f||f|||||||f
¡ | |||f||f|||||||f
¡ q¡|dk�r:||k �r&||d k�r&| d	||f||f|||||||f
¡ | |||f||f|||||||f
¡ q¡|d	k�rt||k�r`||k�r`| d||d f||d f|||||||f
¡ | |||f||f|||||||f
¡ q¡| |||f||f|||||||f
¡ q¡| |||¡ |j|ˆj|dd� | |ˆj|¡ | |ˆj|¡ ˆjD ];}|  |¡ |d d dk�r¾�q¬|dd… \\}}\}}|  |d f||d f||d ff t!|dd … ƒ ¡ �q¬|	�rït|	ƒ}	|�r}t|tƒ�rˆ d |… }|}ˆd |… }ˆjd |… }n%t"t#|ƒƒ}‡ fdd„|D ƒ}t|ƒ}‡fdd„|D ƒ}‡fdd„|D ƒ}ˆj|ˆ |d …  ˆj|ˆ|d …  |||d|ˆj|d …  |	tˆdd ƒ|
d�} |  $|||¡ | j$||ˆjdd� |  $||ˆj¡ |  $||ˆj¡ n@ˆjˆ |d … ˆjˆj|d … |||dˆj|d … |	tˆdd ƒ|
d�} |  %||¡ | j%|ˆjdd� |  %|ˆj¡ |  %|ˆj¡ ˆjD ]7}|   |¡ |d d dk�rÒ�qÀ|dd… \\}}\}}|   |d f|df|dff t!|dd … ƒ ¡ �qÀˆj& |_&| _&ˆj' |_'| _'ˆ (|¡ ˆ (| ¡ || gS )Nr   r   rI   )
rÚ   rÛ   rÓ   rÔ   rÕ   rÝ   rÞ   r¶   rI   r¾   r@  r¹  r¸  )ÚBOXÚOUTLINEÚGRIDÚ	LINEABOVEÚ
LINEBEFOREÚ	LINEAFTERÚ	LINEBELOWr   Ú	INNERGRIDT)rù  r%   c                    ó   g | ]}ˆ | ‘qS r/   r/   ©rš   rr   )rÙ   r/   r0   r¡   W  ró   z$Table._splitRows.<locals>.<listcomp>c                    r  r/   r/   r  )ÚsplitHr/   r0   r¡   Y  ró   c                    s   g | ]}ˆ j | ‘qS r/   )rÍ   r  r[   r/   r0   r¡   Z  s    rJ   )
rÚ   rÛ   rÓ   rÔ   rÕ   rÝ   rÞ   r¶   rJ   r¾   ))Ú!_getFirstPossibleSplitRowPositionrÓ   r_   r�   rl   ra   rÉ   r×   Ú
_splitRowsr¦   rÔ   rÕ   r»   r¶   r   r°   rÊ   r¿   rË   rÍ   r4   rº   r¼   rÏ   r   rÇ  rU   rú  rÎ   rÐ   rÑ   rÒ   rª  r`   rN   r¤   rü  rý  r·   r¸   rö  )!r-   rR  rw   rÓ   r¨   ÚloÚhirÔ   rÕ   r¶   ÚltoÚR0rá   rä   ÚArÀ  rÁ  rÂ  rÃ  rÄ  rÑ  rA   r³  rÒ  rX   r‹   r¿  rí   ÚiRowsÚnRepeatRowsÚiRowHÚiCSÚR1r/   )rÙ   r-   r  r0   r
  ï  sü   
"

û(&
&&&&
.&&€(
.&(
&(
.((

<
ù	
û

4

zTable._splitRowsc           
      C   sr   |D ]4}|| }|d kr6|d |d }}||kr6t ||ƒ}t||ƒ}|d }		 |	|kr-n	d | |	< |	d7 }	q(qd S )Nr   r%   )r}   rl   )
Ú
impossibleÚcellsÚrangesÚxyrp   r–  Úy2ÚyminÚymaxr�   r/   r/   r0   Ú_getRowImpossible�  s   


ý€øzTable._getRowImpossiblec                 C   s~   i }| j r|  || j| j¡ | jr|  || j| j¡ d}d}d}| jD ]}|| |kr. |S ||vr4|}|| }|d }q#|S )Nr   r   )rÐ   r  rE  r'  rÑ   r™  r—  rÉ   )r-   rR  r  rX  rw   Úsplit_atr   r/   r/   r0   r	  �  s"   
ü
z'Table._getFirstPossibleSplitRowPositionc                 C   s4   |   ||¡ | jrtjs| j|krg S |  |¡S t‚r*   )rd  rÕ   r   rL  r+  r
  ÚNotImplementedErrorrò  r/   r/   r0   r@  ¢  s
   
zTable.splitc              	   C   s  d  | _  | _| _|  ¡  | jsGt| j| j| jdd … | j	ƒD ]&\}}}}t||| j
d d… | jƒD ]\}}}}|  ||||f||f¡ q2qn;t| jƒD ]5}	t| jƒD ]-}
| j|
|	f }|d ur€|\}}}}| j|	 |
 }| j|	 |
 }|  ||||f||f¡ qSqL|  ¡  d S )Nr   rf   )rà  rÍ  Ú_curcellstyleÚ_drawBkgrndrÐ   rJ  r»   rÍ   rN  rÉ   r*  rË   Ú	_drawCellr   rº   r¼   r›  rÓ  )r-   rõ   ÚrowstyleÚrowposÚ	rowheightÚcellvalÚ	cellstyleÚcolposÚcolwidthr}  rz  ÚcellRectrb   r�   r7  r\  r/   r/   r0   Údrawª  s&   *&ÿÿ€úz
Table.drawc              
   C   sT  | j }| j}| j}| j}| j}| j}| j}t| dd ƒ}| jD �]ˆ\}	\}
}\}}}|dv r.q|
dk r6|
| }
|dk r>|| }|dk rF|| }|dk rN|| }||
 }|| }|t	|d |ƒ }|t	|d |ƒ }|| || }}t
|dƒr€|| |||||ƒ q|	dkrÁtttj|ƒƒ}t|ƒ}|| d }t|ƒD ]%}|||  }|||  }|r»| |¡ |j|||| ddd� || }qšq|	dk�rtttj|ƒƒ}t|ƒ}||
 d }t|ƒD ]$}|||  }||
|  }|rü| |¡ |j||||ddd� || }qÜq|�rrt|ttfƒ�rr|d d	v �rr| ¡  ||
k�r5||k�r5|�r5| |
|f¡}|�r5|\}}}}| ¡ }| ||||¡ |j|dd
� | d¡}|dk�r`|j|||| ||dd� n|j||||| |dd� | ¡  qt |¡}|�r§||
k�r—||k�r—|�r—| |
|f¡}|�r—|\}}}}| |¡ |j||||ddd� qd S )Nr›  r·  r   r   Ú__call__r®  )ÚstrokeÚfillr¯  )ÚVERTICALÚ
HORIZONTAL)r,  r/  F)Úextend)rº   r¼   r  r*  rN  rÉ   rË   r4   rÎ   r}   rM   rN   rY   r
   ÚtoColorOrNonera   r   ÚsetFillColorÚrectr_   r`   rÆ  r|   Ú	beginPathÚclipPathÚpopÚlinearGradientrÌ  )r-   rá   rä   r  rV  r¡  rÛ   rÚ   r   rV   rÁ  rÂ  rÃ  rÄ  Úargr„   r•  r…   r–  rv   rX  Ú
colorCycler‹   ÚrowCountrr   rA   ÚcolCountÚxywhÚpÚ	directionr/   r/   r0   r   ¿  sŠ   



ú


ú$




€¶zTable._drawBkgrndc                 C   sÊ  |\}}|\}}| j |urE| j }	|	d u s|j|	jkr!| j |j¡ |	d u s7|j|	jks7|j|	jks7|j|	jkrB| j |j|j|j¡ || _ |j}
|j	}t
|tttfƒrôt
|ttfƒs]|f}g }g }| j||||||d�\}}|dkrz|| |j }n|dkr†||j | }n|||j |j | d  }|rž||d  ¡ 7 }t|||ƒD ]N\}}}|
dkr³||j }n'|
dkrÁ|| |j | }n|
dv rÔ|||j |j | d  }ntd	|
 ƒ‚|| ¡ 8 }||8 }| | j||¡ || ¡ 8 }q¤nÀ|
dk�r| jj}||j }n>|
dv �r| jj}|||j |j d
  }n(|
dk�r*| jj}|| |j }n|
dk�r;| jj}|| |j }ntd	|
 ƒ‚t|ƒ d¡}t|ƒ}|j}|j}|dk�rc||j ||  | }n/|dk�rr|| |j | }n |dk�rŠ||j| |j ||  d  | }ntdt|ƒ ƒ‚|D ]}||||ƒ ||8 }�q”t|dd ƒ}|�r´|| j|j |j!ƒ |j"�rÊ| jj#|j"|||| || fdd� |j$�rã| jj%d|j$|||| || fdd� d S d S )N)r  r  r  ÚTOPr)   g       @r   r'   ÚRIGHT)ÚCENTREr®   zInvalid justification %sr‰   ÚDECIMALré   r¯   zBad valign: '%s'ÚonDrawr   )Úrelativerµ   )ÚRectrD  )&r  rA   r  r2  r;   r9   r:   ÚsetFontrB   rD   r_   r`   rN   r   r"  r>   r?   r  rJ  r<   r=   r‘   ÚdrawOnr  Ú
drawStringÚdrawCentredStringÚdrawRightStringÚdrawAlignedStringrh   r@  ra   r4   ÚkindÚlabelrE   ÚlinkURLrF   ÚlinkRect)r-   r%  r&  ÚposÚsizer'  r#  r(  r$  ÚcurÚjustrD   r  r  rv   rX  r�   rx   rb   r*  Úvalsrw   r;   r:   rC  r/   r/   r0   r!    sˆ   
,ö






&$*þzTable._drawCell)NNNr   r   r   NNNNr   NNNNNN)rø   )NNr  )r  r  r*   r]   )r   )F)0r6   r7   r8   r1   r\   rÆ   r¹   r  r  r"  r$  r8  r)  r^  rd  rf  r_  rK  r`  r:  ra  rb  rc  rÖ   rª  rÓ  rÅ  rÚ  rØ  rÙ  râ  rÜ  rë  rÝ  rñ  ró  rö  rú  rü  rý  r
  r  Ústaticmethodr	  r@  r*  r   r!  r/   r/   r/   r0   r­   Í   sh    
ýf

(	


?
d!
 /01=



 Ur­   rÚ  rØ  rÙ  rë  rÜ  rÝ  rñ  )r   rþ  rÿ  r  r  r  r  r  c                   @   s   e Zd ZdZdZdS )Ú	LongTablez+Henning von Bargen's changes will be activer   N)r6   r7   r8   Ú__doc__r°   r/   r/   r/   r0   rV  m  s    rV  c                 C   s   | d t v S r—   )ÚLINECOMMANDS)rV   r/   r/   r0   rº  s  s   rº  c                 C   s€  | | | }|dkr1t |ƒ}|d |_|dkr/|d |_|dkr'|d |_d S |jd |_d S d S |dv r<|d |_d S |dv rG|d |_d S |dkrR|d |_d S |d	krft |d t ddd¡¡|_d S |d
v rq|d |_d S |dkr||d |_	d S |dkr‡|d |_
d S |dkr’|d |_d S |dkr�|d |_d S |dkr¨|d |_d S |dkr³|d |_d S |dkr¾|d |_d S d S )NÚFONTr   r   r   rC  )ÚFONTNAMEÚFACE)ÚSIZEÚFONTSIZEÚLEADINGÚ	TEXTCOLOR)ÚALIGNÚ	ALIGNMENTÚVALIGNÚLEFTPADDINGÚRIGHTPADDINGÚ
TOPPADDINGÚBOTTOMPADDINGÚHREFÚDESTINATION)ra   r9   r:   r;   r
   ÚtoColorÚColorrA   rB   rD   r<   r=   r>   r?   rE   rF   )rÞ   rr   rt   rÀ  rŽ  r~  rw   r/   r/   r0   r½  v  sF   

û ÿr½  r   r  ©rf   rf   g      Ð?)r`  )r   r   rk  r@  rþ  r‰   r  r  )rf   r   r  )r   rf   r  )r   r   Ú__main__)Úold_tables_test)BÚ__version__rW  Úreportlab.platypus.flowablesr   r   Ú	reportlabr   r   r   Úreportlab.lib.stylesr   r   r	   Úreportlab.libr
   Úreportlab.lib.utilsr   r   r   r   r   r   Úreportlab.lib.rl_accelr   Úreportlab.lib.abagr   r  Úreportlab.pdfbase.pdfmetricsr   rM  r   r   r   r»  r¼  r!   rG   rc   r{   rI  rˆ   rŽ   r–   r™   r«   r`   r¬   r­   rË  rV  rN   rÁ   rX  rº  r½  r&   Ú
GRID_STYLEÚ	BOX_STYLEÚLABELED_GRID_STYLErÂ   ÚCOLORED_GRID_STYLEÚgreenÚ
LIST_STYLEr6   Útests.test_platypus_tablesrm  r/   r/   r/   r0   Ú<module>   s¬    0           "ù	'ÿÿÿÿüÿüÿýÿ


þ