a
    ¥Q•h0Á ã                	   @   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 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(dd„ Z)dd„ Z*dd„ Z+dXd!d"„Z,ej-fd#d$„Z.d%d&„ Z/d'd(„ Z0d)d*„ Z1dej-fd+d,„Z2G d-d.„ d.e3ƒZ4G d/d0„ d0e3ƒZ5e$d1d2ƒZ6e$d3d4ƒZ7d5Z8G d6d7„ d7eƒZ9d8d9d9d:d;d<d=d>d?œZ:G d@dA„ dAe9ƒZ;e<e: =¡ ƒZ>G dBdC„ dCƒZ?dDdE„ Z@dFdG„ ZAe(dHdIdJdKejBfdLgƒZCe(dMdIdJdNejBfdLgƒZDe(dOdIdJdKejBfdMdIdJdejBfdPdIdQdejBfdRdIdSdejBfdLgƒZEe(dOdIdJdKejBfdMdIdJdejFfdPdIdQdejBfdRdIdSdejBfdLgƒZGe(dTdIdQdejHfdTdUdJdKejBfdPdSdJdejHfdLgƒZIeJdVk�röddWlKmLZL eLƒ  dS )Y)Ú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__)ÚisListOfNumbersOrNone)Úfp_str)ÚABag©ÚstringWidth)ÚIndenterÚNullActionFlowable)Ú
LIIndenter)Ú
namedtupleNé   é   )NÚbuttÚroundZ
projectingZsquared)NZmiterZmitrer    Z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 )r   é
   é   é   é   r   ÚblackÚLEFTÚwhiteÚBOTTOMNc                 C   s   || _ |d ur| | ¡ d S ©N)ÚnameÚcopy)Úselfr*   Úparent© r.   úR/var/www/sistema_ama/venv/lib/python3.9/site-packages/reportlab/platypus/tables.pyÚ__init__9   s    zCellStyle.__init__c                 C   sB   |d u rt | jƒ}t| ƒD ]"}| d¡r*qt||t| |ƒƒ q|S )NÚ_)r   r*   ÚdirÚ
startswithÚsetattrÚgetattr)r,   Úresultr*   r.   r.   r/   r+   =   s    
zCellStyle.copy)N)N)Ú__name__Ú
__module__Ú__qualname__r   ÚfontnameÚfontsizeÚleadingÚleftPaddingÚrightPaddingÚ
topPaddingÚbottomPaddingÚfirstLineIndentÚcolorÚ	alignmentÚ
backgroundÚvalignÚhrefÚdestinationr0   r+   r.   r.   r.   r/   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   |rD|  ¡ d d … }|j| _dD ] }t||ƒr t| |t||ƒƒ q ng }|t|pRg ƒ | _i | _| j |¡ d S )N©ÚspaceBeforeÚ
spaceAfter)ÚgetCommandsÚ_optsÚhasattrr4   r5   ÚlistÚ_cmdsÚupdate)r,   Úcmdsr-   ÚkwZpcmdsÚar.   r.   r/   r0   F   s    
zTableStyle.__init__c                 G   s   | j  |¡ d S r)   )rO   Úappend)r,   Úcmdr.   r.   r/   ÚaddV   s    zTableStyle.addc                 C   s   dd  tt| jƒ¡ S )Nz!TableStyle(
%s
) # end TableStylez  
)ÚjoinÚmapÚreprrO   ©r,   r.   r.   r/   Ú__repr__X   s    zTableStyle.__repr__c                 C   s   | j S r)   )rO   rZ   r.   r.   r/   rK   Z   s    zTableStyle.getCommands)NN)r7   r8   r9   r0   rV   r[   rK   r.   r.   r.   r/   r   E   s   
r   c                 C   s   t | ttfƒ rdpt| ƒS ©Nr   )Ú
isinstanceÚtuplerN   Úlen)Úxr.   r.   r/   Ú_rowLen]   s    ra   c                 C   s\  g }|j }g }|j }g }|j }|}d }	}
| D ]¦}t|tƒr²t|ƒ ¡ }|sZd}|
d7 }
qÌ| d¡rŠt|dd… ƒ}|	|7 }	|t|ƒƒ qÌ|dkr |t|ƒƒ qÌt|ƒ}||8 }n|du rÄ|
d7 }
n||8 }||ƒ q.td|ƒ}|td|	ƒ }|D ] }||  |9  < ||| 8 }qòtd|ƒ}t|ƒ}|�rX|
dk�r@|| �pBd}|D ]}|||< �qH|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   )	rT   r]   r   ÚstrÚstripÚendswithÚfloatr_   Úmax)ÚVÚavailÚRÚrÚIÚiÚJÚjÚsÚwÚnÚvÚfÚmr.   r.   r/   Ú_calc_pc`   sL    







ry   c                 C   sZ  |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�rF| d |||gS |||| d gS dS )zVcalculate all or half of a bezier curve
    kind==0 all, 1=first half else second halfr   ç      à?r   r   r$   Nr.   )ÚPÚkindZQ0ZQ1ZQ2ÚR0ÚR1ÚS0r.   r.   r/   Ú_calcBezierPoints�   s    888(((r€   ú
left-rightçW[±¿ìžÜ?c                 C   s”  || }| dkrN|dkrN|\}}	|| |	f|| |	f||	| f||	| fg}
nè| dkr”|dkr”|\}}||| f||| f|| |f|| |fg}
n¢| dkrÚ|dkrÚ|\}}|| |f|| |f||| f||| fg}
n\| dk�r$|dk�r$|\}}	||	| f||	| f|| |	f|| |	fg}
nt d| |f›�ƒ‚|dk�rZ|
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   rd   ú
bottom-topr   )Ú
ValueErrorÚreverser€   )ÚxposÚyposZcornerrn   r|   Ú	directionrx   ÚtZxhiZylor{   ZyhiZxlor.   r.   r/   Ú_quadrantDefž   s$    ....H
rŽ   c                 C   sè   |r|  |d¡}|r<||d d | ks<||d d | krL| ||||ƒ n˜d}t|ƒ}||| k rÊ||k rÊ|| \}}	|	|| ks�||| krš|d7 }qXt||ƒ}
t||	ƒ}|
|krÄ| |||
|ƒ |}qX||| k rä| ||||ƒ dS )z’
    Draw horizontal lines; do not draw through regions specified in hBlocks
    This also serves for vertical lines with a suitable canvLine
    Nrd   r   r   )Úgetr_   rj   Úmin)ÚcanvLineÚscpÚecpÚyÚhBlocksÚFUZZrp   ru   Úx0Úx1Úi0Úi1r.   r.   r/   Ú_hLine³   s    ,

r›   c                 C   s@   d|d  | }||7 }t |ƒD ]}|| |||ƒ ||8 }q d S )Nrz   r   )Úrange)r’   r“   r”   r‘   ÚwsÚcountÚoffsetÚidxr.   r.   r/   Ú
_multiLineÉ   s
    r¡   c              	   C   sx   z
||  W S  t yX   z.t| ƒ}||  kr6|krDn n
|W  Y S W n   Y n0 Y n0 td|› d| › d|›�ƒ‚dS )zLprivate converter tries map(value) low<=int(value)<=high or finally an errorzBad z value z in N)ÚKeyErrorÚintrˆ   )ÚvaluerX   ÚlowÚhighr*   rU   Zivaluer.   r.   r/   Ú_convert2intÐ   s    
&r§   c                 C   s    z|   |¡W S    Y dS 0 d S ©Nr   )rh   )Úobjrs   r.   r.   r/   Ú	_endswithÜ   s    rª   c                    sð   i ‰ |st ˆƒ}ttdd„ | ¡ D ƒƒƒD ]ž\}\}}||kr@q*|d7 }t‡ ‡fdd„t||ƒD ƒƒ}||| krtq*‡fdd„t||ƒD ƒ}	|	s’q*||8 }|tt |	ƒƒ }|	D ]}
ˆ  |
d¡| ˆ |
< q®q*ˆ  ¡ D ]\}
}ˆ|
  |7  < qÒd S )Nc                 s   s   | ]\}}||fV  qd S r)   r.   )Ú.0ZikZivr.   r.   r/   Ú	<genexpr>è   ó    zspanFixDim.<locals>.<genexpr>r   c                    s    g | ]}ˆ| ˆ   |d ¡ ‘qS ©r   )r�   ©r«   r`   )ÚMrk   r.   r/   Ú
