
    N"j             
       v   d Z dZdZddlmZmZ ddlmZ ddlm	Z	m
Z
mZ ddlmZ ddlmZmZmZmZmZmZmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddl m!Z!m"Z" ddlm#Z# ddl$m%Z% ddddddZ&ddddddZ' G d de	          Z( G d d          Z) e%ddd          Z*d Z+d Z,d Z-dQd"Z.ej/        fd#Z0d$ Z1d% Z2d& Z3dej/        fd'Z4 G d( d)e5          Z6 G d* d+e5          Z7 e%d,d-          Z8 e%d.d/          Z9d0Z: G d1 d2e          Z;d3d4d4d5d6d7d8d9d:Z< G d; d<e;          Z= e>e<?                                          Z@ G d= d>          ZAd? ZBd@ ZC e)dAdBdCdDejD        fdEg          ZE e)dFdBdCdGejD        fdEg          ZF e)dHdBdCdDejD        fdFdBdCdejD        fdIdBdJdejD        fdKdBdLdejD        fdEg          ZG e)dHdBdCdDejD        fdFdBdCdejH        fdIdBdJdejD        fdKdBdLdejD        fdEg          ZI e)dMdBdJdejJ        fdMdNdCdDejD        fdIdLdCdejJ        fdEg          ZKeLdOk    rddPlMmNZN  eN             dS dS )R)Table
TableStyle	CellStyle	LongTablez3.5.21a  
Tables are created by passing the constructor a tuple of column widths, a tuple of row heights and the data in
row order. Drawing of the table can be controlled by using a TableStyle instance. This allows control of the
color and weight of the lines (if any), and the font, alignment and padding of the text.

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

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

See the test output from running this module as a script for a discussion of the method for constructing
tables and table styles.
    )FlowablePreformatted)	rl_config)PropertySetParagraphStyle_baseFontName)colors)annotateExceptionIdentStrflattenisStrasNativestrTypes	__UNSET__rl_warn)isListOfNumbersOrNone)fp_str)ABagstringWidth)IndenterNullActionFlowable)
LIIndenter)
namedtupleN      )Nbuttround
projectingsquared)Nmitermitrer"   bevelc                   ^    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ZddZd
S )r   
            r   blackLEFTwhiteBOTTOMNc                 F    || _         ||                    |            d S d S N)namecopy)selfr3   parents      Z/usr/local/lib/hermes-agent/venv/lib/python3.11/site-packages/reportlab/platypus/tables.py__init__zCellStyle.__init__<   s/    	KK     c           	          |t          | j                  }t          |           D ]7}|                    d          rt	          ||t          | |                     8|S )N_)r   r3   dir
startswithsetattrgetattr)r5   resultr3   s      r7   r4   zCellStyle.copy@   sc    >ty))FII 	7 	7Ds##-XFD'$"5"56666r9   r2   )__name__
__module____qualname__r   fontnamefontsizeleadingleftPaddingrightPadding
topPaddingbottomPaddingfirstLineIndentcolor	alignment
backgroundvalignhref	directionshapingdestinationr8   r4    r9   r7   r   r   +   s        HHGKLJMOEIJFDIGK        r9   r   c                   (    e Zd ZddZd Zd Zd ZdS )r   Nc           	      <   |r]|                                 d d          }|j        | _        dD ]1}t          ||          rt          | |t	          ||                     2ng }|t          |pg           z   | _        i | _        | j                            |           d S )NspaceBefore
spaceAfter)getCommands_optshasattrr>   r?   list_cmdsupdate)r5   cmdsr6   kwpcmdsas         r7   r8   zTableStyle.__init__I   s     	&&((+EDJ1 6 66!$$ 6D76!#4#45556 ET$*"---


"r9   c                 :    | j                             |           d S r2   )r^   append)r5   cmds     r7   addzTableStyle.addY   s    
#r9   c                 b    dd                     t          t          | j                            z  S )Nz!TableStyle(
%s
) # end TableStylez  
)joinmapreprr^   r5   s    r7   __repr__zTableStyle.__repr__[   s%    4v{{3tTZCXCX7Y7YYYr9   c                     | j         S r2   )r^   rl   s    r7   rZ   zTableStyle.getCommands]   s
    zr9   NN)rA   rB   rC   r8   rg   rm   rZ   rT   r9   r7   r   r   H   sX              Z Z Z    r9   r   ShadowStylezdx dy color0 color1 nshades)r)   igreyr/      )defaultsc                 ^    t          | t          t          f           rdpt          |           S Nr   )
isinstancetupler]   len)xs    r7   _rowLenrz   b   s)    !U4L)))/a93q669r9   c                    g }|j         }g }|j         }g }|j         }|}dx}	}
| D ]}t          |t                    rt          |                                          }|sd}|
dz  }
n|                    d          r5t          |dd                   }|	|z  }	 |t          |                     nA|dk    r |t          |                     n"t          |          }||z  }n||
dz  }
n||z  } ||           t          d|          }|t          d|	          z  }|D ]}||xx         |z  cc<   |||         z  }t          d|          }t          |          }|r|
dk    r||z  pd}|D ]}|||<   |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   )	re   rv   r   strstripendswithfloatrx   max)VavailRrIiJjswnvfms                 r7   _calc_pcr   e   s    	A	A
A	A
A	AAJA  a!! 	AA QC !CRC&MMQ#a&&				C#a&&				!HHQYFAAFA	!Bq		A	#d1++A  	!		QqT	Bq		AAA T\ac!T 	 	AAaDDHr9   c                    |dk    r| S d| d         d         | d         d         z   z  d| d         d         | d         d         z   z  f}d| d         d         | d         d         z   z  d| d         d         | d         d         z   z  f}d| d         d         | d         d         z   z  d| d         d         | d         d         z   z  f}d|d         |d         z   z  d|d         |d         z   z  f}d|d         |d         z   z  d|d         |d         z   z  f}d|d         |d         z   z  d|d         |d         z   z  f}|dk    r| d         |||gn|||| d         gS )zVcalculate all or half of a bezier curve
    kind==0 all, 1=first half else second halfr         ?r   r    r,   rT   )PkindQ0Q1Q2R0R1S0s           r7   _calcBezierPointsr      st    Qww1Q471Q47?#C1a1a$9:1Q471Q47?#C1a1a$9:1Q471Q47?#C1a1a$9:2a5A;RU2a5[ 122a5A;RU2a5[ 122a5A;RU2a5[ 12"&''!R22b1>r9   
left-rightW[?c                 p   ||z  }| dk    r&|dk    r |\  }}	||z
  |	f||z
  |	f||	|z   f||	|z   fg}
n| dk    r&|dk    r |\  }}|||z
  f|||z
  f||z
  |f||z
  |fg}
nl| dk    r&|dk    r |\  }}||z   |f||z   |f|||z
  f|||z
  fg}
n@| dk    r&|dk    r |\  }}	||	|z   f||	|z   f||z   |	f||z   |	fg}
nt          d| |f          |dk    r|
d         d         |
d         d         k    s$|d	k    r2|
d         d
         |
d         d
         k    r|
                                 t          |
|          }
|
S )Nrightbottomtopleftz&Unknown quadrant position (xpos,ypos)=r   r   r~   
bottom-topr   )
ValueErrorreverser   )xposyposcornerr   r   rQ   r   txhiylor   yhixlos                r7   _quadrantDefr      s   	!AW}}xCAgs^SUCL3a.3a.I	w4;;C37^S#'NS1WcNS1WcNK	v$++CAgs^S1WcNS#'NS#'NK	v$..C37^S#'NS1WcNS1WcNKQ4+QQRRR,1Q471R58#3#3y,7N7NSTUVSWXYSZ[\]_[`ab[cScSc			!T""AHr9   c                    |r|                     |d          }|r*||d         d         |z
  k    s||d         d         |z   k    r | ||||           dS d}t          |          }|||z
  k     rn||k     rh||         \  }}	|	||z   k    s	|||z
  k    r|dz  }2t          ||          }
t          ||	          }|
|k    r | |||
|           |}|||z
  k     r||k     h|||z
  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
    Nr~   r   r   )getrx   r   min)canvLinescpecpyhBlocksFUZZr   r   x0x1i0i1s               r7   _hLiner      sG   
 -'++a-- /c72;q>$...#wqz!}T7I2I2IQs1LL#d(llqssQZFB3t8||r3t8||QSBSB#vvxxAb+++C #d(llqss s4x<<#aA.....<<r9   c                 p    d|dz
  z  |z  }||z  }t          |          D ]} || |||           ||z  }d S )Nr   r   )range)r   r   r   r   wscountoffsetidxs           r7   
_multiLiner      s]    %']2FKAU||  aa   	R r9   c                     	 ||          S # t           $ r/ 	 t          |           }||cxk    r|k    rn n|cY S n#  Y nxY wY nw xY 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   )valuerj   lowhighr3   rf   ivalues          r7   _convert2intr      s    5z   	ZZFF    D     ---	D ;D;;;;C;;
<
<<s&   
 
A 9AA=AAc                 >    	 |                      |          S #  Y dS xY wNr   )r   )objr   s     r7   	_endswithr      s'    ||Aqqs    c                 P    i |st                     }t          t          d |                                D                                 D ]\  }\  }}||k    r|dz  }t	          fdt          ||          D                       }|||z
  k    rH fdt          ||          D             }	|	sg||z  }|t          t          |	                    z  }|	D ]}
                    |
d          |z   |
<                                   D ]\  }
}|
xx         |z  cc<   d S )Nc              3   $   K   | ]\  }}||fV  d S r2   rT   ).0ikivs      r7   	<genexpr>zspanFixDim.<locals>.<genexpr>   s*      %L%L%"Rr"g%L%L%L%L%L%Lr9   r   c                 N    g | ]!}|                              |d           z   "S r   )r   )r   ry   Mr   s     r7   
<listcomp>zspanFixDim.<locals>.<listcomp>   s-    777Q1aeeAajj777r9   c                 $    g | ]}|         
|S r2   rT   )r   ry   V0s     r7   r   zspanFixDim.<locals>.<listcomp>   s    66611Qr9   r   )rx   reversedsorteditemssumr   r   r   )r   r   spanConslimr   r   r   r   r   Xry   r   s   ``         @r7   
spanFixDimr      s_   
Ac"gg f%L%L8>>;K;K%L%L%LMMNN 
  
 	'2bs77H
a77777%2,,77788af99h6666b666(	Q	U3q66]] 	  	 A551::a<AaDD	 wwyy  !	!	 r9   c                       e Zd ZdS )_ExpandedCellTupleN)rA   rB   rC   rT   r9   r7   r   r      s        Dr9   r   c                       e Zd Zd ZdS )_ExpandedCellTupleExc                 f    t                               | |          }||_        ||_        ||_        |S r2   )rw   __new__tagTypealtTextextras)clsseqr   r   r   r5   s         r7   r   z_ExpandedCellTupleEx.__new__   s/    }}S%%r9   N)rA   rB   rC   r   rT   r9   r7   r   r      s#            r9   r   RoundingRectDefszx0 y0 w h x1 y1 ar SLRoundingRectLinez&xs ys xe ye weight color cap dash join)
splitfirst	splitlastinrowsplitstartinrowsplitendc                      e Zd ZddddddddddddddddddeddfdZd Zd Zd?dZd	 Zd
 Z	d@dZ
dAdZdBdZd ZdCdZd Zd ZdBd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# Z!d$ Z"d% Z#d& Z$d' Z%dDd(Z&dEd*Z'dEd+Z(dEd,Z)d- Z*d. Z+dFd/Z,d0 Z-dFd1Z.d2 Z/ e0e/          Z/dFd3Z1d4 Z2d5 Z3d6 Z4e5j6        d7ddd8fd9Z7d: Z8d; Z9d< Z:d= Z;d> Z<dS )Gr   Nr   r   c                 H   |
| _         |pd| _        |pd| _        t          |t          t
          f          s$t          d|                                 z            || _        t          |          x| _
        }g | _        t          |t          t
          f          }t          |t          t
          f          }|r7t          t          t          t          |                              x| _        }n|r|rt          |          }nd}|	st           j        }	|t%          | dt           j                  n|| _        |r|s|	dk    r$t          |                                  d          |	dk    rt*          | _        d	t          t/                                                                vr;t3          d	          at6          j        t4          _        t6          j        t4          _        t+          j         | d
