
    kf             
       V   d Z dZdZddlmZmZ ddlmZ ddlm	Z	m
Z
mZ ddlmZ ddlmZmZmZmZmZmZmZ 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(d Z)d Z*d Z+dMdZ,ej-        fdZ.d  Z/d! Z0d" Z1dej-        fd#Z2 G d$ d%e3          Z4 G d& d'e3          Z5 e$d(d)          Z6 e$d*d+          Z7d,Z8 G d- d.e          Z9d/d0d0d1d2d3d4d5d6Z: G d7 d8e9          Z; e<e:=                                          Z> G d9 d:          Z?d; Z@d< ZA e(d=d>d?d@ejB        fdAg          ZC e(dBd>d?dCejB        fdAg          ZD e(dDd>d?d@ejB        fdBd>d?dejB        fdEd>dFdejB        fdGd>dHdejB        fdAg          ZE e(dDd>d?d@ejB        fdBd>d?dejF        fdEd>dFdejB        fdGd>dHdejB        fdAg          ZG e(dId>dFdejH        fdIdJd?d@ejB        fdEdHd?dejH        fdAg          ZIeJdKk    rddLlKmLZL  eL             dS dS )N)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                   V    e Zd ZeZdZdZdZdZdZ	dZ
dZdZdZdZd	Zd
Zd
ZddZddZd
S )r   
            r   blackLEFTwhiteBOTTOMNc                 F    || _         ||                    |            d S d S N)namecopy)selfr2   parents      Y/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/reportlab/platypus/tables.py__init__zCellStyle.__init__9   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destinationr7   r3    r8   r6   r   r   *   s        HHGKLJMOEIJFD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__F   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.addV   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__X   s%    4v{{3tTZCXCX7Y7YYYr8   c                     | j         S r1   )r[   ri   s    r6   rW   zTableStyle.getCommandsZ   s
    zr8   NN)r@   rA   rB   r7   rd   rj   rW   rQ   r8   r6   r   r   E   sX              Z Z Z    r8   r   c                 ^    t          | t          t          f           rdpt          |           S Nr   )