<listcomp>ë   r­   zspanFixDim.<locals>.<listcomp>c                    s   g | ]}ˆ | d u r|‘qS r)   r.   r¯   )ÚV0r.   r/   r±   í   r­   r   )r_   ÚreversedÚsortedÚitemsÚsumrœ   ri   r�   )r²   rk   ÚspanConsÚlimr–   rv   r—   r˜   r�   ÚXr`   r.   )r°   rk   r²   r/   Ú
spanFixDimâ   s    &
rº   c                   @   s   e Zd ZdS )Ú_ExpandedCellTupleN)r7   r8   r9   r.   r.   r.   r/   r»   ö   s   r»   c                   @   s   e Zd Zdd„ ZdS )Ú_ExpandedCellTupleExc                 C   s"   t  | |¡}||_||_||_|S r)   )r^   Ú__new__ÚtagTypeÚaltTextÚextras)ÚclsÚseqr¾   r¿   rÀ   r,   r.   r.   r/   r½   ú   s
    z_ExpandedCellTupleEx.__new__N)r7   r8   r9   r½   r.   r.   r.   r/   r¼   ù   s   r¼   Z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fdd„Zdd„ Zdd	„ Zdmdd„Zdd„ Zdd„ Z	dndd„Z
dodd„Zdpdd„Zdd„ Zdqdd„Zdd„ Zdd„ Zdrd 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%dsdJdK„Z&dtdMdN„Z'dudOdP„Z(dvdQdR„Z)dSdT„ Z*dwdUdV„Z+dWdX„ Z,dxdYdZ„Z-d[d\„ Z.e/e.ƒZ.dyd]d^„Z0d_d`„ Z1e2j3fdadb„Z4dcdd„ Z5dedf„ Z6dgdh„ Z7didj„ Z8dkdl„ Z9dS )zr   Nr   r   c           !   
   C   s&  |
| _ |pd| _|pd| _t|ttfƒs8td|  ¡  ƒ‚|| _t	|ƒ | _
}g | _t|ttfƒ}t|ttfƒ}|rŒtttt|ƒƒƒ | _}n|rž|ržt	|ƒ}nd}|	s¬tj}	|d u rÂt| dtjƒn|| _|rÒ|�st|	dkrît|  ¡ › d�ƒ‚n‚|	dk�rHt| _d	ttƒ  ¡ ƒv�r*td	ƒatjt_tjt_t  | d
| jj!||f t¡ n(|	dk�rZt"| _nt|  #¡ › d|	›�ƒ‚d S |�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�ƒ‚|�s6||g }n0t	|ƒ|k�rft|  ¡ › d|› dt	|ƒ› d�ƒ‚t&|ƒD ]l\}}t	|ƒ}||k�rntj%�r´t|tƒ�r´|| dg ||d …< n$t|  ¡ › d|› d|› d|› d�ƒ‚�qn| | _'| _(| | _)| _*|d u �rNg }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ƒ‚n | |k �r|||  | d¡  }|| _@d S )NÚCENTERÚMIDDLEz%s invalid data typer   Ú_longTableOptimizeÚerrorz$ must have at least a row and columnZindicateÚ_emptyTableStylez	%s(%d,%d)Úignorez bad emptyTableAction: rd   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®   )AÚidentÚhAlignÚvAlignr]   r^   rN   rˆ   ÚidentityÚ	_renderCBr_   Ú_nrowsÚ_cellvaluesrj   rX   ra   Ú_ncolsr   ÚemptyTableActionr5   ÚlongTableOptimizerÊ   r   Ú	__class__ÚglobalsÚkeysr
   rÌ   r   ÚredÚ	textColorÚyellowÚ	backColorr0   r7   r   Z	identitiyÚnormalizeDataÚallowShortTableRowsÚ	enumerateÚ_rowHeightsÚ_argHÚ
_colWidthsÚ_argWrœ   rT   r   rY   Ú_cellStylesÚ_bkgrndcmdsÚ	_linecmdsÚ	_spanCmdsÚ_nosplitCmdsÚ	_srflcmdsÚ_sircmdsÚ
repeatRowsÚ
repeatColsÚ
splitByRowÚ
splitInRowÚsetStyler   Ú_setCornerRadiiÚ_rowSplitRangerI   rJ   Ú_minRowHeights)!r,   ÚdataÚ	colWidthsÚ
rowHeightsÚstylerï   rð   rñ   rò   rØ   rÐ   rÑ   rÒ   ÚnormalizedDataÚ
cellStylesZrowSplitRangerI   rJ   rÙ   ÚminRowHeightsÚcornerRadiiÚrenderCBÚnrowsZ_seqCWZ_seqRHÚncolsru   rp   ÚdZcellrowsZcellcolsrr   Zlmrhr.   r.   r/   r0     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)r5   ÚpprintÚpformatÚreplacerÚ   r7   )r,   rn   ÚcÚcvr  r.   r.   r/   r[   v  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 d S )NrÎ   )r   r   )Ústuffr.   r.   r/   ÚnormCell‡  s
    z%Table.normalizeData.<locals>.normCellc                    s   g | ]}ˆ |ƒ‘qS r.   r.   )r«   Úcell©r
  r.   r/   r±   �  r­   z'Table.normalizeData.<locals>.<listcomp>)rT   )r,   r÷   ZoutDataÚrowZoutRowr.   r  r/   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ƒ}|�rjd||fv�rjd}t|ƒD �]}t|ƒD ]î}	|| |	 }
t|
tttfƒrüt|
ttfƒs¢|
f}
d}|
D ]&}| |¡}|rª|d	d… d
krª qÒqª|rú|d	d… d
krú||	|df\}}}}nV|
du �rd�pt|
ƒ}
||	|
  }}}|�r<t|
t	ƒ�r<d�p>d}|�rR|d|… }|rn �q^qn|r` �qjq`|�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Ð   r5   rœ   r]   rN   r^   r   rÓ   rf   r   r£   rj   rY   rÚ   r7   Úid)r,   ÚmaxLenZvxÚnrZncr  ÚrhÚbrp   rr   rv   rn   ZvijZixZjxÚtallestr.   r.   r/   rÓ   ”  sB    
zTable.identityc                 c   sH   t | dd ƒ}|D ]2}t |dd ƒr<| |||¡D ]
}|V  q.q|V  qd S )NÚcanvZ__split_only__)r5   ÚsplitOn)r,   ÚCÚaWÚaHr  r  r  r.   r.   r/   Ú_cellListIter¼  s    
zTable._cellListIterc                 C   sØ   t |tƒr|}nÄt |tƒr |fnt|ƒ}d }g j}|  |||¡D ]f}t |tƒr‚|s^tddd�}| |¡ |j	dk r@|j
dk r@d }q@|rž|t||j	|j
d�ƒ q@||ƒ q@t|dƒrÊt|j|j|j|jƒ}n
t|jƒ}|S )Nr   )Ú_leftExtraIndentÚ_rightExtraIndentg:Œ0âŽyE>)Ú
leftIndentÚrightIndentr¾   )r]   r»   r   r   rT   r  r   Ú	CellFrameÚframeActionr  r  r   rM   r¼   Ú__self__r¾   r¿   rÀ   )r,   rv   r  r  r  Úframerm   r  r.   r.   r/   Ú_cellListProcessÅ  s(    





zTable._cellListProcessé@ c                 C   s  |sdS ||j  |j }||j |j }d}d}t| dd ƒ}	d }
t|tƒr||  ||¡}t| 	d¡ƒ|j
 d }t||ƒ|fS |D ]p}| |	||¡\}}| ¡ }| ¡ }|d ur¸| |¡ |d urÊ| |¡ t||ƒ}||| | 7 }|
d u r€|}
q€|||
 | fS )N©r   r   r   r  r  ç333333ó?)r=   r>   r?   r@   r5   r]   rf   Ú_elementWidthr_   Úsplitr;   rj   ÚwrapOnÚgetSpaceBeforeÚgetSpaceAfterrT   )r,   rk   rt   rs   ÚWÚHr  r  r�   r  Zsb0ZvwZvhrv   ÚsbÚsar.   r.   r/   Ú_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«   rv   ©r  r  r  r.   r/   r±   ü  r­   z)Table._listValueWidth.<locals>.<listcomp>)r5   rj   )r,   rk   r  r  r�   rt   r.   r3  r/   Ú_listValueWidth÷  s
    zTable._listValueWidthc                 C   s  t | dd ƒrd S |s t| j|ƒ}d |v �rÖt | dd ƒ}d }| jrN| j}| j}nd}i }i }|| ju rv|}|d d … }n|d d … }| j}	| j}
