o
    &zh                 	   @   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 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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)selfr/   parent r3   T/var/www/html/kangema/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   r/   dir
startswithsetattrgetattr)r1   resultr/   r3   r3   r4   r0   ?   s   
zCellStyle.copyr.   )__name__
__module____qualname__r   fontnamefontsizeleadingleftPaddingrightPadding
topPaddingbottomPaddingfirstLineIndentcolor	alignment
backgroundvalignhref	directionshapingdestinationr5   r0   r3   r3   r3   r4   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hasattrr9   r:   list_cmdsupdate)r1   cmdsr2   kwpcmdsar3   r3   r4   r5   H   s   
zTableStyle.__init__c                 G   s   | j | d S r.   )rV   append)r1   cmdr3   r3   r4   addX   s   zTableStyle.addc                 C   s   dd tt| j S )Nz!TableStyle(
%s
) # end TableStylez  
)joinmapreprrV   r1   r3   r3   r4   __repr__Z   s   zTableStyle.__repr__c                 C   s   | j S r.   )rV   rb   r3   r3   r4   rR   \   s   zTableStyle.getCommandsNN)r<   r=   r>   r5   r^   rc   rR   r3   r3   r3   r4   r   G   s
    
r   c                 C   s   t | ttf r
dpt| S Nr   )
isinstancetuplerU   len)xr3   r3   r4   _rowLen_   s   rj   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|| pd}|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\   rf   r   strstripendswithfloatrh   max)VavailRrIiJjswnvfmr3   r3   r4   _calc_pcb   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)   r3   )PkindQ0Q1Q2R0R1S0r3   r3   r4   _calcBezierPoints   s   888((((r   
left-rightW[?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   rm   
bottom-topr   )
ValueErrorreverser   )xposyposcornerrw   r   rL   r   txhiylor   yhixlor3   r3   r4   _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
    Nrm   r   r   )getrh   rs   min)canvLinescpecpyhBlocksFUZZry   r~   x0x1i0i1r3   r3   r4   _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idxr3   r3   r4   
_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   )valuer`   lowhighr/   r]   ivaluer3   r3   r4   _convert2int   s   
"r   c                 C   s   z|  |W S    Y dS Nr   )rq   )objr|   r3   r3   r4   	_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.   r3   ).0ikivr3   r3   r4   	<genexpr>   s    zspanFixDim.<locals>.<genexpr>r   c                    s    g | ]}|   |d  qS r   )r   r   ri   )Mrt   r3   r4   
<listcomp>   s     zspanFixDim.<locals>.<listcomp>c                    s   g | ]
} | d u r|qS r.   r3   r   )V0r3   r4   r      s    r   )rh   reversedsorteditemssumr   rr   r   )r   rt   spanConslimr   r   r   r   r   Xri   r3   )r   rt   r   r4   
spanFixDim   s"   &
r   c                   @   s   e Zd ZdS )_ExpandedCellTupleN)r<   r=   r>   r3   r3   r3   r4   r      s    r   c                   @   s   e Zd Zdd ZdS )_ExpandedCellTupleExc                 C   s"   t | |}||_||_||_|S r.   )rg   __new__tagTypealtTextextras)clsseqr   r   r   r1   r3   r3   r4   r      s
   z_ExpandedCellTupleEx.__new__N)r<   r=   r>   r   r3   r3   r3   r4   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fddZdd Zdd	 ZdoddZdd Zdd Z	dpddZ
dqddZdrddZdd Zdsd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%dtdJdKZ&dudMdNZ'dudOdPZ(dudQdRZ)dSdT Z*dUdV Z+dvdWdXZ,dYdZ Z-dvd[d\Z.d]d^ Z/e0e/Z/dvd_d`Z1dadb Z2e3j4fdcddZ5dedf Z6dgdh Z7didj Z8dkdl Z9dmdn Z:dS )wr   Nr   r   c           !   
   C   s  |
