o
    à’Oj× ã                	   @   s  d Z dZdZddlmZmZ ddl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mZ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!m"Z" ddl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)e%dddd�Z*dd„ Z+dd „ Z,d!d"„ Z-d\d%d&„Z.ej/fd'd(„Z0d)d*„ Z1d+d,„ Z2d-d.„ Z3dej/fd/d0„Z4G d1d2„ d2e5ƒZ6G d3d4„ d4e5ƒZ7e%d5d6ƒZ8e%d7d8ƒZ9d9Z:G d:d;„ d;eƒZ;d<d=d=d>d?d@dAdBdCœZ<G dDdE„ dEe;ƒZ=e>e< ?¡ ƒZ@G dFdG„ dGƒZAdHdI„ ZBdJdK„ ZCe)dLdMdNdOejDfdPgƒZEe)dQdMdNdRejDfdPgƒZFe)dSdMdNdOejDfdQdMdNdejDfdTdMdUdejDfdVdMdWdejDfdPgƒZGe)dSdMdNdOejDfdQdMdNdejHfdTdMdUdejDfdVdMdWdejDfdPgƒZIe)dXdMdUdejJfdXdYdNdOejDfdTdWdNdejJfdPgƒZKeLdZk�r†dd[lMmNZN eNƒ  dS dS )])ÚTableÚ
TableStyleÚ	CellStyleÚ	LongTablez3.5.21aØ  
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)ÚPropertySetÚParagraphStyleÚ_baseFontName)Úcolors)ÚannotateExceptionÚIdentStrÚflattenÚisStrÚasNativeÚstrTypesÚ	__UNSET__Úrl_warn)ÚisListOfNumbersOrNone)Úfp_str)ÚABag©ÚstringWidth)ÚIndenterÚNullActionFlowable)Ú
LIIndenter)Ú
namedtupleNé   é   )NÚbuttÚroundÚ
projectingÚsquared)NÚmiterÚmitrer!   Úbevelc                   @   s`   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
Zd
Zddd„Zddd„Zd
S )r   é
   é   é   é   r   ÚblackÚLEFTÚwhiteÚBOTTOMNc                 C   s    || _ |d ur| | ¡ d S d S ©N)ÚnameÚcopy)Úselfr0   Úparent© r4   ú_/var/www/html/pharmsmart-cdr-gen/venv/lib/python3.10/site-packages/reportlab/platypus/tables.pyÚ__init__<   s   ÿzCellStyle.__init__c                 C   sB   |d u r	t | jƒ}t| ƒD ]}| d¡rqt||t| |ƒƒ q|S )NÚ_)r   r0   ÚdirÚ
startswithÚsetattrÚgetattr)r2   Úresultr0   r4   r4   r5   r1   @   s   
zCellStyle.copyr/   )Ú__name__Ú
__module__Ú__qualname__r   ÚfontnameÚfontsizeÚleadingÚleftPaddingÚrightPaddingÚ
topPaddingÚbottomPaddingÚfirstLineIndentÚcolorÚ	alignmentÚ
backgroundÚvalignÚhrefÚ	directionÚshapingÚdestinationr6   r1   r4   r4   r4   r5   r   +   s&    
r   c                   @   s.   e Zd Zd
dd„Zdd„ Zdd„ Zdd	„ ZdS )r   Nc                 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Úhasattrr:   r;   ÚlistÚ_cmdsÚupdate)r2   Úcmdsr3   ÚkwÚpcmdsÚar4   r4   r5   r6   I   s   
€þzTableStyle.__init__c                 G   s   | j  |¡ d S r/   )rW   Úappend)r2   Úcmdr4   r4   r5   ÚaddY   s   zTableStyle.addc                 C   s   dd  tt| jƒ¡ S )Nz!TableStyle(
%s
) # end TableStylez  
)ÚjoinÚmapÚreprrW   ©r2   r4   r4   r5   Ú__repr__[   s   zTableStyle.__repr__c                 C   s   | j S r/   )rW   rc   r4   r4   r5   rS   ]   s   zTableStyle.getCommands©NN)r=   r>   r?   r6   r_   rd   rS   r4   r4   r4   r5   r   H   s
    
r   ÚShadowStylezdx dy color0 color1 nshades)r'   iöÿÿÿÚgreyr-   é   )Údefaultsc                 C   s   t | ttfƒ r
dpt| ƒS ©Nr   )Ú
isinstanceÚtuplerV   Úlen)Úxr4   r4   r5   Ú_rowLenb   s   ro   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   )	r]   rk   r   ÚstrÚstripÚendswithÚfloatrm   Úmax)ÚVÚavailÚRÚrÚIÚiÚJÚjÚsÚwÚnÚvÚfÚmr4   r4   r5   Ú_calc_pce   sL   








r‡   c                 C   sT  |dkr| S d| d d | d d   d| d d | d d   f}d| d d | d d   d| d d | d d   f}d| d d | d d   d| d d | d d   f}d|d |d   d|d |d   f}d|d |d   d|d |d   f}d|d |d   d|d |d   f}|dkr¢| d |||gS |||| d gS )zVcalculate all or half of a bezier curve
    kind==0 all, 1=first half else second halfr   ç      à?r   r   r*   r4   )ÚPÚkindÚQ0ÚQ1ÚQ2ÚR0ÚR1ÚS0r4   r4   r5   Ú_calcBezierPoints•   s   888((((r‘   ú
left-rightçW[±¿ìžÜ?c                 C   sˆ  || }| dkr'|dkr'|\}}	|| |	f|| |	f||	| f||	| fg}
nr| dkrJ|dkrJ|\}}||| f||| f|| |f|| |fg}
nO| dkrm|dkrm|\}}|| |f|| |f||| f||| fg}
n,| dkr�|dkr�|\}}	||	| f||	| f|| |	f|| |	fg}
n	t d| |f›�ƒ‚|dkr©|
d d |
d d ks¹|d	kr½|
d d
 |
d d
 kr½|
 ¡  t|
|ƒ}
|
S )NÚrightÚbottomÚtopÚleftz&Unknown quadrant position (xpos,ypos)=r’   r   rr   ú
bottom-topr   )Ú
ValueErrorÚreverser‘   )ÚxposÚyposÚcornerr|   rŠ   rM   r†   ÚtÚxhiÚylor‰   ÚyhiÚxlor4   r4   r5   Ú_quadrantDef£   s$   ....@
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
    Nrr   r   r   )Úgetrm   rx   Úmin)ÚcanvLineÚscpÚecpÚyÚhBlocksÚFUZZr~   rƒ   Úx0Úx1Úi0Úi1r4   r4   r5   Ú_hLine¸   s    ,

ø"	r°   c                 C   s@   d|d  | }||7 }t |ƒD ]}|| |||ƒ ||8 }qd S )Nrˆ   r   )Úrange)r§   r¨   r©   r¦   ÚwsÚcountÚoffsetÚidxr4   r4   r5   Ú
_multiLineÎ   s   
þr¶   c              	   C   sp   z||  W S  t y*   zt| ƒ}||  kr|kr"n n|W  Y S W n   Y Y nw td|› d| › d|›�ƒ‚)zLprivate converter tries map(value) low<=int(value)<=high or finally an errorzBad z value z in )ÚKeyErrorÚintr™   )Úvaluera   ÚlowÚhighr0   r^   Úivaluer4   r4   r5   Ú_convert2intÕ   s   
"€€ûr½   c                 C   s   z|   |¡W S    Y dS ©Nr   )rv   )Úobjr�   r4   r4   r5   Ú	_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/   r4   )Ú.0ÚikÚivr4   r4   r5   Ú	<genexpr>í   s   € zspanFixDim.<locals>.<genexpr>r   c                    s    g | ]}ˆ| ˆ   |d ¡ ‘qS ©r   )r¤   ©rÁ   rn   )ÚMry   r4   r5   Ú
<listcomp>ð   s     zspanFixDim.<locals>.<listcomp>c                    s   g | ]
}ˆ | d u r|‘qS r/   r4   rÆ   )ÚV0r4   r5   rÈ   ò   s    r   )rm   ÚreversedÚsortedÚitemsÚsumr±   rw   r¤   )rÉ   ry   ÚspanConsÚlimr«   r„   r¬   r­   rž   ÚXrn   r4   )rÇ   ry   rÉ   r5   Ú
spanFixDimç   s"   &
ÿÿrÑ   c                   @   s   e Zd ZdS )Ú_ExpandedCellTupleN)r=   r>   r?   r4   r4   r4   r5   rÒ   û   s    rÒ   c                   @   s   e Zd Zdd„ ZdS )Ú_ExpandedCellTupleExc                 C   s"   t  | |¡}||_||_||_|S r/   )rl   Ú__new__ÚtagTypeÚaltTextÚextras)ÚclsÚseqrÕ   rÖ   r×   r2   r4   r4   r5   rÔ   ÿ   s
   z_ExpandedCellTupleEx.__new__N)r=   r>   r?   rÔ   r4   r4   r4   r5   rÓ   þ   s    rÓ   ÚRoundingRectDefszx0 y0 w h x1 y1 ar SLÚRoundingRectLinez&xs ys xe ye weight color cap dash join)Ú
splitfirstÚ	splitlastÚinrowsplitstartÚinrowsplitendc                   @   s  e Zd Zddddddddddddddddddeddfdd„Zdd„ Zdd	„ Zdudd„Zdd„ Zdd„ Z	dvdd„Z
dwdd„Zdxdd„Zdd„ Zdydd„Zdd„ Zdd„ Zdxd 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$dHdI„ Z%dzdJdK„Z&d{dMdN„Z'd{dOdP„Z(d{dQdR„Z)dSdT„ Z*dUdV„ Z+d|dWdX„Z,dYdZ„ Z-d|d[d\„Z.d]d^„ Z/e0e/ƒZ/d|d_d`„Z1dadb„ Z2dcdd„ Z3dedf„ Z4e5j6dgdddhfdidj„Z7dkdl„ Z8dmdn„ Z9dodp„ Z:dqdr„ Z;dsdt„ Z<dS )}r   Nr   r   c           "   
   C   s8  |