d |v �rš| d ¡}d}t	|	ƒD ]à\}}|| }|
| | }||f}| 
|d ¡}||v rð|sðd}n’|  ||¡}|d u �r0td| ¡ › d|› d|› d	|  d
¡› �ƒ‚||j|j 7 }|�r‚|d }|d }||k�r‚||f}t| 
||¡|ƒ||< d}||kr®|}q®|||< qŽ|�rÖzt|||ƒ W n$   td|  ¡ |||f ƒ Y n0 || _d}dg| _|D ]}|| }| j |¡ �qì|| _d| _d S )NÚ_width_calculated_oncer  r.   r   rb   ú	Flowable ú	 in cell(ú,ú) can't have auto width
r  r   z.
spanning problem in %s
W0=%r W=%r
spanCons=%rr   )r5   ry   rç   rë   Ú_colSpanCellsÚ_spanRangesrÖ   rè   Úindexrã   r�   r)  rˆ   rÓ   r=   r>   rj   rº   r   ræ   Ú_colpositionsrT   Ú_widthr5  )r,   Ú
availWidthr.  r  ÚsavedÚcolSpanCellsÚ
spanRangesr·   ÚW0rk   ÚSrr   rt   rp   ZVirv   rs   ÚjiÚspanr�   Úc0Úc1r`   Úwidthr.   r.   r/   Ú_calc_widthþ  sj    




*

zTable._calc_widthc                    sV  t |ttfƒrDd}|D ](}|  ||¡}|d u r4 d S t||ƒ}q|S t |tƒrÀ|jr”t|dƒrtt |jt	t
fƒrt|jS t|dƒr”t |jt	t
fƒr”|jS t|dƒrÀzt|dƒ|ƒd W S    Y n0 t|dƒ�rz | ¡ }t |t
t	fƒrê|W S W n t�y    Y n0 |d u �rdS zt|ƒ d¡}W n   Y dS 0 |j‰ |j‰t‡ ‡fdd„|D ƒƒS )	Nr   rI  Ú	drawWidthZ__styledWrap__ÚminWidthr  c                    s   g | ]}t |ˆ ˆƒ‘qS r.   r   r¯   ©ÚfontNameÚfontSizer.   r/   r±   `  r­   z'Table._elementWidth.<locals>.<listcomp>)r]   rN   r^   r)  rj   r   Ú_fixedWidthrM   rI  r£   ri   rK  r5   rL  ÚAttributeErrorrf   r*  r:   r;   )r,   rv   rs   rt   ÚeÚewr.   rM  r/   r)  =  s>    
  

zTable._elementWidthc           &      C   s`  | j }|st| j|ƒ}t|ƒ }}| j}d |v �ræ| j}t| dd ƒ}	d }
| jrh| j}| j	}| j
}| j}nd }}i }|	rˆ|	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&qì�nøt|tttfƒ�r”|  ||d ¡ }||< |d u �r’|  |¡�s’td|d  ¡ › d|› d|› d|  d¡› �ƒ‚|	�rÀ|j |j!|j"�p°d	|j!   |	_|	_|	_||v �rú|�sÒqìt#||d
 d  ||d   |�pödƒ}|  $||�p|  %|¡|¡\}}|	�r.|
\|	_|	_|	_||j& |j' }tj(�sÌ||k�rÌddl)m*} |d|d  d¡t+|ƒt+|ƒ||t+|ƒ|  d¡f ƒ‚n8|d u�r¨t,|ƒ�pªd -d¡}|j"�pÂd	|j! t|ƒ }||j.|j/ 7 }|�r|d }|d } || k�r|| f}!t#| |!|¡|ƒ||!< d}||krì|}qì|�r@t#|| |ƒn|||< |r¨|d }t0|d |… ƒ}"|"|kr¨|r¨t#dd„ | 1¡ D ƒƒ}#||#kr¨�q”q¨d |v�r¢|}|�ræzt2|||ƒ W n,   t3d|  ¡ |||||||f ƒ Y n0 g  | _4}d }"}$t5|d ddƒD ]4}| 6|"¡ || |$ }%|"|% }||" |% }$|}"�q| 6|"¡ |"| _7| 8¡  || _9d S )Nr  r.   r   r6  r7  r8  r9  r  r(  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.   r/   r¬   «  r­   z%Table._calc_height.<locals>.<genexpr>zK
spanning problem in %s hmax=%s lim=%s avail=%s x %s
H0=%r H=%r
spanCons=%rrd   ):rå   ry   rç   r_   rÊ   rö   r5   rë   Ú_rowSpanCellsr:  r;  r=  Ú	_fontnameÚ	_fontsizeÚ_leadingrä   r   Ú_FUZZr<  rÖ   rè   rã   rN   Úzipr�   r]   r^   r   r%  Ú_canGetWidthrˆ   rÓ   r:   r;   r<   rj   r2  r4  r=   r>   ÚallowTableBoundsErrorsÚreportlab.platypus.doctemplaterT  r   rf   r*  r@   r?   r¶   rÜ   rº   r   Ú_rowpositionsrœ   rT   Ú_heightr‰   Ú_hmax)&r,   ÚavailHeightr?  r/  r.  Úhmaxr¸   Ú	longTablerý   r  r@  ZrowSpanCellsrA  rB  ÚcolpositionsÚH0r·   r–   rp   rk   rD  Úhrr   rv   rs   rt   rE  rF  ZdWr�   rT  Úr0Úr1r`   ÚheightZmsrr  r”   r.   r.   r/   Ú_calc_heightb  s¨    




$..
(8
&


zTable._calc_heightc                 C   s�   d | j v sd| j v r(|  ¡ r(|  |¡}nd }| jrR|  ¡  d | jv rR| j||d� | jr`|  ¡  | j	|||d� | j||d� | jrŒ|  
¡  d S )Nre   )r.  )ræ   Ú_hasVariWidthElementsÚ_calcPreliminaryWidthsrë   Ú_calcSpanRangesrå   rJ  rì   Ú_calcNoSplitRangesrj  Ú_calcSpanRects)r,   r?  ra  r.  r.   r.   r/   Ú_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ä   rj   r<  )r,   r  r  ZrowNumr.   r.   r/   Ú_culpritå  s    
zTable._culpritc                 C   sX   |du r| j }tt| j |ƒƒD ]4}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[  )r,   ZupToRowr  Úcolr¤   r.   r.   r/   rk  ö  s    
zTable._hasVariWidthElementsc                 C   sD   t |ttfƒr,|D ]}|  |¡s dS qdS t |tƒr<|jS dS dS )z"Can we work out the width quickly?r   r   N)r]   rN   r^   r[  r   rP  )r,   ÚthingÚelemr.   r.   r/   r[    s    

zTable._canGetWidthc           $      C   sœ  t | jƒ}d}d}d}d}d}|D ]r}|du r8|d7 }q"|dkrR|d7 }|d7 }q"t|dƒrz|d7 }|t|dd… ƒ7 }q"t|ttfƒsŒJ ‚|| }q"g }	g }
g }i }d}| j}t| jƒD ]Î}|| }|du sâ|dksât|dƒ�r~d}d}t| j	ƒD ]Z}| j
| | }| j| | }|||ƒ�p"d}||j|j 7 }t||ƒ}|�oL|  |¡}qô|�rb|
 |¡ n
| |¡ |||< ||7 }qº|	 |¡ qºt|	ƒ| jk�rždS |||  }|dk�rp|t|ƒ d }||7 }|�r|dk �r|�pä|}d| t|ƒ }d}|t|ƒ | }nd }}g }d}|}| ¡ D ]”\}}|| }t|dƒ�r^t|dd… ƒ| | }n"|dk�rn|}n| �r||�p~d}||k�r”|||< n&| || |||f¡ ||7 }||7 }�q(|�rŒ|t|ƒ } | ¡  g }!|D ]\\}"}}}| | }#|#|k �r*|||< ||8 }||8 }|�r:|t|ƒ } n|! |||f¡ �qà|!D ]*\}}}| | }#|#|k�sbJ ‚|#||< �qBn| ¡ D ]\}}|||< �qx| | _| _|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.rb   r   Nr   re   rc   rd   éd   )rN   rç   rª   ri   r]   r£   r)  rœ   r×   rÕ   rÖ   rè   r=   r>   rj   r[  rT   r_   rµ   Úsortræ   )$r,   r?  r.  ZtotalDefinedZpercentDefinedZpercentTotalZnumberUndefinedZnumberGreedyUndefinedrt   ÚgivenZsizeableZ
unsizeableZminimumsZtotalMinimumÚelementWidthÚcolNoZsizÚfinalÚrowNor¤   rú   ÚnewÚ	remainingZdefinedPercentageÚ	undefinedZdefaultWeightZdefaultDesiredZdesiredWidthsZtotalDesiredZeffectiveRemainingZminimumÚdesiredZ
proportionZfinalSetZdisappointmentÚadjustedr.   r.   r/   rl    s¶    












ÿ
zTable._calcPreliminaryWidthsc                 C   s¾   t | jƒ}d}| j}t| jƒ}| j}| j}tt|ƒƒD ]‚}|| }|d u s\|dks\t|dƒr¬d}	|D ]<}
||
 | }||
 | }|||ƒ|j	 |j
 }t|	|ƒ}	qd||	7 }q6|t|ƒ7 }q6|S )Nr   re   rc   )rN   rç   r)  rœ   rÕ   rÖ   rè   r_   rª   r=   r>   rj   ri   )r,   r.  rI  rx  ZrowNosÚvaluesÚstylesry  rt   rz  r{  r¤   rú   r|  r.   r.   r/   rL  ¦  s,    

ÿÿ
zTable.minWidthc                 C   sÎ  i  | _ }t| jƒD ](}t| jƒD ]}||||f|||f< q"qg | _g | _| jj}| jj}| jD �]f\}}}|\}	}
|\}}|	dk rŽ|	| j }	|dk r || j }|
dk r²|
| j }
|dk rÄ|| j }|	|krÖ||	 }	}|
|krè||
 }
}|	|ksø|
|kr`|	|k�r:t|
|d ƒD ](}t|	|d ƒD ]}|||fƒ �q"�q|
|k�r|t|
|d ƒD ](}t|	|d ƒD ]}|||fƒ �qd�qRt|
|d ƒD ](}t|	|d ƒD ]}d|||f< �qœ�qŠ|	|
||f||	|
f< q`d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:  rU  rT   rë   )r,   rB  r`   r”   ÚcsaÚrsarU   ÚstartÚstopr—   Úy0r˜   Úy1r.   r.   r/   rm  ¼  s<    