| _ |pd| _|pd| _t|ttfstd|   || _t	| | _
}g | _t|ttf}t|ttf}|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rt| _d	tt  vrtd	atjt_tjt_t | d
| jj!||f t d S |	dkrt"| _d S t| #  d|	|r|| _n| $| | _}|s||g }n=t	||krtj%rt|trt	|}||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 rg }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	|} | std| |k r|||  |d  }|| _@d 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: rm   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vAlignrf   rg   rU   r   identity	_renderCBrh   _nrows_cellvaluesrs   r`   rj   _ncolsr   emptyTableActionr:   longTableOptimizer   r   	__class__globalskeysr
   r   r   red	textColoryellow	backColorr5   r<   r   	identitiynormalizeDataallowShortTableRows	enumerate_rowHeights_argH
_colWidths_argWr   r\   r   ra   _cellStyles_bkgrndcmds	_linecmds	_spanCmds_nosplitCmds	_srflcmds_sircmds
repeatRows
repeatCols
splitByRow
splitInRowsetStyler   _setCornerRadii_rowSplitRangerP   rQ   _minRowHeights)!r1   data	colWidths
rowHeightsstyler  r  r  r  r   r   r   r   normalizedData
cellStylesrowSplitRangerP   rQ   r   minRowHeightscornerRadiirenderCBnrows_seqCW_seqRHncolsr~   ry   dcellrowscellcolsr{   lmrhr3   r3   r4   r5     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<   )r1   rw   ccvr  r3   r3   r4   rc   x  s   
zTable.__repr__c                    s6   dd  g }|D ]} fdd|D }| | q|S )zTakes 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   )stuffr3   r3   r4   normCell  s
   z%Table.normalizeData.<locals>.normCellc                    s   g | ]} |qS r3   r3   )r   cellr%  r3   r4   r         z'Table.normalizeData.<locals>.<listcomp>)r\   )r1   r  outDatarowoutRowr3   r'  r4   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}|rd||fvrd}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 rdpt|
}
||	|
}}}|rt|
t	rdpd}|r|d| }|r nq4|r nq.|rdt
t| }nd}|rd||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   r:   r   rf   rU   rg   r   r   ro   r   r   rs   ra   r   r<   id)r1   maxLenvxnrncr#  rhbry   r{   r   rw   vijixjxtallestr3   r3   r4   r     sF   


zTable.identityc                 c   sJ    t | dd }|D ]}t |dd r||||D ]}|V  qq	|V  q	d S )Ncanv__split_only__)r:   splitOn)r1   CaWaHr:  r"  r  r3   r3   r4   _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:0yE>)
leftIndentrightIndentr   )rf   r   r   r   r\   r@  r   	CellFrameframeActionrA  rB  r   rT   r   __self__r   r   r   )r1   r   r>  r?  r=  framerv   r"  r3   r3   r4   _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 ]8}||	||\}}| }| }|d ur\|| |d ure|| t||}||| | 7 }|
d u rx|}
q@|||
 | fS )Nr   r   r   r:  r  333333?)rB   rC   rD   rE   r:   rf   ro   _elementWidthrh   splitr@   rs   wrapOngetSpaceBeforegetSpaceAfterr\   )r1   rt   r}   r|   WHr?  r>  r   r:  sb0vwvhr   sbsar3   r3   r4   _listCellGeom  s.   

zTable._listCellGeomc                    s6   |sdS d}d}t | dd t fdd|D S )NrK  r   r:  c                    s   g | ]}|  d  qS r   )rO  )r   r   r?  r>  r:  r3   r4   r     s    z)Table._listValueWidth.<locals>.<listcomp>)r:   rs   )r1   rt   r?  r>  r   r}   r3   rZ  r4   _listValueWidth  s
   zTable._listValueWidthc                 C   s  t | dd rd S |st| j|}d |v rt | 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 rtd|  d| d| d	| d
 ||j|j 7 }|r|d }|d }||kr||f}t|