| j        j!        ||fz  t4                     n9|	dk    rtD          | _        n&t          | #                                 d|	          d S |r|| _        n| $                    |          x| _        }|s||gz  }nt          |          |k    rt           j%        rJt          |t
                    r5t          |          }||k     r||z
  |d         gz  ||d <   nB|d |         }n7t          |                                  d| dt          |           d          |s||gz  }nJt          |          |k    r7t          |                                  d| dt          |           d          tM          |          D ]w\  }}t          |          }||k    r]t           j%        r$t          |t
                    r||z
  dgz  ||d <   Jt          |                                  d| d| d| d          x|x| _'        | _(        |x| _)        | _*        |vg }tW          |          D ]\}g }tW          |          D ]3} |,                    t[          t]          || f                               4|,                    |           ]|| _/        n|| _/        g | _0        g | _1        g | _2        g | _3        g | _4        g | _5        || _6        || _7        || _8        || _9        |r| :                    |           |tv          ur| <                    |           || _=        ||| _>        ||| _?        |d k    rDt          |          }!|!st          d          |!|k     r|||!z
  |                    d          z  z   }|| _@        |r't          |t                    st          d|          || _B        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: r~   z data error - z columns in data but z column widthsz rows in data but z row heights z
 expected z not z columns in row !zJ{self.idenity()} Supplied mismatching minimum row heights of length {lmrh}r   zCTable shadow argument should be None or a ShadowStyle instance not )CidenthAlignvAlignrv   rw   r]   r   identity	_renderCBrx   _nrows_cellvaluesr   rj   rz   _ncolsr	   emptyTableActionr?   longTableOptimizer   r   	__class__globalskeysr   r   r   red	textColoryellow	backColorr8   rA   r   	identitiynormalizeDataallowShortTableRows	enumerate_rowHeights_argH
_colWidths_argWr   re   r   rk   _cellStyles_bkgrndcmds	_linecmds	_spanCmds_nosplitCmds	_srflcmds_sircmds
repeatRows
repeatCols
splitByRow
splitInRowsetStyler   _setCornerRadii_rowSplitRangerX   rY   _minRowHeightsrp   _shadow)"r5   data	colWidths
rowHeightsstyler#  r$  r%  r&  r  r  r  r  normalizedData
cellStylesrowSplitRangerX   rY   r  minRowHeightscornerRadiirenderCBshadownrows_seqCW_seqRHncolsr   r   dcellrowscellcolsr   lmrhs"                                     r7   r8   zTable.__init__  s    
(($d|,, 	G3dmmooEFFF!!$ii'eIuTl33Jd|44 	DWT1B1B,C,C(D(DD$+ 	6 	3y>>55eNI4N!1'8'@ $+40DYE`#a#a#aFW 	 	% 	(( DMMOO!Y!Y!YZZZ!:--!-%T'))..2B2B-C-CCC'56H'I'I$17$.17$.%d;$.:QRWX]9^+^`pqqqq!8++!3 DNN$4$4!a!aM]!a!abbbF  	?#D&*&8&8&>&>>Dt 		5)#4yy^^U"", Id1K1K 	NNU77%*1Wy}o$=IabbMM )&5& 1II DMMOO!}!}5!}!}_bcl_m_m!}!}!}~~~ 	wE:,$6zz__%%uuuuuX[\fXgXguuuvvvT?? 	h 	hCAaAA%xx0 hZ$5G5G h"1WrdNAabbEE$%f%f5%f%fq%f%fbc%f%f%fggg	 
 )324:'00$*H5\\ * *u < <AOOIdAa5kk$:$:;;;;))))'D)D %$$$ 	!MM%   i''  ---+"*D!(DOD  }%%D Y !mnnne -uTz=;R;RSW;X;X.X X+ 	o*VK88 	omcimmnnnr9   c                     t          | dd          }t          | dd          }t          | dd          }ddl}|                    |          }|                    dd          }| j        j        d	|d
|d|dS )z#incomplete, but better than nothingr  z	[unknown]r  r	  r   N
z
  z(
 rowHeights=z,
 colWidths=z,
z
) # end table)r?   pprintpformatreplacer  rA   )r5   r   ccvrA  s        r7   rm   zTable.__repr__}  s    D{33Dk22T-44^^BZZf%%LPNLcLcLcdededefgfgfghjhjhjkkr9   c                 b    d g }|D ]%}fd|D             }|                     |           &|S )zTakes a block of input data (list of lists etc.) and
        - coerces unicode strings to non-unicode UTF8
        - coerces nulls to ''
        -

        c                 J    | dS t          |           rt          |           S | S )Nr  )r   r   )stuffs    r7   normCellz%Table.normalizeData.<locals>.normCell  s+    }ru &r9   c                 &    g | ]} |          S rT   rT   )r   cellrI  s     r7   r   z'Table.normalizeData.<locals>.<listcomp>  s!    555hhtnn555r9   )re   )r5   r,  outDatarowoutRowrI  s        @r7   r  zTable.normalizeData  s[    	 	 	  	# 	#C5555555FNN6""""r9   rr   c                    | j         r| j         S d}t          | dd          }t          | dd          }t          | dd          }t          | dd          }|rd||fvr	d}t          |          D ]}t          |          D ]}	||         |	         }
t          |
t          t
          t          f          rit          |
t
          t          f          s|
f}
d}|
D ])}|                    |          }|r|d	d         d
k    r n*|r|d	d         d
k    r||	|df\  }}}}nB|
du rdpt          |
          }
||	|
}}}|rt          |
t                    rdpd}|r
|d|         }|r n|r n|r	 dt          |           d}n#  d}Y nxY wd}|rd||t          |          fz  }nd}d| j        j        t          |           ||||fz  S )z'Identify our selves as well as possibleNr  unknownr
  r	  r  r   r  z>...r   z(tallest row )z with cell(%d,%d) containing
%sz...z"<%s@0x%8.8X %s rows x %s cols%s>%s)r  r?   r   rv   r]   rw   r   r  r   r   r   rk   r  rA   id)r5   maxLenvxnrncrE  rhbr   r   r   r   vijixjxtallests                   r7   r  zTable.identity  sI   :(dj(T(9--T(9--T---T=$// 	)Br7**A2YY  r    A1aA!!T%$9:: 4)!U4L99Ct1#$ & &C #V 4 4A  &QrssVV^^ % 7233,-q!QJMBBI,"6A%&1B:Jq$:$:AFQ!37F72K%%Kee 	4#b''444G 	3r"T"XX6FFBBB3t~7NPRSWPXPXZ\^`bikm6nnns   +E? ?Fc              #      K   t          | dd           }|D ]6}t          |dd           r|                    |||          D ]}|V  2|V  7d S )Ncanv__split_only__)r?   splitOn)r5   CaWaHr_  rD  r;  s          r7   _cellListIterzTable._cellListIter  s      tF4(( 	 	Aq)$// 42..  AGGGG 	 	r9   c                 t   t          |t                    r|}nt          |t                    r|fnt          |          }d }g j        }|                     |||          D ]}t          |t                    rA|st          dd          }|                    |           |j	        dk     r|j
        dk     rd }X|r& |t          ||j	        |j
                              ||           t          |d          r't          |j        |j        |j        |j                  }nt          |j                  }|S )Nr   )_leftExtraIndent_rightExtraIndentg:0yE>)
leftIndentrightIndentr   )rv   r   r   r   re   re  r   	CellFrameframeActionrg  rh  r   r\   r   __self__r   r   r   )r5   r   rc  rd  rb  framer   rD  s           r7   _cellListProcesszTable._cellListProcess  sN   a*++ 	3AA"1X..>GAJJAE	A''"R00  a))   R )1q Q Q QMM%(((-d22u7Nt7S7S $ Aje.DQVQhiiijjjjAaDDDDq## 3(AIaiQQ&qz22r9   @ c                    |sdS ||j         z
  |j        z
  }||j        z
  |j        z
  }|dk     rt          j        dz  s9t          |                                  d| d| d|j          d|j         	          t          j        dz  r9t          |                                  d| d| d|j          d|j         	           d}d}t          | d	d           }	d }
t          |t                    rU|                     ||          }t          |                    d
                    |j        z  dz  }t!          ||          |fS |D ]}|                    |	||          \  }}|                                }|                                }||                    |           ||                    |           t!          ||          }|||z   |z   z  }|
|}
|||
z
  |z
  fS )Nr   r   r   r    z%: flowable given negative availWidth=z width=z - leftPadding=z - rightPadding=   r_  r@  333333?)rG   rH   rI   rJ   r	   allowTableBoundsErrorsr   r  r   r?   rv   r   _elementWidthrx   splitrE   r   wrapOngetSpaceBeforegetSpaceAfterre   )r5   r   r   r   WHrd  rc  r   r_  sb0vwvhr   sbsas                   r7   _listCellGeomzTable._listCellGeom  sq   /!,0a443A5 _ DMMOO  "g  "gZ\  "g  "gef  "g  "gwx  xE  "g  "g  WX  We  "g  "g  h  h  h1!3 _4==??  ^  ^QS  ^  ^\]  ^  ^non{  ^  ^  NO  N\  ^  ^  _  _  _tF4((a 	"##Aq))BQWWT]]##AJ.s2Bq"::r>! 		 		AXXdB++FB!!##B""B}ahhrlll}ahhrlllAb		Ab2A{!c'B,r9   c                 t    |sdS d}d}t          | dd           t          fd|D                       S )Nrr  r   r_  c                 J    g | ]}|                               d           S r   )rx  )r   r   rd  rc  r_  s     r7   r   z)Table._listValueWidth.<locals>.<listcomp>  s.    777AHHT"R((+777r9   )r?   r   )r5   r   rd  rc  r   r   r_  s     ``  @r7   _listValueWidthzTable._listValueWidth  sS    tF4((777777Q777888r9   c                    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 ]\  }}||         }|
|         |         }||f}|
                    |d           }||v r|sd}n|                     ||          }|@t          d|                                 d| d| d	|                     d
                     ||j        |j        z   z  }|rC|d         }|d         }||k    r-||f}t!          |
                    ||          |          ||<   d}||k    r|}|||<   d |v &|rG	 t#          |||           n4#  t%          d|                                 d|d|d|           Y nxY w|| _        d}dg| _        |D ]!}||z   }| j                            |           "|| _        d| _        d S )N_width_calculated_oncer_  rT   r   r|   	Flowable 	 in cell(,) can't have auto width
rr   r    
spanning problem in z
W0=z W=

spanCons=r   )r?   r   r  r  _colSpanCells_spanRangesr	  r  indexr  r   rv  r   r  rG   rH   r   r   r   r  _colpositionsre   _widthr  )r5   
availWidthr{  r_  savedcolSpanCells
spanRangesr   W0r   Sr   r   r   Vir   r   jispanr   c0c1ry   widths                           r7   _calc_widthzTable._calc_width  s    4066>5htz*55!1994t,,DE~  #1!-

!
HDJaaaDqqqT A A!))GGDMM%aLL " "DAb1A!QA1B%>>"T22D\))$) ..q339",  .E  .E  .EPQ  .E  .ETU  .E  .Equq~q~  @B  rC  rC  .E  .E  #F  #F  FQ]1>99 &!%aB!%aB!2vv$&rE.1(,,q2C2CA.F.F$%ssA!1 !))4  }}r!H----}%%]a]j]j]l]l]l]lmomomopqpqpqrzrz&{|||||S 	- 	-AAIE%%e,,,,&'###s   ;G /G>c                    t          |t          t          f          r4d}|D ]-}|                     ||          }| d S t	          ||          }.|S t          |t
                    r|j        rpt          |d          r(t          |j        t          t          f          r|j        S t          |d          r(t          |j        t          t          f          r|j        S t          |d          r'	  t          |d          |          d         S #  Y nxY wt          |d          rD	 |                                }t          |t          t          f          r|S n# t          $ r Y nw xY w|dS 	 t          |                              d          }n#  Y dS xY w|j        |j        t	          fd|D                       S )Nr   r  	drawWidth__styledWrap__minWidthr@  c                 2    g | ]}t          |          S rT   r   )r   ry   fontNamefontSizes     r7   r   z'Table._elementWidth.<locals>.<listcomp>o  s%    @@@K(844@@@r9   )rv   r]   rw   rv  r   r   _fixedWidthr\   r  r   r   r  r?   r  AttributeErrorr   rw  rD   rE   )r5   r   r   r   eewr  r  s         @@r7   rv  zTable._elementWidthL  s   ae%% 	A  ''!,,:ddd"IIH(## 	} g1g&&Z:ags5k+J+JZSTSZN1k**fz!+s5k/R/Rf[\[fTfq)** 671%566q99!<<D 1j!! 	JJLLas,,6Qh6!   91FFLL&&qq::@@@@@a@@@AAAs*   0D D'1E 