isinstancetuplerZ   len)xs    r6   _rowLenrs   ]   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   )	rb   ro   r   strstripendswithfloatrq   max)VavailRrIiJjswnvfms                 r6   _calc_pcr   `   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+   rQ   )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   rw   
bottom-topr   )
ValueErrorreverser   )xposyposcornerr   r   	directionr   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
    Nrw   r   r   )getrq   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   )valuerg   lowhighr2   rc   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   rQ   ).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   rr   Mr~   s     r6   
<listcomp>zspanFixDim.<locals>.<listcomp>   s-    777Q1aeeAajj777r8   c                 $    g | ]}|         
|S r1   rQ   )r   rr   V0s     r6   r   zspanFixDim.<locals>.<listcomp>   s    66611Qr8   r   )rq   reversedsorteditemssumr   r|   r   )r   r~   spanConslimr   r   r   r   r   Xrr   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   rQ   r8   r6   r   r      s        Dr8   r   c                       e Zd Zd ZdS )_ExpandedCellTupleExc                 f    t                               | |          }||_        ||_        ||_        |S r1   )rp   __new__tagTypealtTextextras)clsseqr   r   r   r4   s         r6   r   z_ExpandedCellTupleEx.__new__   s/    }}S%%r8   N)r@   rA   rB   r   rQ   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fdZd Zd Zd:dZd	 Zd
 Z	d;dZ
d<dZd=dZd Zd>dZd Zd Zd=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$d' Z%d?d(Z&d@d*Z'd@d+Z(d@d,Z)d- Z*dAd.Z+d/ Z,dAd0Z-d1 Z. e/e.          Z.dAd2Z0d3 Z1e2j3        fd4Z4d5 Z5d6 Z6d7 Z7d8 Z8d9 Z9dS )Br   Nr   r   c                 
   |
| _         |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   }|| _@        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: rw   z data error - z columns in data but z column widthsz rows in data but z row heights z
 expected z not z columns in row !zJ{self.idenity()} Supplied mismatching minimum row heights of length {lmrh}r   )AidenthAlignvAlignro   rp   rZ   r   identity	_renderCBrq   _nrows_cellvaluesr}   rg   rs   _ncolsr	   emptyTableActionr>   longTableOptimizer   r   	__class__globalskeysr   r   r   red	textColoryellow	backColorr7   r@   r   	identitiynormalizeDataallowShortTableRows	enumerate_rowHeights_argH
_colWidths_argWr   rb   r   rh   _cellStyles_bkgrndcmds	_linecmds	_spanCmds_nosplitCmds	_srflcmds_sircmds
repeatRows
repeatCols
splitByRow
splitInRowsetStyler   _setCornerRadii_rowSplitRangerU   rV   _minRowHeights)!r4   data	colWidths
rowHeightsstyler  r  r  r   r  r   r   r   normalizedData
cellStylesrowSplitRangerU   rV   r  minRowHeightscornerRadiirenderCB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+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cvr9  s        r6   rj   zTable.__repr__v  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 rQ   rQ   )r   cellrA  s     r6   r   z'Table.normalizeData.<locals>.<listcomp>  s!    555hhtnn555r8   )rb   )r4   r%  outDatarowoutRowrA  s        @r6   r  zTable.normalizeData  s[    	 	 	  	# 	#C5555555FNN6""""r8      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   ro   rZ   rp   r   r   ry   r   r   r}   rh   r  r@   id)r4   maxLenvxnrncr=  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aHrW  r<  r3  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   )ro   r   r   r   rb   r]  r   	CellFrameframeActionr_  r`  r   rY   r   __self__r   r   r   )r4   r   r[  r\  rZ  framer   r<  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}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   rW  r8  333333?)rF   rG   rH   rI   r>   ro   ry   _elementWidthrq   splitrD   r}   wrapOngetSpaceBeforegetSpaceAfterrb   )r4   r~   r   r   WHr\  r[  r   rW  sb0vwvhr   sbsas                   r6   _listCellGeomzTable._listCellGeom  sX   /!,0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 )Nrj  r   rW  c                 J    g | ]}|                               d           S r   )rn  )r   r   r\  r[  rW  s     r6   r   z)Table._listValueWidth.<locals>.<listcomp>  s.    777AHHT"R((+777r8   )r>   r}   )r4   r~   r\  r[  r   r   rW  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_oncerW  rQ   r   ru   	Flowable 	 in cell(,) can't have auto width
rG  r   
spanning problem in z
W0=z W=

