
    i             
       r   d Z dZdZddlmZmZ ddlmZ ddlm	Z	m
Z
mZ ddlmZ ddlmZmZmZmZmZmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlm Z m!Z! ddlm"Z" ddl#m$Z$ ddddddZ%ddddddZ& G d de	          Z' G d d          Z( e$ddd          Z)d Z*d Z+d Z,dQd"Z-ej.        fd#Z/d$ Z0d% Z1d& Z2dej.        fd'Z3 G d( d)e4          Z5 G d* d+e4          Z6 e$d,d-          Z7 e$d.d/          Z8d0Z9 G d1 d2e          Z:d3d4d4d5d6d7d8d9d:Z; G d; d<e:          Z< e=e;>                                          Z? G d= d>          Z@d? ZAd@ ZB e(dAdBdCdDejC        fdEg          ZD e(dFdBdCdGejC        fdEg          ZE e(dHdBdCdDejC        fdFdBdCdejC        fdIdBdJdejC        fdKdBdLdejC        fdEg          ZF e(dHdBdCdDejC        fdFdBdCdejG        fdIdBdJdejC        fdKdBdLdejC        fdEg          ZH e(dMdBdJdejI        fdMdNdCdDejC        fdIdLdCdejI        fdEg          ZJeKdOk    rddPlLmMZM  eM             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__)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)selfr2   parents      i/var/www/html/Pagina-Ingenieria-Requisitos/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   r2   dir
startswithsetattrgetattr)r4   resultr2   s      r6   r3   zCellStyle.copy?   sc    >ty))FII 	7 	7Ds##-XFD'$"5"56666r8   r1   )__name__
__module____qualname__r   fontnamefontsizeleadingleftPaddingrightPadding
topPaddingbottomPaddingfirstLineIndentcolor	alignment
backgroundvalignhref	directionshapingdestinationr7   r3    r8   r6   r   r   *   s        HHGKLJMOEIJFDIGK        r8   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)r4   cmdsr5   kwpcmdsas         r6   r7   zTableStyle.__init__H   s     	&&((+EDJ1 6 66!$$ 6D76!#4#45556 ET$*"---


"r8   c                 :    | j                             |           d S r1   )r]   append)r4   cmds     r6   addzTableStyle.addX   s    
#r8   c                 b    dd                     t          t          | j                            z  S )Nz!TableStyle(
%s
) # end TableStylez  
)joinmapreprr]   r4   s    r6   __repr__zTableStyle.__repr__Z   s%    4v{{3tTZCXCX7Y7YYYr8   c                     | j         S r1   )r]   rk   s    r6   rY   zTableStyle.getCommands\   s
    zr8   NN)r@   rA   rB   r7   rf   rl   rY   rS   r8   r6   r   r   G   sX              Z Z Z    r8   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    r6   _rowLenry   a   s)    !U4L)))/a93q669r8   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   )	rd   ru   r   strstripendswithfloatrw   max)VavailRrIiJjswnvfms                 r6   _calc_pcr   d   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Hr8   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+   rS   )PkindQ0Q1Q2R0R1S0s           r6   _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>r8   
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   rP   r   txhiylor   yhixlos                r6   _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Hr8   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   )getrw   r   min)canvLinescpecpyhBlocksFUZZr   r   x0x1i0i1s               r6   _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.....<<r8   c                 p    d|dz
  z  |z  }||z  }t          |          D ]} || |||           ||z  }d S )Nr   r   )range)r   r   r   r   wscountoffsetidxs           r6   