| _ |pd| _|pd| _t|ttfƒstd|  ¡  ƒ‚|| _t	|ƒ | _
}g | _t|ttfƒ}t|ttfƒ}|rFtttt|ƒƒƒ | _}n|rO|rOt	|ƒ}nd}|	sVtj}	|d u rat| dtjƒn|| _|rh|sµ|	dkrut|  ¡ › 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|	›�ƒ‚|r»|| _n|  $|¡ | _}|sË||g }n=t	|ƒ|k�rtj%r÷t|tƒr÷t	|ƒ}||k rð|| |d g ||d …< n|d |… }nt|  ¡ › d|› dt	|ƒ› d�ƒ‚|�s||g }nt	|ƒ|k�r)t|  ¡ › d|› dt	|ƒ› d�ƒ‚t&|ƒD ]7\}}t	|ƒ}||k�rctj%�rQt|tƒ�rQ|| dg ||d …< �q-t|  ¡ › d|› d|› d|› d�ƒ‚�q-| | _'| _(| | _)| _*|d u �ržg }t+|ƒD ]}g }t+|ƒD ]} | ,t-t.|| fƒƒ¡ �q„| ,|¡ �q||| _/n|| _/g | _0g | _1g | _2g | _3g | _4g | _5|| _6|| _7|| _8|| _9|�rÇ|  :|¡ |t;u�rÑ|  <|¡ || _=|d u�rÜ|| _>|d u�rä|| _?|d k�rt	|ƒ}!|!�sôtdƒ‚|!|k �r|||! | d¡  }|| _@|�rt|tAƒ�std|›�ƒ‚|| _Bd S )NÚCENTERÚMIDDLEz%s invalid data typer   Ú_longTableOptimizeÚerrorz$ must have at least a row and columnÚindicateÚ_emptyTableStylez	%s(%d,%d)Úignorez bad emptyTableAction: rr   z data error - z columns in data but z column widthsz rows in data but z row heightsÚ z
 expected z not z columns in row ú!zJ{self.idenity()} Supplied mismatching minimum row heights of length {lmrh}rÅ   zCTable shadow argument should be None or a ShadowStyle instance not )CÚidentÚhAlignÚvAlignrk   rl   rV   r™   ÚidentityÚ	_renderCBrm   Ú_nrowsÚ_cellvaluesrx   ra   ro   Ú_ncolsr   ÚemptyTableActionr;   ÚlongTableOptimizerâ   r   Ú	__class__ÚglobalsÚkeysr
   rå   r   ÚredÚ	textColorÚyellowÚ	backColorr6   r=   r   Ú	identitiyÚnormalizeDataÚallowShortTableRowsÚ	enumerateÚ_rowHeightsÚ_argHÚ
_colWidthsÚ_argWr±   r]   r   rb   Ú_cellStylesÚ_bkgrndcmdsÚ	_linecmdsÚ	_spanCmdsÚ_nosplitCmdsÚ	_srflcmdsÚ_sircmdsÚ
repeatRowsÚ
repeatColsÚ
splitByRowÚ
splitInRowÚsetStyler   Ú_setCornerRadiiÚ_rowSplitRangerQ   rR   Ú_minRowHeightsrf   Ú_shadow)"r2   ÚdataÚ	colWidthsÚ
rowHeightsÚstyler	  r
  r  r  rñ   ré   rê   rë   ÚnormalizedDataÚ
cellStylesÚrowSplitRangerQ   rR   rò   ÚminRowHeightsÚcornerRadiiÚrenderCBÚshadowÚnrowsÚ_seqCWÚ_seqRHÚncolsrƒ   r~   ÚdÚcellrowsÚcellcolsr€   Úlmrhr4   r4   r5   r6     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)r;   ÚpprintÚpformatÚreplaceró   r=   )r2   r|   ÚcÚcvr&  r4   r4   r5   rd   }  s   
zTable.__repr__c                    s6   dd„ ‰ g }|D ]}‡ fdd„|D ƒ}|  |¡ q|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   )Ústuffr4   r4   r5   ÚnormCellŽ  s
   z%Table.normalizeData.<locals>.normCellc                    s   g | ]}ˆ |ƒ‘qS r4   r4   )rÁ   Úcell©r,  r4   r5   rÈ   —  ó    z'Table.normalizeData.<locals>.<listcomp>)r]   )r2   r  ÚoutDataÚrowÚoutRowr4   r.  r5   rû   ‡  s   zTable.normalizeDatarh   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¾z
dt
|ƒ› d�}W n	   d}Y 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 ú)z with cell(%d,%d) containing
%sz...z"<%s@0x%8.8X %s rows x %s cols%s>%s)ré   r;   r±   rk   rV   rl   r   rì   rt   r   rx   rb   ró   r=   Úid)r2   ÚmaxLenÚvxÚnrÚncr*  ÚrhÚbr~   r€   r„   r|   ÚvijÚixÚjxÚtallestr4   r4   r5   rì   ›  sL   
€€

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__)r;   ÚsplitOn)r2   ÚCÚaWÚaHrA  r)  r!  r4   r4   r5   Ú_cellListIterÆ  s   €ÿûzTable._cellListIterc                 C   sÜ   t |tƒr	|}|S t |tƒr|fnt|ƒ}d }g j}|  |||¡D ]3}t |tƒrB|s0tddd�}| |¡ |j	dk rA|j
dk rAd }q!|rP|t||j	|j
d�ƒ q!||ƒ q!t|dƒrgt|j|j|j|jƒ}|S t|jƒ}|S )Nr   )Ú_leftExtraIndentÚ_rightExtraIndentg:Œ0âŽyE>)Ú
leftIndentÚrightIndentrÕ   )rk   rÒ   r   r   r]   rG  r   Ú	CellFrameÚframeActionrH  rI  r   rU   rÓ   Ú__self__rÕ   rÖ   r×   )r2   r„   rE  rF  rD  Úframer{   r)  r4   r4   r5   Ú_cellListProcessÏ  s,   
ì




þzTable._cellListProcessé@ c              
   C   sv  |sdS ||j  |j }||j |j }|dk rNtjd@ s3t|  ¡ › d|› d|› d|j › d|j› �	ƒ‚tjd@ rNt|  ¡ › d|› d|› d|j › d|j› �	ƒ d}d}t	| d	d ƒ}	d }
t
|tƒrx|  ||¡}t| d
¡ƒ|j d }t||ƒ|fS |D ]8}| |	||¡\}}| ¡ }| ¡ }|d ur–| |¡ |d urŸ| |¡ t||ƒ}||| | 7 }|
d u r²|}
qz|||
 | fS )N©r   r   r   r   z%: flowable given negative availWidth=z width=z - leftPadding=z - rightPadding=é   rA  r%  ç333333ó?)rC   rD   rE   rF   r   ÚallowTableBoundsErrorsr™   rì   r   r;   rk   rt   Ú_elementWidthrm   ÚsplitrA   rx   ÚwrapOnÚgetSpaceBeforeÚgetSpaceAfterr]   )r2   ry   r‚   r�   ÚWÚHrF  rE  rž   rA  Úsb0ÚvwÚvhr„   ÚsbÚsar4   r4   r5   Ú_listCellGeomé  s8   
,
,