zTable._calcSpanRangesc                 C   sÎ  i  | _ }t| jƒD ](}t| jƒD ]}||||f|||f< q"qg | _g | _| jj}| jj}| jD �]f\}}}|\}	}
|\}}|	dk rŽ|	| j }	|dk r || j }|
dk r²|
| j }
|dk rÄ|| j }|	|krÖ||	 }	}|
|krè||
 }
}|	|ksø|
|kr`|	|k�r:t|
|d ƒD ](}t|	|d ƒD ]}|||fƒ �q"�q|
|k�r|t|
|d ƒD ](}t|	|d ƒD ]}|||fƒ �qd�qRt|
|d ƒD ](}t|	|d ƒD ]}d|||f< �qœ�qŠ|	|
||f||	|
f< q`dS )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Õ   Z_colNoSplitCellsÚ_rowNoSplitCellsrT   rì   )r,   ZnosplitRangesr`   r”   rƒ  r„  rU   r…  r†  r—   r‡  r˜   rˆ  r.   r.   r/   rn  ë  s<    



zTable._calcNoSplitRangesc                 C   sà  t | di ƒ}t | ddƒ}| j}|r8|r0|| jks4|s8dS | j}| j}i }i }t|ƒd }| j ¡ D �]6\}	}
|
du r~d||	< qbzü|
\}}}}||kr˜W qb|	\}}|| dkrêt|d |d ƒD ]*}| 	|| g ¡ 
||d  || f¡ q¾|| dk�r8t|d |d ƒD ],}| 	|| g ¡ 
|| ||d  f¡ �q
|| }||d  }||d  | }|| | }||||f||	< W qb   td|  ¡ f ƒ Y qb0 qb||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)r5   rÊ   Z_hmax_spanRectsr=  r^  r_   r;  rµ   rœ   Ú
setdefaultrT   r   rÓ   r�  rv  r‹  Ú_vBlocksÚ_hBlocks)r,   Ú	spanRectsrb  rc  rd  ÚrowpositionsÚvBlocksr•   ZrlimÚcoordr¤   Zcol0Zrow0Úcol1Zrow1rr  r  r1   r`   r”   rI  ri  r.   r.   r/   ro    sJ    
(*zTable._calcSpanRectsc                 C   sð   t |tƒst|ƒ}| ¡ D ]€}t|ƒdkr�|dd… \}\}}\}}t |tƒs|t |tƒs|t |tƒrj|tvs|t |tƒr�|tvr�td|›dt›�ƒ‚|  |¡ q|j 	¡ D ]\}}	t
| ||	ƒ q¦dD ]*}
t| |
ƒsÀt||
ƒrÀt
| |
t||
ƒƒ qÀd S )Nr$   r   zbad style command zN illegal of invalid string coordinate
only rows may be strings with values in rH   )r]   r   rK   r_   rf   Ú_SPECIALROWSrˆ   Ú_addCommandrL   rµ   r4   rM   r5   )r,   ZtblstylerU   r  ÚscÚsrÚecÚerÚkrv   rS   r.   r.   r/   ró   O  s*    
ÿÿþþzTable.setStylec                 C   sx   |dk r|| j  }|dk r$|| j  }|dk r6|| j }|dk rH|| 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Õ   rj   r�   )r,   r–  r˜  r—  r™  r.   r.   r/   ÚnormCellRangea  s
    zTable.normCellRangec                 C   s|  |d dv r| j  |¡ �n\|d dkr8| j |¡ �n@|d dkrT| j |¡ �n$t|ƒ�r¬t|ƒ}t|ƒdk r€td|›�ƒ‚t|ƒdk r˜| d¡ nt|d t	dd	d
|ƒ}||d< t|ƒdk rÌ| d ¡ t|ƒdk rä| d¡ nt|d t
dd	d|ƒ}||d< t|ƒdk �r| d¡ n,|d }|d u �r:d}||d< |dk�sHJ ‚t|ƒdk �rf| |d ¡ n"|d }|d u �rˆ|d }||d< t|ƒdk�sšJ ‚| j t|ƒ¡ nÌ|d dk�rÊ|  |d ¡ n®|d d… |dd …  \}\}}\}	}
}|tv �r|d dk�r| jn| j |¡ nZ|  ||	||
¡\}}	}}
|	d7 }	t||
d ƒD ]*}t||	ƒD ]}t| j||||ƒ �qZ�qLd S )Nr   )Ú
BACKGROUNDÚROWBACKGROUNDSÚCOLBACKGROUNDSZSPANZNOSPLITé   zbad line command r#   r   r   Úcapé   é   rW   é	   r!   r$   ZROUNDEDCORNERSrs   )ré   rT   rë   rì   Ú_isLineCommandrN   r_   rˆ   r§   ÚLINECAPSÚ	LINEJOINSrê   r^   rô   r”  rí   rî   r›  rœ   Ú_setCellStylerè   )r,   rU   r   rW   Z	lineCountÚspaceÚopr–  r—  r˜  r™  r�  rp   rr   r.   r.   r/   r•  i  sP    


(
"zTable._addCommandc                    sŒ  d\}}}| j }| ¡  | j‰ˆr`ˆj}g |d d …< |j‰|j‰ ‡ ‡‡‡‡‡‡‡fdd„}||_�z| jD ]ð\
}\}}	\}
}‰‰‰‰‰}}t|	tƒrž|	t	v ržqjˆd kr¼|ˆkr¼| 
ˆ¡ ˆ}ˆd u sÌˆg krâ|d urø| ¡  d }nˆ|krø| ˆ¡ ˆ}ˆd u�r|ˆk�r| ˆ¡ ˆ}|  ||
|	|¡\}}
}	}t| t |d¡ƒ||	f|
|fˆˆ||ƒ qjW ˆ�rzˆ|_nˆ�rxˆ|_0 | ¡  d | _d S )N)NNNc                    sh   | |kr| ˆj ks8| ˆjks8||krV|ˆjks8|ˆjkrVˆ t| |||ˆˆˆˆˆƒ	ƒ nˆ| |||ƒ d S r)   )r˜   r—   rˆ  r‡  rÃ   )ÚxsÚysÚxeÚye©ZaSLr   rB   ÚdashrW   Z	ocanvlineZrrdÚweightr.   r/   Ú
rcCanvLine±  s    ÿÿÿýýýz$Table._drawLines.<locals>.rcCanvLineÚ_drawUnknown)r  Ú	saveStateÚ_roundingRectDefÚSLÚlinerT   rê   r]   r   r”  Ú
setLineCapÚsetDashÚsetLineJoinr›  r5   Ú
_LineOpMapr�   ÚrestoreStateÚ	_curcolor)r,   ÚccapÚcdashÚcjoinr  rµ  r±  r©  r–  r—  r˜  r™  rž   r¨  r.   r®  r/   Ú
_drawLines¦  sF    
	&