E'&E'/"F Fc                 F   | j         }|st          | j        |          }t          |          x}}| j        }d |v r| j        }t          | dd           }	d }
| j        r| j        }| j	        }| j
        }| j        }ndx}}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+t3          |t4          t,          t6          f          r0|                     ||d           x}||<   |[|                     |          sFt=          d|d                                          d| d| d|                     d                     |	r/|j         |j!        |j"        p	d	|j!        z  c|	_        |	_        |	_        ||v r3|stG          ||d
         dz            ||d                  z
  |pd          }| $                    ||p| %                    |          |          \  }}|	r|
\  |	_        |	_        |	_        ||j&        z   |j'        z   }||pdk    rt           j(        dz  siddl)m*}  |d|d                             d           dtW          |           dtW          |           d| d| d|                     d                     t           j(        dz  rgtY          d|d                             d           dtW          |           dtW          |           d| d| d|                     d                      nI|d urt[          |          pd.                    d          }|j"        p	d	|j!        z  t          |          z  }||j/        |j0        z   z  }|rC|d         }|d         } || k    r-|| f}!tG          |                    |!|          |          ||!<   d}||k    r|}(|rtG          ||         |          n|||<   |rV|dz   }tc          |d |                   }"|"|k    r4|r2tG          d |2                                D                       }#||#k    rnd |v  d |vr|}|rS	 tg          |||           n@#  ti          d|                                 d|d|d|d|d|d|d|           Y nxY wg x| _5        }dx}"}$tm          |dz
  dd          D ]1}|7                    |"           ||         |$z
  }%|"|%z   }||"z
  |%z
  }$|}"2|7                    |"           |"| _8        |9                                 || _:        d S )Nr_  rT   r   r  r  r  r  rr   rt  r    r   )LayoutErrorz (ry   z points) too wide for cell(z) (fp_str(w)x* points) in
   r  r@  r,   c              3   &   K   | ]}|d          V  dS )r   NrT   )r   ry   s     r7   r   z%Table._calc_height.<locals>.<genexpr>  s&      %D%Dqad%D%D%D%D%D%Dr9   r  z hmax=z lim=z avail=z x z
H0=z H=r  r~   );r  r   r  rx   r   r*  r?   r  _rowSpanCellsr  r  r  	_fontname	_fontsize_leadingr  r	   _FUZZr  r	  r  r  r]   zipr   rv   rw   r   ro  _canGetWidthr   r  rD   rE   rF   r   r  r  rG   rH   ru  reportlab.platypus.doctemplater  r   r   r   rw  rJ   rI   r   r  r   r   _rowpositionsr   re   _heightr   _hmax)&r5   availHeightr  r|  r{  hmaxr   	longTabler3  r_  r  rowSpanCellsr  r  colpositionsH0r   r   r   r   r  hr   r   r   r   r  r  dWr   r  r0r1ry   heightmsrrD  r   s&                                         r7   _calc_heightzTable._calc_heightq  s   J5htz*55!VVs+	199 /M4t,,DE~  #1#1!-
#1.00|
JT^T^T]JUB!!!A DH?D!))GGDMM$Q'$Q'#,T#aA,,-?-?#@#@ "" ""KAiq!Q1B%>>"T22D\))$) %atH(=>> E'+'<'<Qq'F'FFA! y1B1B11E1Ey&0  2LQqT]]__  2L  2LWX  2L  2L[\  2L  2Lx|  yF  yF  GI  yJ  yJ  2L  2L  'M  'M  !M#  IUVU_abakmnmv  nIz}~  I  {I%RT^T^T]!\11'+ 5X$'T!WQY(?TRSW@U(UVWV\[\$]$]#'#5#5a8TT=Q=QRS=T=TUV#W#WDBq#ZUZ%RT^T^T]!#am!3an!DB!16{{'0'G'I !w$Z$Z$Z$Z$Z$Z*5+  7@!A$--PRBSBS  7@  7@W]^`WaWa  7@  7@djkldmdm  7@  7@  KL  7@  7@  OP  7@  7@  mq  mz  mz  {}  m~  m~  7@  7@  +A  +A  %A%.%Ea%G !w$+  -v!b8I8I  -v  -vVTVZZ  -v  -vZ`abZcZc  -v  -v  AB  -v  -v  EF  -v  -v  cg  cp  cp  qs  ct  ct  -v  -v  %w  %w  %w!"$!93q66!?R F Ft L LA!"!<c!*nc!ff DAQ_Q\99 &!%aB!%aB!2vv$&rE.1(,,q2C2CA.F.F$%ssA2?Fs=+A...Q! &Q3D 5D5]]F++# &"%%D%DHMMOO%D%D%D"D"DC#Cxx %i !))j 1}}Sd zzr!H----z%%z~  {H  {H  {J  {J  {J  {J  KO  KO  KO  PS  PS  PS  T^  T^  T^  _j  _j  _j  km  km  km  no  no  no  px  px  'y  z  z  z  z  z "$#QtAvb$$ 	 	AHHV!qA
AVq AFF				