€zTable._listCellGeomc                    s6   |sdS d}d}t | dd ƒ‰t‡ ‡‡fdd„|D ƒƒS )NrR  r   rA  c                    s   g | ]}|  ˆˆˆ ¡d  ‘qS rÅ   )rX  )rÁ   r„   ©rF  rE  rA  r4   r5   rÈ     s    z)Table._listValueWidth.<locals>.<listcomp>)r;   rx   )r2   ry   rF  rE  rž   r‚   r4   rc  r5   Ú_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 ]m\}}|| }|
| | }||f}| 
|d ¡}||v rv|svd}nF|  ||¡}|d u r•td| ¡ › d|› d|› d	|  d
¡› �ƒ‚||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_oncerA  r4   r   rp   ú	Flowable ú	 in cell(ú,ú) can't have auto width
rh   r   z.
spanning problem in %s
W0=%r W=%r
spanCons=%rr   )r;   r‡   r  r  Ú_colSpanCellsÚ_spanRangesrï   r  Úindexrý   r¤   rV  r™   rì   rC   rD   rx   rÑ   r   r   Ú_colpositionsr]   Ú_widthre  )r2   Ú
availWidthr[  rA  ÚsavedÚcolSpanCellsÚ
spanRangesrÎ   ÚW0ry   ÚSr€   r‚   r~   ÚVir„   r�   ÚjiÚspanrž   Úc0Úc1rn   Úwidthr4   r4   r5   Ú_calc_width  sn   

*€è
zTable._calc_widthc                    sJ  t |ttfƒr"d}|D ]}|  ||¡}|d u r d S t||ƒ}q|S t |tƒr^|jrJt|dƒr:t |jt	t
fƒr:|jS t|dƒrJt |jt	t
fƒrJ|jS t|dƒr^z
t|dƒ|ƒd W S    Y t|dƒr}z| ¡ }t |t
t	fƒrr|W S W n	 ty|   Y nw |d u rƒdS z	t|ƒ d¡}W n   Y dS |j‰ |j‰t‡ ‡fdd„|D ƒƒS )	Nr   rz  Ú	drawWidthÚ__styledWrap__ÚminWidthr%  c                    s   g | ]}t |ˆ ˆƒ‘qS r4   r   rÆ   ©ÚfontNameÚfontSizer4   r5   rÈ   o  ó    z'Table._elementWidth.<locals>.<listcomp>)rk   rV   rl   rV  rx   r   Ú_fixedWidthrU   rz  r¸   rw   r|  r;   r~  ÚAttributeErrorrt   rW  r@   rA   )r2   r„   r�   r‚   ÚeÚewr4   r  r5   rV  L  s@   
  

ÿzTable._elementWidthc           &      C   sº  | 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 �]G\}\}}}||f}| |d ¡}||v r�|s�qvt|tttfƒ�rr|  ||d ¡ }||< |d u rÃ|  |¡sÃtd|d  ¡ › d|› d|› d|  d¡› �ƒ‚|	rØ|j |j!|j"pÐd	|j! |	_|	_|	_||v rò|sßqvt#||d
 d  ||d   |pðdƒ}|  $||pû|  %|¡|¡\}}|	�r|
\|	_|	_|	_||j& |j' }||�pdk�rqtj(d@ �sIddl)m*} |d|d  d¡› dt+|ƒ› dt+|ƒ› d|› d|› d|  d¡› �ƒ‚tj(d@ �rqt,d|d  d¡› dt+|ƒ› dt+|ƒ› d|› d|› d|  d¡› �ƒ n|d u�r|t-|ƒ�p}d .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|"¡ || |$ }%|"|% }||" |% }$|}"�q1| 7|"¡ |"| _8| 9¡  || _:d S )NrA  r4   r   rf  rg  rh  ri  rh   rT  r   r   )ÚLayoutErrorz (rn   z points) too wide for cell(z) (fp_str(w)x* points) in
é   rç   r%  r*   c                 s   s   � | ]}|d  V  qdS )r   Nr4   rÆ   r4   r4   r5   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=%rrr   );rÿ   r‡   r  rm   râ   r  r;   r  Ú_rowSpanCellsrj  rk  rm  Ú	_fontnameÚ	_fontsizeÚ_leadingrþ   r   Ú_FUZZrl  rï   r  rý   rV   Úzipr¤   rk   rl   r   rP  Ú_canGetWidthr™   rì   r@   rA   rB   rx   rb  rd  rC   rD   rU  Úreportlab.platypus.doctemplater‡  r   r   rt   rW  rF   rE   rÍ   rõ   rÑ   r   Ú_rowpositionsr±   r]   Ú_heightrš   Ú_hmax)&r2   ÚavailHeightro  r\  r[  ÚhmaxrÏ   Ú	longTabler  rA  rp  ÚrowSpanCellsrq  rr  ÚcolpositionsÚH0rÎ   r«   r~   ry   rt  Úhr€   r„   r�   r‚   rv  rw  ÚdWrž   r‡  Úr0Úr1rn   ÚheightÚmsrr)  r©   r4   r4   r5   Ú_calc_heightq  s´   




$.*&DD€
€

Ì5"



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 )Nrs   )r[  )r   Ú_hasVariWidthElementsÚ_calcPreliminaryWidthsr  Ú_calcSpanRangesrÿ   r{  r  Ú_calcNoSplitRangesr   Ú_calcSpanRects)r2   ro  r”  r[  r4   r4   r5   Ú_calcÖ  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þ   rx   rl  )r2   r;  r@  ÚrowNumr4   r4   r5   Ú_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ï   r�  )r2   ÚupToRowr1  Úcolr¹   r4   r4   r5   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   )rk   rV   rl   r�  r   rƒ  )r2   ÚthingÚelemr4   r4   r5   r�    s   
ÿ
zTable._canGetWidthc           '      C   sÂ  t | jƒ}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ƒsFJ ‚|| }qg }	g }
g }i }d}| j}t| jƒD ]c}|| }|du sp|dkspt|dƒr»d}d}t| j	ƒD ]+}| j
| | }| j| | }|||ƒp�d}||j|j 7 }t||ƒ}|o£|  |¡}qy|r­|
 |¡ n| |¡ |||< ||7 }q]|	 |¡ q]t|	ƒ| jkrÊdS |||  }|dk�r²|t|ƒ d }||7 }|rþ|dk rþ|pê|}d| t|ƒ }d}|t|ƒ | }nd }}g }d}|}| ¡ D ]K\}}|| }t|dƒ�r't|dd… ƒ| | }n|dk�r/|}n	| �r6|�p7d}||k�rC|||< �q| || |||f¡ ||7 }||7 }�q|�r±|t|ƒ } | ¡  g }!|D ]/\}"}}}| | }#|#|k �r�|||< ||8 }||8 }|�r�|t|ƒ } �qi|! |||f¡ �qi|!D ]\}}}| | }#|#|k�s«J ‚|#||< �q›n§|dk�rþg }$| ¡ D ]*\}}t|tƒ�ræ| d¡�ræ|t|dd… ƒ |  ||< }||7 }|$ |¡ �q½|$D ]}||= �qê~$t| ¡ ƒ}|||  }|dk �r:|tj | dk�r:| | }%t|ƒD ]\}}||v�r/|%| }&||  |&8  < ||&8 }�q|||  }d}%n|| }|dk�rEdn|| }%| ¡ D ]\}}||% ||< �qM| | _| _|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.rp   r   Nr   rs   rq   rr   éd   )rV   r  rÀ   rw   rk   r¸   rV  r±   rð   rî   rï   r  rC   rD   rx   r�  r]   rm   rÌ   Úsortrt   rv   rÍ   Úvaluesr   ÚdefCWRFrý   r   )'r2   ro  r[  ÚtotalDefinedÚpercentDefinedÚpercentTotalÚnumberUndefinedÚnumberGreedyUndefinedr‚   Ú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!  ÚadjÚdwr4   r4   r5   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   rs   rq   )rV   r  rV  r±   rî   rï   r  rm   rÀ   rC   rD   rx   rw   )r2   r[  rz  r»  ÚrowNosr¯  Ústylesr¼  r‚   r¾  r¿  r¹   r  rÀ  r4   r4   r5   r~  Õ  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)rk  r±   rð   rî   rj  r‰  r]   r  )r2   rr  rn   r©   ÚcsaÚrsar^   ÚstartÚstopr¬   Úy0r­   Úy1r4   r4   r5   r£  ë  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Ú_rowNoSplitCellsr]   r  )r2   ÚnosplitRangesrn   r©   rÔ  rÕ  r^   rÖ  r×  r¬   rØ  r­   rÙ  r4   r4   r5   r¤    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||	< q1z||
\}}}}||krKW q1|	\}}|| dkrtt|d |d ƒD ]}| 	|| g ¡ 
||d  || f¡ q^|| dkr™t|d |d ƒD ]}| 	|| g ¡ 
|| ||d  f¡ qƒ|| }||d  }||d  | }|| | }||||f||	< W q1   td|  ¡ f ƒ Y 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
        Ú