spanCons=r   )r>   r   r  r  _colSpanCells_spanRangesr  r  indexr  r   rl  r   r   rF   rG   r}   r   r   r  _colpositionsrb   _widthr}  )r4   
availWidthrq  rW  savedcolSpanCells
spanRangesr   W0r~   Sr   r   r   Vir   r   jispanr   c0c1rr   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__minWidthr8  c                 2    g | ]}t          |          S rQ   r   )r   rr   fontNamefontSizes     r6   r   z'Table._elementWidth.<locals>.<listcomp>`  s%    @@@K(844@@@r8   )ro   rZ   rp   rl  r}   r   _fixedWidthrY   r  r   r|   r  r>   r  AttributeErrorry   rm  rC   rD   )r4   r   r   r   eewr  r  s         @@r6   rl  zTable._elementWidth=  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 )NrW  rQ   r   r~  r  r  r  rG  rk  r   r   )LayoutErrorzGFlowable %s (%sx%s points) too wide for cell(%d,%d) (%sx* points) in
%sr   r8  r+   c              3   &   K   | ]}|d          V  dS )r   NrQ   )r   rr   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  rw   ):r  r   r  rq   r   r$  r>   r  _rowSpanCellsr  r  r  	_fontname	_fontsize_leadingr  r	   _FUZZr  r  r  r  rZ   zipr   ro   rp   r   rg  _canGetWidthr   r   rC   rD   rE   r}   rx  r{  rF   rG   allowTableBoundsErrorsreportlab.platypus.doctemplater  r   ry   rm  rI   rH   r   r	  r   r   _rowpositionsr   rb   _heightr   _hmax)&r4   availHeightr  rr  rq  hmaxr   	longTabler,  rW  r  rowSpanCellsr  r  colpositionsH0r   r   r   r~   r  hr   r   r   r   r  r  dWr   r  r0r1rr   heightmsrr<  r   s&                                         r6   _calc_heightzTable._calc_heightb  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 )Nrx   )rq  )r  _hasVariWidthElements_calcPreliminaryWidthsr  _calcSpanRangesr  r  r  _calcNoSplitRangesr  _calcSpanRects)r4   r  r  rq  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   rP  rU  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   upToRowrE  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   )ro   rZ   rp   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.ru   r   Nr   rx   rv   rw   d   )rZ   r  r   r|   ro   r   rl  r   r  r  r  r  rF   rG   r}   r  rb   rq   r   sortr{   r   valuesr	   defCWRFr  r  )'r4   r  rq  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adjustedr3  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   rx   rv   )rZ   r  rl  r   r  r  r  rq   r   rF   rG   r}   r|   )r4   rq  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  rb   r  )r4   r  rr   r   csarsarc   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_rowNoSplitCellsrb   r  )r4   nosplitRangesrr   r   r  r  rc   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  rq   r  r   r   
setdefaultrb   r   r   r  r  r  _vBlocks_hBlocks)r4   	spanRectsr  r  r  rowpositionsvBlocksr   rlimcoordr   col0row0col1row1r  rE  r:   rr   r   r  r  s                         r6   r  zTable._calcSpanRects8  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 rT   )ro   r   rW   rq   ry   _SPECIALROWSr   _addCommandrX   r   r=   rY   r>   )r4   tblstylerc   r<  scsrecerkr   r`   s              r6   r!  zTable.setStylel  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      rf   	   r(   r+   ROUNDEDCORNERSr   )r  rb   r  r  _isLineCommandrZ   rq   r   r   LINECAPS	LINEJOINSr  rp   r"  r  r  r  r  r   _setCellStyler  )r4   rc   r"  rf   	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   dashrf   	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)rW  	saveState_roundingRectDefSLlinerb   r  ro   r   r  
setLineCapsetDashsetLineJoinr  r>   
_LineOpMapr   restoreState	_curcolor)r4   ccapcdashcjoinrW  r=  r9  r-  r  r  r  r  r   r,  r4  r"  rK   r5  rf   r6  r7  r8  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   r-  zUnknown line command )sys	_getframef_localsr   )	r4   r  endr8  rK   r   r,  rJ  r-  s	            r6   r:  zTable._drawUnknown  s;    


]]1&t,777888r8   c                 n    |                      ||||||           |                     ||||||           d S r1   )_drawBox_drawInnerGrid)r4   r  rM  r8  rK   r   r,  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 rn   _drawHLines_drawVLinesr4   r  rM  r8  rK   r   r,  r  r  r  r  s              r6   rO  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 rn   rS  rV  s              r6   rP  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   )rD  rW  setStrokeColor
_curweightsetLineWidth)r4   r8  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   rw   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  rq   r\  r>   rW  r>  r   )r4   r  rM  r8  rK   r   r,  r  r  r  r  r   rpr   r   r   r   lfs                     r6   rT  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 rn   )rT  rV  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   rw   r  c                      ||| ||          S r1   rQ   )r  r   r  r   _lines        r6   ra  z#Table._drawVLines.<locals>.<lambda>3  s    bBr@R@R r8   c                 *    t          | |||||          S r1   r_  r`  s          r6   ra  z#Table._drawVLines.<locals>.<lambda>8  rb  r8   )r  r  rq   r\  r>   rW  r>  r   )r4   r  rM  r8  rK   r   r,  r  r  r  r  erpcpsrpr	  r   rr   rd  s                     r6   rU  zTable._drawVLines)  s-   22 BqD) BqD)s88Q;;#b''!))VVvu%%%!f"g$z"--04	RRRA:: 7 7xc1g66667 7 .6&,e{{{B 1 1r3Q00001 1r8   c                 b    |\  }}|\  }	}
|                      |dz   |f|	dz   |
f||||           d S rn   )rU  rV  s              r6   _drawVLinesAzTable._drawVLinesA<  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.wrapA  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.
        NrQ   )r4   TbyRows      r6   onSplitzTable.onSplitF  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  rp   )r4   r   r]   nr0doInRowSplit	_srflModer2  r<  r  r  r  r  s               r6   _cr_0zTable._cr_0M  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   )rq   setr  r  r  rp   r   rZ   r  r   r}   r#  )r4   r   nRowsr  r]   rx  ry  nrrrrSr2  r<  r  r  r  r  cSs                   r6   _cr_1_1zTable._cr_1_1d  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  r2  rp   )