|||||< d}||kr|}qU|||< d |v sJ|rzt||| W n   td|  |||f  Y || _d}dg| _|D ]}|| }| j| q|| _d| _d S )N_width_calculated_oncer:  r3   r   rk   	Flowable 	 in cell(,) can't have auto width
r,  r   z.
spanning problem in %s
W0=%r W=%r
spanCons=%rr   )r:   r   r   r   _colSpanCells_spanRangesr   r   indexr   r   rM  r   r   rB   rC   rs   r   r   r   _colpositionsr\   _widthr\  )r1   
availWidthrR  r:  savedcolSpanCells
spanRangesr   W0rt   Sr{   r}   ry   Vir   r|   jispanr   c0c1ri   widthr3   r3   r4   _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 rdS z	t|d}W n   Y dS |j |jt fdd|D S )	Nr   rq  	drawWidth__styledWrap__minWidthr  c                    s   g | ]}t | qS r3   r   r   fontNamefontSizer3   r4   r   b      z'Table._elementWidth.<locals>.<listcomp>)rf   rU   rg   rM  rs   r   _fixedWidthrT   rq  r   rr   rs  r:   ru  AttributeErrorro   rN  r?   r@   )r1   r   r|   r}   eewr3   rv  r4   rM  ?  s@   
  

zTable._elementWidthc           &      C   sR  | j }|st| j|}t| }}| j}d |v r| j}t| dd }	d }
| jr4| j}| j	}| j
}| j}nd }}i }|	rD|	j|	j|	jf}
|}|d d  }|| _i }tj}d |v r|d }| j| }| j| }d}d}ttt|||D ]\}\}}}||f}||d }||v r|sqvt|tttfr>| ||d  }||< |d u r| |std|d   d| d| d| d |	r|j |j!|j"pd	|j! |	_|	_|	_||v r|sqvt#||d
 d  ||d   |pd}| $||p| %||\}}|	r|
\|	_|	_|	_||j& |j' }tj(s=||kr=ddl)m*} |d|d dt+|t+|||t+|| df n|d urHt,|pId-d}|j"pUd	|j! t| }||j.|j/ 7 }|r|d }|d } || kr|| f}!t#||!||||!< d}||kr|}qv|rt#|| |n|||< |r|d }t0|d | }"|"|kr|rt#dd |1 D }#||#krnd |v sYd |vr|}|rzt2||| W n   t3d|  |||||||f  Y g  | _4}d }"}$t5|d ddD ]}|6|" || |$ }%|"|% }||" |% }$|}"q|6|" |"| _7|8  || _9d S )Nr:  r3   r   r]  r^  r_  r`  r,  rL  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   Nr3   r   r3   r3   r4   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=%rrm   ):r   r   r   rh   r   r  r:   r   _rowSpanCellsra  rb  rd  	_fontname	_fontsize_leadingr   r   _FUZZrc  r   r   r   rU   zipr   rf   rg   r   rI  _canGetWidthr   r   r?   r@   rA   rs   rY  r[  rB   rC   allowTableBoundsErrorsreportlab.platypus.doctemplater~  r   ro   rN  rE   rD   r   r   r   r   _rowpositionsr   r\   _heightr   _hmax)&r1   availHeightrf  rS  rR  hmaxr   	longTabler  r:  rg  rowSpanCellsrh  ri  colpositionsH0r   r   ry   rt   rk  hr{   r   r|   r}   rm  rn  dWr   r~  r0r1ri   heightmsrr"  r   r3   r3   r4   _calc_heightd  s   




$.*&6