_spanRectsr“  Nr   r   z
spanning problem in %s)r;   râ   Ú_hmax_spanRectsrm  r‘  rm   rk  rÌ   r±   Ú
setdefaultr]   r   rì   r¯  r®  rÞ  Ú_vBlocksÚ_hBlocks)r2   Ú	spanRectsr•  r–  r˜  ÚrowpositionsÚvBlocksrª   ÚrlimÚcoordr¹   Úcol0Úrow0Úcol1Úrow1rª  r1  r7   rn   r©   rz  rž  r4   r4   r5   r¥  J  sL   
((
ÿ
zTable._calcSpanRectsc                 C   sð   t |tƒs	t|ƒ}| ¡ D ]@}t|ƒdkrH|dd… \}\}}\}}t |tƒs>t |tƒs>t |tƒr5|tvs>t |tƒrH|tvrHtd|›dt›�ƒ‚|  |¡ q|j 	¡ D ]
\}}	t
| ||	ƒ qSdD ]}
t| |
ƒsut||
ƒrut
| |
t||
ƒƒ q`d S )Nr*   r   zbad style command zN illegal of invalid string coordinate
only rows may be strings with values in rP   )rk   r   rS   rm   rt   Ú_SPECIALROWSr™   Ú_addCommandrT   rÌ   r:   rU   r;   )r2   Útblstyler^   r)  ÚscÚsrÚecÚerÚkr„   r\   r4   r4   r5   r  ~  s2   
ÿÿþþ
ÿ€þzTable.setStylec                 C   sx   |dk r	|| j  }|dk r|| j  }|dk r|| j }|dk r$|| j }td|ƒt| j d |ƒtd|ƒt| jd |ƒfS )z0ensure cell range ends are with the table boundsr   r   )rð   rî   rx   r¥   )r2   rï  rñ  rð  rò  r4   r4   r5   ÚnormCellRange�  s
   0zTable.normCellRangec                 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|ƒdk rK| d¡ nt|d t	dd	d
|ƒ}||d< t|ƒdk re| d ¡ t|ƒdk rq| 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krß|  |d ¡ d S |d d… |dd … \}\}}\}	}
}|tv �r
|d dk�r| jn| j |¡ d S |  ||	||
¡\}}	}}
|	d7 }	t||
d ƒD ]}t||	ƒD ]}t| j||||ƒ �q(�q!d S )Nr   )Ú
BACKGROUNDÚROWBACKGROUNDSÚCOLBACKGROUNDSÚSPANÚNOSPLITé   zbad line command r)   r   r   Úcapé   rS  r`   é	   r'   r*   ÚROUNDEDCORNERSr�   )r  r]   r  r  Ú_isLineCommandrV   rm   r™   r½   ÚLINECAPSÚ	LINEJOINSr  rl   r  rì  r  r  rô  r±   Ú_setCellStyler  )r2   r^   rû  r`   Ú	lineCountÚspaceÚoprï  rð  rñ  rò  r¯  r~   r€   r4   r4   r5   rí  ˜  sT   (
$ÿÿzTable._addCommandc                    s‚  d\}}}| j }| ¡  | j‰ˆr0ˆj}g |d d …< |j‰|j‰ ‡ ‡‡‡‡‡‡‡fdd„}||_z�| jD ]v\
}\}}	\}
}‰‰‰‰‰}}t|	tƒrN|	t	v rNq4ˆd kr]|ˆkr]| 
ˆ¡ ˆ}ˆd u seˆg krp|d uro| ¡  d }nˆ|kr{| ˆ¡ ˆ}ˆd urŠ|ˆkrŠ| ˆ¡ ˆ}|  ||
|	|¡\}}
}	}t| t |d¡ƒ||	f|
|fˆˆ||ƒ q4W ˆr±ˆ|_nˆr·ˆ|_w | ¡  d | _d S )N)NNNc                    sj   | |kr| ˆj ks| ˆjks||kr,|ˆjks|ˆjkr,ˆ t| |||ˆˆˆˆˆƒ	ƒ d S ˆ| |||ƒ d S r/   )r­   r¬   rÙ  rØ  rÛ   )ÚxsÚysÚxeÚye©ÚaSLrû  rH   Údashr`   Ú	ocanvlineÚrrdÚweightr4   r5   Ú
rcCanvLineà  s   ÿÿÿýýý z$Table._drawLines.<locals>.rcCanvLineÚ_drawUnknown)rA  Ú	saveStateÚ_roundingRectDefÚSLÚliner]   r  rk   r   rì  Ú
setLineCapÚsetDashÚsetLineJoinrô  r;   Ú
_LineOpMapr¤   ÚrestoreStateÚ	_curcolor)r2   ÚccapÚcdashÚcjoinrA  r  r  r  rï  rð  rñ  rò  r³   r  r4   r
  r5   Ú
_drawLinesÕ  sL   
	&
€

*ð€ÿ
zTable._drawLinesc           	      C   s&   dd l }| d¡jd }td|›�ƒ‚)Nr   r   r  zUnknown line command )ÚsysÚ	_getframeÚf_localsr™   )	r2   rÖ  Úendr  rH   r³   r  r   r  r4   r4   r5   r    s   zTable._drawUnknownc                 C   s,   |   ||||||¡ |  ||||||¡ d S r/   )Ú_drawBoxÚ_drawInnerGrid)r2   rÖ  r#  r  rH   r³   r  r4   r4   r5   Ú	_drawGrid	  s   zTable._drawGridc                 C   s”   |\}}|\}	}
|   ||f|	|f||||¡ |   ||
d f|	|
d f||||¡ |  ||f||
f||||¡ |  |	d |f|	d |
f||||¡ d S rj   ©Ú_drawHLinesÚ_drawVLines©r2   rÖ  r#  r  rH   r³   r  rï  rð  rñ  rò  r4   r4   r5   r$    s   $(zTable._drawBoxc                 C   sT   |\}}|\}	}
|   ||d f|	|
f||||¡ |  |d |f|	|
f||||¡ d S rj   r'  r*  r4   r4   r5   r%    s    $zTable._drawInnerGridc                 C   sL   |r|| j kr| j |¡ || _ |r"|| jkr$| j |¡ || _d S d S d S r/   )r  rA  ÚsetStrokeColorÚ
_curweightÚsetLineWidth)r2   r  rH   r4   r4   r5   Ú	_prepLine  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   rr   râ  c                 S   ó   t | |||||ƒS r/   ©r¶   ©r¬   rØ  r­   rÙ  r¦   r²   r³   r4   r4   r5   Ú<lambda>2  ó    z#Table._drawHLines.<locals>.<lambda>)rm  r‘  rm   r.  r;   rA  r  r°   )r2   rÖ  r#  r  rH   r³   r  rï  rð  rñ  rò  r¨   Úrpr§   rª   r¦   r©   Úlfr4   r4   r5   r(  #  s$   ÿÿzTable._drawHLinesc                 C   s8   |\}}|\}	}
|   ||d f|	|
d f||||¡ d S rj   )r(  r*  r4   r4   r5   Ú_drawHLinesB6  ó   (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   rr   rá  c                 S   s   ||| ||ƒS r/   r4   )rØ  r¬   rÙ  r­   Ú_liner4   r4   r5   r2  E  s    z#Table._drawVLines.<locals>.<lambda>c                 S   r/  r/   r0  r1  r4   r4   r5   r2  J  r3  )r‘  rm  rm   r.  r;   rA  r  r°   )r2   rÖ  r#  r  rH   r³   r  rï  rð  rñ  rò  ÚerpÚcpÚsrprå  r¦   rn   r5  r4   r4   r5   r)  ;  s$   ÿÿzTable._drawVLinesc                 C   s8   |\}}|\}	}
|   |d |f|	d |
f||||¡ d S rj   )r)  r*  r4   r4   r5   Ú_drawVLinesAN  r7  zTable._drawVLinesAc                 C   s   |   ||¡ || _| j| jfS r/   )r¦  ro  rn  r’  )r2   ro  r”  r4   r4   r5   ÚwrapS  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.
        Nr4   )r2   ÚTÚbyRowr4   r4   r5   ÚonSplitX  s   zTable.onSplitFc                 C   s0  | j }|D ]�}|dd… \\}}	\}
}|	tv rh|	d dkrU|  |¡ |	dkrT|rT|dk r0||7 }|
dk r8|
|7 }
|  |d f||d f|
|d ff t|dd … ƒ ¡ q|sXq|  |¡ |	dkrbq|d  }	}|	dk rp|	|7 }	|	|kruq||kr}|d }|  |d f||	f|
|ff t|dd … ƒ ¡ qd S )Nr   r*   r   r~   rÞ   rÜ   )rð   rì  rí  rl   )r2   rƒ   rY   Únr0ÚdoInRowSplitÚ	_srflModer   r)  rï  rð  rñ  rò  r4   r4   r5   Ú_cr_0_  s(   
8


2ïzTable._cr_0c              
   C   s8  t |ƒ}t|ƒ}| j}	|D ]Ï}
|
dd… \\}}\}}|tv rj|d dkrY|  |
¡ |dkrX|rX|dk r8||	7 }|dk r@||	7 }|  |
d f||f||ff t|
dd … ƒ ¡ q|s\q|  |
¡ |dkrfq| }}|dk rr||7 }|dk rz||7 }tt||d ƒƒ|@ }|r­t|ƒ}|  |
d f|| t	|ƒ¡f|| t
|ƒ¡ff t|
dd … ƒ ¡ ||k r²qt
|| dƒ| }t
|| dƒ| }|  |
d f||f||ff t|
dd … ƒ ¡ q| j}|�r|\}}|dk rï||7 }|dk r÷||7 }||k �rd | _d S t
|| dƒ| }t
|| dƒ| }||f| _d S d S ©Nr   r*   r   r~   rß   rÝ   )rm   Úsetrð   rì  rí  rl   r±   rV   rl  r¥   rx   r  )r2   rƒ   ÚnRowsr	  rY   rB  rC  ÚnrrÚrrSr   r)  rï  rð  rñ  rò  ÚcSr4   r4   r5   Ú_cr_1_1v  sL   
0

D
2

÷zTable._cr_1_1c           
      C   s:  |D ]˜}|dd… \\}}\}}	|t v r_|d dkrN|  |¡ |dkrM|rM|dk r-|t7 }|dk r5|t7 }|  |d f|df|dff t|dd … ƒ ¡ q|sQq|  |¡ |dkr[q| }}	|	dkrh|	|k rhq|dkrr||k rrd}||krz||8 }|	|kr‚|	|8 }	|  |d f||f||	ff t|dd … ƒ ¡ qd S rE  )rì  rí  r   rl   )
r2   rƒ   rY   rB  rC  r)  rï  rð  rñ  rò  r4   r4   r5   Ú_cr_1_0Ÿ  s(   
0

2îzTable._cr_1_0c                 C   s*   t | dd ƒ}|d u r|S |j|j |j S )NÚ_frame)r;   r’  Ú_topPaddingÚ_bottomPadding)r2   Údefaultr…   r4   r4   r5   Ú_getPossibleHeight´  s   zTable._getPossibleHeightc              
   C   s¶  ||j  }||j |  }t|ttfƒrÎg }g }	d}
g }| j||||d�d }|jdkr2|| d }nd}t||ƒD ]Œ\}}t|d|ƒ}|
rK|	 |¡ q9|| | 	¡  |krg| |¡ ||| 	¡  | 
¡  7 }q9|| | 	¡  }d }t|dƒr›|jt| d	d ƒ||dd d d
d�\}}}}|rš|rš|}| |¡ |	 |¡ n| ||¡}|r±| |d ¡ |	 |d ¡ |sÃ|s¾|jdkr¾g   S |	 |¡ d
}
q9t|ƒt|	ƒfS t|tƒ�rY| d¡}d|j }|jpâ|t|ƒ }|jdkrô||krô|dfS |jdk�r||k�rd|fS |jdk�r||k�rd|fS |dfS t|ƒdk �rg S |jdk�r*|| }n|jdk�r9t|ƒ||  }n
|| | d|  }t|ƒ}d |d |… ¡d ||d … ¡fS dS )NF)r\  r   rá   r   r   rž  Ú
_findSplitrA  T)Ú
mergeSpacer¿   ÚcontentÚparaFixÚTOPr%  rT  rç   r.   )rç   rç   )rE   rk   rl   rV   rb  rK   rŽ  r;   r]   rY  rZ  rU   rR  ÚextendrW  rt   rA   rB   rm   r¸   r`   )r2   r¹   r  Ú	oldHeightÚ	newHeightrz  Úheight0Úheight1ÚnewCellContentÚpostponedContentÚflowable_split_attemptedÚFHÚ
cellHeightÚ
usedHeightÚflowableÚ_fhÚflowable_heightÚsplitHeightÚsplitsÚ_wÚ_Hr�   ÚS1ÚrowsÚ
lineHeightÚcontentHeightÚ
splitPointr4   r4   r5   Ú
_splitCell¸  sv   