,ÿzTable._drawLinesc           	      C   s*   dd l }| d¡jd }td|›�ƒ‚d S )Nr   r   r©  zUnknown line command )ÚsysÚ	_getframeÚf_localsrˆ   )	r,   r…  Úendr°  rB   rž   r¨  rÁ  r©  r.   r.   r/   r²  Ô  s    zTable._drawUnknownc                 C   s,   |   ||||||¡ |  ||||||¡ d S r)   )Ú_drawBoxÚ_drawInnerGrid)r,   r…  rÄ  r°  rB   rž   r¨  r.   r.   r/   Ú	_drawGridÚ  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°  rB   rž   r¨  r–  r—  r˜  r™  r.   r.   r/   rÅ  Þ  s    $zTable._drawBoxc                 C   sT   |\}}|\}	}
|   ||d f|	|
f||||¡ |  |d |f|	|
f||||¡ d S r\   rÈ  rË  r.   r.   r/   rÆ  æ  s     zTable._drawInnerGridc                 C   sD   |r || j kr | j |¡ || _ |r@|| jkr@| j |¡ || _d S r)   )r¼  r  ÚsetStrokeColorÚ
_curweightÚsetLineWidth)r,   r°  rB   r.   r.   r/   Ú	_prepLineì  s    zTable._prepLinec                 C   sÖ   |\}}|\}	}
| j ||	d … }| j||
d … }t|ƒdksLt|ƒdk rPd S |  ||¡ |d }|d }t| di ƒ}| jj}|dkr¤|D ]}t|||||ƒ qŒn.||| |fdd„}|D ]}t|||||ƒ q¼d S )Nr   r   r   rd   rŽ  c                 S   s   t | |||||ƒS r)   ©r¡   ©r—   r‡  r˜   rˆ  r‘   r�   rž   r.   r.   r/   Ú<lambda>  r­   z#Table._drawHLines.<locals>.<lambda>)r=  r^  r_   rÏ  r5   r  r¶  r›   )r,   r…  rÄ  r°  rB   rž   r¨  r–  r—  r˜  r™  r“   Úrpr’   r•   r‘   r”   Úlfr.   r.   r/   rÉ  ô  s     zTable._drawHLinesc                 C   s8   |\}}|\}	}
|   ||d f|	|
d f||||¡ d S r\   )rÉ  rË  r.   r.   r/   Ú_drawHLinesB  s    zTable._drawHLinesBc                 C   sÞ   |\}}|\}	}
| j ||
d … }| j||	d … }t|ƒdksLt|ƒdk rPd S |  ||¡ |d }|d }t| di ƒ}| jjfdd„}|dkr¬|D ]}t|||||ƒ q”n.||| |fdd„}|D ]}t|||||ƒ qÄd S )	Nr   r   r   rd   r�  c                 S   s   ||| ||ƒS r)   r.   )r‡  r—   rˆ  r˜   Ú_liner.   r.   r/   rÒ    r­   z#Table._drawVLines.<locals>.<lambda>c                 S   s   t | |||||ƒS r)   rÐ  rÑ  r.   r.   r/   rÒ    r­   )r^  r=  r_   rÏ  r5   r  r¶  r›   )r,   r…  rÄ  r°  rB   rž   r¨  r–  r—  r˜  r™  ZerpÚcpZsrpr‘  r‘   r`   rÔ  r.   r.   r/   rÊ    s     zTable._drawVLinesc                 C   s8   |\}}|\}	}
|   |d |f|	d |
f||||¡ d S r\   )rÊ  rË  r.   r.   r/   Ú_drawVLinesA  s    zTable._drawVLinesAc                 C   s   |   ||¡ || _| j| jfS r)   )rp  r?  r>  r_  )r,   r?  ra  r.   r.   r/   Ú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,   ÚTZbyRowr.   r.   r/   ÚonSplit)  s    zTable.onSplitFc                 C   s2  | j }|D �] }|dd… \\}}	\}
}|	tv rÒ|	d dkr¬|  |¡ |	dkr
|r
|dk rb||7 }|
dk rr|
|7 }
|  |d f||d f|
|d ff t|dd … ƒ ¡ q
|s²q
|  |¡ |	dkrÆq
|d  }	}|	dk râ|	|7 }	|	|krìq
||krü|d }|  |d f||	f|
|ff t|dd … ƒ ¡ q
d S )Nr   r$   r   rp   rÆ   rÄ   )r×   r”  r•  r^   )r,   ru   rQ   Znr0ÚdoInRowSplitÚ	_srflModer  r  r–  r—  r˜  r™  r.   r.   r/   Ú_cr_00  s&    

8


zTable._cr_0c              
   C   s<  t |ƒ}t|ƒ}| j}	|D �]¢}
|
dd… \\}}\}}|tv rÖ|d dkr´|  |
¡ |dkr|r|dk rr||	7 }|dk r‚||	7 }|  |
d f||f||ff t|
dd … ƒ ¡ q|sºq|  |
¡ |dkrÎq| }}|dk ræ||7 }|dk rö||7 }tt||d ƒƒ|@ }|�r^t|ƒ}|  |
d f|| t	|ƒ¡f|| t
|ƒ¡ff t|
dd … ƒ ¡ ||k �rjqt
|| dƒ| }t
|| dƒ| }|  |
d f||f||ff t|
dd … ƒ ¡ q| j}|�r8|\}}|dk �ræ||7 }|dk �rø||7 }||k �r
d | _n.t
|| dƒ| }t
|| dƒ| }||f| _d S ©Nr   r$   r   rp   rÇ   rÅ   )r_   Úsetr×   r”  r•  r^   rœ   rN   r<  r�   rj   rõ   )r,   ru   ZnRowsrï   rQ   rÜ  rÝ  ZnrrZrrSr  r  r–  r—  r˜  r™  ZcSr.   r.   r/   Ú_cr_1_1G  sJ    

0

D2
zTable._cr_1_1c           
      C   s>  |D �]2}|dd… \\}}\}}	|t v rÀ|d dkrž|  |¡ |dkr|r|dk r\|t7 }|dk rl|t7 }|  |d f|df|dff t|dd … ƒ ¡ q|s¤q|  |¡ |dkr¸q| }}	|	dkrÒ|	|k rÒq|dkræ||k ræd}||krö||8 }|	|k�r|	|8 }	|  |d f||f||	ff t|dd … ƒ ¡ qd S rß  )r”  r•  r  r^   )
r,   ru   rQ   rÜ  rÝ  r  r–  r—  r˜  r™  r.   r.   r/   Ú_cr_1_0p  s&    

0

zTable._cr_1_0c                 C   sj  ||j  }||j |  }t|ttfƒ�rHg }g }	d}
|  |||¡d }|jdkr^|| d }nd}|D ]Ð}|
r˜|j|krŽ|	 |¡ ||j8 }ng   S qf||j |kr¼| |¡ ||j7 }qf| ||| ¡}|rî| |d ¡ |	 |d ¡ nD|sþ|jdk�r*|j|k�r |	 |¡ ||j8 }ng   S ng   S d}
qft|ƒt|	ƒfS t|t	ƒ�rf| d¡}d	|j
 }|j�pr|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 nt|ƒdk �ròg S |jdk�r|| }n2|jdk�r&t|ƒ||  }n|| | d|  }t|ƒ}d |d |… ¡d ||d … ¡fS dS )NFr   rÉ   r   r   ÚTOPTr  r(  rÎ   r(   )rÎ   rÎ   )r?   r]   r^   rN   r2  rE   ri  rT   r*  rf   r;   r<   r_   r£   rW   )r,   r¤   rú   Ú	oldHeightÚ	newHeightrI  Zheight0Zheight1ZnewCellContentZpostponedContentr*  Z
cellHeightÚ
usedHeightÚflowableÚsplitsÚrowsÚ
lineHeightZcontentHeightÚ
splitPointr.   r.   r/   Ú
_splitCell…  sj    