s   S ;Tc                    d | j         v s	d| j         v r*|                                 r|                     |          }nd }| j        r4|                                  d | j        v r|                     ||           | j        r|                                  | 	                    |||           |                     ||           | j        r| 
                                 d S d S )Nr   )r{  )r  _hasVariWidthElements_calcPreliminaryWidthsr  _calcSpanRangesr  r  r   _calcNoSplitRangesr  _calcSpanRects)r5   r  r  r{  s       r7   _calczTable._calc  s    DO##sdo'='=4C]C]C_C_'=++J77AAA
 > 	1  """tz!!  a 000 	&##%%% 	+j1555 	a(((> 	"!!!!!	" 	"r9   c                 b    | j         }t          |          }|                    |          }d|z  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  r   r  )r5   rX  r]  rowNums       r7   _culpritzTable._culprit  s5     b'''"" +W44r9   c                     || j         }t          t          | j         |                    D ]E}t          | j                  D ].}| j        |         |         }|                     |          s  dS /Fd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  )r5   upToRowrM  colr   s        r7   r  zTable._hasVariWidthElements  s    
 ?dkGT['2233 	 	CT[))  (-c2((// 111 qr9   c                     t          |t          t          f          r|D ]}|                     |          s dS dS t          |t                    r|j        S dS )z"Can we work out the width quickly?r   r   )rv   r]   rw   r  r   r  )r5   thingelems      r7   r  zTable._canGetWidth  sp    eT5M** 
	  ((.. 111x(( 	$$ 1r9   c                 v	   t          | j                  }d}d}d}d}d}|D ]n}||dz  }
|dk    r|dz  }|dz  }t          |d          r |dz  }|t          |dd                   z  }Kt	          |t
          t          f          sJ ||z   }og }	g }
g }i }d}| j        }t          | j                  D ]}||         }||dk    st          |d          rd}d}t          | j	                  D ]o}| j
        |         |         }| j        |         |         } |||          pd}||j        |j        z   z  }t          ||          }|o|                     |          }p|r|
                    |           n|                    |           |||<   ||z  }|	                    |           t#          |	          | j        k    rdS |||z   z
  }|dk    r|t          |          z  dz  }||z  }|r7|dk     r1|p|}d|z
  t          |          z  }d}|t          |          z  |z  }ndx}}g }d}|}|                                D ]}\  }}||         }t          |d          rt          |dd                   |z  |z  }n|dk    r|}n| r|pd}||k    r|||<   W|                    ||z
  |||f           ||z  }||z  }~|r|t          |          z  } |                                 g }!|D ]N\  }"}}}| |z  }#|#|k     r$|||<   ||z  }||z  }|r|t          |          z  } 6|!                    |||f           O|!D ]\  }}}| |z  }#|#|k    sJ |#||<   nN|dk    rg }$|                                D ]k\  }}t	          |t(                    rQ|                    d          r<|t          |dd                   z  |z  x||<   }||z  }|$                    |           l|$D ]}||= ~$t-          |                                          }|||z   z
  }|dk     rZ|t0          j        z  |z   dk    rD| |z  }%t5          |          D ]#\  }}||vr|%|z  }&||xx         |&z  cc<   ||&z  }$|||z   z
  }d}%n||z
  }|dk    rdn||z  }%|                                D ]\  }}||%z  ||<   |x| _        | _        |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.r|   r   Nr   r   r}   r~   d   )r]   r  r   r   rv   r   rv  r   r
  r  r	  r  rG   rH   r   r  re   rx   r   sortr   r   r   valuesr	   defCWRFr  r  )'r5   r  r{  totalDefinedpercentDefinedpercentTotalnumberUndefinednumberGreedyUndefinedr   givensizeable
unsizeableminimumstotalMinimumelementWidthcolNosizfinalrowNor   r/  new	remainingdefinedPercentage	undefineddefaultWeightdefaultDesireddesiredWidthstotalDesiredeffectiveRemainingminimumdesired
proportionfinalSetdisappointmentadjustedr;  adjdws'                                          r7   r  zTable._calcPreliminaryWidths#  sk     ! 	0 	0Ay1$c1$%*%%1S!! 0!#af-!!SK00000+a/ 
)4;'' 	$ 	$E%AyAsFFi#&6&6F"4;// ; ;E ,U3E:E ,U3E:E&,uU338qC5,U-???CsOOE:$"3"3E":":CC -OOE****%%e,,,"'%U####u::$$F ,"=>	q==!-eJ.?.?!? D--L 3<##5#51D_	!$\!153C3C C""/l0C0C"CZ!O122
 ML!*"*.."2"2 2 2weHQs## P$QssV}}\9:EGG#XX,GG"77JNOaGg%%&AeHH!(( '7EBD D D G+L&'1&& +(, 0l0C0CC
 ""$$$?L 	C 	C;NGWe)G3H'))#*%$/*g5*' P);E,<O<O)OJ '5(ABBBB/7 ( (+GWe)G3H#w....'AeHHA~~ ( 0 0 ( (HE1!!C(( (QZZ__ ('1%#2#--'?'LL%1$) ( (E "8??#4#455&,*EF	 {{|I,==iGJJ j- )! + +HE1H,, U%B$*&,*EF	 &5	$a<<aaY|-C"*.."2"2 ) )w"S=%'((
T_r9   c                    t          | j                  }d}| j        }t          | j                  }| j        }| j        }t          t          |                    D ]}||         }||dk    st          |d          rUd}	|D ]J}
||
         |         }||
         |         } |||          |j	        z   |j
        z   }t          |	|          }	K||	z  }w|t          |          z  }|S )Nr   r   r}   )r]   r  rv  r   r  r	  r  rx   r   rG   rH   r   r   )r5   r{  r  r  rowNosr  stylesr  r   r  r  r   r/  r  s                 r7   r  zTable.minWidth  s   )t{##!!3q66]] 	" 	"E%AyAsFFi#&6&6F# , ,E"5M%0E"5M%0E'<e44 ,--2-?@CsOOEEq!r9   c                 B   i x| _         }t          | j                  D ]$}t          | j                  D ]}||||f|||f<   %g | _        g | _        | j        j        }| j        j        }| j        D ]-\  }}}|\  }	}
|\  }}|	dk     r
|	| j        z   }	|dk     r
|| j        z   }|
dk     r
|
| j        z   }
|dk     r
|| j        z   }|	|k    r||	}}	|
|k    r||
}}
|	|k    s|
|k    r|	|k    r9t          |
|dz             D ]%}t          |	|dz             D ]} |||f           &|
|k    r9t          |
|dz             D ]%}t          |	|dz             D ]} |||f           &t          |
|dz             D ]}t          |	|dz             D ]	}d|||f<   
 |	|
||f||	|
f<   /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  r  re   r  )r5   r  ry   r   csarsarf   startstopr   y0r   y1s                r7   r  zTable._calcSpanRanges  sR    )+*:t{## 	/ 	/A4;'' / /#$aA,
1Q3/ ' '"&. 	5 	5S%FBFB AvvB,rAvvB,rAvvB,rAvvB,rBwwRBBwwRB2vvRr66"2r!t__ ' '!&r"Q$ ' 'AC1JJJJ'r66"2r!t__ ' '!&r"Q$ ' 'AC1JJJJ' r2a4 / /A"2bd^^ / /*.
1Q3/ &(R$4
2b5!5	5 	5r9   c                 B   i x| _         }t          | j                  D ]$}t          | j                  D ]}||||f|||f<   %g | _        g | _        | j        j        }| j        j        }| j        D ]-\  }}}|\  }	}
|\  }}|	dk     r
|	| j        z   }	|dk     r
|| j        z   }|
dk     r
|
| j        z   }
|dk     r
|| j        z   }|	|k    r||	}}	|
|k    r||
}}
|	|k    s|
|k    r|	|k    r9t          |
|dz             D ]%}t          |	|dz             D ]} |||f           &|
|k    r9t          |
|dz             D ]%}t          |	|dz             D ]} |||f           &t          |
|dz             D ]}t          |	|dz             D ]	}d|||f<   
 |	|
||f||	|
f<   /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  _colNoSplitCells_rowNoSplitCellsre   r   )r5   nosplitRangesry   r   r   r  rf   r  r  r   r  r   r  s                r7   r  zTable._calcNoSplitRanges  sY    /10mt{## 	2 	2A4;'' 2 2&'Aq\ac""2 " "#*#*"&"3 	8 	8S%FBFB AvvB,rAvvB,rAvvB,rAvvB,rBwwRBBwwRB2vvRr66"2r!t__ ' '!&r"Q$ ' 'AC1JJJJ' r66"2r!t__ ' '!&r"Q$ ' 'AC1JJJJ' r2a4 2 2A"2bd^^ 2 2-1ac**2 )+BB'7be$9	8 	8r9   c                 &   t          | di           }t          | dd          }| j        }|r|r|| j        k    s|sdS | j        }| j        }i }i }t          |          dz
  }| j                                        D ]G\  }	}
|
d||	<   	 |
\  }}}}||k    r|	\  }}||z
  dk    rYt          |dz   |dz             D ]B}|	                    ||         g           
                    ||dz            ||         f           C||z
  dk    rYt          |dz   |dz             D ]B}|	                    ||         g           
                    ||         ||dz            f           C||         }||dz            }||dz            |z
  }||         |z
  }||||f||	<   #  t          d|                                            Y FxY w||fD ]-}|                                D ]}
|
                                 .|| _        || _        || _        || _        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   r  )r?   r   _hmax_spanRectsr  r  rx   r  r   r   
setdefaultre   r   r  r  r  r  _vBlocks_hBlocks)r5   	spanRectsr  r  r  rowpositionsvBlocksr   rlimcoordr   col0row0col1row1r  rM  r;   ry   r   r  r  s                         r7   r  zTable._calcSpanRectsJ  s    Db11	tGD))+	 	) 	d.B(B(B)(BF))<  "".4466 	W 	WNUE}#'	%  W-2*D$dTzz8#GCDy{{!&tAvd1f!5!5 u uA#..|ArBBII<X\]^X^K_`lmq`rJsttttDy{{!&tAvd1f!5!5 u uA#..|ArBBII<X\K]^jkopqkq^rJstttt$T*A$T!V,A(a014E)$/!3F()1eV'<Ie$$W%%DMMOOO&UVVVVV'! 	 	A  

##s   	FC>F&G c           	         t          |t                    st          |          }|                                D ]}t          |          dk    r|dd         \  }\  }}\  }}t          |t                    sQt          |t                    s<t          |t                    r	|t
          vst          |t                    r#|t
          vrt          d|dt
                    |                     |           |j        	                                D ]\  }}	t          | ||	           dD ]A}
t          | |
          s/t          ||
          rt          | |
t          ||
                     Bd S )Nr,   r   zbad style command zN illegal of invalid string coordinate
only rows may be strings with values in rW   )rv   r   rZ   rx   r   _SPECIALROWSr   _addCommandr[   r   r>   r\   r?   )r5   tblstylerf   rD  scsrecerkr   rc   s              r7   r'  zTable.setStyle~  s   (:.. 	,!(++H'')) 	" 	"C3xx{{&)!A#h#7BrGRr#&& =*R*<*< ="2c**=/1/E/E"2c** 0F/1/E/E$ &<C &< &<)5&< &< = = =S!!!!>'')) 	 	CAaD1- 	4 	4A4?? 4wx':': 4Qwx22333	4 	4r9   c                    |dk     r
|| j         z   }|dk     r
|| j         z   }|dk     r
|| j        z   }|dk     r
|| j        z   }t          d|          t          | j         dz
  |          t          d|          t          | j        dz
  |          fS )z0ensure cell range ends are with the table boundsr   r   )r
  r  r   r   )r5   r  r   r  r!  s        r7   normCellRangezTable.normCellRange  s    66T[(266T[(266T[(266T[(21Ryy#dk!mB//QrCAb<Q<QQQr9   c           	      P   |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     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}||d<   |dk    sJ t          |          dk     r|                    |d                    n|d         }||d         }||d<   t          |          dk    sJ | j                            t          |                     d S |d         dk    r|                     |d                    d S |d d         |dd          c\  }\  }}\  }	}
}|t          v r/|d         dk    r| j        n| j                            |           d S |                     ||	||
          \  }}	}}
|	dz  }	t%          ||
dz             D ]-}t%          ||	          D ]}t'          | j        ||||           .d S )Nr   )
BACKGROUNDROWBACKGROUNDSCOLBACKGROUNDSSPANNOSPLIT   zbad line command r+   r   r    cap   rs  ri   	   r)   r,   ROUNDEDCORNERSr   )r  re   r  r   _isLineCommandr]   rx   r   r   LINECAPS	LINEJOINSr  rw   r(  r  r!  r"  r$  r   _setCellStyler  )r5   rf   r,  ri   	lineCountspaceopr  r  r   r!  r  r   r   s                 r7   r  zTable._addCommand  s]   q6EEE##C(((((VvN!!#&&&&&Vy  $$S)))))C   3	Js))C3xxzz,G,G,G!H!HH 3xxzz

1"3q68Q5#FFA 3xxzz3::d+++ 3xxzz3::a====#CFIq!VSIIA 3xxzz3::a====F	$ !I&CF A~~~~ 3xx{{CJJs1v....A=FE"CFs88r>>>>N!!%**-----V%%%  Q(((((/22A2wQRR,$R"b8Bf\!!#%a5#::4=HHMMMMM!%!3!3Br"R!@!@BBar2a4 J JA"2r]] J J%d&61b&IIIIJJ Jr9   c                 Z   d\  }}}| j         }|                                 | j        r/j        }g |d d <   |j        |j        fd}||_        	 | j        D ]\
  }\  }}	\  }
}}}t          |	t                    r
|	t          v r3d k    r|k    r|
                               }g k    r||                                 d }n|k    r|                               }|k    r|                               }|                     ||
|	|          \  }}
}	} t          | t                              |d                    ||	f|
|f||           	 r|_        n# r|_        w xY w|                                 d | _        d S )N)NNNc                     | |k    r| 
j         k    s'| 
j        k    s||k    r8|
j        k    s|
j        k    r" t	          | |||	  	                   d S  	| |||           d S r2   )r   r   r  r  r   )xsysxeyeaSLr,  rL   dashri   	ocanvlinerrdweights       r7   
rcCanvLinez$Table._drawLines.<locals>.rcCanvLine  s    VVSVr36zzVVSVr36zzC(Br"VE#d4PPQQQQQIbBr*****r9   _drawUnknown)r_  	saveState_roundingRectDefSLlinere   r  rv   r   r  
setLineCapsetDashsetLineJoinr$  r?   
_LineOpMapr   restoreState	_curcolor)r5   ccapcdashcjoinr_  rF  rB  r6  r  r  r   r!  r   r5  r=  r,  rL   r>  ri   r?  r@  rA  s                 @@@@@@@@r7   
_drawLineszTable._drawLines  sA   -eUy# 	#BBqqqE	I)C+ + + + + + + + + + + + #DI	&VZVd t tRGRWbfeS$eUb**Kr\/A/A899sOOC(((D<42::( $U]]LL&&& E#t$$T*** E!%!3!3Br"R!@!@BBAZ^^B@@AAB8bRTXW]_dfkmrssss!t$  &%	  &%	%%%%s   #DF Fc                 n    dd l }|                    d          j        d         }t          d|          )Nr   r   r6  zUnknown line command )sys	_getframef_localsr   )	r5   r  endrA  rL   r   r5  rS  r6  s	            r7   rC  zTable._drawUnknown  s;    


]]1&t,777888r9   c                 n    |                      ||||||           |                     ||||||           d S r2   )_drawBox_drawInnerGrid)r5   r  rV  rA  rL   r   r5  s          r7   	_drawGridzTable._drawGrid	  sB    uc65%???UCuEEEEEr9   c                 "   |\  }}|\  }	}
|                      ||f|	|f||||           |                      ||
dz   f|	|
dz   f||||           |                     ||f||
f||||           |                     |	dz   |f|	dz   |
f||||           d S ru   _drawHLines_drawVLinesr5   r  rV  rA  rL   r   r5  r  r  r   r!  s              r7   rX  zTable._drawBox  s    22"bB8VUE5III"bdb"Q$ZuMMM"bB8VUE5III"Q$bdBZuMMMMMr9   c                     |\  }}|\  }	}
|                      ||dz   f|	|
f||||           |                     |dz   |f|	|
f||||           d S ru   r\  r_  s              r7   rY  zTable._drawInnerGrid  sn    22"bdb"XvueUKKK"Q$b"XvueUKKKKKr9   c                     |r,|| j         k    r!| j                            |           || _         |r.|| j        k    r%| j                            |           || _        d S d S d S r2   )rM  r_  setStrokeColor
_curweightsetLineWidth)r5   rA  rL   s      r7   	_prepLinezTable._prepLine  sx     	#UDN**I$$U+++"DN 	%fdo--I""6***$DOOO	% 	%--r9   c                    |\  }}|\  }	}
| j         ||	dz            }| j        ||
dz            }t          |          dk    st          |          dk     rd S |                     ||           |d         }|d         }t	          | di           }| j        j        }|dk    r|D ]}t          |||||           d S |||z   |fd}|D ]}t          |||||           d S )Nr    r   r   r~   r  c                 *    t          | |||||          S r2   r   r   r  r   r  r   r   r   s          r7   <lambda>z#Table._drawHLines.<locals>.<lambda>2      U_`bcefhiqrtuzU{U{ r9   )r  r  rx   re  r?   r_  rG  r   )r5   r  rV  rA  rL   r   r5  r  r  r   r!  r   rpr   r   r   r   lfs                     r7   r]  zTable._drawHLines#  s$   22 BqD)2a4(s88Q;;#b''!))VVvu%%%!f"g$z"--9>A:: 7 7xc1g66667 7 .6&,e{{{B 1 1r3Q00001 1r9   c                 b    |\  }}|\  }	}
|                      ||dz   f|	|
dz   f||||           d S ru   )r]  r_  s              r7   _drawHLinesBzTable._drawHLinesB6  sH    22"bdb"Q$ZuMMMMMr9   c                    |\  }}|\  }	}
| j         ||
dz            }| j        ||	dz            }t          |          dk    st          |          dk     rd S |                     ||           |d         }|d         }t	          | di           }| j        j        fd}|dk    r|D ]}t          |||||           d S |||z   |fd}|D ]}t          |||||           d S )Nr    r   r   r~   r  c                      ||| ||          S r2   rT   )r  r   r  r   _lines        r7   rj  z#Table._drawVLines.<locals>.<lambda>E  s    bBr@R@R r9   c                 *    t          | |||||          S r2   rh  ri  s          r7   rj  z#Table._drawVLines.<locals>.<lambda>J  rk  r9   )r  r  rx   re  r?   r_  rG  r   )r5   r  rV  rA  rL   r   r5  r  r  r   r!  erpcpsrpr  r   ry   rm  s                     r7   r^  zTable._drawVLines;  s-   22 BqD) BqD)s88Q;;#b''!))VVvu%%%!f"g$z"--04	RRRA:: 7 7xc1g66667 7 .6&,e{{{B 1 1r3Q00001 1r9   c                 b    |\  }}|\  }	}
|                      |dz   |f|	dz   |
f||||           d S ru   )r^  r_  s              r7   _drawVLinesAzTable._drawVLinesAN  sH    22"Q$bdBZuMMMMMr9   c                 X    |                      ||           || _        | j        | j        fS r2   )r  r  r  r  )r5   r  r  s      r7   wrapz
Table.wrapS  s,    

:{+++$T\**r9   c                     dS )z
        This method will be called when the Table is split.
        Special purpose tables can override to do special stuff.
        NrT   )r5   TbyRows      r7   onSplitzTable.onSplitX  s	    
 	r9   Fc           	      `   | j         }|D ]"}|dd         \  \  }}	\  }
}|	t          v r|	d         dk    rw|                     |           |	dk    r[|rY|dk     r||z  }|
dk     r|
|z  }
|                     |d         f||dz
  f|
|dz
  ffz   t          |dd                    z              |s|                     |           |	dk    r|dz
  x}	}|	dk     r|	|z  }	|	|k    r||k    r|dz
  }|                     |d         f||	f|
|ffz   t          |dd                    z              $d S )Nr   r,   r   r   r   r   )r
  r  r  rw   )r5   r   r`   nr0doInRowSplit	_srflModer:  rD  r  r  r   r!  s               r7   _cr_0zTable._cr_0_  s     	H 	HA 1vGRWb\!!a5#::$$Q''',,,,a44Ua44U((!A$2qs)b!A#Y1G)GaPQPRPRe)TUUU *(  ###|##XA#R!ttR3YR1uuh1uu1Q3badWr2hR%99%!"",,FGGGG#	H 	Hr9   c                    t          |          }t          |          }| j        }	|D ]}
|
dd         \  \  }}\  }}|t          v r|d         dk    rq|                     |
           |dk    rU|rS|dk     r||	z  }|dk     r||	z  }|                     |
d         f||f||ffz   t          |
dd                    z              |s|                     |
           |dk    r|x}}|dk     r||z  }|dk     r||z  }t          t          ||dz                       |z  }|rt          |          }|                     |
d         f||                    t          |                    f||                    t          |                    ffz   t          |
dd                    z              ||k     rt          ||z
  d          |z   }t          ||z
  d          |z   }|                     |
d         f||f||ffz   t          |
dd                    z              | j        }|ra|\  }}|dk     r||z  }|dk     r||z  }||k     r	d | _        d S t          ||z
  d          |z   }t          ||z
  d          |z   }||f| _        d S d S Nr   r,   r   r   r   r   )rx   setr
  r  r  rw   r   r]   r  r   r   r)  )r5   r   nRowsr#  r`   r  r  nrrrrSr:  rD  r  r  r   r!  cSs                   r7   _cr_1_1zTable._cr_1_1v  s   *oo*oo 	H 	HA 1vGRWb\!!a5#::$$Q'''?**|*a44Ua44U((!A$2s)b#Y1G)GaPQPRPRe)TUUU *(  ###{??HR!ttR5[R!ttR5[RU2bd^^$$s*B z"XX  !A$2z/?/?B/H/H*IBPZP`P`adegahahPiPiKj)k!klqrstutvtvrwlxlx!xyyy!ttXRT!SBRT!SBadWr2hR%99%!"",,FGGGG  		,FB!ttR5[R!ttR5[R!tt&*###Aa[[_Aa[[_&(e###		, 		,r9   c           	      |   |D ]7}|dd         \  \  }}\  }}	|t           v r|d         dk    r{|                     |           |dk    r_|r]|dk     r
|t          z  }|dk     r
|t          z  }|                     |d         f|df|dffz   t          |dd                    z              |s|                     |           |dk    r|x}}	|	dk    r|	|k     r|dk    r||k     rd}||k    r||z  }|	|k    r|	|z  }	|                     |d         f||f||	ffz   t          |dd                    z              9d S r  )r  r  r:  rw   )
r5   r   r`   r  r  rD  r  r  r   r!  s
             r7   _cr_1_0zTable._cr_1_0  s    	H 	HA 1vGRWb\!!a5#::$$Q'''?**|*a44Ua44U((!A$2q'B71C)CE!ABB%LL)PQQQ *(  ###{??HR1uuAx1uuA!r1uubAgb1uubAgbadWr2hR%99%!"",,FGGGG%	H 	Hr9   c                 Z    t          | dd           }||n|j        |j        z
  |j        z
  S )N_frame)r?   r  _topPadding_bottomPadding)r5   defaultr   s      r7   _getPossibleHeightzTable._getPossibleHeight  s2    D$'')wwQ])BQEU)UUr9   c           
         ||j         z
  }||j         |z   z
  }t          |t          t          f          rg }g }	d}
g }|                     ||||          d         }|j        dk    r	||z
  dz  }nd}t          ||          D ]\  }}t          |d|          }|
r|	                    |           /||z   |	                                z   |k    rE|                    |           |||	                                z   |
                                z   z  }||z
  |	                                z
  }d }t          |d          ra|                    t          | d	d           ||dd d d
          \  }}}}|r.|r,|}|                    |           |	                    |           nN|                    ||          }|r6|                    |d                    |	                    |d                    |s&|s|j        dk    rg c S |	                    |           d
}
t          |          t          |	          fS t          |t                    r|                    d          }d|j        z  }|j        p|t%          |          z  }|j        dk    r
||k    r|dfS |j        dk    r
||k    rd|fS |j        dk    r||k    rd|fS |dfS t%          |          dk     rg S |j        dk    r||z  }n/|j        dk    rt%          |          ||z  z
  }n||z
  |z   d|z  z  }t'          |          }d                    |d |                   d                    ||d                    fS dS )NF)r|  r   r   r    r   r  
_findSplitr_  T)
mergeSpacer   contentparaFixTOPr@  rt  r  r0   )r  r  )rI   rv   rw   r]   r  rO   r  r?   re   ry  rz  r\   r  extendrw  r   rE   rF   rx   r   ri   )r5   r   r/  	oldHeight	newHeightr  height0height1newCellContentpostponedContentflowable_split_attemptedFH
cellHeight
usedHeightflowable_fhflowable_heightsplitHeightsplits_w_Hr   S1rows
lineHeightcontentHeight
splitPoints                              r7   
_splitCellzTable._splitCell  s   e..u/);<eeT]++ O	PN!',$B++E5%"+EEaHJ|x'''*49


 #E" "4 "4")(8C"@"@+  4 %++H5555/1H4K4K4M4MMQXXX"))(333/H4K4K4M4M"MPXPfPfPhPh"hhJJ #**"4X5L5L5N5N"NK!Fx55 
?(0(;(;GDPT<U<UV[\gsty}  GK  TX(;  )Y  )Y2r2 8" 8%'F*11"555,33B777!){!C!C! ?*11&)<<<,33F1I>>>! 	: . &ELE4I4I $&III )//999/3,,.))51A+B+BCCs## 	P;;t$$Du~-J"]8jCIIEM|u$$')A)Ar{"))mw.F.FE{"))W$$;&!2;&TQ	|u$$$
2

)) YY'Z*?@

%/-?Q^T
ZJIId;J;/00$))D<M2N2NOO xr9   c                    | j         }| j        }g }| j        D ]\
  }\  }}\  }	}
}}}}}}}t          |t                    ro|t
          v rf|                    |||f|	|f|||||||f
           |dk    r|dz
  x}}
n5|dk    r|}|}
n*|dk     r||z  }|	dk     r|	|z  }	|||f|	|f|||||||f
|d<   |dk     r||z  }|	dk     r|	|z  }	|dk     r||z  }|
dk     r|
|z  }
|dv r||k     r|
|k    s
|rW||k    rP|                    d||f|	|f|||||||f
           |                    d||f||
f|||||||f
           |                    d	|	|f|	|
f|||||||f
           |                    d
||
f|	|
f|||||||f
           |dk    r|rK|                    d||f|	|dz
  f|||||||f
           |                    d||f|	|
f|||||||f
           |                    d
||dz
  f|	|dz
  f|||||||f
           |                    d||f|	|f|||||||f
           |                    d||f|	|
f|||||||f
           /|                    |||f|	|
f|||||||f
           T|dk    r||k     rT|
|k    rN|sL|                    d
||dz
  f|	|dz
  f|||||||f
           |                    d||f|	|f|||||||f
           |                    |||f|	|
f|||||||f
           |d
k    rW||k     r,|
|dz
  k    r#|                    d||f|	|f|||||||f
           |                    |||f|	|
f|||||||f
           6|dk    rZ||k    r/|
|k    r)|                    d
||dz
  f|	|dz
  f|||||||f
           |                    |||f|	|
f|||||||f
           |                    |||f|	|
f|||||||f
           |S )Nr   r   r   r   r~   )BOXOUTLINEGRID	LINEABOVE
LINEBEFORE	LINEAFTER	LINEBELOWr  	INNERGRID)r  r
  r  rv   r   r  re   )r5   r   r  r7  r:  Ar6  r  r  r   r!  rA  rL   r,  r>  ri   r   r5  s                     r7   _splitLineCmdszTable._splitLineCmds  s   RVR` 2	^ 2	^NBB"R&%dD%"X&& 2+=+="bWr"gvuc4uV[\]]]{??cMB%%BBBAvvrU{rAvvrU{rB"R&%dDRWY^_AbEAvvrU{rAvvrU{rAvvrU{rAvvrU{r---qDDRUUUQHHk2b'Br7FE3PTVZ\achijjjHHlBr7RGVUCQUW[]bdijkkkHHk2b'Br7FE3PTVZ\achijjjHHk2b'Br7FE3PTVZ\achijjj6zz' sHHk2b'Bqs8VUTWY]_cejlq%rsssHHk2a&2b'65RUW[]achjo%pqqqqHHk2ac(R!HfeUXZ^`dfkmr%stttHHk2a&2a&&%QTVZ\`bgin%opppHHk2b'Br7FESVX\^bdikp%qrrrHHb"R2b'65#tTSXZ_`aaaa{""a44BEE,EHHk2ac(R!HfeSRVX\^cejklllHHk2a&2a&&%dTXZ_afghhh"bWr"gvuc4uV[\]]]]{""a44B1IIHHk2a&2a&&%dTXZ_afghhh"bWr"gvuc4uV[\]]]]{""q55RUUHHk2ac(R!HfeSRVX\^cejklll"bWr"gvuc4uV[\]]]]"bWr"gvuc4uV[\]]]]r9   c                 r   g j         }|D ]}|dd         \  }\  }}\  }	}
|t          v s	|
t          v r ||           4|
dk     r|
|z  }
|dk     r||z  }|
|k    r|
dz  }
n|
|k    r||k     s||k    r|dk    r|
dz  }
||k    s||k    r|dk    r|dz  } ||||f|	|
ff|dd         z              |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)re   r  rm  )r5   r   r`   oldrowcount	stretchedrD  rf   r  r  r   r!  s              r7   _stretchCommandszTable._stretchCommandsN  s   2 I	 	7 	7A$%acF!C"R'2b\!!R<%7%7	!Avvk!Avvk!Avva''66bAgg#*<*<!GBAvv"''c[&8&8aIsRGbW-!""56666!!r9   c                 '  _`a |                      ||          }| j        }t          |t                    r|nt	          |          dz   }|r||k     s|s||k    rg S t          | j                  }||k    r| gS | j        }|r]|\  }}|dk     r||z  }|dk     r||z  }||k    r4|                     |t          | j        ||                   z
  |          S ||k     rg S | j
        }	|s| _| j        `n\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           /t          |t(          t*          f          r5|                     |||          \  }}||j        |j        z   z  }||k    r|}t          |t2                    ry|                    d          }d|j        z  }|t          |          z  |j        z   |j        z   }t	          |||j        z             }t	          |||j        z             }||k    r|}||z   |k    s
|||
z
  k    r| j        sg S t9                      }t;          | j                  D ]}||f}|| j        v ru| j                            ||fd           X| j                                         D ]>\  }}||\  }}}} ||k    r)||k    r#||k    r|| k    r|!                    |            n?|sg S g }!| j        D ]h\  }"\  }#}$\  }%}&|#dk     r
|#| j        z  }#|%dk     r
|%| j        z  }%|$dk     r
|$| j"        z  }$|&dk     r
|&| j"        z  }&|!#                    |"|#|$f|%|&ff           id | j        D             }'| j$        }(|D ]\}| j        |         \  })}*}+},| j%        |         }-|-d	         }.t          | j        |*|                   }/|'|*         |)         }0| &                    | j        |*         |)         |0|.|/|          }1|1sg c S |1d         `|*         |)<   |1d         `|         |)<   g }2|!D ]\  }"}3}4|)|*f|3k    r_|+|,f|4k    rW|dz
  |*k    s|)|+k    r|2#                    |"|)|*f|+|dz
  ff           ||,k     s|)|+k    r|2#                    |"|)|f|+|,ff           m|2#                    |"|3|4f           |2}!g }5|(D ]v\  }"}3}4}6|3|)|*fk    rN|5#                    |"|3|4d         |dz
  f|6f           |5#                    |"|3d         |f|4d         |f|6f           ]|5#                    |"|3|4|6f           w|5}(|0'                                }7|0j(        d
k    r|1d         r|1d         rd|0_(        d|7_(        nd|                     |8d         p|8d         ||0          d         }9||9z
  dz  }:|8d         r|0xj        |:z  c_        n|8d         r|7xj        |:z  c_        |7|'|         |)<   ^| )                    `| j        | j        | j        | j
        | j*        | j+        d|'| j,        t[          | dd           | j.        t[          | dd           t[          | dd                     _|(__$        |!__        | j/        __/        | j0        __0        | j1        __1        | j2        __2        | j3        __3        _4                                 _5                                 _6                                 g };| j7        D ]}<|<\
  }=\  }#}$\  }%}&}>}6}?}@}A}B}C|&dk     r
|&_j"        z  }&|%dk     r
|%_j        z  }%|=dk    s&|=dk    r|$|k    s|&|k    s|=dk    r|$|k     s|&|k    r|=dv rr|;#                    d|#|$f|%|dz
  f|>|6|?|@|A|B|Cf
           |;#                    d|#|f|%|&f|>|6|?|@|A|B|Cf
           |;#                    d|#|dz
  f|%|dz
  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
           j|;#                    |<           |D ]t}g }D|;D ]i}<|<\
  }=\  }#}$\  }%}&}>}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z   }Fn|*dz
  }E|,}F|$|Ek    r#|D#                    |=|#|$f|%|Ef|>|6|?|@|A|B|Cf
           |)|#k    rB|D#                    |=|#t	          |E|$          f|)dz
  tq          |&|F          f|>|6|?|@|A|B|Cf
           |+|%k     rB|D#                    |=|+dz   t	          |E|$          f|%tq          |&|F          f|>|6|?|@|A|B|Cf
           |&|Fk    r#|D#                    |=|#|Ff|%|&f|>|6|?|@|A|B|Cf
           T|D#                    |<           k|D};v|;__7        _                    |d          S tq          ||
z
  ||z
            }G|Gdz   | j+        k     rg S | j9        |Gz
  }H|H| j+        k     rg S g }Id}Jg }Kd}Lg }Mt!          |||          D ]\  }}}| &                    ||||G|          }8|8sg c S |'                                }7|j(        d
k    r|8d         r|8d         rd|_(        d|7_(        nd|                     |8d         p|8d         ||          d         }9||9z
  dz  }:|8d         r|xj        |:z  c_        n|8d         r|7xj        |:z  c_        |I#                    |8d                    |K#                    |8d                    |                     |8d         ||          d         |j        z   |j        z   }Nt	          |J|N          }J|                     |8d         ||          d         |j        z   |j        z   }Ot	          |L|O          }L|M#                    |7           tq          |G|J          }Pt	          |L| j        |         |Pz
            }Q| j        d d          }R|R:                    |dz   |Q           |P|R|<   | j        d d          }'|':                    |dz   |M           `d |         |Igz   |Kgz   `|dz   d          z   `| )                    `| j        |R| j        | j
        | j*        | j+        d|'| j,        t[          | dd           | j.        t[          | dd           t[          | dd           t[          | dd                     _| ;                    || j7        |          __7        | ;                    || j$        |          __$        | ;                    || j        |          __        | ;                    || j/        |          __/        | ;                    || j0        |          __0        | ;                    || j1        |          __1        |dz   }| j,        }S|Srty          |S          }S_j.        }T|Tr_j        an_j=        at[          | dd           }Ut[          | dd           }Vt[          | dd           }W| )                    `d |         _j        ad |         ||	| j*        | j+        d_j        d |         |St[          | dd           |T|Ur
|Ud d         nd |V|W          }I_j"        }X_j        }Y_>                    ||          }Z|I?                    ||Z|X|           |I?                    |_j$        |X|d           |I?                    |_j        |X|           |I?                    |_j/        |X|           _j0        D ]}[|I@                    |[           |[d         d         d k    r*|[dd	         \  \  }#}$\  }%}&|I@                    |[d         f|#|dz
  f|%|dz
  ffz   t)          |[d	d                    z              |Srty          |S          }S|rt          |t                    r@`d |         }\ad |         }]_j        d |         }^t+          t;          |                    }nFt+          t          |                    }`fd!|D             }\afd"|D             }]_fd#|D             }^| )                    |\`|d          z   _j        |]a|d          z   t          |          |	| j*        | j+        d|^_j        |d          z   |St[          | d$d           |T|U|V|W%          }K|KB                    ||X||Z|           |KB                    ||X|_j$        |d           |KB                    ||X|_j        |           |KB                    ||X|_j/        |           n| )                    `|d          _j        a|d          ||	| j*        | j+        d_j        |d          |St[          | d$d           |T|Urddg|Udd          z   nd |V|W%          }K|KC                    ||Z|           |KC                    |_j$        |d           |KC                    |_j        |           |KC                    |_j/        |           _j0        D ]z}[|K@                    |[           |[d         d         d&k    r*|[dd	         \  \  }#}$\  }%}&|K@                    |[d         f|#df|%dffz   t)          |[d	d                    z              {_jD        x|I_D        |K_D        _jE        x|I_E        |K_E        | F                    |I           | F                    |K           |I|KgS )'N)ignoreSpansr   r   r  c                 "    g | ]}|d d          S r2   rT   r   r;   s     r7   r   z$Table._splitRows.<locals>.<listcomp>  s     333QAaaaD333r9   r@  rt  c                 "    g | ]}|d d          S r2   rT   r  s     r7   r   z$Table._splitRows.<locals>.<listcomp>  s      @ @ @!111 @ @ @r9   r,   r   r0   r  r    rX   _cornerRadiir  )r-  r.  r#  r$  r%  r&  r0  r1  r  rX   r  r4  r5  r  r  r  )r  r  r  )r  r  r  r  r  Fr+  )r-  r.  r#  r$  r%  r&  r0  r1  r  rX   r  r4  r5  r6  T)r  r   c                      g | ]
}|         S rT   rT   )r   r   r,  s     r7   r   z$Table._splitRows.<locals>.<listcomp>,  s    555Qa555r9   c                      g | ]
}|         S rT   rT   )r   r   splitHs     r7   r   z$Table._splitRows.<locals>.<listcomp>-  s    777q777r9   c                 *    g | ]}j         |         S rT   )r  )r   r   r|  s     r7   r   z$Table._splitRows.<locals>.<listcomp>.  s     <<<Aq}Q'<<<r9   rY   )r-  r.  r#  r$  r%  r&  r0  r1  r  rY   r  r4  r5  r6  r   )G!_getFirstPossibleSplitRowPositionr#  rv   r   r   rx   r  r)  
_splitRowsr   r$  r	  r*  r  r  r  r  r  r  r   rw   r]   r  rI   rJ   r   rw  rE   r  r   r
  r  r   rg   r  re   r  r  r  r4   rO   r  r%  r&  r  r?   r   r   r!  r"  r  r  r  r  r  r  r   r  insertr  r   r  r  r  r  r   r  r  r  r  r~  )br5   r  r  r   r#  	maxrepeatr   lohir$  usedHeights
cellvaluesr1  
cellWidthscurRowHeightminSplitmaxSplit	maxHeightcolumnr   r/  r  r   r  r  r  
splitCellsrK  r  	start_col	start_rowend_colend_rowspanCmdsrf   r  r  r   r!  newCellStyles
bkgrndcmdsspan_scspan_srspan_ecspan_erspanRectr  r  oldStyleresnewSpanCmdsr  rV  newbkgrndcmdsrL   newStyler   r  marginnewlinecmdslinecmdr6  rA  r,  r>  ri   r   r5  
moddedcmdsstartrowendrowr  r  r   R0Heightr   R1HeightR1Stylesh0h1r  newRowHeightnewRowHeightsr  ltor4  r5  r6  r7  r:  r  rD  iRowsiRowHiCSr|  r,  r  sb                                                                                                  @@@r7   r  zTable._splitRows  s    
0
0
0
V
V _
",Z"<"<SJJ#j//RSBS	 	AiKK|K9I $"##c664&=  	FB!ttR3YR!ttR3YRtt{S9I"Q$9O5P5P'P_klll2	_
 \	A#DD33$"2333D " {T5H5K'K'K	d.rr233K)!,J)!,JJ+A.L HHI1:3z:Wa;b;b1c1c + +--u> d&6&:&:FA;&M&M&UeeT]33 + $ 2 25% G GIAve.1DDDF	))$*	s++ 
+ ;;t,,D!$u~!5J'#d))3e6FFI\\F  #8Z%:J-JKKH"8Z%:M-MNNH	))$*	H$|33kK788 ~ I UU
#DK00 & &F"A;D 222(,,fa[$??G +/*:*@*@*B*B 	& 	&JD$#| (EIBIy'7 &) 3 3 &' 1 1 !I !W *t 4 4 4 %! I/3~ 
? 
?+C"b8BAvvdk)Avvdk)Avvdk)Avvdk)OOS2r(RH$=>>>> @ @t/? @ @ @!-

 ' @9 @9D9=9I$9O6GWgw#t4H (I #D$4WQY$? @ @I  -W5g>H//$*:7*CG*L*2Iy%Q QC "!			 .1VDM'*'*1vDGG$
 #%K+3 	B 	BUC$g.%77$g.#55 sW}}70B0B + 2 2C'79KgWXYZWZ^3\ ] ] ] 7{{g.@.@ + 2 2C'1QXGY3Z [ [ ['..UC/@AAAA*H$&M2< K K.UC Wg$666 *00#us1vqsmU1STTT)00#a!}s1vqkSX1YZZZZ)00#uc51IJJJJ!.J  (}}H(22q6 Ac!f A.6HO.3HOO !% 2 21Q4<1Q4 Q QRS TA&2Q&6!%;F t A ( 3 3v = 3 3 3!"1 A ( 6 6& @ 6 608M!$W-- NNDDO#/DO#4?#q,DJ ']4 @ @&*&= '^D A A$T+d;; # 	 	 !+&!%!2"n!]
"&"4"&"4$$&&&!!###  """ !#~ ! !GY`VBB"R&%dD%QVAvvahAvvahu",,B!GGrAvv{**Q"q&&!666'..RGb1XvW\^acgimotv{/|}}}'..RFRGVUZ\_aegkmrty/z{{{'..R!Hr!A#hPVX]_bdhjnpuw|/}~~~00 (..bWr"gvW\^acgimotv{/|}}}'..bWr"gvW\^acgimotv{/|}}}'..r"g2wPVX]_bdhjnpuw|/}~~~'..bWr"gvW\^acgimotv{/|}}}#**7333  ' 0- 0-D!#J#. +7 +7]dZGRWbfeS$eUZ=A=Md=S:'7 K//BLLR7]]+--"--BLL'MMbGmm  "[00+2)01+2Q;)0!X~~ * 1 1%'"bB>65RUW[]achjo$p!" !" !"
  '|| !+ 1 1%'"c(B.?.?)@719cRTV\ooB^`fhmortxz~  AF  HM  %N!" !" !"  '|| !+ 1 1%''!)S25F5F)G"cRTV\ooI^`fhmortxz~  AF  HM  %N!" !" !"  "V|| * 1 1%'"fBxPSUY[_afhm$n!" !" !" '--g6666",KK)||KU|CCC [;6	H8LMMJ!|do-- 	z1I4?** 	BHBHH),ZZ)P)P * *%uOOE5,
ERR III ::<<<8++t =! ='/*/ !..qt|qtUEJJ1M"."2a!7Q4 =!,,6,,,qT =$22f<22		!A$		!A$''!eU;;A>AQQTYTggx,,''!eU;;A>AQQTYTggx,,)))) Z22Jx)9!)<z)IJJL ,QQQ/M  Q555)M! ,QQQ/M  Q1118rd?bT)D1J6D(T_?t?1(
#Dt<<"&"9#D== k$77tId33  
 
A //4>3GGAK 11!T5EsKKAM//4>3GGAK!221d6GMMAN//4>3GGAK..q$-EEAJAA 
)(5//%" 	]FFWFd>$774D11tId++^^T"1"X&QSRSQS*%*?1WYXYWYIZ#Dt<<"%/:DKOO!  	 	 $$Q\$BB	
9U<000
1=|dCCC
1;u\222
1>%555 	H 	HANN1tAw##X 1vGRWbNNAaD7R1IAaCy#99%!"",,FGGGG)(5//% .	6*S)) 
=[j[){
{+mKZK0!%
"3"344

 "&"4"455
5555*5557777J777<<<<<<<d122h$VABBZ/"::#4?#$"1=#44&tL>>&)"-'!    B JJqz)LAAAJJqz!-tJTTTJJqz!+lCCCJJqz!.FFFF QRRALVTUTVTVZ)j#4?#$qrr1B&tL>>&)?J"TAa5;qrr?#:#:PT'!   
 
B JJq<000JJq|dJCCCJJq\222JJq555 	D 	DANN1tAw$$h 1vGRWbNNAaD7RGb!W#55eAabbEllBCCCC !(	BI !(	BIRR2wr9   c                     |D ]^}||         }|d k    rN|d         |d         }}||k    r8t          ||          }t          ||          }|dz   }		 |	|k    rnd | |	<   |	dz  }	_d S )Nr   r,   )r   r   )

impossiblecellsrangesxyr   r  y2yminymaxr   s
             r7   _getRowImpossiblezTable._getRowImpossible^  s     	 	BRjA$wwd1Q42r66RDRD1fAT665&*
11	 	r9   c                    i }| j         r#|s!|                     || j        | j                   | j        r!|                     || j        | j                   d}d}d}| j        D ]}||z   |k    r n||vr|}||z   }|dz   }|S )Nr   r   )r  r  r  r  r   r	  r  r  )r5   r  r  r  r  r   split_atrX  s           r7   r  z'Table._getFirstPossibleSplitRowPositionm  s    
> 	S+ 	S"":d.@AQRRR 	Y"":d.CDDWXXX" 	 	BtK
""dAcAAr9   c                 v   |                      ||           | j        s| j        r| j        |k    rEt          j        dz  sg S t          j        dz  r%t          |                     d           d           |                     || j                   }|r|S | j        r|                     || j                  S g S )Nr   r  rr   z# split called with inadequate widthr  )	r  r%  r&  r  r	   ru  r   r  r  )r5   r  r  r@   s       r7   rw  zTable.split  s    

:{+++? 	Rdo 	R{:%% 79 WI5a7 Wt}}R00UUUVVV __[4??R_SSF   R{QQQ 	r9   c           
         | j         \  }}}}}t          j        |          }t          j        |          }| j        }d|dz   z  }||z  }||z  }	d}