(

€




$zTable._splitCellc                 C   s–  | j }| j}g }| jD �]<\
}\}}\}	}
}}}}}}}t|tƒro|tv ro| |||f|	|f|||||||f
¡ |dkrC|d  }}
n,|dkrL|}|}
n#|dk rT||7 }|	dk r\|	|7 }	|||f|	|f|||||||f
|d< q|dk rw||7 }|	dk r|	|7 }	|dk r‡||7 }|
dk r�|
|7 }
|dv �rs||k rœ|
|ks¤|�r_||k�r_| d||f|	|f|||||||f
¡ | d||f||
f|||||||f
¡ | d	|	|f|	|
f|||||||f
¡ | d
||
f|	|
f|||||||f
¡ |dk�r^|�r!| d||f|	|d f|||||||f
¡ | d||f|	|
f|||||||f
¡ q| 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¯|�s¯| 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�r5||k�r!|
|k�r!| d
||d f|	|d f|||||||f
¡ | |||f|	|
f|||||||f
¡ q| |||f|	|
f|||||||f
¡ q|S )NrÝ   r   rÜ   r   rr   )ÚBOXÚOUTLINEÚGRIDÚ	LINEABOVEÚ
LINEBEFOREÚ	LINEAFTERÚ	LINEBELOWrq  Ú	INNERGRID)rî   rð   r  rk   r   rì  r]   )r2   rƒ   rB  r  r   ÚAr  rï  rð  rñ  rò  r  rH   rû  r  r`   r³   r  r4   r4   r5   Ú_splitLineCmds  sb   (&$
 &&&&
*(.&&€(
.&(
&(
.((zTable._splitLineCmdsc                 C   sæ   g j }|D ]j}|dd… \}\}}\}	}
|tv s|
tv r!||ƒ q|
dk r)|
|7 }
|dk r1||7 }|
|kr:|
d7 }
n|
|krN||k sJ||krN|dkrN|
d7 }
||ksZ||kr^|dkr^|d7 }||||f|	|
ff|dd…  ƒ q|jS )a2  Stretches the commands when a row is split

        The row start is sr, the row end is er.

         sr   | er  | result
        ---------------------------------------------------------------------
          <n  |  <n | Do nothing.
              | >=n | A command that spans the break, extend end.
        ---------------------------------------------------------------------
         ==n  | ==n | Zero height. Extend the end, unless it's a LINEABOVE
              |     | commands, it's between rows so do nothing.
              |     | For LINEBELOW increase both.
              |  >n | A command that spans the break, extend end.
        ---------------------------------------------------------------------
          >n  |  >n | This command comes after the break, increase both.
        ---------------------------------------------------------------------

        Summary:
        1. If er > n then increase er
        2. If sr > n then increase sr
        3. If er == n and sr < n, increase er
        4. If er == sr == n and cmd is not line, increase er

        r   r*   r   rr  ru  N)r]   rì  rN  )r2   rƒ   rY   ÚoldrowcountÚ	stretchedr)  r^   rï  rð  rñ  rò  r4   r4   r5   Ú_stretchCommandsN  s&   
$zTable._stretchCommandsc           _         sr  | j ||d�}| j}t|tƒr|nt|ƒd }|r||k s#|s%||kr%g S t| jƒ}||kr1| gS | j}|rd|\}}|dk rB||7 }|dk rJ||7 }||kr^| j|t	| j||… ƒ |d�S ||k rdg S | j
}	|sp| ‰ | j‰�n,dd„ | jD ƒ‰| jr„|| j| k r„g S t	| jd |… ƒ}
| j| }| j| }| j}| j| }d}d}d}tt|||ƒƒD ]h\}\}}}| jrÃ| j ||fd ¡d u rÃq­t|ttfƒrâ|  |||¡\}}||j|j 7 }||krá|}q­t|tƒ�r| d¡}d|j }|t|ƒ |j |j }t|||j ƒ}t|||j ƒ}||k�r|}q­|| |k�s$|||
 k�r"| j�s*g S tƒ }t| jƒD ]L}||f}|| jv �r}| j ||fd ¡d u �r}| j  ¡ D ]-\}}|d u �rZ�qO|\}}}} ||k�r{||k�r{||k�r{|| k�r{| !|¡  n�qO�q2|�s„g S g }!| jD ]>\}"\}#}$\}%}&|#dk �rœ|#| j7 }#|%dk �r¦|%| j7 }%|$dk �r°|$| j"7 }$|&dk �rº|&| j"7 }&|! #|"|#|$f|%|&ff¡ �q‰d	d„ | jD ƒ}'| j$}(|D �].}| j| \})}*}+},| j%| }-|-d
 }.t	| j|*|… ƒ}/|'|* |) }0|  &| j|* |) |0|.|/|¡}1|1�sg   S |1d ˆ|* |)< |1d ˆ| |)< g }2|!D ]N\}"}3}4|)|*f|3k�rg|+|,f|4k�rg|d |*k�sA|)|+k�rO|2 #|"|)|*f|+|d ff¡ ||,k �sY|)|+k�re|2 #|"|)|f|+|,ff¡ �q"|2 #|"|3|4f¡ �q"|2}!g }5|(D ]9\}"}3}4}6|3|)|*fk�r¦|5 #|"|3|4d |d f|6f¡ |5 #|"|3d |f|4d |f|6f¡ �qw|5 #|"|3|4|6f¡ �qw|5}(|0 '¡ }7|0j(dk�rý|1d �rÎ|1d �rÎd|0_(d|7_(n/|  |8d �pØ|8d ||0¡d }9||9 d }:|8d �rñ|0 j|:7  _n|8d �rý|7 j|:7  _|7|'| |)< �qÕ| j)ˆ| j| j| j| j
| j*| j+d|'| j,t-| dd ƒ| j.t-| dd ƒt-| dd ƒd�‰ |(ˆ _$|!ˆ _| j/ˆ _/| j0ˆ _0| j1ˆ _1| j2ˆ _2| j3ˆ _3ˆ  4¡  ˆ  5¡  ˆ  6¡  g };| j7D ]æ}<|<\
}=\}#}$\}%}&}>}6}?}@}A}B}C|&dk �rs|&ˆ j"7 }&|%dk �r}|%ˆ j7 }%|=dk�s |=dk�r‘|$|k�s |&|k�s |=dk�r7|$|k �s |&|k�r7|=dv �rä|; #d|#|$f|%|d f|>|6|?|@|A|B|Cf
¡ |; #d|#|f|%|&f|>|6|?|@|A|B|Cf
¡ |; #d|#|d f|%|d f|>|6|?|@|A|B|Cf
¡ |=dv �r5|; #d|#|$f|%|$f|>|6|?|@|A|B|Cf
¡ |; #d|#|&f|%|&f|>|6|?|@|A|B|Cf
¡ |; #d|#|$f|#|&f|>|6|?|@|A|B|Cf
¡ |; #d|%|$f|%|&f|>|6|?|@|A|B|Cf
¡ �qW|; #|<¡ �qW|D ]×}g }D|;D ]Í}<|<\
}=\}#}$\}%}&}>}6}?}@}A}B}C| j| \})}*}+},|=dk�rp|&|*k�rp|$|,k�s|=dk�r|&|*k�r|$|,k �r|#|+k�r|%|)k�r|=dk�r•|*}E|,d }Fn|*d }E|,}F|$|Ek�r³|D #|=|#|$f|%|Ef|>|6|?|@|A|B|Cf
¡ |)|#k�rÓ|D #|=|#t|E|$ƒf|)d t8|&|Fƒf|>|6|?|@|A|B|Cf
¡ |+|%k �ró|D #|=|+d t|E|$ƒf|%t8|&|Fƒf|>|6|?|@|A|B|Cf
¡ |&|Fk�r|D #|=|#|Ff|%|&f|>|6|?|@|A|B|Cf
¡ �qF|D #|<¡ �qF|D};�q@|;ˆ _7ˆ j|dd�S t8||
 || ƒ}G|Gd | j+k �r5g S | j9|G }H|H| j+k �rBg S g }Id}Jg }Kd}Lg }Mt|||ƒD ]Ÿ\}}}|  &||||G|¡}8|8�sgg   S | '¡ }7|j(dk�r±|8d �r‚|8d �r‚d|_(d|7_(n/|  |8d �pŒ|8d ||¡d }9||9 d }:|8d �r¥| j|:7  _n|8d �r±|7 j|:7  _|I #|8d ¡ |K #|8d ¡ |  |8d ||¡d |j |j }Nt|J|Nƒ}J|  |8d ||¡d |j |j }Ot|L|Oƒ}L|M #|7¡ �qRt8|G|Jƒ}Pt|L| j| |P ƒ}Q| jd d … }R|R :|d |Q¡ |P|R|< | jd d … }'|' :|d |M¡ ˆd |… |Ig |Kg ˆ|d d …  ‰| j)ˆ| j|R| j| j
| j*| j+d|'| j,t-| dd ƒ| j.t-| dd ƒt-| dd ƒt-| dd ƒd�‰ |  ;|| j7|¡ˆ _7|  ;|| j$|¡ˆ _$|  ;|| j|¡ˆ _|  ;|| j/|¡ˆ _/|  ;|| j0|¡ˆ _0|  ;|| j1|¡ˆ _1|d }| j,}S|S�r¦t<|Sƒ}Sˆ j.}T|T�r°ˆ j‰nˆ j=‰t-| dd ƒ}Ut-| dd ƒ}Vt-| dd ƒ}W| j)ˆd |… ˆ jˆd |… ||	| j*| j+dˆ jd |… |St-| dd ƒ|T|U�rð|Ud d… nd |V|Wd�}Iˆ j"}Xˆ j}Yˆ j>||d�}Z|I ?||Z|X|¡ |Ij?|ˆ j$|X|dd � |I ?|ˆ j|X|¡ |I ?|ˆ j/|X|¡ ˆ j0D ];}[|I @|[¡ |[d d d!k�r=�q+|[dd
… \\}#}$\}%}&|I @|[d f|#|d f|%|d ff t|[d
d … ƒ ¡ �q+|S�rnt<|Sƒ}S|�rt|tƒ�r‘ˆd |… }\ˆd |… }]ˆ jd |… }^tt|ƒƒ}n!ttA|ƒƒ}‡fd"d„|D ƒ}\‡fd#d„|D ƒ}]‡ fd$d„|D ƒ}^| j)|\ˆ|d …  ˆ j|]ˆ|d …  t|ƒ|	| j*| j+d|^ˆ j|d …  |St-| d%d ƒ|T|U|V|Wd&�}K|K B||X||Z|¡ |KjB||X|ˆ j$|dd � |K B||X|ˆ j|¡ |K B||X|ˆ j/|¡ nV| j)ˆ|d … ˆ jˆ|d … ||	| j*| j+dˆ j|d … |St-| d%d ƒ|T|U�r;ddg|Udd …  nd |V|Wd&�}K|K C||Z|¡ |KjC|ˆ j$|dd � |K C|ˆ j|¡ |K C|ˆ j/|¡ ˆ j0D ]7}[|K @|[¡ |[d d d'k�rw�qe|[dd
… \\}#}$\}%}&|K @|[d f|#df|%dff t|[d
d … ƒ ¡ �qeˆ jD |I_D|K_Dˆ jE |I_E|K_E|  F|I¡ |  F|K¡ |I|KgS )(N)ÚignoreSpansr   r   ©rB  c                 S   ó   g | ]}|d d … ‘qS r/   r4   ©rÁ   r7   r4   r4   r5   rÈ   ¡  r‚  z$Table._splitRows.<locals>.<listcomp>r%  rT  c                 S   r~  r/   r4   r  r4   r4   r5   rÈ   ö  r‚  r*   rá   r.   rV  r   rQ   Ú_cornerRadiirí   )r  r  r	  r
  r  r  r  r  ré   rQ   rò   r  r  ro  rq  rv  )rq  rv  ru  )rq  ro  rr  rs  rt  Fr  )r  r  r	  r
  r  r  r  r  ré   rQ   rò   r  r  r  T)rC  rÝ   c                    ó   g | ]}ˆ | ‘qS r4   r4   ©rÁ   r~   )r  r4   r5   rÈ   ,  r/  c                    r�  r4   r4   r‚  )ÚsplitHr4   r5   rÈ   -  r/  c                    s   g | ]}ˆ j | ‘qS r4   )r  r‚  )r>  r4   r5   rÈ   .  s    rR   )r  r  r	  r
  r  r  r  r  ré   rR   rò   r  r  r  rÜ   )GÚ!_getFirstPossibleSplitRowPositionr	  rk   r¸   rx   rm   rþ   r  Ú
_splitRowsrÍ   r
  rï   r  r  r   rý   rŽ  r  rk  r¤   rl   rV   rb  rE   rF   rt   rW  rA   rF  r±   rð   r‰  rÌ   r_   rî   r]   r  rÞ  rn  r1   rK   ró   r  r  ré   r;   râ   r  r  r  rm  r‘  r¤  r£  r¥  r  r¥   r’  Úinsertr{  r   rÿ   rx  rD  rí  rË   rK  rL  rê   rë   r@  )_r2   r”  rB  rƒ   r	  Ú	maxrepeatrÏ   ÚloÚhir
  ÚusedHeightsÚ
cellvaluesr  Ú
cellWidthsÚcurRowHeightÚminSplitÚmaxSplitÚ	maxHeightÚcolumnr¹   r  rz  r‚   rž  rj  rk  Ú
splitCellsr-  rw  Ú	start_colÚ	start_rowÚend_colÚend_rowÚspanCmdsr^   rï  rð  rñ  rò  ÚnewCellStylesÚ
bkgrndcmdsÚspan_scÚspan_srÚspan_ecÚspan_erÚspanRectrX  rY  ÚoldStyleÚresÚnewSpanCmdsrÖ  r#  ÚnewbkgrndcmdsrH   ÚnewStyler„   rš  ÚmarginÚnewlinecmdsÚlinecmdr  r  rû  r  r`   r³   r  Ú
moddedcmdsÚstartrowÚendrowrm  rÁ  rŽ   ÚR0Heightr�   ÚR1HeightÚR1StylesÚh0Úh1ra  ÚnewRowHeightÚnewRowHeightsré   Últor  r  r  r  r   r  r)  ÚiRowsÚiRowHÚiCSr4   )r>  r  rƒ  r5   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¥   rx   )
Ú
impossibleÚcellsÚrangesÚxyr|   rÙ  Úy2ÚyminÚymaxr©   r4   r4   r5   Ú_getRowImpossible^  s   