$zTable._splitCellc                 C   sž  | j }| j}g }| jD �]€\
}\}}\}	}
}}}}}}}t|tƒrÞ|tv rÞ| |||f|	|f|||||||f
¡ |dkr†|d  }}
nX|dkr˜|}|}
nF|dk r¨||7 }|	dk r¸|	|7 }	|||f|	|f|||||||f
|d< q|dk rî||7 }|	dk rþ|	|7 }	|dk �r||7 }|
dk �r"|
|7 }
|dv �rî||k �r@|
|k�sP|�rÆ||k�rÆ| d||f|	|f|||||||f
¡ | d||f||
f|||||||f
¡ | d	|	|f|	|
f|||||||f
¡ | d
||
f|	|
f|||||||f
¡ |dk�rì|�rJ| d||f|	|d f|||||||f
¡ | d||f|	|
f|||||||f
¡ nz| d
||d f|	|d f|||||||f
¡ | d||f|	|f|||||||f
¡ | d||f|	|
f|||||||f
¡ n&| |||f|	|
f|||||||f
¡ q|dk�rŽ||k �rf|
|k�rf|�sf| 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�rr||k�rJ|
|k�rJ| d
||d f|	|d f|||||||f
¡ | |||f|	|
f|||||||f
¡ q| |||f|	|
f|||||||f
¡ q|S )NrÅ   r   rÄ   r   rd   )ÚBOXÚOUTLINEÚGRIDÚ	LINEABOVEÚ
LINEBEFOREÚ	LINEAFTERÚ	LINEBELOWrï  Ú	INNERGRID)rÕ   r×   rê   r]   r   r”  rT   )r,   ru   rÜ  r   r  ÚAr©  r–  r—  r˜  r™  r°  rB   r   r¯  rW   rž   r¨  r.   r.   r/   Ú_splitLineCmdsß  s`    (&$
$&&&&
*(.&((
.&(
&(
.((zTable._splitLineCmdsc                 C   sæ   g j }|D ]Ô}|dd… \}\}}\}	}
|tv s8|
tv rB||ƒ q
|
dk rR|
|7 }
|dk rb||7 }|
|krt|
d7 }
n(|
|krœ||k s”||krœ|dkrœ|
d7 }
||ks´||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   rð  ró  N)rT   r”  r#  )r,   ru   rQ   ZoldrowcountZ	stretchedr  rU   r–  r—  r˜  r™  r.   r.   r/   Ú_stretchCommands  s&    
$zTable._stretchCommandsc           ^         sl  | j ||d�}| j}t|tƒr"|n
t|ƒd }|r:||k sF|sJ||krJg S t| jƒ}||krb| gS | j}|rÈ|\}}|dk r„||7 }|dk r”||7 }||kr¼| j|t	| j||… ƒ |d�S ||k rÈg S | j
}	|sà| ‰ | j‰�nddd„ | jD ƒ‰| j�r|| j| k �rg S t	| jd |… ƒ}
| j| }| j| }| j}| j| }d}d}d}tt|||ƒƒD ]Ü\}\}}}| j�r�| j ||fd ¡d u �r��q^t|ttfƒ�rÒ|  |||¡\}}||j|j 7 }||k�r8|}nft|tƒ�r^| d¡}d|j }|t|ƒ |j |j }t|||j ƒ}t|||j ƒ}||k�r^|}�q^|| |k�sX|||
 k�
rX| j�sdg S tƒ }t| jƒD ]š}||f}|| jv �rt| j ||fd ¡d u �rt| j  ¡ D ]\\}}|d u �rÄ�q®|\}}}} ||k�r®||k�r®||k�r®|| k�r®| !|¡  �qt�q®�qt|�sg S g }!| jD ]|\}"\}#}$\}%}&|#dk �rJ|#| j7 }#|%dk �r^|%| j7 }%|$dk �rr|$| j"7 }$|&dk �r†|&| j"7 }&|! #|"|#|$f|%|&ff¡ �q$d	d„ | jD ƒ}'| j$}(|D �]X}| j| \})}*}+},| j%| }-|-d
 }.t	| j|*|… ƒ}/|'|* |) }0|  &| j|* |) |0|.|/|¡}1|1�s.g   S |1d ˆ|* |)< |1d ˆ| |)< g }2|!D ]š\}"}3}4|)|*f|3k�rÞ|+|,f|4k�rÞ|d |*k�s”|)|+k�r°|2 #|"|)|*f|+|d ff¡ ||,k �sÄ|)|+k�rî|2 #|"|)|f|+|,ff¡ n|2 #|"|3|4f¡ �qV|2}!g }5|(D ]p\}"}3}4}6|3|)|*fk�rZ|5 #|"|3|4d |d f|6f¡ |5 #|"|3d |f|4d |f|6f¡ n|5 #|"|3|4|6f¡ �qþ|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 �rö|&ˆ j"7 }&|%dk �r
|%ˆ j7 }%|=dk�sP|=dk�r2|$|k�sP|&|k�sP|=dk�r||$|k �sP|&|k�r||=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 �rŠ|; #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
¡ n|; #|<¡ �q¼�q¼|D �]®}g }D|;D �]˜}<|<\
}=\}#}$\}%}&}>}6}?}@}A}B}C| j| \})}*}+},|=dk�rö|&|*k�rö|$|,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�
r8|D #|=|#|Ff|%|&f|>|6|?|@|A|B|Cf
¡ n
|D #|<¡ �q |D};�q’|;ˆ _7ˆ j|dd�S t8||
 || ƒ}G|Gd | j+k �
r~g S | j9|G }H|H| j+k �
r˜g S g }Id}Jg }Kd}Lg }Mt|||ƒD �]>\}}}|  &||||G|¡}8|8�
säg   S | '¡ }7|j(dk�rx|8d �r|8d �rd|_(d|7_(n^|  |8d �p.|8d ||¡d }9||9 d }:|8d �r`| j|:7  _n|8d �rx|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¡ �
q¸t8|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 ƒd�‰ |  ;|| j7|¡ˆ _7|  ;|| j$|¡ˆ _$|  ;|| j|¡ˆ _|  ;|| j/|¡ˆ _/|  ;|| j0|¡ˆ _0|  ;|| j1|¡ˆ _1|d }| j,}S|S�rXt<|Sƒ}Sˆ j.}T|T�rlˆ j‰nˆ j=‰t-| dd ƒ}Ut-| dd ƒ}V| j)ˆd |… ˆ jˆd |… ||	| j*| j+dˆ jd |… |St-| dd ƒ|T|U�rà|Ud d… nd |Vd�}Iˆ j"}Wˆ j}Xˆ j>||d�}Y|I ?||Y|W|¡ |Ij?|ˆ j$|W|dd� |I ?|ˆ j|W|¡ |I ?|ˆ j/|W|¡ ˆ j0D ]v}Z|I @|Z¡ |Zd d dk�rx�qT|Zdd
… \\}#}$\}%}&|I @|Zd f|#|d f|%|d ff t|Zd
d … ƒ ¡ �qT|S�rÚt<|Sƒ}S|�rt|tƒ�r ˆd |… }[ˆd |… }\ˆ jd |… }]tt|ƒƒ}nBt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|Vd$�}K|K B||W||Y|¡ |KjB||W|ˆ j$|dd� |K B||W|ˆ j|¡ |K B||W|ˆ j/|¡ nª| j)ˆ|d … ˆ jˆ|d … ||	| j*| j+dˆ j|d … |St-| d#d ƒ|T|U�rrddg|Udd …  nd |Vd$�}K|K C||Y|¡ |KjC|ˆ j$|dd� |K C|ˆ j|¡ |K C|ˆ j/|¡ ˆ j0D ]n}Z|K @|Z¡ |Zd d d%k�rè�qÄ|Zdd
… \\}#}$\}%}&|K @|Zd f|#df|%dff t|Zd
d … ƒ ¡ �qÄˆ jD |I_D|K_Dˆ jE |I_E|K_E|  F|I¡ |  F|K¡ |I|KgS )&N)ÚignoreSpansr   r   ©rÜ  c                 S   s   g | ]}|d d … ‘qS r)   r.   ©r«   r1   r.   r.   r/   r±   n  r­   z$Table._splitRows.<locals>.<listcomp>r  r(  c                 S   s   g | ]}|d d … ‘qS r)   r.   rú  r.   r.   r/   r±   Ã  r­   r$   rÉ   r(   rã  r   rI   Ú_cornerRadiirÔ   )rø   rù   rï   rð   rñ   rò   rû   rü   rÐ   rI   rÙ   rþ   rÿ   rí  rï  rô  )rï  rô  ró  )rï  rí  rð  rñ  rò  FT)rÝ  rÅ   c                    s   g | ]}ˆ | ‘qS r.   r.   ©r«   rp   )r÷   r.   r/   r±   ö  r­   c                    s   g | ]}ˆ | ‘qS r.   r.   rü  )ÚsplitHr.   r/   r±   ÷  r­   c                    s   g | ]}ˆ j | ‘qS r.   )rè   rü  )rÚ  r.   r/   r±   ø  r­   rJ   )rø   rù   rï   rð   rñ   rò   rû   rü   rÐ   rJ   rÙ   rþ   rÿ   rÄ   )GÚ!_getFirstPossibleSplitRowPositionrï   r]   r£   rj   r_   rä   rõ   Ú
_splitRowsr¶   rð   rÖ   rö   rè   ræ   rã   rZ  rë   r;  r�   r^   rN   r2  r?   r@   rf   r*  r;   rà  rœ   r×   rU  rµ   rV   rÕ   rT   ré   r‹  rì  r+   rE   rÚ   rñ   rò   rÐ   r5   rÊ   rì   rí   rî   r=  r^  rn  rm  ro  rê   r�   r_  Úinsertr÷  r   rå   rö  rÞ  r•  r´   rá  râ  rÑ   rÒ   rÛ  )^r,   ra  rÜ  ru   rï   Z	maxrepeatr¸   ÚloÚhirð   ZusedHeightsZ
cellvaluesrü   Z
cellWidthsZcurRowHeightZminSplitZmaxSplitÚ	maxHeightÚcolumnr¤   rú   rI  rt   ri  ré  rê  Z
splitCellsr  rF  Z	start_colZ	start_rowZend_colZend_rowZspanCmdsrU   r–  r—  r˜  r™  ZnewCellStylesZ
bkgrndcmdsZspan_scZspan_srZspan_ecZspan_erZspanRecträ  rå  ZoldStyleÚresZnewSpanCmdsr…  rÄ  ZnewbkgrndcmdsrB   ZnewStylerv   rf  ÚmarginZnewlinecmdsZlinecmdr©  r°  r   r¯  rW   rž   r¨  Z
moddedcmdsZstartrowZendrowrë  r}  r}   ZR0Heightr~   ZR1HeightZR1StylesÚh0Úh1ræ  ZnewRowHeightZnewRowHeightsrÐ   Zltorþ   rÿ   r   r  rê   r  ZiRowsZiRowHZiCSr.   )rÚ  r÷   rý  r/   rÿ  N  sÂ   
 



 