t	          t          d|dz                       D ]}|                                 |                    ||z  ||	z             |                    t          j	        ||dd|
                     | 
                    dd           |
|z  }
|                                 |                                 | j        ^}}}}}|                    t          j                   | 
                    dd           |                                 d S )Nr   r   r   F)clipfill)r+  r   toColorr_  r   r   rD  	translatesetFillColorlinearlyInterpolatedColor_makeRoundedCornersCliprL  rE  r/   )r5   dxdysc0sc1nshadesrD  dwfddxddywfr   r   r  r   r  r;   s                    r7   _makeShadow1zTable._makeShadow1  sh   $(L!BS'nS!!nS!!Iojj%'!),,-- 	 	AKKMMMKK#ae$$$NN6;CaBOOPPP((e!(<<<#IBNN	0B1q	v|$$$$$%a$888	r9   c                     | j         sd S t          | dd           1	 d| _        |                                  d | _        d S # d | _        w xY w|                                  d S )Nr  ){Gz?r  r  r  )r+  r?   r  r  rl   s    r7   _makeShadowzTable._makeShadow  sy    |#VV4t,,4)$7!!!###$(!!!D!((((s   A   	A	T)r   r   r   r   c           
          d  _         t           dd           rt                    |k    rd S  j        } j        } fdt          dd|dz
  f|dz
  df|dz
  |dz
  ff          D             } j        }	 j        }