ý€øzTable._getRowImpossiblec                 C   s‚   i }| j r|s|  || j| j¡ | jr|  || j| j¡ d}d}d}| jD ]}|| |kr0 |S ||vr6|}|| }|d }q%|S )Nr   r   )r  r¼  r‰  rk  r  rÜ  rÚ  rþ   )r2   r”  r|  rµ  rš  rƒ   Úsplit_atr;  r4   r4   r5   r„  m  s"   

ü
z'Table._getFirstPossibleSplitRowPositionc                 C   s‚   |   ||¡ | js| jr?| j|kr'tjd@ sg S tjd@ r't|  d¡› d�ƒ | j|| j d�}|r4|S | jr?| j|| jd�S g S )Nr   rˆ  rh   z# split called with inadequate widthr}  )	r¦  r  r  rn  r   rU  r   rì   r…  )r2   ro  r”  r<   r4   r4   r5   rW  �  s   


zTable.splitc              
   C   sò   | j \}}}}}t |¡}t |¡}| j}d|d  }|| }|| }	d}
ttd|d ƒƒD ]+}| ¡  | || ||	 ¡ | t 	||dd|
¡¡ | j
ddd� |
|7 }
| ¡  q.| ¡  | j^}}}}}| tj¡ | j
ddd� | ¡  d S )Nr   rˆ   r   F)ÚclipÚfill)r  r   ÚtoColorrA  rÊ   r±   r  Ú	translateÚsetFillColorÚlinearlyInterpolatedColorÚ_makeRoundedCornersClipr  r  r-   )r2   ÚdxÚdyÚsc0Úsc1Únshadesr)  ÚdwfÚddxÚddyÚwfr~   r¬   rØ  r‚   rš  r7   r4   r4   r5   Ú_makeShadow1™  s(   


zTable._makeShadow1c                 C   sJ   | j sd S t| dd ƒd u rzd| _|  ¡  W d | _d S d | _w |  ¡  d S )Nr€  )ç{®Gáz„?rÏ  rÏ  rÏ  )r  r;   r€  rÎ  rc   r4   r4   r5   Ú_makeShadow¯  s   