2"



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 )Nrn   )rR  )r   _hasVariWidthElements_calcPreliminaryWidthsr   _calcSpanRangesr   rr  r  _calcNoSplitRangesr  _calcSpanRects)r1   rf  r  rR  r3   r3   r4   _calc  s   
zTable._calcc                 C   s    | j }t|}||}d| S )zReturn 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   rs   rc  )r1   r4  r9  rowNumr3   r3   r4   _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 )zCheck 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  )r1   upToRowr*  colr   r3   r3   r4   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   )rf   rU   rg   r  r   rz  )r1   thingelemr3   r3   r4   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rd}d}t| j	D ]+}| j
| | }| j| | }|||pd}||j|j 7 }t||}|o| |}qy|r|
| n|| |||< ||7 }q]|	| q]t|	| jkrd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sJ |#||< qn|dkrg }$| D ]$\}}|dr|t|dd  |  ||< }||7 }|$| q|$D ]}||= q~$t| }|||  }|dk r4|tj | dkr4| | }%t|D ]\}}||vr)|%| }&||  |&8  < ||&8 }q|||  }d}%n|| }|dkr?dn|| }%| D ]\}}||% ||< qG| | _| _|S )	zFallback 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.rk   r   Nr   rn   rl   rm   d   )rU   r   r   rr   rf   r   rM  r   r   r   r   r   rB   rC   rs   r  r\   rh   r   sortrq   r   valuesr   defCWRFr   r   )'r1   rf  rR  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dwr3   r3   r4   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   rn   rl   )rU   r   rM  r   r   r   r   rh   r   rB   rC   rs   rr   )r1   rR  rq  r  rowNosr  stylesr  r}   r  r  r   r  r  r3   r3   r4   ru    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rt|
|d D ]}t|	|d D ]}|||f qq|
|krt|
|d D ]}t|	|d D ]}|||f qqt|
|d D ]}t|	|d D ]}d|||f< qq|	|
||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)rb  r   r   r   ra  r  r\   r   )r1   ri  ri   r   csarsar]   startstopr   y0r   y1r3   r3   r4   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  )r1   nosplitRangesri   r   r  r  r]   r  r  r   r  r   r  r3   r3   r4   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rt|d |d D ]}|	|| g 
|| ||d  f q|| }||d  }||d  | }|| | }||||f||	< W q1   td|  f  Y q1||fD ]}| D ]}
|
  qq|| _|| _|| _|| _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_spanRectsrd  r  rh   rb  r   r   
setdefaultr\   r   r   r  r  r  _vBlocks_hBlocks)r1   	spanRectsr  r  r  rowpositionsvBlocksr   rlimcoordr   col0row0col1row1r  r*  r6   ri   r   rq  r  r3   r3   r4   r  :  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 rO   )rf   r   rR   rh   ro   _SPECIALROWSr   _addCommandrS   r   r9   rT   r:   )r1   tblstyler]   r"  scsrecerkr   r[   r3   r3   r4   r  n  s.   

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   rs   r   )r1   r  r  r  r  r3   r3   r4   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|rt|}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 rd}||d< |dksJ t|dk r||d  n|d }|d u r|d }||d< t|dksJ | 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      r_   	   r&   r)   ROUNDEDCORNERSr|   )r   r\   r   r  _isLineCommandrU   rh   r   r   LINECAPS	LINEJOINSr   rg   r	  r  r  r  r  r   _setCellStyler   )r1   r]   r  r_   	lineCountspaceopr  r  r  r  r  ry   r{   r3   r3   r4   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  rG   dashr_   	ocanvlinerrdweightr3   r4   
rcCanvLine  s    z$Table._drawLines.<locals>.rcCanvLine_drawUnknown)r:  	saveState_roundingRectDefSLliner\   r   rf   r   r  
setLineCapsetDashsetLineJoinr  r:   
_LineOpMapr   restoreState	_curcolor)r1   ccapcdashcjoinr:  r  r  r  r  r  r  r  r   r  r3   r  r4   
_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   )	r1   r  endr  rG   r   r  r  r  r3   r3   r4   r	    s   zTable._drawUnknownc                 C   s,   |  |||||| | |||||| d S r.   )_drawBox_drawInnerGrid)r1   r  r  r  rG   r   r  r3   r3   r4   	_drawGrid  s   zTable._drawGridc                 C   s   |\}}|\}	}
|  ||f|	|f|||| |  ||
d f|	|
d f|||| | ||f||
f|||| | |	d |f|	d |
f|||| d S re   _drawHLines_drawVLinesr1   r  r  r  rG   r   r  r  r  r  r  r3   r3   r4   r    s   $(zTable._drawBoxc                 C   sT   |\}}|\}	}
|  ||d f|	|
f|||| | |d |f|	|
f|||| d S re   r  r"  r3   r3   r4   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  r:  setStrokeColor
_curweightsetLineWidth)r1   r  rG   r3   r3   r4   	_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   rm   r  c                 S      t | |||||S r.   r   r   r  r   r  r   r   r   r3   r3   r4   <lambda>"      z#Table._drawHLines.<locals>.<lambda>)rd  r  rh   r&  r:   r:  r  r   )r1   r  r  r  rG   r   r  r  r  r  r  r   rpr   r   r   r   lfr3   r3   r4   r     s$   zTable._drawHLinesc                 C   s8   |\}}|\}	}
|  ||d f|	|
d f|||| d S re   )r   r"  r3   r3   r4   _drawHLinesB&     (zTable._drawHLinesBc                 C   s   |\}}|\}	}
| j ||
d  }| j||	d  }t|dks&t|dk r(d S | || |d }|d }t| di }| jjfdd}|dkrW|D ]
}t||||| qJd S ||| |fdd}|D ]
}t||||| qcd S )	Nr   r   r   rm   r  c                 S   s   ||| ||S r.   r3   )r  r   r  r   _liner3   r3   r4   r*  5  s    z#Table._drawVLines.<locals>.<lambda>c                 S   r'  r.   r(  r)  r3   r3   r4   r*  :  r+  )r  rd  rh   r&  r:   r:  r  r   )r1   r  r  r  rG   r   r  r  r  r  r  erpcpsrpr  r   ri   r-  r3   r3   r4   r!  +  s$   zTable._drawVLinesc                 C   s8   |\}}|\}	}
|  |d |f|	d |
f|||| d S re   )r!  r"  r3   r3   r4   _drawVLinesA>  r/  zTable._drawVLinesAc                 C   s   |  || || _| j| jfS r.   )r  rf  re  r  )r1   rf  r  r3   r3   r4   wrapC  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.
        Nr3   )r1   TbyRowr3   r3   r4   onSplitH  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   ry   r   r   )r   r  r  rg   )r1   r~   rX   nr0doInRowSplit	_srflModer  r"  r  r  r  r  r3   r3   r4   _cr_0O  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 |@ }|rt|}| |