|
d         |d         z   }|	|         |d         z   }|
|         |d         z   }|	d         |d         z   }||z
  }||z
  }t          |||||||g            _          j	        }|
                                }|                    |||||           |rC|                    d           |                    ||	           |                    d
           d S |                    |||           d S )Nr  c                 v    g | ]5\  }\  }}t          j        |         j        |         |                   6S rT   )r   r  r  )r   r"  r   r   r4  r5   s       r7   r   z1Table._makeRoundedCornersClip.<locals>.<listcomp>  sP       %1Q $"1%doa&8QHH   r9   rr  r   r   r    r,   z%begin table rect clipstrokez%end table rect clipr!  r  )rE  r?   r   r  r
  r  r  r  RoundingRectDefr_  	beginPath	roundRect
addLiteralclipPathdrawPath)r5   r   r
  r!  r  deltasr7  r:  arrl  ru  r   r  r   r  r   r  rD  r   r4  s   `                  @r7   r  zTable._makeRoundedCornersClip  s    $d>$77<c+..44ff    $uQwK1WQK1WeAg&	&     UVAYY"Y"UVAYGG /B1b"b" M MIKKMM	BAq"%%% 	2LL1222JJqJ'''LL/00000JJqDJ11111r9   c           
      b   | j         \  }}}}}}}}|sd S | j        }	|	                                 d x}
x}x}x| _        | _        |	j        }| j        }|D ]E\	  }}}}}}}}}|d k    r|
|k    r|	                    |           |}
||g k    r||	                                 d }n||k    r|	                    |           |}|||k    r|		                    |           |}| 
                    ||           ||k    r||k    s||k     r |||||           ||k    rd}|d         }|d         }nd}|d         }|d         }|||z   k    r|||z
  k    r |||||           |||z   k     rt          d|||f|dd	          nd }|||z
  k    rt          d
|||f|dd	          nd }n||k    s||k     r |||||           r||k    rd}|d         }|d         }nd
}|d         }|d         }|||z   k    r|||z
  k    r |||||           |||z   k     rt          |d||f|dd	          nd }|||z
  k    rt          |d||f|dd	          nd }|	                                }|rs |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                    |	                    |dd           G|	                                 d S )Nr   r    r,   r   r   r   r   r   )r   rQ   r   r   r"  )rE  r_  rD  rc  rM  rG  r  rH  rI  rJ  re  r   r$  moveTocurveTolineTor(  rL  )r5   r   r  r   r  r   r  r*  rF  r_  rN  rO  rP  rG  r4  r9  r:  r;  r<  rA  rL   r,  r>  ri   r   r  r  r  r  r   r   s                                  r7   _restoreRoundingObscuredLinesz#Table._restoreRoundingObscuredLines  sx   '+'<$B1b"b"66yBFFFuFuFty'8: B	/ B	/4R2bc$tDyyT3YY$$$|trzz$LLNNN ET"""E4KK  &&&NN65)))2vvb55BrEEDBr"%%%r66#DABABB DABABr"u99RUDBr"%%%^`acdfaf^f^f\&r"gr\ZZZZlp_abdegbg_g_g\'$2wl[[[[mq b55BrEEDBr"%%%r66!DABABB"DABABr"u99RUDBr"%%%`bcefhch`h`h\$xB!|\\\\nr]_`bce`e]e]e\$ubWbqLYYYYko  A  "Q%  		"Q%(2a58BqE!HRU1Xr!uQx1aQQQQB RB"Q%  		"Q%(2a58BqE!HRU1Xr!uQx1aQQQMM!AAM....r9   c                    | j         }|                                 d x| _        x| _        | _        t          | d          }|r || d            || d           |                                  |                                  |                                  |r || d           | j	        sm|rt          t          | j        | j        | j        dd          | j                            D ]\  }\  }}}} || d|           t          t          ||| j        d d         | j                            D ]H\  }\  }	}
}} || d|||	|
||f||f           |                     |	|
||f||f            || d	           I || d
           nt          | j        | j        | j        dd          | j                  D ]_\  }}}}t          t          ||| j        d d         | j                            D ]&\  }\  }	}
}}|                     |	|
||f||f           '`nN|rt'          | j                  D ]} || d|           t'          | j                  D ]~}| j        ||f         }|k|\  }}}}| j        |         |         }	| j        |         |         }
 || d|||	|