zTable._makeShadowT)r   r   r   r   c              	      s@  d ˆ_ tˆdd ƒ‰ ˆ rtˆ ƒ|krd S ˆj}ˆj}‡ ‡fdd„tdd|d f|d df|d |d ffƒD ƒ}ˆj}	ˆj}
|
d |d  }|	| |d  }|
| |d  }|	d |d  }|| }|| }t|||||||g ƒˆ_ ˆj	}| 
¡ }| |||||¡ |r–| d	¡ |j||d
� | d¡ d S |j|||d� d S )Nr€  c                    s0   g | ]\}\}}t ˆj| ˆj| ˆ | ƒ‘qS r4   )r¥   rþ   r   )rÁ   ró  r~   r€   ©r  r2   r4   r5   rÈ   À  s    
 ÿz1Table._makeRoundedCornersClip.<locals>.<listcomp>rR  r   r   r   r*   z%begin table rect clip©Ústrokez%end table rect clip©rÓ  r¿  )r  r;   rx   rî   rð   rý   r‘  rm  ÚRoundingRectDefrA  Ú	beginPathÚ	roundRectÚ
addLiteralÚclipPathÚdrawPath)r2   r«   r¾  rÓ  r¿  Údeltasr  r   Úarr4  r:  r¬   rØ  r­   rÙ  r‚   rš  r)  r‰   r4   rÑ  r5   rÄ  º  s<   

üÿ
zTable._makeRoundedCornersClipc              
   C   sŠ  | j \}}}}}}}}|sd S | j}	|	 ¡  d  }
 } } | _| _|	j}| j}|D �]“\	}}}}}}}}}|d krE|