_multiLiner      s]    %']2FKAU||  aa   	R r8   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   )valueri   lowhighr2   re   ivalues          r6   _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     r6   	_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 r1   rS   ).0ikivs      r6   	<genexpr>zspanFixDim.<locals>.<genexpr>   s*      %L%L%"Rr"g%L%L%L%L%L%Lr8   r   c                 N    g | ]!}|                              |d           z   "S r   )r   )r   rx   Mr   s     r6   
<listcomp>zspanFixDim.<locals>.<listcomp>   s-    777Q1aeeAajj777r8   c                 $    g | ]}|         
|S r1   rS   )r   rx   V0s     r6   r   zspanFixDim.<locals>.<listcomp>   s    66611Qr8   r   )rw   reversedsorteditemssumr   r   r   )r   r   spanConslimr   r   r   r   r   Xrx   r   s   ``         @r6   
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  !	!	 r8   c                       e Zd ZdS )_ExpandedCellTupleN)r@   rA   rB   rS   r8   r6   r   r      s        Dr8   r   c                       e Zd Zd ZdS )_ExpandedCellTupleExc                 f    t                               | |          }||_        ||_        ||_        |S r1   )rv   __new__tagTypealtTextextras)clsseqr   r   r   r4   s         r6   r   z_ExpandedCellTupleEx.__new__   s/    }}S%%r8   N)r@   rA   rB   r   rS   r8   r6   r   r      s#            r8   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vAlignru   rv   r\   r   identity	_renderCBrw   _nrows_cellvaluesr   ri   ry   _ncolsr	   emptyTableActionr>   longTableOptimizer   r   	__class__globalskeysr   r   r   red	textColoryellow	backColorr7   r@   r   	identitiynormalizeDataallowShortTableRows	enumerate_rowHeights_argH
_colWidths_argWr   rd   r   rj   _cellStyles_bkgrndcmds	_linecmds	_spanCmds_nosplitCmds	_srflcmds_sircmds
repeatRows
repeatCols
splitByRow
splitInRowsetStyler   _setCornerRadii_rowSplitRangerW   rX   _minRowHeightsro   _shadow)"r4   data	colWidths
rowHeightsstyler"  r#  r$  r%  r
  r  r  r  normalizedData