d f||t	|f||t
|ff t|
dd    ||k rq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   ry   r   r   )rh   setr   r  r  rg   r   rU   rc  r   rs   r
  )r1   r~   nRowsr  rX   r:  r;  nrrrrSr  r"  r  r  r  r  cSr3   r3   r4   _cr_1_1f  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 r=  )r  r  r  rg   )
r1   r~   rX   r:  r;  r"  r  r  r  r  r3   r3   r4   _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)r1   defaultr   r3   r3   r4   _getPossibleHeight  s   zTable._getPossibleHeightc                 C   s  ||j  }||j |  }t|ttfrg }g }	d}
g }| j||||dd }|jdkr2|| d }nd}t||D ]v\}}t|d|}|
rW||krS|	| ||8 }q9g   S || |	  |krs|| |||	  |
  7 }q9|||| |	  }|r||d  |	|d  n|s|jdkr||kr|	| ||8 }ng   S g   S d	}
q9t|t|	fS t|tr?|d
}d|j }|jp|t| }|jdkr||kr|dfS |jdkr||krd|fS |jdkr||krd|fS |dfS t|dk rg S |jdkr|| }n|jdkrt|||  }n
|| | d|  }t|}d
|d | d
||d  fS dS )NF)rS  r   r   r   r   r  TOPTr  rL  r   r-   )r   r   )rD   rf   rg   rU   rY  rJ   r  r:   r\   rP  rQ  rN  ro   r@   rA   rh   r   r_   )r1   r   r  	oldHeight	newHeightrq  height0height1newCellContentpostponedContentrN  FH
cellHeight
usedHeightflowable_fhflowable_heightsplitsrows
lineHeightcontentHeight
splitPointr3   r3   r4   
_splitCell  sn   