ÿÿ

ÿþý










ÿ
ÿ$ 





ø 



(ÿÿÿ
*&.
&&&(


 ÿÿÿþþ


ÿ
.ÿ
.ÿ
ÿ
 

"
"

(



ø
ù


<
ö
ø

4

zTable._splitRowsc           
      C   sp   |D ]f}|| }|d kr|d |d  }}||krt ||ƒ}t||ƒ}|d }	|	|krXqd | |	< |	d7 }	qNqd S )Nr   r$   )r�   rj   )
Ú
impossibleÚcellsÚrangesÚxyrn   rˆ  Úy2ZyminZymaxr”   r.   r.   r/   Ú_getRowImpossible&  s    


zTable._getRowImpossiblec                 C   s€   i }| j r |s |  || j| j¡ | jr8|  || j| j¡ d}d}d}| jD ]0}|| |kr^ q|||vrj|}|| }|d }qJ|S )Nr   r   )rë   r  rU  r;  rì   rŠ  r‰  rä   )r,   ra  rø  r	  rf  ru   Zsplit_atr  r.   r.   r/   rþ  5  s     


z'Table._getFirstPossibleSplitRowPositionc                 C   s`   |   ||¡ | js| jr\tjs,| j|kr,g S | j|| j d�}|rF|S | jr\| j|| jd�S g S )Nrù  )rp  rñ   rò   r   r\  r>  rÿ  )r,   r?  ra  r6   r.   r.   r/   r*  I  s    zTable.splitc              	      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 }
|	| }|
| }t|||||	|
|g ƒˆ_ ˆj	 
¡ }| |||||¡ ˆj	}| d¡ |j|dd� | d	¡ d S )
Nrû  c                    s0   g | ](\}\}}t ˆj| ˆj| ˆ | ƒ‘qS r.   )r�   rä   ræ   )r«   rš  rp   rr   ©rþ   r,   r.   r/   r±   c  s   
ÿz1Table._makeRoundedCornersClip.<locals>.<listcomp>r'  r   r   z%begin table rect clip©Ústrokez%end table rect clip)r´  r5   rj   rÕ   r×   rã   r^  r=  ÚRoundingRectDefr  Ú	beginPathÚ	roundRectÚ
addLiteralÚclipPath)r,   r–   r   r  ÚarrÓ  r×  r—   r‡  r˜   rˆ  rt   rf  r{   r  r.   r  r/   Ú_makeRoundedCornersClip]  s8    

üÿ

zTable._makeRoundedCornersClipc              
   C   sž  | j \}}}}}}}}|sd S | j}	|	 ¡  d  }
 } } | _| _|	j}| j}|D �]:\	}}}}}}}}}|d krŠ|