||f||f           |                     |	|
||f||f            || d	            || d
           nt'          | j                  D ]s}t'          | j                  D ]\}| j        ||f         }|I|\  }}}}| j        |         |         }	| j        |         |         }
|                     |	|
||f||f           ]t|r || d           |                                  |r || d            || d           |                                 | j        r|                                  d S d S )Nr  
startTablestartBGendBGr   startRowr~   	startCellendCellendRow
startLinesendLinesendTable)r_  rD  rc  rM  _curcellstyler?   r  r  _drawBkgrndr  r  r  r	  r  r  r  r  r  	_drawCellr   r  r
  r  rQ  rL  rE  r/  )r5   rD  r5  r  rM  rowstylerowpos	rowheightr  cellval	cellstylecolposcolwidthcellRectry   r   r  r  s                     r7   drawz
Table.draw(	  se   I	@DDD$.4+=4,, 	%HT,'''HT)$$$$$&&&+XXd7+++~ &	X dAJ3tO_aeaqsw  tF  GH  GI  GI  tJ  LP  L\  L]  L]  B^  B^ , ,=E=C69HT*U333IRSVWZ\dfjfxy|z|y|f}  @D  @O  TP  TP  JQ  JQ 1 1EEFH k5%)V\^dUehpr{g|}}}w	FF;KhXaMbccc i0000HT(++++, 9<D<LdN^`d`rstsusu`vx|  yI  9J  9J d d4C69IRSVWZ\dfjfxy|z|y|f}  @D  @O  TP  TP  JQ  JQ d dEEFHw	FF;KhXaMbccccdd  X"4;// , ,EHT*U333!&t{!3!3 5 5#'?5%<#@#/4<1Q5&&*&6u&=e&DG(,(8(?(FI$HT+ueWiZ[]^Y_bgioapqqq NN7I1vvWWW$HT)444HT(++++, #4;// X XE!&t{!3!3 X X#'?5%<#@#/4<1Q5&&*&6u&=e&DG(,(8(?(FI NN7I1vvWWWX 0XXd<000 	&HT*%%%HT*%%%	  	1..00000	1 	1r9   c                    | j         }| j        }| j        }| j        }| j        }| j        }| j        }t          | dd           }| j        D ]\  }	\  }
}\  }}}|t          v r|
dk     r|
|z   }
|dk     r||z   }|dk     r||z   }|dk     r||z   }||
         }||         }|t          |dz   |                   }|t          |dz   |                   }||z
  ||z
  }}t          |d          r || |||||           |	dk    rt          t          t          j        |                    }t!          |          }||z
  dz   }t#          |          D ]P}|||z           }|||z            }|r1|                    |           |                    |||| dd           ||z
  }QW|	dk    rt          t          t          j        |                    }t!          |          }||
z
  dz   }t#          |          D ]O}|||z           }||
|z            }|r0|                    |           |                    ||||dd           ||z   }P|rt)          |t          t*          f          rx|d         dv rm||
k    r(||k    r"|r |                    |
|f          }|r|\  }}}}|d         |dd          }}|                                 |                                }|                    ||||           |                    |d	           |d
k    r |                    ||||z   ||d           n|dk    rL||dz  z   }|                    |||||d           |                    ||||z   ||d d d         d           nH|dk    rL||dz  z   }|                    |||||d           |                    |||||z   |d d d         d           n|dk    r |                    |||||z   |d           n|dk    rdt!          |          cxk    rdk    rn n~|d d         \  \  } }!\  }"}#|| |z  z   } ||"|z  z   }"||!|z  z   }!||#|z  z   }#|d         }$|d         }%t!          |          dk    r|d         nd }&|                    | |!|"|#|%|&|$           n/t7          dt8          d|          |dk    rdt!          |          cxk    rdk    rn n|d         \  }'}(||'|z  z   }'||(|z  z   }(|d         \  })}*|*dk    r|}*nZ|*dk    r|}*nQ|*dk    rt          ||          }*n:|*dk    rt;          ||          }*n#t7          d|d         d t8          d|          |)|*z  })|d         }$|d         }%t!          |          dk    r|d         nd }&|                    |'|(|)|%|&|$           nt7          dt8          d|           |                                 t          j        |          }|r^||
k    r(||k    r"|r |                    |
|f          }|r|\  }}}}|                    |           |                    ||||dd           
d S )!Nr  r   r   __call__r'  r"  r(  )VERTICAL
HORIZONTAL	VERTICAL2HORIZONTAL2LINEARGRADIENTRADIALGRADIENTr   rJ  F)r  rL         @r~   rK  rI  rM  r  r+  r    r,   )	positionsr  zWrong length for z arguments rN  r  r  r   r   zBad radius, z, for ) r  r
  r_  r  r  r  r  r?   r  r  r   r\   r]   rj   r   toColorOrNonerx   r   r  rectrv   rw   r   rD  r$  r'  linearGradientr   r6  r   radialGradientrL  )+r5   r7  r:  r_  r  r  r.  r-  r  rf   r  r  r   r!  argr   r  r   r  r   r  
colorCycler   rowCountr   rL   colCountxywharg0pxhyhax0ay0ax1ay1r  rb  r   xcycr   refs+                                              r7   r<  zTable._drawBkgrndd	  s   y))%
O	Dd33	,0,< D	A D	A(C"b8BS\!!8AvvBJrAvvBJrAvvBJrAvvBJrb!Bb!Bc"Q$uoo.Bc"Q$uoo.Bb5"R%qAs:&& yADr2q!,,,,(((
 "#f&:C"@"@AA
J7Q;x    A&qw/E"26*A B))%000		"b!aRq	AAAaBB  (((!#f&:C"@"@AA
J7Q;x  A&qw/E!"q&)A A))%000		"b!Qqa	@@@QBB  [AJsD<88 [AF 'D D D2vv"b&&Y&(}}bW55 0+/LBAq #AABB#D NN$$$((AFF2r1a(((MM!AM...\))++Br"Q$r#U+KKKK..!C%Z++BBC+NNN++BBFBDDbD	RW+XXXX,,!C%Z++BBC+NNN++BBQDDbD	RW+XXXXz))++BBQE+RRRR/// c#hh>>>>>>>>>58!W2JS#
c"$s1u*C"$s1u*C"$s1u*C"$s1u*C%(VF #AA*-c((A++A4A //S#sAQR[a/bbbb",-Y-Y-YRU-Y-Y"Z"ZZ/// c#hh>>>>>>>>>%(VFB!#bdB!#bdB%(VFAs"G||&'!$h&'!$e&)1Qii!$e&)!Ahh&01hA1h1hPR1h1had1h1h&i&i iHA%(VF #AA*-c((A++A4A //B1RX/YYYY",-W-W-WRU-W-W"X"XX%%''''"055E Ar66b"fff#,=="R#9#9D# 4/3B1))%000		"b!Qqa	@@@ID	A D	Ar9   c           	       	   |\  }}|\  }}| j         |ur| j         }	|	|j        |	j        k    r| j                            |j                   |	0|j        |	j        k    s |j        |	j        k    s|j        |	j        k    r+| j                            |j        |j        |j                   || _         |j        }
|j	        }t          |t          t          t          f          rvt          |t          t          f          s|f}g }g }|                     ||||||          \  }}|dk    r||z   |j        z
  }n/|dk    r||j        z   |z   }n|||j        z   |j        z
  |z   dz  z   }|r||d                                         z  }t%          |||          D ]\  }}}|