$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   rm   )BOXOUTLINEGRID	LINEABOVE
LINEBEFORE	LINEAFTER	LINEBELOWr_  	INNERGRID)r   r   r   rf   r   r  r\   )r1   r~   r:  r  r  Ar  r  r  r  r  r  rG   r  r  r_   r   r  r3   r3   r4   _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   r`  rc  N)r\   r  rG  )r1   r~   rX   oldrowcount	stretchedr"  r]   r  r  r  r  r3   r3   r4   _stretchCommands@  s&   
$zTable._stretchCommandsc           ^         sV  | 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 rg S t	| jd | }
| j| }| j| }| j}| j| }d}d}d}tt|||D ]h\}\}}}| jr| j||fd d u rqt|ttfr| |||\}}||j|j 7 }||kr|}qt|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|sg 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 qd	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 rd|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 rd|_(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 d | ;|| j7| _7| ;|| j$| _$| ;|| j| _| ;|| j/| _/| ;|| j0| _0| ;|| j1| _1|d }| j,}S|Srt<|S}S j.}T|Tr 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 ];}Z|I@|Z |Zd d dkr1q|Zdd
 \\}#}$\}%}&|I@|Zd f|#|d f|%|d ff t|Zd
d    q|Srbt<|S}S|rt|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|Vd$}K|KB||W||Y| |KjB||W| j$|dd |KB||W| j| |KB||W| j/| nU| j)|d   j|d  ||	| j*| j+d j|d  |St-| d#d |T|Ur.ddg|Udd   nd |Vd$}K|KC||Y| |KjC| j$|dd |KC| j| |KC| j/|  j0D ]7}Z|K@|Z |Zd d d%kriqW|Zdd
 \\}#}$\}%}&|K@|Zd f|#df|%dff t|Zd
d    qW jD |I_D|K_D jE |I_E|K_E| F|I | F|K |I|KgS )&N)ignoreSpansr   r   r:  c                 S      g | ]}|d d  qS r.   r3   r   r6   r3   r3   r4   r     ry  z$Table._splitRows.<locals>.<listcomp>r  rL  c                 S   rl  r.   r3   rm  r3   r3   r4   r     ry  r)   r   r-   rJ  r   rP   _cornerRadiir   )r  r  r  r  r  r  r  r  r   rP   r   r  r  r]  r_  rd  )r_  rd  rc  )r_  r]  r`  ra  rb  FT)r;  r   c                       g | ]} | qS r3   r3   r   ry   )r  r3   r4   r     r(  c                    ro  r3   r3   rp  )splitHr3   r4   r     r(  c                    s   g | ]} j | qS r3   )r   rp  )r6  r3   r4   r     s    rQ   )r  r  r  r  r  r  r  r  r   rQ   r   r  r  r   )G!_getFirstPossibleSplitRowPositionr  rf   r   rs   rh   r   r
  
_splitRowsr   r  r   r  r   r   r   r  r   rb  r   rg   rU   rY  rD   rE   ro   rN  r@   r>  r   r   r  r   r^   r   r\   r   r  r\  r0   rJ   r   r  r  r   r:   r   r  r  r  rd  r  r  r  r  r   r   r  insertri  r   r   rf  r<  r  r   rC  rD  r   r   r8  )^r1   r  r:  r~   r  	maxrepeatr   lohir  usedHeights
cellvaluesr  
cellWidthscurRowHeightminSplitmaxSplit	maxHeightcolumnr   r  rq  r}   r  rX  rY  
splitCellsr&  rn  	start_col	start_rowend_colend_rowspanCmdsr]   r  r  r  r  newCellStyles
bkgrndcmdsspan_scspan_srspan_ecspan_erspanRectrK  rL  oldStyleresnewSpanCmdsr  r  newbkgrndcmdsrG   newStyler   r  marginnewlinecmdslinecmdr  r  r  r  r_   r   r  
moddedcmdsstartrowendrowr[  r  r   R0Heightr   R1HeightR1Stylesh0h1rS  newRowHeightnewRowHeightsr   ltor  r  r  r  r   r"  iRowsiRowHiCSr3   )r6  r  rq  r4   rs  s  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   rs   )

impossiblecellsrangesxyrw   r  y2yminymaxr   r3   r3   r4   _getRowImpossibleK  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  rb  r  r  r  r   )r1   r  rj  r  r  r~   split_atr4  r3   r3   r4   rr  Z  s"   


z'Table._getFirstPossibleSplitRowPositionc                 C   s`   |  || | js| jr.tjs| j|krg S | j|| j d}|r#|S | jr.| j|| jdS g S )Nrk  )r  r  r  r   r  re  rs  )r1   rf  r  r;   r3   r3   r4   rN  n  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 )
Nrn  c                    s0   g | ]\}\}}t j| j|  | qS r3   )r   r   r   )r   r  ry   r{   r  r1   r3   r4   r     s    
 z1Table._makeRoundedCornersClip.<locals>.<listcomp>rK  r   r   z%begin table rect clipstrokez%end table rect clip)r  r:   rs   r   r   r   r  rd  RoundingRectDefr:  	beginPath	roundRect