|krE|	 |¡ |}
|d u sM|g krX|d urW|	 ¡  d }n||krc|	 |¡ |}|d urr||krr|	 	|¡ |}|  
||¡ ||krâ||ks„||k rŒ|||||ƒ q*||kr›d}|d }|d }n
d}|d }|d }||| kr¹||| kr¹|||||ƒ q*||| k rËtd|||f|ddd	�nd }||| krßtd
|||f|ddd	�nd }nj||ksê||k rò|||||ƒ q*||k�rd}|d }|d }n
d
}|d }|d }||| k�r"||| k�r"|||||ƒ q*||| k �r5t|d||f|ddd	�nd }||| k�rJt|d||f|ddd	�nd }|	 ¡ }|�r}|j|d Ž  | |d d |d d |d d |d d |d d |d d ¡ n| ||¡ |�s�| ||¡ n)|j|d Ž  | |d d |d d |d d |d d |d d |d d ¡ |	j|ddd� q*|	 ¡  d S )Nr•   r   r*   r–   r   r   r—   r’   )rŠ   rM   r”   r˜   rÔ  )r  rA  r  r,  r  r  r€  r  r  r  r.  r£   rÖ  ÚmoveToÚcurveToÚlineTorÚ  r  )r2   r¬   rØ  r‚   rš  r­   rÙ  rÜ  r  rA  r  r  r  r  r  r  r  r  r	  r  rH   rû  r  r`   rœ   rœ  r�  rx  ry  r›   r‰   r4   r4   r5   Ú_restoreRoundingObscuredLinesÛ  s‚   
€


(*

**FDz#Table._restoreRoundingObscuredLinesc                 C   s0  | j }| ¡  d  | _ | _| _t| dƒ}|r!|| dƒ || dƒ |  ¡  |  ¡  |  ¡  |r4|| dƒ | j	sÒ|r—t
t| j| j| jdd … | jƒƒD ]K\}\}}}}|| d|ƒ t
t||| jd d… | jƒƒD ](\}\}	}
}}|| d|||	|
||f||fƒ |  |	|
||f||f¡ || d	ƒ qg|| d
ƒ qJnØt| j| j| jdd … | jƒD ]*\}}}}t
t||| jd d… | jƒƒD ]\}\}	}
}}|  |	|
||f||f¡ q»q¦n�|�r1t| jƒD ]U}|| d|ƒ t| jƒD ]B}| j||f }|d u�r)|\}}}}| j| | }	| j| | }
|| d|||	|
||f||fƒ |  |	|
||f||f¡ || d	ƒ qç|| d
ƒ qÚn>t| jƒD ]8}t| jƒD ]/}| j||f }|d u�rk|\}}}}| j| | }	| j| | }
|  |	|
||f||f¡ �q=�q6|�rw|| dƒ |  ¡  |�rˆ|| dƒ || dƒ | ¡  | j�r–|  ¡  d S d S )Nrí   Ú
startTableÚstartBGÚendBGr   ÚstartRowrr   Ú	startCellÚendCellÚendRowÚ
startLinesÚendLinesÚendTable)rA  r  r,  r  Ú_curcellstyler;   rÐ  rÄ  Ú_drawBkgrndr  rý   rŽ  rï   r  r‘  rþ   rm  r   Ú	_drawCellr±   rî   rð   rÞ  r  r  r  rà  )r2   r)  r  r¿  r1  ÚrowstyleÚrowposÚ	rowheightr¼  ÚcellvalÚ	cellstyleÚcolposÚcolwidthÚcellRectrn   r©   rz  rž  r4   r4   r5   Údraw(	  sx   


2.ú*.ÿÿ

€õ
€ú

ÿz
Table.drawc           +   
   C   s  | j }| j}| j}| j}| j}| j}| j}t| dd ƒ}| jD �]ß\}	\}
}\}}}|t	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|�rÉt|ttfƒ�rÉ|d dv �rÉ||
k�r1||k�r1|�r1| |
|f¡}|�r1|\}}}}|d |dd … }}| ¡  | ¡ }| ||||¡ |j|dd	� |d
k�rg|j|||| ||dd� �n]|dk�r‘||d  }|j|||||dd� |j|||| ||d d d… dd� �n3|dk�r»||d  }|j|||||dd� |j||||| |d d d… dd� �n	|dk�rÎ|j||||| |dd� nö|dk�r3dt|ƒ  k�rádk�r)n nF|d d… \\} }!\}"}#|| |  } ||"|  }"||!|  }!||#|  }#|d }$|d }%t|ƒdk�r|d nd }&|j| |!|"|#|%|&|$d� n›tdt›d|›�ƒ‚|dk�rÄdt|ƒ  k�rFdk�rºn nr|d \}'}(||'|  }'||(|  }(|d \})}*|*dk�rh|}*n-|*dk�rp|}*n%|*dk�r{t
||ƒ}*n|*dk�r†t||ƒ}*ntd|d ›d t›d|›�ƒ‚|)|*9 })|d }$|d }%t|ƒdk�r¬|d nd }&|j|'|(|)|%|&|$d� n
tdt›d|› �ƒ‚| ¡  qt |¡}|�rþ||
k�rî||k�rî|�rî| |
|f¡}|�rî|\}}}}| |¡ |j||||ddd� qd S )!NrÞ  r   r   Ú__call__rö  rÔ  r÷  )ÚVERTICALÚ
HORIZONTALÚ	VERTICAL2ÚHORIZONTAL2ÚLINEARGRADIENTÚRADIALGRADIENTrÒ  rù  F)rW  rû  ç       @rr   rú  rø  rü  rˆ  rú  r   r*   )Ú	positionsrW  zWrong length for z arguments rý  rz  rž  r¥   rx   zBad radius, z, for ) rî   rð   rA  rm  r‘  rþ   r   r;   r  rì  r¥   rU   rV   ra   r   ÚtoColorOrNonerm   r±   rÂ  Úrectrk   rl   r¤   r  rÖ  rÙ  ÚlinearGradientr™   r  rx   ÚradialGradientr  )+r2   r  r   rA  r˜  rä  r  r  rã  r^   rï  rð  rñ  rò  Úargr¬   rØ  r­   rÙ  r‚   rš  Ú
colorCycler³   ÚrowCountr~   rH   ÚcolCountÚxywhÚarg0ÚpÚxhÚyhÚax0Úay0Úax1Úay1rW  rD  r‰   ÚxcÚycr|   Úrefr4   r4   r5   rì  d	  sä   



ú


ú
ÿ

(
(

 
 






€ �ûzTable._drawBkgrndc                 C   s2  |\}}|\}}| 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 ]T\}}}|
dkr³||j }n-|
dkrÁ|| |j | }n|
dv rÔ|||j |j | d  }ntd	|
›d
t|ƒ› �ƒ‚|| ¡ 8 }||8 }| | j||¡ || ¡ 8 }q¤nî|
dk�r	| jj}||j }n?|
dv �r| jj}|||j |j d  }n)|
dk�r0| jj}|| |j }n|
dk�rA| jj}|| |j }ntd	|
›�ƒ‚t|ƒ d¡}t|ƒ}|j}|j}|dk�rj||j ||  | }n.|dk�ry|| |j | }n|dk�r‘||j| |j ||  d  | }ntd|›�ƒ‚i }|j }|�r¤||d< |j!}|�r®||d< |�rÆ|D ]}||||fi |¤Ž ||8 }�q³n|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\  rF  rV  r.   rþ  r   r,   ÚRIGHT)ÚCENTRErà   zInvalid justification z for rˆ   ÚDECIMALr%  rá   zBad valign: rM   rN   ÚonDrawr   )Úrelativerç   )ÚRectr  ))rë  rH   rA  rÂ  rB   r@   rA   ÚsetFontrI   rK   rk   rl   rV   r   rb  rE   rF   rY  rŽ  rC   rD   r™   ÚtypeÚdrawOnrZ  Ú
drawStringÚdrawCentredStringÚdrawRightStringÚdrawAlignedStringrt   rW  rm   rM   rN   r;   rŠ   ÚlabelrL   ÚlinkURLrO   ÚlinkRect)r2   rñ  rò  ÚposÚsizeró  rï  rô  rð  ÚcurÚjustrK   r[  r\  r‚   rš  r©   r„   rn   rö  Úvalsrƒ   rB   rA   ÚdrawKwdsrM   rN   r  r4   r4   r5   rí  ó	  sœ   
,ö






&þ$*þzTable._drawCellc                 C   sJ   t |ƒr|sd | _d S t|ƒtdt|ƒ dƒdg  | _d S td|›�ƒ‚)Nrˆ  r   z@cornerRadii should be None or a list/tuple of numeric radii
not )r   rV   rx   rm   r€  r™   )r2   r  r4   r4   r5   r  M
  s   4zTable._setCornerRadii)rh   )NNrQ  )rQ  rQ  r/   re   )r   )FrÅ   )=r=   r>   r?   r   r6   rd   rû   rì   rG  rP  rb  rd  r{  rV  r   r¦  r¨  r¡  r�  r¢  r~  r£  r¤  r¥  r  rô  rí  r  r  r&  r$  r%  r.  r(  r6  r)  r<  r=  r@  rD  rK  rL  rQ  rn  rx  r{  r…  r¼  Ústaticmethodr„  rW  rÎ  rÐ  r   r�  rÄ  rà  rö  rì  rí  r  r4   r4   r4   r5   r   
  s†    

ûr

+	


?
%e!
 3/04=.



)
Z<
3   `
!M< Zr   r&  r$  r%  r6  r(  r)  r<  )rq  ro  rp  rv  ru  rr  rs  rt  c                   @   s   e Zd ZdZdZdS )r   z+Henning von Bargen's changes will be activer   N)r=   r>   r?   Ú__doc__râ   r4   r4   r4   r5   r   \
  s    r   c                   @   sh   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTableRenderCBzDtable render callback abstract base klass to be called in Table.drawc                 G   sP   t |tƒstdt|ƒ› d�ƒ‚t| |d ƒ}|std|› �ƒ‚||g|¢R Ž  d S )NzTableRenderCB first argument, z is not a Tablezinvalid TablerenderCB cmd )rk   r   r™   rb   r;   )r2   r>  r^   ÚargsÚmethr4   r4   r5   r÷  d
  s   zTableRenderCB.__call__c                 C   ó   t dƒ‚)Nrá  ©ÚNotImplementedError©r2   r>  r4   r4   r5   rá  i
  ó   zTableRenderCB.startTablec                 C   r/  )Nrâ  r0  r2  r4   r4   r5   râ  k
  r3  zTableRenderCB.startBGc                 C   r/  )Nrã  r0  r2  r4   r4   r5   rã  m
  r3  zTableRenderCB.endBGc                 C   r/  )Nrä  r0  )r2   r>  r¿  r4   r4   r5   rä  o
  r3  zTableRenderCB.startRowc                 C   r/  )Nrå  r0  )r2   r>  r¿  r¼  rñ  rò  r$  r%  r4   r4   r5   rå  q
  r3  zTableRenderCB.startCellc                 C   r/  )Nræ  r0  r2  r4   r4   r5   ræ  s
  r3  zTableRenderCB.endCellc                 C   r/  )Nrç  r0  r2  r4   r4   r5   rç  u
  r3  zTableRenderCB.endRowc                 C   r/  )Nrè  r0  r2  r4   r4   r5   rè  w
  r3  zTableRenderCB.startLinesc                 C   r/  )Nré  r0  r2  r4   r4   r5   ré  y
  r3  zTableRenderCB.endLinesc                 C   r/  )Nrê  r0  r2  r4   r4   r5   rê  {
  r3  zTableRenderCB.endTableN)r=   r>   r?   r+  r÷  rá  râ  rã  rä  rå  ræ  rç  rè  ré  rê  r4   r4   r4   r5   r,  b
  s    r,  c                 C   s   | d t v S r¾   )ÚLINECOMMANDS)r^   r4   r4   r5   rÿ  ~
  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krÉ|d |_d S |dkrÔ|d |_d S d S )NÚFONTr   r   r   rT  )ÚFONTNAMEÚFACE)ÚSIZEÚFONTSIZEÚLEADINGÚ	TEXTCOLOR)ÚALIGNÚ	ALIGNMENTÚVALIGNÚLEFTPADDINGÚRIGHTPADDINGÚ
TOPPADDINGÚBOTTOMPADDINGÚHREFÚDESTINATIONÚ	DIRECTIONÚSHAPING)rm   r@   rA   rB   r   rÀ  ÚColorrH   rI   rK   rC   rD   rE   rF   rL   rO   rM   rN   )r  r~   r€   r  r¯  rÀ  rƒ   r4   r4   r5   r  �
  sN   

û ÿr  rq  rR  ©rr   rr   g      Ð?)r<  )r   r   rH  r  ro  rˆ   rv  ru  )rr   r   rt  )r   rr   rr  )r   r   Ú__main__)Úold_tables_test)r   r’   r“   )OÚ__all__Ú__version__r+  Úreportlab.platypus.flowablesr   r   Ú	reportlabr   Úreportlab.lib.stylesr	   r
   r   Úreportlab.libr   Úreportlab.lib.utilsr   r   r   r   r   r   r   r   Úreportlab.lib.validatorsr   Úreportlab.lib.rl_accelr   Úreportlab.lib.abagr   rL  Úreportlab.pdfbase.pdfmetricsr   r�  r   r   r   Úcollectionsr   r   r  r   r   rf   ro   r‡   r‘   r£   r�  r°   r¶   r½   rÀ   rÑ   rl   rÒ   rÓ   rÕ  rÛ   rì  r   r  r   rV   rõ   r4  r,  rÿ  r  r+   Ú
GRID_STYLEÚ	BOX_STYLEÚLABELED_GRID_STYLErö   ÚCOLORED_GRID_STYLEÚgreenÚ
LIST_STYLEr=   Útests.test_platypus_tablesrJ  r4   r4   r4   r5   Ú<module>   sÐ   (0


                  [ù	+ÿÿÿÿüÿüÿýÿ


þ