|krŠ|	 |¡ |}
|d u sš|g kr°|d urÆ|	 ¡  d }n||krÆ|	 |¡ |}|d urä||krä|	 	|¡ |}|  
||¡ ||k�rÔ||k�s||k �r|||||ƒ qT||k�r>d}|d }|d }nd}|d }|d }||| k�r~||| k�r~|||||ƒ qT||| k �r¤td|||f|ddd	�nd }||| k�rÎtd
|||f|ddd	�nd }nØ||k�sè||k �rø|||||ƒ qT||k�rd}|d }|d }nd
}|d }|d }||| k�rX||| k�rX|||||ƒ qT||| k �r~t|d||f|ddd	�nd }||| k�r¨t|d||f|ddd	�nd }|	 ¡ }|�r|j|d Ž  | |d d |d d |d d |d d |d d |d d ¡ n| ||¡ |�s.| ||¡ nR|j|d Ž  | |d d |d d |d d |d d |d d |d d ¡ |	j|ddd� qT|	 ¡  d S )Nr„   r   r$   r…   r   r   r†   r�   )r|   rŒ   rƒ   r‡   ©r  Úfill)r´  r  r³  rÍ  r¼  r¶  rû  r·  r¸  r¹  rÏ  rŽ   r  ZmoveToZcurveToZlineToZdrawPathr»  )r,   r—   r‡  rt   rf  r˜   rˆ  r  rµ  r  r½  r¾  r¿  r¶  rþ   rª  r«  r¬  r­  r°  rB   r   r¯  rW   r‹   rg  rh  rG  rH  rŠ   r{   r.   r.   r/   Ú_restoreRoundingObscuredLines{  s€    





*,

**FDz#Table._restoreRoundingObscuredLinesc                 C   s2  | j }| ¡  d  | _ | _| _t| dƒ}|rB|| dƒ || dƒ |  ¡  |  ¡  |r`|| dƒ | j�s¦|�r*t	t
| j| j| jdd … | jƒƒD ]–\}\}}}}|| d|ƒ t	t
||| jd d… | jƒƒD ]P\}\}	}
}}|| d|||	|
||f||fƒ |  |	|
||f||f¡ || d	ƒ qÊ|| d
ƒ q�nxt
| j| j| jdd … | jƒD ]X\}}}}t	t
||| jd d… | jƒƒD ]*\}\}	}
}}|  |	|
||f||f¡ �qr�qH�n>|�rht| jƒD ]®}|| d|ƒ t| jƒD ]†}| j||f }|d u�rÐ|\}}}}| j| | }	| j| | }
|| d|||	|
||f||fƒ |  |	|
||f||f¡ || d	ƒ �qÐ|| d
ƒ �q¶n|t| jƒD ]p}t| jƒD ]^}| j||f }|d u�r€|\}}}}| j| | }	| j| | }
|  |	|
||f||f¡ �q€�qr|�rô|| dƒ |  ¡  |�r|| dƒ || dƒ | ¡  | j�r.|  ¡  d S )NrÔ   Ú
startTableÚstartBGÚendBGr   ÚstartRowrd   Ú	startCellÚendCellÚendRowÚ
startLinesÚendLinesÚendTable)r  r³  rÍ  r¼  Ú_curcellstyler5   r  Ú_drawBkgrndrë   rã   rZ  rÖ   rè   r^  rä   r=  ræ   Ú	_drawCellrœ   rÕ   r×   r‹  rÀ  r»  r´  r  )r,   r  rÿ   r{  r  ZrowstyleÚrowposÚ	rowheightry  ÚcellvalÚ	cellstyleÚcolposÚcolwidthZcellRectr`   r”   rI  ri  r.   r.   r/   ÚdrawÈ  sf    


2.*.$

 

z
Table.drawc           +   
   C   s  | j }| j}| j}| j}| j}| j}| j}t| dd ƒ}| jD �]Î\}	\}
}\}}}|t	v r\q<|
dk rl|
| }
|dk r||| }|dk rŒ|| }|dk rœ|| }||
 }|| }|t
|d |ƒ }|t
|d |ƒ }|| ||  }}t|dƒ�r|| |||||ƒ q<|	dk�rŠtttj|ƒƒ}t|ƒ}|| d }t|ƒD ]N}|||  }|||  }|�r|| |¡ |j|||| ddd� || }�q8q<|	dk�rtttj|ƒƒ}t|ƒ}||
 d }t|ƒD ]L}|||  }||
|  }|�r| |¡ |j||||ddd� || }�qÀq<|�r¤t|ttfƒ�r¤|d dv �r¤||
k�rn||k�rn|�rn| |
|f¡}|�rn|\}}}}|d |dd …  }}| ¡  | ¡ }| ||||¡ |j|dd	� |d
k�rÚ|j|||| ||dd� �nÀ|dk�r.||d  }|j|||||dd� |j|||| ||d d d… dd� �nl|dk�r‚||d  }|j|||||dd� |j||||| |d d d… dd� �n|dk�rª|j||||| |dd� �nð|dk�rxdt|ƒ  k�rÐdk�r`n nŒ|d d… \\} }!\}"}#|| |  } ||"|  }"||!|  }!||#|  }#|d }$|d }%t|ƒdk�rB|d nd }&|j| |!|"|#|%|&|$d� ntdt›d|›�ƒ‚�n"|dk�ršdt|ƒ  k�rždk�r†n nä|d \}'}(||'|  }'||(|  }(|d \})}*|*dk�râ|}*nZ|*dk�rò|}*nJ|*dk�rt
||ƒ}*n4|*dk�rt||ƒ}*ntd|d ›d t›d|›�ƒ‚|)|*9 })|d }$|d }%t|ƒdk�rj|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  r2  F)Úextendr4  ç       @rd   r3  r1  r5  é   rŸ  r   r$   )Ú	positionsr7  zWrong length for z arguments r6  rI  ri  r�   rj   zBad radius, z, for ) rÕ   r×   r  r=  r^  rä   ræ   r5   ré   r”  r�   rM   rN   rX   r   ÚtoColorOrNoner_   rœ   ÚsetFillColorÚrectr]   r^   r�   r³  r  r  ZlinearGradientrˆ   r©  rj   ZradialGradientr»  )+r,   r   r  r  rd  r�  rù   rø   r�  rU   r–  r—  r˜  r™  Úargr—   r‡  r˜   rˆ  rt   rf  Z
colorCyclerž   ZrowCountrp   rB   ZcolCountZxywhZarg0ÚpÚxhZyhZax0Zay0Zax1Zay1r7  r  r{   ZxcZycrn   Úrefr.   r.   r/   r'  	  sÚ    





ÿ

(
(

 
 






zTable._drawBkgrndc                 C   sâ  |\}}|\}}| j |urŠ| j }	|	d u s4|j|	jkrB| j |j¡ |	d u sn|j|	jksn|j|	jksn|j|	jkr„| j |j|j|j¡ || _ |j}
|j	}t
|tttfƒ�rt
|ttfƒs¼|f}g }g }| j||||||d�\}}|dkrö|| |j }n6|dk�r||j | }n|||j |j | d  }|�rB||d  ¡ 7 }t|||ƒD ]°\}}}|
dk�rn||j }n^|
dk�rŒ|| |j | }n@|
dv �r´|||j |j | d  }ntd	|
›d
t|ƒ› �ƒ‚|| ¡ 8 }||8 }| | j||¡ || ¡ 8 }�qN�n€|
dk�r"| jj}||j }n~|
dv �rN| jj}|||j |j d  }nR|
dk�rp| jj}|| |j }n0|
dk�r’| jj}|| |j }ntd	|
›�ƒ‚t|ƒ d¡}t|ƒ}|j}|j}|dk�rä||j ||  | }n\|dk�r|| |j | }n>|dk�r2||j| |j ||  d  | }ntd|›�ƒ‚|D ]}||||ƒ ||8 }�qDt |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 )N)r.  r/  r  rã  r(   r8  r   r&   ÚRIGHT)ÚCENTRErÈ   zInvalid justification z for rz   ÚDECIMALr  rÉ   zBad valign: ÚonDrawr   )ÚrelativerÎ   )ZRectrF  )'r&  rB   r  r<  r<   r:   r;   ÚsetFontrC   rE   r]   r^   rN   r   r2  r?   r@   r,  rZ  r=   r>   rˆ   ÚtypeÚdrawOnr-  Ú
drawStringÚdrawCentredStringÚdrawRightStringÚdrawAlignedStringrf   r*  r_   r5   r|   ÚlabelrF   ÚlinkURLrG   ÚlinkRect)r,   r+  r,  ÚposÚsizer-  r)  r.  r*  ÚcurZjustrE   r.  r/  rt   rf  r”   rv   r`   r/  Úvalsru   r<   r;   rE  r.   r.   r/   r(  ’	  s„    
,








&$zTable._drawCellc                 C   sF   t |ƒr4|sd nt|ƒtdt|ƒ dƒdg  | _ntd|›�ƒ‚d S )Nr9  r   z@cornerRadii should be None or a list/tuple of numeric radii
not )r   rN   rj   r_   rû  rˆ   )r,   rþ   r.   r.   r/   rô   â	  s    ,zTable._setCornerRadii)r  )NNr&  )r&  r&  )N)NN)N)r   )F)F)F)r   )r   )r   ):r7   r8   r9   r   r0   r[   rá   rÓ   r  r%  r2  r4  rJ  r)  rj  rp  rq  rk  r[  rl  rL  rm  rn  ro  ró   r›  r•  rÀ  r²  rÇ  rÅ  rÆ  rÏ  rÉ  rÕ  rÊ  rØ  rÙ  rÛ  rÞ  rá  râ  rì  rö  r÷  rÿ  r  Ústaticmethodrþ  r*  r   rY  r  r  r/  r'  r(  rô   r.   r.   r.   r/   r     s~   
û
p

(	


?%
b!
 /04=.


)
Z
<3
   [
M; Pr   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 )r   z+Henning von Bargen's changes will be activer   N)r7   r8   r9   Ú__doc__rÊ   r.   r.   r.   r/   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 )r]   r   rˆ   rY   r5   )r,   rÚ  rU   ÚargsÚmethr.   r.   r/   r0  ù	  s    zTableRenderCB.__call__c                 C   s   t dƒ‚d S )Nr  ©ÚNotImplementedError©r,   rÚ  r.   r.   r/   r  þ	  s    zTableRenderCB.startTablec                 C   s   t dƒ‚d S )Nr  rZ  r\  r.   r.   r/   r   
  s    zTableRenderCB.startBGc                 C   s   t dƒ‚d S )Nr  rZ  r\  r.   r.   r/   r  
  s    zTableRenderCB.endBGc                 C   s   t dƒ‚d S )Nr  rZ  )r,   rÚ  r{  r.   r.   r/   r  
  s    zTableRenderCB.startRowc                 C   s   t dƒ‚d S )Nr   rZ  )r,   rÚ  r{  ry  r+  r,  rQ  rR  r.   r.   r/   r   
  s    zTableRenderCB.startCellc                 C   s   t dƒ‚d S )Nr!  rZ  r\  r.   r.   r/   r!  
  s    zTableRenderCB.endCellc                 C   s   t dƒ‚d S )Nr"  rZ  r\  r.   r.   r/   r"  

  s    zTableRenderCB.endRowc                 C   s   t dƒ‚d S )Nr#  rZ  r\  r.   r.   r/   r#  
  s    zTableRenderCB.startLinesc                 C   s   t dƒ‚d S )Nr$  rZ  r\  r.   r.   r/   r$  
  s    zTableRenderCB.endLinesc                 C   s   t dƒ‚d S )Nr%  rZ  r\  r.   r.   r/   r%  
  s    zTableRenderCB.endTableN)r7   r8   r9   rV  r0  r  r  r  r  r   r!  r"  r#  r$  r%  r.   r.   r.   r/   rW  ÷	  s   rW  c                 C   s   | d t v S r¨   )ÚLINECOMMANDS)rU   r.   r.   r/   r¤  
  s    r¤  c                 C   sj  | | | }|dkr\t |ƒ}|d |_|dkrX|d |_|dkrL|d |_n|jd |_�n
|dv rp|d |_nö|dv r„|d |_nâ|dkr˜|d |_nÎ|d	kr¾t |d t ddd¡¡|_n¨|d
v rÒ|d |_n”|dkræ|d |_	n€|dkrú|d |_
nl|dk�r|d |_nV|dk�r&|d |_n@|dk�r<|d |_n*|dk�rR|d |_n|dk�rf|d |_d S )NZFONTr   r   r   r(  )ÚFONTNAMEZFACE)ÚSIZEZFONTSIZEÚLEADINGÚ	TEXTCOLOR)ÚALIGNZ	ALIGNMENTÚVALIGNZLEFTPADDINGZRIGHTPADDINGZ
TOPPADDINGÚBOTTOMPADDINGZHREFZDESTINATION)r_   r:   r;   r<   r   ÚtoColorÚColorrB   rC   rE   r=   r>   r?   r@   rF   rG   )rü   rp   rr   r©  r�  r|  ru   r.   r.   r/   r§  
  sB    






r§  rï  r'  ©rd   rd   g      Ð?)rb  )r   r   rg  rB  rí  rz   rô  ró  )rd   r   rò  )r   rd   rð  )r   r   Ú__main__)Úold_tables_test)r   r�   r‚   )MÚ__all__Ú__version__rV  Zreportlab.platypus.flowablesr   r   Ú	reportlabr   Úreportlab.lib.stylesr	   r
   r   Úreportlab.libr   Úreportlab.lib.utilsr   r   r   r   r   r   r   Zreportlab.lib.validatorsr   Úreportlab.lib.rl_accelr   Úreportlab.lib.abagr   r!  Úreportlab.pdfbase.pdfmetricsr   r]  r   r   r   Úcollectionsr   r¥  r¦  r   r   ra   ry   r€   rŽ   rY  r›   r¡   r§   rª   rº   r^   r»   r¼   r  rÃ   r”  r   rº  r   rN   rÜ   r]  rW  r¤  r§  r%   Z
GRID_STYLEZ	BOX_STYLEZLABELED_GRID_STYLErÝ   ZCOLORED_GRID_STYLEÚgreenZ
LIST_STYLEr7   Ztests.test_platypus_tablesri  r.   r.   r.   r/   Ú<module>   sÈ   $0


                 tù	'ÿÿÿÿüÿüÿýÿ