cellStylesrowSplitRangerW   rX   r  minRowHeightscornerRadiirenderCBshadownrows_seqCW_seqRHncolsr   r   dcellrowscellcolsr   lmrhs"                                     r6   r7   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r8   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  r@   )r4   r   ccvr@  s        r6   rl   zTable.__repr__|  s    D{33Dk22T-44^^BZZf%%LPNLcLcLcdededefgfgfghjhjhjkkr8   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    r6   normCellz%Table.normalizeData.<locals>.normCell  s+    }ru &r8   c                 &    g | ]} |          S rS   rS   )r   cellrH  s     r6   r   z'Table.normalizeData.<locals>.<listcomp>  s!    555hhtnn555r8   )rd   )r4   r+  outDatarowoutRowrH  s        @r6   r  zTable.normalizeData  s[    	 	 	  	# 	#C5555555FNN6""""r8   rq   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          t          |                    z  }n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 %d)z with cell(%d,%d) containing
%sz...z"<%s@0x%8.8X %s rows x %s cols%s>%s)r  r>   r   ru   r\   rv   r   r  r   r   r   r   rj   r  r@   id)r4   maxLenvxnrncrD  rhbr   r   r   r   vijixjxtallests                   r6   r  zTable.identity  s2   :(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 	(3s2ww<<7GGG 	3r"T"XX6FFBBB3t~7NPRSWPXPXZ\^`bikm6nnnr8   c              #      K   t          | dd           }|D ]6}t          |dd           r|                    |||          D ]}|V  2|V  7d S )Ncanv__split_only__)r>   splitOn)r4   CaWaHr]  rC  r:  s          r6   _cellListIterzTable._cellListIter  s      tF4(( 	 	Aq)$// 42..  AGGGG 	 	r8   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   )ru   r   r   r   rd   rc  r   	CellFrameframeActionre  rf  r   r[   r   __self__r   r   r   )r4   r   ra  rb  r`  framer   rC  s           r6   _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r8   @ c                    |sdS ||j         z
  |j        z
  }||j        z
  |j        z
  }|dk     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   z%: flowable given negative availWidth=z
 == width=z - leftPadding=z - rightPadding=r]  r?  333333?)rF   rG   rH   rI   r   r  r>   ru   r   _elementWidthrw   splitrD   r   wrapOngetSpaceBeforegetSpaceAfterrd   )r4   r   r   r   WHrb  ra  r   r]  sb0vwvhr   sbsas                   r6   _listCellGeomzTable._listCellGeom  s   /!,0a44  f  fVX  f  fde  f  fvw  wD  f  f  VW  Vd  f  f  g  g  gtF4((a 	"##Aq))BQWWT]]##AJ.s2Bq"::r>! 		 		AXXdB++FB!!##B""B}ahhrlll}ahhrlllAb		Ab2A{!c'B,r8   c                 t    |sdS d}d}t          | dd           t          fd|D                       S )Nrp  r   r]  c                 J    g | ]}|                               d           S r   )rt  )r   r   rb  ra  r]  s     r6   r   z)Table._listValueWidth.<locals>.<listcomp>  s.    777AHHT"R((+777r8   )r>   r   )r4   r   rb  ra  r   r   r]  s     ``  @r6   _listValueWidthzTable._listValueWidth  sS    tF4((777777Q777888r8   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]  rS   r   r{   	Flowable 	 in cell(,) can't have auto width
rq   r   
spanning problem in z
W0=z W=

spanCons=r   )r>   r   r  r  _colSpanCells_spanRangesr  r  indexr  r   rr  r   r  rF   rG   r   r   r   r  _colpositionsrd   _widthr  )r4   
availWidthrw  r]  savedcolSpanCells
spanRangesr   W0r   Sr   r   r   Vir   r   jispanr   c0c1rx   widths                           r6   _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 rS   r   )r   rx   fontNamefontSizes     r6   r   z'Table._elementWidth.<locals>.<listcomp>h  s%    @@@K(844@@@r8   )ru   r\   rv   rr  r   r   _fixedWidthr[   r  r   r   r  r>   r  AttributeErrorr   rs  rC   rD   )r4   r   r   r   eewr  r  s         @@r6   rr  zTable._elementWidthE  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                 Z
   | j         }|st          | j        |          }t          |          x}}| j        }d |v re| 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          r|                     ||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   }t           j(        st||k    rnddl)m*}  |d|d                             d          tW          |          tW          |          ||tW          |          |                     d          fz            nI|d urtY          |          pd-                    d          }|j"        p	d	|j!        z  t          |          z  }||j.        |j/        z   z  }|rC|d         }|d         } || k    r-|| f}!tG          |                    |!|          |          ||!<   d}||k    r|}|rtG          ||         |          n|||<   |rV|dz   }ta          |d |                   }"|"|k    r4|r2tG          d |1                                D                       }#||#k    rnd |v d |vr|}|rS	 te          |||           n@#  tg          d|                                 d|d|d|d|d|d|d|           Y nxY wg x| _4        }dx}"}$tk          |dz
  dd          D ]1}|6                    |"           ||         |$z
  }%|"|%z   }||"z
  |%z
  }$|}"2|6                    |"           |"| _7        |8                                 || _9        d S )Nr]  rS   r   r  r  r  r  rq   rq  r   r   )LayoutErrorzGFlowable %s (%sx%s points) too wide for cell(%d,%d) (%sx* points) in
%sr   r?  r+   c              3   &   K   | ]}|d          V  dS )r   NrS   )r   rx   s     r6   r   z%Table._calc_height.<locals>.<genexpr>  s&      %D%Dqad%D%D%D%D%D%Dr8   r  z hmax=z lim=z avail=z x z
H0=z H=r  r}   ):r  r   r  rw   r   r)  r>   r  _rowSpanCellsr  r  r  	_fontname	_fontsize_leadingr  r	   _FUZZr  r  r  r  r\   zipr   ru   rv   r   rm  _canGetWidthr   r  rC   rD   rE   r   r~  r  rF   rG   allowTableBoundsErrorsreportlab.platypus.doctemplater  r   r   rs  rI   rH   r   r  r   r   _rowpositionsr   rd   _heightr   _hmax)&r4   availHeightr  rx  rw  hmaxr   	longTabler2  r]  r  rowSpanCellsr  r  colpositionsH0r   r   r   r   r  hr   r   r   r   r  r  dWr   r  r0r1rx   heightmsrrC  r   s&                                         r6   _calc_heightzTable._calc_heightj  sS   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#,#C K1 V V V V V V&1k2|  AB  CD  AE  AN  AN  OQ  AR  AR  SY  Z\  S]  S]  ^d  ef  ^g  ^g  hi  jk  ms  tu  mv  mv  x|  xE  xE  FH  xI  xI  @J  3J  'K  'K  !K!"$!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 %c !))d 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   Q! !;R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~   )rw  )r  _hasVariWidthElements_calcPreliminaryWidthsr  _calcSpanRangesr  r  r  _calcNoSplitRangesr  _calcSpanRects)r4   r  r  rw  s       r6   _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(((> 	"!!!!!	" 	"r8   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  )r4   rV  r[  rowNums       r6   _culpritzTable._culprit  s5     b'''"" +W44r8   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  )r4   upToRowrL  colr   s        r6   r  zTable._hasVariWidthElements  s    
 ?dkGT['2233 	 	CT[))  (-c2((// 111 qr8   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   )ru   r\   rv   r  r   r  )r4   thingelems      r6   r  zTable._canGetWidth  sp    eT5M** 
	  ((.. 111x(( 	$$ 1r8   c                 L	   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 |#||<   n9|dk    rg }$|                                D ]V\  }}|                    d          r<|t          |dd                   z  |z  x||<   }||z  }|$                    |           W|$D ]}||= ~$t+          |                                          }|||z   z
  }|dk     rZ|t.          j        z  |z   dk    rD| |z  }%t3          |          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   ru   r   rr  r   r	  r  r  r  rF   rG   r   r  rd   rw   r   sortr   r   valuesr	   defCWRFr  r  )'r4   r  rw  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'                                          r6   r  zTable._calcPreliminaryWidths  sZ     ! 	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zz# ('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_r8   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  rr  r   r  r  r  rw   r   rF   rG   r   r   )r4   rw  r  r  rowNosr  stylesr  r   r  r  r   r.  r  s                 r6   r  zTable.minWidth  s   )t{##!!3q66]] 	" 	"E%AyAsFFi#&6&6F# , ,E"5M%0E"5M%0E'<e44 ,--2-?@CsOOEEq!r8   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  rd   r  )r4   r  rx   r   csarsare   startstopr   y0r   y1s                r6   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 	5r8   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_rowNoSplitCellsrd   r  )r4   nosplitRangesrx   r   r  r  re   r  r  r   r   r   r  s                r6   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 	8r8   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  rw   r  r   r   
setdefaultrd   r   r  r  r  r  _vBlocks_hBlocks)r4   	spanRectsr  r  r  rowpositionsvBlocksr   rlimcoordr   col0row0col1row1r  rL  r:   rx   r   r  r  s                         r6   r  zTable._calcSpanRects@  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 rV   )ru   r   rY   rw   r   _SPECIALROWSr   _addCommandrZ   r   r=   r[   r>   )r4   tblstylere   rC  scsrecerkr   rb   s              r6   r&  zTable.setStylet  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 	4r8   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   )r4   r  r  r  r  s        r6   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Qr8   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      rh   	   r(   r+   ROUNDEDCORNERSr   )r  rd   r  r  _isLineCommandr\   rw   r   r   LINECAPS	LINEJOINSr  rv   r'  r  r   r!  r   r   _setCellStyler  )r4   re   r(  rh   	lineCountspaceopr  r  r  r  r  r   r   s                 r6   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r8   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 r1   )r   r   r  r   r   )xsysxeyeaSLr(  rK   dashrh   	ocanvlinerrdweights       r6   
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*****r8   _drawUnknown)r]  	saveState_roundingRectDefSLlinerd   r  ru   r   r  
setLineCapsetDashsetLineJoinr   r>   
_LineOpMapr   restoreState	_curcolor)r4   ccapcdashcjoinr]  rC  r?  r3  r  r  r  r  r   r2  r:  r(  rK   r;  rh   r<  r=  r>  s                 @@@@@@@@r6   
_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   r3  zUnknown line command )sys	_getframef_localsr   )	r4   r  endr>  rK   r   r2  rP  r3  s	            r6   r@  zTable._drawUnknown  s;    


]]1&t,777888r8   c                 n    |                      ||||||           |                     ||||||           d S r1   )_drawBox_drawInnerGrid)r4   r  rS  r>  rK   r   r2  s          r6   	_drawGridzTable._drawGrid  sB    uc65%???UCuEEEEEr8   c                 "   |\  }}|\  }	}
|                      ||f|	|f||||           |                      ||
dz   f|	|
dz   f||||           |                     ||f||
f||||           |                     |	dz   |f|	dz   |
f||||           d S rt   _drawHLines_drawVLinesr4   r  rS  r>  rK   r   r2  r  r  r  r  s              r6   rU  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Mr8   c                     |\  }}|\  }	}
|                      ||dz   f|	|
f||||           |                     |dz   |f|	|
f||||           d S rt   rY  r\  s              r6   rV  zTable._drawInnerGrid  sn    22"bdb"XvueUKKK"Q$b"XvueUKKKKKr8   c                     |r,|| j         k    r!| j                            |           || _         |r.|| j        k    r%| j                            |           || _        d S d S d S r1   )rJ  r]  setStrokeColor
_curweightsetLineWidth)r4   r>  rK   s      r6   	_prepLinezTable._prepLine  sx     	#UDN**I$$U+++"DN 	%fdo--I""6***$DOOO	% 	%--r8   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 r1   r   r   r   r   r  r   r   r   s          r6   <lambda>z#Table._drawHLines.<locals>.<lambda>(      U_`bcefhiqrtuzU{U{ r8   )r  r  rw   rb  r>   r]  rD  r   )r4   r  rS  r>  rK   r   r2  r  r  r  r  r   rpr   r   r   r   lfs                     r6   rZ  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 1r8   c                 b    |\  }}|\  }	}
|                      ||dz   f|	|
dz   f||||           d S rt   )rZ  r\  s              r6   _drawHLinesBzTable._drawHLinesB,  sH    22"bdb"Q$ZuMMMMMr8   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 r1   rS   )r   r   r  r   _lines        r6   rg  z#Table._drawVLines.<locals>.<lambda>;  s    bBr@R@R r8   c                 *    t          | |||||          S r1   re  rf  s          r6   rg  z#Table._drawVLines.<locals>.<lambda>@  rh  r8   )r  r  rw   rb  r>   r]  rD  r   )r4   r  rS  r>  rK   r   r2  r  r  r  r  erpcpsrpr  r   rx   rj  s                     r6   r[  zTable._drawVLines1  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 1r8   c                 b    |\  }}|\  }	}
|                      |dz   |f|	dz   |
f||||           d S rt   )r[  r\  s              r6   _drawVLinesAzTable._drawVLinesAD  sH    22"Q$bdBZuMMMMMr8   c                 X    |                      ||           || _        | j        | j        fS r1   )r  r  r  r  )r4   r  r  s      r6   wrapz
Table.wrapI  s,    

:{+++$T\**r8   c                     dS )z
        This method will be called when the Table is split.
        Special purpose tables can override to do special stuff.
        NrS   )r4   TbyRows      r6   onSplitzTable.onSplitN  s	    
 	r8   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  rv   )r4   r   r_   nr0doInRowSplit	_srflModer9  rC  r  r  r  r  s               r6   _cr_0zTable._cr_0U  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r8   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   )rw   setr	  r  r  rv   r   r\   r  r   r   r(  )r4   r   nRowsr"  r_   r~  r  nrrrrSr9  rC  r  r  r  r  cSs                   r6   _cr_1_1zTable._cr_1_1l  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###		, 		,r8   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  r9  rv   )
r4   r   r_   r~  r  rC  r  r  r  r  s
             r6   _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r8   c                 Z    t          | dd           }||n|j        |j        z
  |j        z
  S )N_frame)r>   r  _topPadding_bottomPadding)r4   defaultr   s      r6   _getPossibleHeightzTable._getPossibleHeight  s2    D$'')wwQ])BQEU)UUr8   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)rx  r   r   r   r   r  
_findSplitr]  T)
mergeSpacer   contentparaFixTOPr?  rq  r   r/   )r   r   )rH   ru   rv   r\   r~  rN   r  r>   rd   ru  rv  r[   r  extendrs  r   rD   rE   rw   r   rh   )r4   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                              r6   
_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 xr8   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  ru   r   r  rd   )r4   r   r~  r6  r9  Ar3  r  r  r  r  r>  rK   r(  r;  rh   r   r2  s                     r6   _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[\]]]]r8   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)rd   r  rk  )r4   r   r_   oldrowcount	stretchedrC  re   r  r  r  r  s              r6   _stretchCommandszTable._stretchCommandsD  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!!r8   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 r1   rS   r   r:   s     r6   r   z$Table._splitRows.<locals>.<listcomp>  s     333QAaaaD333r8   r?  rq  c                 "    g | ]}|d d          S r1   rS   r  s     r6   r   z$Table._splitRows.<locals>.<listcomp>  s      @ @ @!111 @ @ @r8   r+   r   r/   r  r   rW   _cornerRadiir  )r,  r-  r"  r#  r$  r%  r/  r0  r  rW   r  r3  r4  r  r  r  )r  r  r  )r  r  r  r  r  Fr*  )r,  r-  r"  r#  r$  r%  r/  r0  r  rW   r  r3  r4  r5  T)r  r   c                      g | ]
}|         S rS   rS   )r   r   r+  s     r6   r   z$Table._splitRows.<locals>.<listcomp>"  s    555Qa555r8   c                      g | ]
}|         S rS   rS   )r   r   splitHs     r6   r   z$Table._splitRows.<locals>.<listcomp>#  s    777q777r8   c                 *    g | ]}j         |         S rS   )r  )r   r   ry  s     r6   r   z$Table._splitRows.<locals>.<listcomp>$  s     <<<Aq}Q'<<<r8   rX   )r,  r-  r"  r#  r$  r%  r/  r0  r  rX   r  r3  r4  r5  r   )G!_getFirstPossibleSplitRowPositionr"  ru   r   r   rw   r  r(  
_splitRowsr   r#  r  r)  r  r  r  r  r  r  r   rv   r\   r~  rH   rI   r   rs  rD   r  r   r	  r  r   rf   r  rd   r  r  r  r3   rN   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{  )br4   r  r~  r   r"  	maxrepeatr   lohir#  usedHeights
cellvaluesr0  
cellWidthscurRowHeightminSplitmaxSplit	maxHeightcolumnr   r.  r  r   r  r  r  
splitCellsrJ  r  	start_col	start_rowend_colend_rowspanCmdsre   r  r  r  r  newCellStyles
bkgrndcmdsspan_scspan_srspan_ecspan_erspanRectr  r  oldStyleresnewSpanCmdsr  rS  newbkgrndcmdsrK   newStyler   r  marginnewlinecmdslinecmdr3  r>  r(  r;  rh   r   r2  
moddedcmdsstartrowendrowr  r  r   R0Heightr   R1HeightR1Stylesh0h1r  newRowHeightnewRowHeightsr  ltor3  r4  r5  r6  r9  r  rC  iRowsiRowHiCSry  r+  r  sb                                                                                                  @@@r6   r  zTable._splitRowsw  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r8   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
             r6   _getRowImpossiblezTable._getRowImpossibleT  s     	 	BRjA$wwd1Q42r66RDRD1fAT665&*
11	 	r8   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  )r4   r  r  r  r  r   split_atrV  s           r6   r  z'Table._getFirstPossibleSplitRowPositionc  s    
> 	S+ 	S"":d.@AQRRR 	Y"":d.CDDWXXX" 	 	BtK
""dAcAAr8   c                    |                      ||           | j        s| j        r]t          j        s| j        |k    rg S |                     || j                   }|r|S | j        r|                     || j                  S g S )Nr  )r  r$  r%  r	   r  r  r  )r4   r  r  r?   s       r6   rs  zTable.splitw  s    

:{+++? 	Rdo 	R3YJ8N8NWYPY __[4??R_SSF   R{QQQ 	r8   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   rA  	translatesetFillColorlinearlyInterpolatedColor_makeRoundedCornersCliprI  rB  r.   )r4   dxdysc0sc1nshadesrC  dwfddxddywfr   r   r   r   r  r:   s                    r6   _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	r8   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  rk   s    r6   _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 rS   )r   r  r  )r   r  r   r   r3  r4   s       r6   r   z1Table._makeRoundedCornersClip.<locals>.<listcomp>  sP       %1Q $"1%doa&8QHH   r8   rp  r   r   r   r+   z%begin table rect clipstrokez%end table rect clipr  r  )rB  r>   r   r  r	  r  r  r  RoundingRectDefr]  	beginPath	roundRect
addLiteralclipPathdrawPath)r4   r   r  r  r  deltasr6  r9  arri  rr  r   r   r   r  r   r  rC  r   r3  s   `                  @r6   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1r8   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   rP   r   r   r  )rB  r]  rA  r`  rJ  rD  r  rE  rF  rG  rb  r   r!  moveTocurveTolineTor%  rI  )r4   r   r   r   r  r   r  r'  rC  r]  rK  rL  rM  rD  r3  r6  r7  r8  r9  r>  rK   r(  r;  rh   r   r  r  r  r  r   r   s                                  r6   _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....r8   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]  rA  r`  rJ  _curcellstyler>   r  r  _drawBkgrndr  r  r  r  r  r  r  r  r  	_drawCellr   r  r	  r  rN  rI  rB  r,  )r4   rC  r4  r  rL  rowstylerowpos	rowheightr  cellval	cellstylecolposcolwidthcellRectrx   r   r  r  s                     r6   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 	1r8   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  rG  F)r  rI         @r}   rH  rF  rJ     r'  r   r+   )	positionsr  zWrong length for z arguments rK  r  r  r   r   zBad radius, z, for ) r  r	  r]  r  r  r  r  r>   r  r  r   r[   r\   ri   r   toColorOrNonerw   r   r  rectru   rv   r   rA  r!  r$  linearGradientr   r3  r   radialGradientrI  )+r4   r6  r9  r]  r  r  r-  r,  r  re   r  r  r  r  argr   r   r   r  r   r  
colorCycler   rowCountr   rK   colCountxywharg0pxhyhax0ay0ax1ay1r  r`  r   xcycr   refs+                                              r6   r9  zTable._drawBkgrndV	  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r8   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)rw  rx  rb  r  r/   rL  r   r-   RIGHT)CENTREr   zInvalid justification z for r   DECIMALr?  r   zBad valign: rP   rQ   onDrawr   )relativer   )Rectrh  ))r8  rK   r]  r  rE   rC   rD   setFontrL   rN   ru   rv   r\   r   r~  rH   rI   ru  r  rF   rG   r   typedrawOnrv  
drawStringdrawCentredStringdrawRightStringdrawAlignedStringr   rs  rw   rP   rQ   r>   r   labelrO   linkURLrR   linkRect)r4   r>  r?  possizer@  r<  rA  r=  curjustrN   rw  rx  r   r  r   r   rx   rC  valsr   rE   rD   drawKwdsrP   rQ   rg  s                               r6   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r8   c                     t          |          r?|sd n3t          |          t          dt          |          z
  d          dgz  z   | _        d S t          d|          )NrM  r   z@cornerRadii should be None or a list/tuple of numeric radii
not )r   r\   r   rw   r  r   )r4   r3  s     r6   r'  zTable._setCornerRadii?
  st     -- 	r,7 pT+=N=NRUVWX[\gXhXhVhijRkRkmnloRo=pDpalppqqqr8   )rq   )NNrn  )rn  rn  r1   rn   )r   )Fr   )=r@   rA   rB   r   r7   rl   r  r  rc  rm  r~  r  r  rr  r  r  r  r  r  r  r  r  r  r  r&  r   r  rN  r@  rW  rU  rV  rb  rZ  rl  r[  ru  rw  r{  r  r  r  r  r  r  r  r  r  staticmethodr  rs  r  r  r	   r  r  r,  rC  r9  r:  r'  rS   r8   r6   r   r   	  sG       '+DqQY]ei4dZ^ DDX\%dp p p pdl l l  (&o &o &o &oP    4   49 9 9 9=( =( =( =(~#B #B #BJ` ` ` `D" " "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   (  (  ,	  	  	  ,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r8   r   rW  rU  rV  rl  rZ  r[  ru  )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)r@   rA   rB   __doc__r   rS   r8   r6   r   r   N
  s        55r8   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 )ru   r   r   rj   r>   )r4   ry  re   argsmeths        r6   rE  zTableRenderCB.__call__V
  sy    !E""o*5nVZ[\V]V]5n5n5n*o*o$otC%%I:&H3&H&HIIIQr8   c                      t          d          )Nr.  NotImplementedErrorr4   ry  s     r6   r.  zTableRenderCB.startTable[
      !,///r8   c                      t          d          )Nr/  r  r  s     r6   r/  zTableRenderCB.startBG]
      !),,,r8   c                      t          d          )Nr0  r  r  s     r6   r0  zTableRenderCB.endBG_
  s    !'***r8   c                      t          d          )Nr1  r  )r4   ry  r  s      r6   r1  zTableRenderCB.startRowa
      !*---r8   c                      t          d          )Nr2  r  )r4   ry  r  r  r>  r?  rt  ru  s           r6   r2  zTableRenderCB.startCellc
  s    !+...r8   c                      t          d          )Nr3  r  r  s     r6   r3  zTableRenderCB.endCelle
  r  r8   c                      t          d          )Nr4  r  r  s     r6   r4  zTableRenderCB.endRowg
  s    !(+++r8   c                      t          d          )Nr5  r  r  s     r6   r5  zTableRenderCB.startLinesi
  r  r8   c                      t          d          )Nr6  r  r  s     r6   r6  zTableRenderCB.endLinesk
  r  r8   c                      t          d          )Nr7  r  r  s     r6   r7  zTableRenderCB.endTablem
  r  r8   N)r@   rA   rB   r}  rE  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  rS   r8   r6   r  r  T
  s        NN  
0 0 0- - -+ + +. . ./ / /- - -, , ,0 0 0. . .. . . . .r8   r  c                      | d         t           v S r   )LINECOMMANDS)re   s    r6   r-  r-  p
  s    q6\!!r8   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   rq  )FONTNAMEFACE)SIZEFONTSIZELEADING	TEXTCOLOR)ALIGN	ALIGNMENTVALIGNLEFTPADDINGRIGHTPADDING
TOPPADDINGBOTTOMPADDINGHREFDESTINATION	DIRECTIONSHAPING)rw   rC   rD   rE   r   r	  ColorrK   rL   rN   rF   rG   rH   rI   rO   rR   rP   rQ   )r0  r   r   r3  r  r  r   s          r6   r0  r0  s
  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 
r8   r  rp  r}   r}   g      ?)r  )r   r   r  rd  r  r   r  r  )r}   r   r  )r   r}   r  )r   r   __main__)old_tables_test)r   r   r   )N__all____version__r}  reportlab.platypus.flowablesr   r   	reportlabr	   reportlab.lib.stylesr
   r   r   reportlab.libr   reportlab.lib.utilsr   r   r   r   r   r   r   reportlab.lib.validatorsr   reportlab.lib.rl_accelr   reportlab.lib.abagr   ri  reportlab.pdfbase.pdfmetricsr   r  r   r   r   collectionsr   r.  r/  r   r   ro   ry   r   r   r   r  r   r   r   r   r   rv   r   r   r   r   r  r   rH  r   r\   r  r  r  r-  r0  r,   
GRID_STYLE	BOX_STYLELABELED_GRID_STYLEr  COLORED_GRID_STYLEgreen
LIST_STYLEr@   tests.test_platypus_tablesr  rS   r8   r6   <module>r     sn  

 	 @ ? ? ? ? ? ? ?       K K K K K K K K K K             j j j j j j j j j j j j j j j j j j : : : : : : ) ) ) ) ) ) 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z$r z$r z$r z$r z$rH z$r z$r z$rxI # $,*)**. .
        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 r8   