r4   r   r]   rx  ry  r<  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                 j   ||j         z
  }||j         |z   z
  }t          |t          t          f          rOg }g }	d}
|                     |||          d         }|j        dk    r	||z
  dz  }nd}|D ]}|
r/|j        |k    r |	                    |           ||j        z  }/g c S ||j        z   |k    r |                    |           ||j        z  }a|                    |||z
            }|r7|                    |d                    |	                    |d                    n@|s|j        dk    r/|j        |k    r |	                    |           ||j        z  }ng c S 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 )NFr   r   r   r   TOPTr8  rk  r   r/   )r   r   )rH   ro   rp   rZ   rx  rN   r  rb   rm  ry   rD   rE   rq   r   rf   )r4   r   r(  	oldHeight	newHeightr  height0height1newCellContentpostponedContentrm  
cellHeight
usedHeightflowablesplitsrows
lineHeightcontentHeight
splitPoints                      r6   
_splitCellzTable._splitCell  sE   e..u/);<eeT]++ O	PN!E++E5%@@CJ|x'''*49


! #! #! "!'11(//9998?2  "			(/1W<<"))(333(/1JJ &^^E7:3EFFF &&--fQi888(//q	:::: * 
&U\U-B-B''99 0 7 7 A A A '8? : (*			 $&III EE.))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   rw   )BOXOUTLINEGRID	LINEABOVE
LINEBEFORE	LINEAFTER	LINEBELOWr  	INNERGRID)r  r  r  ro   r   r  rb   )r4   r   rx  r/  r2  Ar-  r  r  r  r  r8  rK   r"  r5  rf   r   r,  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)rb   r  re  )r4   r   r]   oldrowcount	stretchedr<  rc   r  r  r  r  s              r6   _stretchCommandszTable._stretchCommands8  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                 &  ^_` |                      ||          }| 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        _nLd | 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                     ^| ;                    || j7        |          ^_7        | ;                    || j$        |          ^_$        | ;                    || j        |          ^_        | ;                    || j/        |          ^_/        | ;                    || j0        |          ^_0        | ;                    || j1        |          ^_1        |dz   }| j,        }S|Srty          |S          }S^j.        }T|Tr^j        `n^j=        `t[          | dd           }Ut[          | dd           }V| )                    _d |         ^j        `d |         ||	| j*        | j+        d^j        d |         |St[          | dd           |T|Ur
|Ud d         nd |V          }I^j"        }W^j        }X^>                    ||          }Y|I?                    ||Y|W|           |I?                    |^j$        |W|d           |I?                    |^j        |W|           |I?                    |^j/        |W|           ^j0        D ]}Z|I@                    |Z           |Zd         d         dk    r*|Zdd	         \  \  }#}$\  }%}&|I@                    |Zd         f|#|dz
  f|%|dz
  ffz   t)          |Zd	d                    z              |Srty          |S          }S|rt          |t                    r@_d |         }[`d |         }\^j        d |         }]t+          t;          |                    }nFt+          t          |                    }_fd|D             }[`fd |D             }\^fd!|D             }]| )                    |[_|d          z   ^j        |\`|d          z   t          |          |	| j*        | j+        d|]^j        |d          z   |St[          | d"d           |T|U|V#          }K|KB                    ||W||Y|           |KB                    ||W|^j$        |d           |KB                    ||W|^j        |           |KB                    ||W|^j/        |           n| )                    _|d          ^j        `|d          ||	| j*        | j+        d^j        |d          |St[          | d"d           |T|Urddg|Udd          z   nd |V#          }K|KC                    ||Y|           |KC                    |^j$        |d           |KC                    |^j        |           |KC                    |^j/        |           ^j0        D ]z}Z|K@                    |Z           |Zd         d         d$k    r*|Zdd	         \  \  }#}$\  }%}&|K@                    |Zd         f|#df|%dffz   t)          |Zd	d                    z              {^jD        x|I_D        |K_D        ^jE        x|I_E        |K_E        | F                    |I           | F                    |K           |I|KgS )%N)ignoreSpansr   r   rx  c                 "    g | ]}|d d          S r1   rQ   r   r:   s     r6   r   z$Table._splitRows.<locals>.<listcomp>  s     333QAaaaD333r8   r8  rk  c                 "    g | ]}|d d          S r1   rQ   r  s     r6   r   z$Table._splitRows.<locals>.<listcomp>  s      @ @ @!111 @ @ @r8   r+   r   r/   r  r   rU   _cornerRadiir  )r&  r'  r  r  r  r   r)  r*  r   rU   r  r-  r.  r  r  r  )r  r  r  )r  r  r  r  r  FT)ry  r   c                      g | ]
}|         S rQ   rQ   )r   r   r%  s     r6   r   z$Table._splitRows.<locals>.<listcomp>  s    555Qa555r8   c                      g | ]
}|         S rQ   rQ   )r   r   splitHs     r6   r   z$Table._splitRows.<locals>.<listcomp>  s    777q777r8   c                 *    g | ]}j         |         S rQ   )r  )r   r   rs  s     r6   r   z$Table._splitRows.<locals>.<listcomp>  s     <<<Aq}Q'<<<r8   rV   )r&  r'  r  r  r  r   r)  r*  r   rV   r  r-  r.  r   )G!_getFirstPossibleSplitRowPositionr  ro   r   r}   rq   r  r#  
_splitRowsr   r  r  r$  r  r  r  r  r  r  r   rp   rZ   rx  rH   rI   ry   rm  rD   r}  r   r  r  r   rd   r  rb   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  rz  r  r   r  r  r   r   ru  )ar4   r  rx  r   r  	maxrepeatr   lohir  usedHeights
cellvaluesr*  
cellWidthscurRowHeightminSplitmaxSplit	maxHeightcolumnr   r(  r  r   r  r  r  
splitCellsrC  r  	start_col	start_rowend_colend_rowspanCmdsrc   r  r  r  r  newCellStyles
bkgrndcmdsspan_scspan_srspan_ecspan_erspanRectr  r  oldStyleresnewSpanCmdsr  rM  newbkgrndcmdsrK   newStyler   r  marginnewlinecmdslinecmdr-  r8  r"  r5  rf   r   r,  
moddedcmdsstartrowendrowr  r  r   R0Heightr   R1HeightR1Stylesh0h1r  newRowHeightnewRowHeightsr   ltor-  r.  r/  r2  r  r<  iRowsiRowHiCSrs  r%  r  sa                                                                                                 @@@r6   r  zTable._splitRowsk  sb    
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  	 	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^^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._getRowImpossibleC  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_atrP  s           r6   r  z'Table._getFirstPossibleSplitRowPositionR  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   rm  zTable.splitf  s    

:{+++? 	Rdo 	R3YJ8N8NWYPY __[4??R_SSF   R{QQQ 	r8   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
  }|
|z
  }t          |||||	|
|g            _          j	        
                                }|                    |||||            j	        }|                    d           |                    |d           |                    d           d S )	Nr  c                 v    g | ]5\  }\  }}t          j        |         j        |         |                   6S rQ   )r   r  r  )r   r  r   r   r-  r4   s       r6   r   z1Table._makeRoundedCornersClip.<locals>.<listcomp>  sP       %1Q $"1%doa&8QHH   r8   rj  r   r   z%begin table rect clipstrokez%end table rect clip)r<  r>   r}   r  r  r  r  r  RoundingRectDefrW  	beginPath	roundRect
addLiteralclipPath)r4   r   r/  r2  arrc  rl  r   r  r   r  r   r  r   r<  r-  s   `              @r6   _makeRoundedCornersClipzTable._makeRoundedCornersClipz  s    $d>$77<c+..44ff    $uQwK1WQK1WeAg&	&     UYYUGG /B1b"b" M MI!!	BAq"%%%I	-...	

1A
	+,,,,,r8   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   r   r   r   r  fill)r<  rW  r;  rZ  rD  r>  r  r?  r@  rA  r\  r   r  moveTocurveTolineTodrawPathrC  )r4   r   r  r   r  r   r  r  r=  rW  rE  rF  rG  r>  r-  r0  r1  r2  r3  r8  rK   r"  r5  rf   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   startRowrw   	startCellendCellendRow
startLinesendLinesendTable)rW  r;  rZ  rD  _curcellstyler>   r  _drawBkgrndr  r  r  r  r  r  r  r  r  	_drawCellr   r  r  r  rH  rC  r<  r  )r4   r<  r.  r  rE  rowstylerowpos	rowheightr  cellval	cellstylecolposcolwidthcellRectrr   r   r  r  s                     r6   drawz
Table.draw  sS   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  r  F)extendr         @rw   r  r  r     r!  r   r+   )	positionsr  zWrong length for z arguments r  r  r  r   r}   zBad radius, z, for ) r  r  rW  r  r  r  r  r>   r  r  r   rY   rZ   rg   r   toColorOrNonerq   r   setFillColorrectro   rp   r   r;  r  r  linearGradientr   r-  r}   radialGradientrC  )+r4   r/  r2  rW  r  r  r'  r&  r  rc   r  r  r  r  argr   r  r   r  r   r  
colorCycler   rowCountr   rK   colCountxywharg0pxhyhax0ay0ax1ay1r  rZ  r   xcycr   refs+                                              r6   r  zTable._drawBkgrnd 	  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|          |D ]} ||||           ||z  }tA          |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)rq  rr  r\  r  r/   r   r   r-   RIGHT)CENTREr   zInvalid justification z for r   DECIMALr8  r   zBad valign: onDrawr   )relativer   )Rectr=  )'r  rK   rW  r$  rE   rC   rD   setFontrL   rN   ro   rp   rZ   r   rx  rH   rI   ro  r  rF   rG   r   typedrawOnrp  
drawStringdrawCentredStringdrawRightStringdrawAlignedStringry   rm  rq   r>   r   labelrO   linkURLrP   linkRect)r4   r  r  possizer  r  r  r  curjustrN   rq  rr  r   r  r   r   rr   r  valsr   rE   rD   r<  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 :	=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 !:!:!:;;;  Q1W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|          )Nr!  r   z@cornerRadii should be None or a list/tuple of numeric radii
not )r   rZ   r}   rq   r  r   )r4   r-  s     r6   r"  zTable._setCornerRadii	  st     -- 	r,7 pT+=N=NRUVWX[\gXhXhVhijRkRkmnloRo=pDpalppqqqr8   )rG  )NNrh  )rh  rh  r1   rl   )r   )Fr   ):r@   rA   rB   r   r7   rj   r  r   r]  rg  rx  r{  r  rl  r  r  r  r  r  r  r  r  r  r  r!  r  r  rH  r:  rQ  rO  rP  r\  rT  rf  rU  ro  rq  ru  rz  r  r  r  r  r  r  r  staticmethodr  rm  r	   r  r  r  r  r  r  r"  rQ   r8   r6   r   r     s
       '+DqQY]ei4dZ^ DDX\%m, m, m, m,`l l l  (&o &o &o &oP    4   0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*X X Xt: : : :x1" 1" 1"fV V V Vp   #l#455   (  ( ,5? - - - -<K K KZ91 91 91vMA MA MA^ND ND ND`r r r r rr8   r   rQ  rO  rP  rf  rT  rU  ro  )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   rQ   r8   r6   r   r   
  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 )ro   r   r   rh   r>   )r4   rs  rc   argsmeths        r6   r  zTableRenderCB.__call__
  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   rs  s     r6   r  zTableRenderCB.startTable
      !,///r8   c                      t          d          )Nr  rX  rZ  s     r6   r  zTableRenderCB.startBG
      !),,,r8   c                      t          d          )Nr  rX  rZ  s     r6   r  zTableRenderCB.endBG
  s    !'***r8   c                      t          d          )Nr  rX  )r4   rs  r  s      r6   r  zTableRenderCB.startRow!
      !*---r8   c                      t          d          )Nr  rX  )r4   rs  r  r  r  r  rI  rJ  s           r6   r  zTableRenderCB.startCell#
  s    !+...r8   c                      t          d          )Nr  rX  rZ  s     r6   r  zTableRenderCB.endCell%
  r]  r8   c                      t          d          )Nr  rX  rZ  s     r6   r  zTableRenderCB.endRow'
  s    !(+++r8   c                      t          d          )Nr  rX  rZ  s     r6   r  zTableRenderCB.startLines)
  r[  r8   c                      t          d          )Nr	  rX  rZ  s     r6   r	  zTableRenderCB.endLines+
  r`  r8   c                      t          d          )Nr
  rX  rZ  s     r6   r
  zTableRenderCB.endTable-
  r`  r8   N)r@   rA   rB   rQ  r  r  r  r  r  r  r  r  r  r	  r
  rQ   r8   r6   rS  rS  
  s        NN  
0 0 0- - -+ + +. . ./ / /- - -, , ,0 0 0. . .. . . . .r8   rS  c                      | d         t           v S r   )LINECOMMANDS)rc   s    r6   r'  r'  0
  s    q6\!!r8   c                    | |         |         }|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 S )NFONTr   r   r   rk  )FONTNAMEFACE)SIZEFONTSIZELEADING	TEXTCOLOR)ALIGN	ALIGNMENTVALIGNLEFTPADDINGRIGHTPADDING
TOPPADDINGBOTTOMPADDINGHREFDESTINATION)rq   rC   rD   rE   r   toColorColorrK   rL   rN   rF   rG   rH   rI   rO   rP   )r*  r   r   r-  r  r  r   s          r6   r*  r*  3
  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	}		 ) 
	r8   r  rj  rw   rw   g      ?)rq  )r   r   r|  r9  r  r   r  r  )rw   r   r  )r   rw   r  )r   r   __main__)old_tables_test)r   r   r   )M__all____version__rQ  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   rc  reportlab.pdfbase.pdfmetricsr   r  r   r   r   collectionsr   r(  r)  r   r   rs   r   r   r   r  r   r   r   r   r   rp   r   r   r  r   r  r   rB  r   rZ   r	  rh  rS  r'  r*  r,   
GRID_STYLE	BOX_STYLELABELED_GRID_STYLEr
  COLORED_GRID_STYLEgreen
LIST_STYLEr@   tests.test_platypus_tablesr~  rQ   r8   r6   <module>r     sT  

 	 @ ? ? ? ? ? ? ?       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	       6       0: : :. . .`? ? ?   * 1: / / / /,  
= 
= 
=   "&9?    (	 	 	 	 	 	 	 	    5    */0GHH:01YZZ K~#r ~#r ~#r ~#r ~#rH ~#r ~#r ~#r@H # $,*)**. .
        tJOO%%&&. . . . . . . .8" " "%$ %$ %$N 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   