addLiteralclipPath)r1   r   r  r  arr,  r2  r   r  r   r  r}   r  r   r"  r3   r  r4   _makeRoundedCornersClip  s8   



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rd}|d }|d }n
d}|d }|d }||| kr||| kr||||| q*||| k rtd|||f|ddd	nd }||| krt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   rL   r   r   r  fill)r  r:  r
  r$  r  r  rn  r  r  r  r&  r   r  moveTocurveTolineTodrawPathr  )r1   r   r  r}   r  r   r  r  r  r:  r  r  r  r  r  r  r  r   r  r  rG   r  r  r_   r   r  r  ro  rp  r   r   r3   r3   r4   _restoreRoundingObscuredLines  s   



(*

**FDz#Table._restoreRoundingObscuredLinesc                 C   s(  | j }|  d  | _ | _| _t| d}|r!|| d || d |   |   |r0|| d | js|rt	t
| j| j| jdd  | jD ]K\}\}}}}|| d| t	t
||| jd d | jD ](\}\}	}
}}|| d|||	|
||f||f | |	|
||f||f || d	 qc|| d
 qFnt
| j| j| jdd  | jD ]*\}}}}t	t
||| jd d | jD ]\}\}	}
}}| |	|
||f||f qqn|r-t| jD ]U}|| d| t| jD ]B}| j||f }|d ur%|\}}}}| j| | }	| j| | }
|| d|||	|
||f||f | |	|
||f||f || d	 q|| d
 qn>t| jD ]8}t| jD ]/}| j||f }|d urg|\}}}}| j| | }	| j| | }
| |	|
||f||f q9q2|rs|| d |   |r|| d || d |  | jr|   d S d S )Nr   
startTablestartBGendBGr   startRowrm   	startCellendCellendRow
startLinesendLinesendTable)r:  r
  r$  r  _curcellstyler:   r  _drawBkgrndr   r   r  r   r   r  r   rd  r   	_drawCellr   r   r   r  r  r  r  r  )r1   r"  r  r  r*  rowstylerowpos	rowheightr  cellval	cellstylecolposcolwidthcellRectri   r   rq  r  r3   r3   r4   draw  sv   


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rtttj|}t|}|| d }t|D ]%}|||  }|||  }|r|| |j|||| ddd || }qq|	dkrtttj|}t|}||
 d }t|D ]$}|||  }||