dk    r||j        z   }nY|
dk    r||z   |j        z
  |z
  }nB|
dv r|||j        z   |j        z
  |z
  dz  z   }n"t+          d	|
d
t-          |                     ||                                z  }||z  }|                    | j        ||           ||                                z  }n|
dk    r| j        j        }||j        z   }n{|
dv r%| j        j        }|||j        z   |j        z
  dz  z   }nR|
dk    r| j        j        }||z   |j        z
  }n2|
dk    r| j        j        }||z   |j        z
  }nt+          d	|
          t;          |                              d          }t?          |          }|j        }|j        }|dk    r||j        z   ||z  z   |z
  }nQ|dk    r||z   |j        z
  |z
  }n:|dk    r"||j        |z   |j        z
  ||z  z   dz  z   |z
  }nt+          d|          i }|j         }|r||d<   |j!        }|r||d<   |r|D ]} ||||fi | ||z  }n|D ]} ||||           ||z  }tE          |dd           }|r || j        |j#        |j$                   |j%        r,| j        &                    |j%        ||||z   ||z   fd           |j'        r/| j        (                    d|j'        ||||z   ||z   fd           d S d S )N)r{  r|  rd  r  r0   rO  r   r.   RIGHT)CENTREr   zInvalid justification z for r   DECIMALr@  r   zBad valign: rQ   rR   onDrawr   )relativer  )Rectrj  ))r;  rL   r_  r  rF   rD   rE   setFontrM   rO   rv   rw   r]   r   r  rI   rJ   ry  r  rG   rH   r   typedrawOnrz  
drawStringdrawCentredStringdrawRightStringdrawAlignedStringr   rw  rx   rQ   rR   r?   r   labelrP   linkURLrS   linkRect)r5   rA  rB  possizerC  r?  rD  r@  curjustrO   r{  r|  r   r  r   r   ry   rF  valsr   rF   rE   drawKwdsrQ   rR   ri  s                               r7   r=  zTable._drawCell	  s   ")Y..$C{io::	&&y777{i/3;>>)BTX[XdBdBdhqhz  B  K  iK  iK	!!)"4i6H)J[\\\!*D"!guT(344 D	=guTl33IzWAA%%ghy1Y%WWDAqu}}Y&)==!!922Q6Ii&==i>RRSTTVYYY8WQZ66888wq++ 
' 
'1a<<VI,A%A7]]x	8N(NQR(RAA111)> >y?U UVW WY\\\AA$%Td%T%T4PQ77%T%TUUUQ%%'''Q1Q'''Q__&&&
' v~~y+Y22---y2HY%::9;QQSVVVy0X%	(>>""y2X%	(>> !B$!B!BCCCw<<%%d++DD		A'G )HxY44QwY>xGY&)==H!!i5	A)BVVWXY`W``beeehpp !:!:!:;;;H!+I;)(;/'G5g+ ! ! !ADAq--H---LAA!  ! !ADAqMMMLAAWXd33F =tygm<<<> 	sIinvvv?PRX[dRd.epqrrr  	DIr9#8PVYaPacilucu?v  BC  D  D  D  D  D	D 	Dr9   c                     t          |          r?|sd n3t          |          t          dt          |          z
  d          dgz  z   | _        d S t          d|          )Nr  r   z@cornerRadii should be None or a list/tuple of numeric radii
not )r   r]   r   rx   r  r   )r5   r4  s     r7   r(  zTable._setCornerRadiiM
  st     -- 	r,7 pT+=N=NRUVWX[\gXhXhVhijRkRkmnloRo=pDpalppqqqr9   )rr   )NNrp  )rp  rp  r2   ro   )r   )Fr   )=rA   rB   rC   r   r8   rm   r  r  re  ro  r  r  r  rv  r  r  r  r  r  r  r  r  r  r  r'  r$  r  rQ  rC  rZ  rX  rY  re  r]  ro  r^  rx  rz  r~  r  r  r  r  r  r  r  r  r  staticmethodr  rw  r  r  r	   r  r  r/  rF  r<  r=  r(  rT   r9   r7   r   r   
  sG       '+DqQY]ei4dZ^ DDX\%dp p p pdl l l  ()o )o )o )oV    4   :9 9 9 9=( =( =( =(~#B #B #BJc c c cJ" " "B5 5 5"     p p pd  ,-5 -5 -5^.8 .8 .8`2$ 2$ 2$h4 4 4$R R R;J ;J ;Jz, , ,\9 9 9F F FN N NL L L% % %1 1 1&N N N
1 1 1&N N N
+ + +
   H H H H.', ', ', ',RH H H H*V V VX X Xt: : : :x1" 1" 1"f[ [ [ [z   #l#455   (  0  ,	  	  	  ,5?aVW`i 2 2 2 2BK K KZ:1 :1 :1xMA MA MA^XD XD XDtr r r r rr9   r   rZ  rX  rY  ro  r]  r^  rx  )r  r  r  r  r  r  r  r  c                       e Zd ZdZdZdS )r   z+Henning von Bargen's changes will be activer   N)rA   rB   rC   __doc__r   rT   r9   r7   r   r   \
  s        55r9   r   c                   T    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S )TableRenderCBzDtable render callback abstract base klass to be called in Table.drawc                     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 )rv   r   r   rk   r?   )r5   r|  rf   argsmeths        r7   rH  zTableRenderCB.__call__d
  sy    !E""o*5nVZ[\V]V]5n5n5n*o*o$otC%%I:&H3&H&HIIIQr9   c                      t          d          )Nr1  NotImplementedErrorr5   r|  s     r7   r1  zTableRenderCB.startTablei
      !,///r9   c                      t          d          )Nr2  r  r  s     r7   r2  zTableRenderCB.startBGk
      !),,,r9   c                      t          d          )Nr3  r  r  s     r7   r3  zTableRenderCB.endBGm
  s    !'***r9   c                      t          d          )Nr4  r  )r5   r|  r  s      r7   r4  zTableRenderCB.startRowo
      !*---r9   c                      t          d          )Nr5  r  )r5   r|  r  r  rA  rB  rv  rw  s           r7   r5  zTableRenderCB.startCellq
  s    !+...r9   c                      t          d          )Nr6  r  r  s     r7   r6  zTableRenderCB.endCells
  r  r9   c                      t          d          )Nr7  r  r  s     r7   r7  zTableRenderCB.endRowu
  s    !(+++r9   c                      t          d          )Nr8  r  r  s     r7   r8  zTableRenderCB.startLinesw
  r  r9   c                      t          d          )Nr9  r  r  s     r7   r9  zTableRenderCB.endLinesy
  r  r9   c                      t          d          )Nr:  r  r  s     r7   r:  zTableRenderCB.endTable{
  r  r9   N)rA   rB   rC   r  rH  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  rT   r9   r7   r  r  b
  s        NN  
0 0 0- - -+ + +. . ./ / /- - -, , ,0 0 0. . .. . . . .r9   r  c                      | d         t           v S r   )LINECOMMANDS)rf   s    r7   r0  r0  ~
  s    q6\!!r9   c                 j   | |         |         }|dk    rWt          |          }|d         |_        |dk    r3|d         |_        |dk    r|d         |_        d S |j        dz  |_        d S d S |dv r|d         |_        d S |dv r|d         |_        d S |dk    r|d         |_        d S |d	k    r6t	          j        |d         t	          j        ddd                    |_        d S |d
v 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k    r|d         |_        d S d S )NFONTr   r   r    rt  )FONTNAMEFACE)SIZEFONTSIZELEADING	TEXTCOLOR)ALIGN	ALIGNMENTVALIGNLEFTPADDINGRIGHTPADDING
TOPPADDINGBOTTOMPADDINGHREFDESTINATION	DIRECTIONSHAPING)rx   rD   rE   rF   r   r  ColorrL   rM   rO   rG   rH   rI   rJ   rP   rS   rQ   rR   )r1  r   r   r6  r  r  r   s          r7   r3  r3  
  s    Q-
C	V||KKayQ33!!9CLss$Qi!l3. 3 
#	#	#ay	#	#	#ay	yQi	{		N6!9fl1Qq.A.ABB				%	%	%q		xAY


	}		 )	~		!!9	|					"1I	v!9	}		 )	{		q		yQi 
r9   r  rr  r~   r~   g      ?)r  )r   r   r  rf  r  r   r  r  )r~   r   r  )r   r~   r  )r   r   __main__)old_tables_test)r   r   r   )O__all____version__r  reportlab.platypus.flowablesr   r   	reportlabr	   reportlab.lib.stylesr
   r   r   reportlab.libr   reportlab.lib.utilsr   r   r   r   r   r   r   r   reportlab.lib.validatorsr   reportlab.lib.rl_accelr   reportlab.lib.abagr   rk  reportlab.pdfbase.pdfmetricsr   r  r   r   r   collectionsr   r1  r2  r   r   rp   rz   r   r   r   r  r   r   r   r   r   rw   r   r   r#  r   r  r   rK  r   r]   r  r  r  r0  r3  r-   
GRID_STYLE	BOX_STYLELABELED_GRID_STYLEr  COLORED_GRID_STYLEgreen
LIST_STYLErA   tests.test_platypus_tablesr  rT   r9   r7   <module>r     s  

 	 @ ? ? ? ? ? ? ?       K K K K K K K K K K            ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( : : : : : : ) ) ) ) ) ) 0 0 0 0 0 0 4 4 4 4 4 4 G G G G G G G G 3 3 3 3 3 3 " " " " " "Qqa!	D	Dq!Qq
A
A	       :       0 j(EPklll: : :. . .`? ? ?   * 1: / / / /,  
= 
= 
=   "&9?    (	 	 	 	 	 	 	 	    5    */0GHH:01YZZ KG%r G%r G%r G%r G%rH G%r G%r G%rRJ # $,*)**. .
        tJOO%%&&. . . . . . . .8" " ")  )  ) V ZeWdFL1') 
 JUGT6<0') 	  Z5'46UGQ-5&!V\25&!V\2'	)    Z5'46UGQ
+5&!V\25&!V\2'	)   Z5&!V\25'4667Av|4') 
 z::::::O r9   