|  }|r|| |j||||ddd || }qq|rt|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rdkr)n nF|d d \\} }!\}"}#|| |  } ||"|  }"||!|  }!||#|  }#|d }$|d }%t|dkr|d nd }&|j| |!|"|#|%|&|$d ntdtd||dkrdt|  krFdkrn nr|d \}'}(||'|  }'||(|  }(|d \})}*|*dkrh|}*n-|*dkrp|}*n%|*dkr{t
||}*n|*dkrt||}*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)extendr         @rm   r  r  r     r  r   r)   )	positionsr  zWrong length for z arguments r  rq  r  r   rs   zBad radius, z, for ) r   r   r:  rd  r  r   r   r:   r   r  r   rT   rU   r`   r   toColorOrNonerh   r   setFillColorrectrf   rg   r   r
  r  r  linearGradientr   r  rs   radialGradientr  )+r1   r  r  r:  r  r  r  r  r  r]   r  r  r  r  argr   r  r   r  r}   r  
colorCycler   rowCountry   rG   colCountxywharg0pxhyhax0ay0ax1ay1r  r=  r   xcycrw   refr3   r3   r4   r  (	  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rt
|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 }qn|
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 }qn|D ]}|||| ||8 }qt"|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)rR  rS  r?  rJ  r-   r  r   r+   RIGHT)CENTREr   zInvalid justification z for r   DECIMALr  r   zBad valign: rL   rM   onDrawr   )relativer   )Rectr  ))r  rG   r:  r  rA   r?   r@   setFontrH   rJ   rf   rg   rU   r   rY  rD   rE   rP  r  rB   rC   r   typedrawOnrQ  
drawStringdrawCentredStringdrawRightStringdrawAlignedStringro   rN  rh   rL   rM   r:   r   labelrK   linkURLrN   linkRect)r1   r  r  possizer  r  r  r  curjustrJ   rR  rS  r}   r  r   r   ri   r  valsr~   rA   r@   drawKwdsrL   rM   r  r3   r3   r4   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   rU   rs   rh   rn  r   )r1   r  r3   r3   r4   r	  
  s   4zTable._setCornerRadii)r,  )NNrJ  )rJ  rJ  r.   rd   )r   )Fr   );r<   r=   r>   r   r5   rc   r   r   r@  rI  rY  r[  rr  rM  r  r  r  r  r  r  ru  r  r  r  r  r  r  r  r	  r  r  r  r&  r   r.  r!  r4  r5  r8  r<  rC  rD  rI  r\  rf  ri  rs  r  staticmethodrr  rN  r   r  r  r  r  r  r  r	  r3   r3   r3   r4   r     s    

p

(	


?
%b!
 3/04=.



)
\<
3   [
M; Zr   r  r  r  r.  r   r!  r4  )r_  r]  r^  rd  rc  r`  ra  rb  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   r3   r3   r3   r4   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 )rf   r   r   ra   r:   )r1   r6  r]   argsmethr3   r3   r4   r  (
  s   zTableRenderCB.__call__c                 C      t d)Nr  NotImplementedErrorr1   r6  r3   r3   r4   r  -
     zTableRenderCB.startTablec                 C   r  )Nr  r  r  r3   r3   r4   r  /
  r  zTableRenderCB.startBGc                 C   r  )Nr  r  r  r3   r3   r4   r  1
  r  zTableRenderCB.endBGc                 C   r  )Nr  r  )r1   r6  r  r3   r3   r4   r  3
  r  zTableRenderCB.startRowc                 C   r  )Nr  r  )r1   r6  r  r  r  r  r  r  r3   r3   r4   r  5
  r  zTableRenderCB.startCellc                 C   r  )Nr  r  r  r3   r3   r4   r  7
  r  zTableRenderCB.endCellc                 C   r  )Nr  r  r  r3   r3   r4   r  9
  r  zTableRenderCB.endRowc                 C   r  )Nr  r  r  r3   r3   r4   r  ;
  r  zTableRenderCB.startLinesc                 C   r  )Nr  r  r  r3   r3   r4   r  =
  r  zTableRenderCB.endLinesc                 C   r  )Nr  r  r  r3   r3   r4   r  ?
  r  zTableRenderCB.endTableN)r<   r=   r>   r
  r  r  r  r  r  r  r  r  r  r  r  r3   r3   r3   r4   r  &
  s    r  c                 C   s   | d t v S r   )LINECOMMANDS)r]   r3   r3   r4   r  B
  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   rL  )FONTNAMEFACE)SIZEFONTSIZELEADING	TEXTCOLOR)ALIGN	ALIGNMENTVALIGNLEFTPADDINGRIGHTPADDING
TOPPADDINGBOTTOMPADDINGHREFDESTINATION	DIRECTIONSHAPING)rh   r?   r@   rA   r   toColorColorrG   rH   rJ   rB   rC   rD   rE   rK   rN   rL   rM   )r  ry   r{   r  r  r  r~   r3   r3   r4   r  E
  sN   

 r  r_  rK  rm   rm   g      ?)r  )r   r   r(  r  r]  r   rd  rc  )rm   r   rb  )r   rm   r`  )r   r   __main__)old_tables_test)r   r   r   )M__all____version__r
  reportlab.platypus.flowablesr   r   	reportlabr   reportlab.lib.stylesr	   r
   r   reportlab.libr   reportlab.lib.utilsr   r   r   r   r   r   r   reportlab.lib.validatorsr   reportlab.lib.rl_accelr   reportlab.lib.abagr   rE  reportlab.pdfbase.pdfmetricsr   r  r   r   r   collectionsr   r  r  r   r   rj   r   r   r   r  r   r   r   r   r   rg   r   r   r  r   r  r   r  r   rU   r   r  r  r  r  r*   
GRID_STYLE	BOX_STYLELABELED_GRID_STYLEr   COLORED_GRID_STYLEgreen
LIST_STYLEr<   tests.test_platypus_tablesr*  r3   r3   r3   r4   <module>   s   $0


                  "	+


