
    Kwg             
       ~   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+dKdZ,ejZ                  fdZ.d Z/d Z0d  Z1dejZ                  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-d.d.d/d0d1d2d3d4Z: G d5 d6e9      Z; e<e:j{                               Z> G d7 d8      Z?d9 Z@d: ZA e(d;d<d=d>ej                  fd?g      ZC e(d@d<d=dAej                  fd?g      ZD e(dBd<d=d>ej                  fd@d<d=dej                  fdCd<dDdej                  fdEd<dFdej                  fd?g      ZE e(dBd<d=d>ej                  fd@d<d=dej                  fdCd<dDdej                  fdEd<dFdej                  fd?g      ZG e(dGd<dDdej                  fdGdHd=d>ej                  fdCdFd=dej                  fd?g      ZIeJdIk(  rddJlKmLZL  eL        yy)L)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                   T    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y
)r   
            r   blackLEFTwhiteBOTTOMNc                 :    || _         ||j                  |        y y N)namecopy)selfr1   parents      P/var/www/horilla/myenv/lib/python3.12/site-packages/reportlab/platypus/tables.py__init__zCellStyle.__init__9   s     	KK     c           	          |t        | j                        }t        |       D ]+  }|j                  d      rt	        ||t        | |             - |S )N_)r   r1   dir
startswithsetattrgetattr)r3   resultr1   s      r5   r2   zCellStyle.copy=   sP    >tyy)FI 	7Ds#XFD'$"56	7 r7   r0   )__name__
__module____qualname__r   fontnamefontsizeleadingleftPaddingrightPadding
topPaddingbottomPaddingfirstLineIndentcolor	alignment
backgroundvalignhrefdestinationr6   r2    r7   r5   r   r   *   sR    HHGKLJMOEIJFDKr7   r   c                   &    e Zd ZddZd Zd Zd Zy)r   Nc           	         |rP|j                         d d  }|j                  | _        dD ]&  }t        ||      st        | |t	        ||             ( ng }|t        |xs g       z   | _        i | _        | j                  j                  |       y )NspaceBefore
spaceAfter)getCommands_optshasattrr<   r=   list_cmdsupdate)r3   cmdsr4   kwpcmdsas         r5   r6   zTableStyle.__init__F   s    &&(+EDJ1 66!$D76!#456 ET$*"--



"r7   c                 :    | j                   j                  |       y r0   )rZ   append)r3   cmds     r5   addzTableStyle.addV   s    

#r7   c                 Z    ddj                  t        t        | j                              z  S )Nz!TableStyle(
%s
) # end TableStylez  
)joinmapreprrZ   r3   s    r5   __repr__zTableStyle.__repr__X   s!    4v{{3tTZZCX7YYYr7   c                     | j                   S r0   )rZ   rh   s    r5   rV   zTableStyle.getCommandsZ   s    zzr7   NN)r?   r@   rA   r6   rc   ri   rV   rP   r7   r5   r   r   E   s     Zr7   r   c                 R    t        | t        t        f       xr dxs t        |       S Nr   )
isinstancetuplerY   len)xs    r5   _rowLenrr   ]   s$    !U4L))/a93q69r7   c                    g }|j                   }g }|j                   }g }|j                   }|}dx}	}
| D ]  }t        |t              rt        |      j	                         }|sd}|
dz  }
nk|j                  d      r%t        |dd       }|	|z  }	 |t        |             n5|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(  xr ||z  xs 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   )	ra   rn   r   strstripendswithfloatrp   max)VavailRrIiJjswnvfms                 r5   _calc_pcr   `   sv    	A	A
A	A
A	AAJA a!AAQC!CR&MQ#a&	C#a&	!HQYFAFA	!'( 	Bq	A	#d1+A 	!		QqT	 	Bq	AAAT\ac!T 	AAaD	Hr7   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S |||| d   gS )zVcalculate all or half of a bezier curve
    kind==0 all, 1=first half else second halfr         ?r   r   r*   rP   )PkindQ0Q1Q2R0R1S0s           r5   _calcBezierPointsr      sq    Qw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>r7   c                    ||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}
nd| 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   kD  s|d	k(  r!|
d   d
   |
d   d
   kD  r|
j                          t        |
|      }
|
S )Nrightbottomtopleftz&Unknown quadrant position (xpos,ypos)=
left-rightr   rv   
bottom-topr   )
ValueErrorreverser   )xposyposcornerr   r   	directionr   txhiylor   yhixlos                r5   _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A4+QRR,1Q471R58#3y,7NSTUVSWXYSZ[\]_[`ab[cSc			!T"AHr7   c                    |r|j                  |d      }|r||d   d   |z
  k\  s||d   d   |z   k  r | ||||       yd}t        |      }|||z
  k  r[||k  rV||   \  }}	|	||z   k  s|||z
  k\  r|dz  }+t        ||      }
t        ||	      }|
|kD  r | |||
|       |}|||z
  k  r||k  rV|||z
  k  r | ||||       yy)z
    Draw horizontal lines; do not draw through regions specified in hBlocks
    This also serves for vertical lines with a suitable canvLine
    Nrv   r   r   )getrp   r|   min)canvLinescpecpyhBlocksFUZZr   r   x0x1i0i1s               r5   _hLiner      s    
 '++a-c72;q>$..#wqz!}T7I2IQs1L#d(lqsQZFB3t8|r3t8|QSBSB#vxAb+C #d(lqs s4x<#aA.<r7   c                 d    d|dz
  z  |z  }||z  }t        |      D ]  } || |||       ||z  } y )Nr   r   )range)r   r   r   r   wscountoffsetidxs           r5   
_multiLiner      sG    %']2FKAU| aa 	Rr7   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   )valuerf   lowhighr1   rb   ivalues          r5   _convert2intr      si    5z 	ZFF D -	 tD6tC7;
<<s     	9/99399c                 4    	 | j                  |      S #  Y yxY wNr   )rz   )objr   s     r5   	_endswithr      s    ||As    c                 <   i }|st        |       }t        t        d |j                         D                    D ]  \  }\  }}||k\  r|dz  }t	        t        ||      D 	cg c]  }	||	   |j                  |	d      z    c}	      }
|
||z
  k\  rVt        ||      D 	cg c]
  }	| |	   	|	 }}	|sx||
z  }|t        t        |            z  }|D ]  }	|j                  |	d      |z   ||	<     |j                         D ]  \  }	}||	xx   |z  cc<    y c c}	w c c}	w )Nc              3   *   K   | ]  \  }}||f  y wr0   rP   ).0ikivs      r5   	<genexpr>zspanFixDim.<locals>.<genexpr>   s     %L%"Rr"g%Ls   r   r   )rp   reversedsorteditemssumr   r   r{   )V0r}   spanConslimr   Mr   r   r   rq   r   Xs               r5   
spanFixDimr      s%   
Ac"g f%L8>>;K%LMN 
 	'2bs7H
a%2,7Q1aeeAaj78af9hb611Q66(	Q	U3q6] 	 A551:a<AaD	 
  wwy !	!	 86s    D

D(Dc                       e Zd Zy)_ExpandedCellTupleN)r?   r@   rA   rP   r7   r5   r   r      s    r7   r   c                       e Zd Zd Zy)_ExpandedCellTupleExc                 \    t         j                  | |      }||_        ||_        ||_        |S r0   )ro   __new__tagTypealtTextextras)clsseqr   r   r   r3   s         r5   r   z_ExpandedCellTupleEx.__new__   s,    }}S%r7   N)r?   r@   rA   r   rP   r7   r5   r   r      s    r7   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d7dZd Zd	 Z	d8d
Z
d9d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*d>d+Z+d, Z,d>d-Z-d. Z. e/e.      Z.d>d/Z0d0 Z1e2jf                  fd1Z4d2 Z5d3 Z6d4 Z7d5 Z8d6 Z9y)?r   Nr   r   c                 	   |
| _         |xs d| _        |xs d| _        t        |t        t
        f      st        d| j                         z        || _        t        |      x| _
        }g | _        t        |t        t
        f      }t        |t        t
        f      }|r*t        t        t        t        |                  x| _        }n|r|rt        |      }nd}|	st         j"                  }	|t%        | dt         j&                        n|| _        |r|s|	dk(  rt        | j                          d      |	dk(  rt*        | _        d	t        t/               j1                               vr=t3        d	      at6        j8                  t4        _        t6        j<                  t4        _        t+        j@                  | d
| j,                  jB                  ||fz  t4               y |	dk(  rtD        | _        y t        | jG                          d|	      |r|| _        n| jI                  |      x| _        }|s||gz  }nt        |      |k7  rqt         jJ                  r6t        |t
              r&t        |      }||k  r||z
  |d   gz  ||d  n1|d | }n+t        | j                          d| dt        |       d      |s||gz  }n9t        |      |k7  r+t        | j                          d| dt        |       d      tM        |      D ]g  \  }}t        |      }||k7  st         jJ                  rt        |t
              r||z
  dgz  ||d  Dt        | j                          d| d| d| d       |x| _'        | _(        |x| _)        | _*        |bg }tW        |      D ]J  }g }tW        |      D ]'  }|jY                  t[        t]        ||f                   ) |jY                  |       L || _/        n|| _/        g | _0        g | _1        g | _2        g | _3        g | _4        g | _5        || _6        || _7        || _8        || _9        |r| ju                  |       |tv        ur| jy                  |       || _=        ||| _>        ||| _?        |d k7  r7t        |      } | st        d      | |k  r||| z
  |j-                  d      z  z   }|| _@        y )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: rv   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vAlignrn   ro   rY   r   identity	_renderCBrp   _nrows_cellvaluesr|   rf   rr   _ncolsr	   emptyTableActionr=   longTableOptimizer   r   	__class__globalskeysr   r   r   red	textColoryellow	backColorr6   r?   r   	identitiynormalizeDataallowShortTableRows	enumerate_rowHeights_argH
_colWidths_argWr   ra   r   rg   _cellStyles_bkgrndcmds	_linecmds	_spanCmds_nosplitCmds	_srflcmds_sircmds
repeatRows
repeatCols
splitByRow
splitInRowsetStyler   _setCornerRadii_rowSplitRangerT   rU   _minRowHeights)!r3   data	colWidths
rowHeightsstyler  r  r  r  r   r   r   r   normalizedData
cellStylesrowSplitRangerT   rU   r  minRowHeightscornerRadiirenderCBnrows_seqCW_seqRHncolsr   r   dcellrowscellcolsr   lmrhs!                                    r5   r6   zTable.__init__  s    
(($d|,3dmmoEFF!!$i'eIuTl3Jd|4DWT1B,C(DD$+63y>5eI4N4N!1'8'@ $+40DYE`E`#aFW 	%( DMMO#44X!YZZ!:-!-%T')..2B-CC'56H'I$17$.17$.%%d;$..:Q:QRWX]9^+^`pq
 	 "8+!3  !DNN$4#55LM]L`!abb #D&*&8&8&>>Dt5)#4y^U",,Id1K	NU7%*1Wy}o$=IabM )&5 1I DMMO#4N5'I^_bcl_m^nn|!}~~E:,$6z_%0ugEWX[\fXgWhhtuvvT? 	hCAaAA%x00Z$5G"1WrdNAabE$'8
5'qcQabcadde%fgg	h )324:'00$*H5\ *u <AOOIdAa5k$:;<)	*
  (D)D %$$$MM% i'  -+"*D!(DOD }%D !mnne -uTz=;R;RSW;X.X X+r7   c                     t        | dd      }t        | dd      }t        | dd      }ddl}|j                  |      }|j                  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?   )r3   r   ccvr4  s        r5   ri   zTable.__repr__v  si    D{3Dk2T-4^^BZZf%LPNNLcLcdefghjkkr7   c                 t    d }g }|D ](  }|D cg c]
  } ||       }}|j                  |       * |S c c}w )zTakes a block of input data (list of lists etc.) and
        - coerces unicode strings to non-unicode UTF8
        - coerces nulls to ''
        -

        c                 8    | yt        |       rt        |       S | S )Nr   )r   r   )stuffs    r5   normCellz%Table.normalizeData.<locals>.normCell  s     }u&r7   )ra   )r3   r   r<  outDatarowcelloutRows          r5   r
  zTable.normalizeData  sL    	  	#C145htn5F5NN6"	#  6s   5c                 $   | j                   r| j                   S d}t        | dd      }t        | dd      }t        | dd      }t        | dd      }|rd||fvrd}t        |      D ]  }t        |      D ]  }	||   |	   }
t        |
t        t
        t        f      rVt        |
t
        t        f      s|
f}
d}|
D ]   }|j                  |      }|s|d	d d
k7  s  n |rR|d	d d
k7  rJ||	|df\  }}}}n>|
du xr dxs t        |
      }
||	|
}}}|xr t        |
t              xr dxs d}|r|d| }|s n |s 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   rn   rY   ro   r   r   rx   r   r   r|   rg   r  r?   id)r3   maxLenvxnrncr8  rhbr   r   r   r   vijixjxtallests                   r5   r   zTable.identity  s   ::djj(T(9-T(9-T--T=$/)Br7*A2Y r  A1aA!!T%$9:)!U4L9t1#$ &C #V 4A QrsVV^ %& 23,-q!QJMBBI,"6A%&1B:Jq$:AFQ!7F2%! " e%& (3s2w<7GG3r"T"X6FFBB3t~~7N7NPRSWPXZ\^`bikm6nnnr7   c              #      K   t        | dd       }|D ]0  }t        |dd       r|j                  |||      D ]  }|  -| 2 y w)Ncanv__split_only__)r=   splitOn)r3   CaWaHrP  r7  r.  s          r5   _cellListIterzTable._cellListIter  sX     tF4( 	Aq)$/42. AG 	s   AAc                 p   t        |t              r|}|S t        |t              r|fn
t        |      }d }g j                  }| j                  |||      D ]  }t        |t              rA|st        dd      }|j                  |       |j                  dk  r|j                  dk  rd }T|r) |t        ||j                  |j                                ||        t        |d      r8t        |j                  |j                  |j                   |j"                        }|S t        |j                        }|S )Nr   )_leftExtraIndent_rightExtraIndentg:0yE>)
leftIndentrightIndentr   )rn   r   r   r   ra   rV  r   	CellFrameframeActionrX  rY  r   rX   r   __self__r   r   r   )r3   r   rT  rU  rS  framer   r7  s           r5   _cellListProcesszTable._cellListProcess  s   a*+A, ) #1X.GAJAE		A''"R0 a)  )1q QMM%(--d2u7N7Nt7S $je.D.DQVQhQhijaD q#(AIIaiiQ  'qzz2r7   c                 d   |sy||j                   z
  |j                  z
  }||j                  z
  |j                  z
  }d}d}t	        | dd       }	d }
t        |t              rJ| j                  ||      }t        |j                  d            |j                  z  dz  }t        ||      |fS |D ]z  }|j                  |	||      \  }}|j                         }|j                         }||j                  |       ||j                  |       t        ||      }|||z   |z   z  }|
y|}
| |||
z
  z
  fS )Nr   r   r   rP  r3  333333?)rE   rF   rG   rH   r=   rn   rx   _elementWidthrp   splitrC   r|   wrapOngetSpaceBeforegetSpaceAfterra   )r3   r}   r   r   WHrU  rT  r   rP  sb0vwvhr   sbsas                   r5   _listCellGeomzTable._listCellGeom  s6   /!,,0tF4(a##Aq)BQWWT]#AJJ.s2Bq":r>! 		AXXdB+FB!!#B"B}ahhrl}ahhrlAb	Ab2A{		 !c'B,r7   c           
          |syd}d}t        | dd       }t        |D cg c]  }|j                  |||      d    c}      S c c}w )Nrb  r   rP  )r=   r|   rf  )r3   r}   rU  rT  r   r   rP  r   s           r5   _listValueWidthzTable._listValueWidth  sJ    tF4(Q7AHHT"R(+7887s   Ac                 <   t        | dd       ry |st        | j                  |      }d |v rt        | dd       }d }| j                  r| j                  }| j
                  }nd}i }i }|| j                  u r|}|d d  }n|d d  }| j                  }	| j                  }
d |v r|j                  d       }d}t        |	      D ]  \  }}||   }|
|   |   }||f}|j                  |d       }||v r|sd}n| j                  ||      }|4t        d|j                          d| d| d	| j                  d
             ||j                  |j                  z   z  }|r4|d   }|d   }||k7  r%||f}t!        |j                  ||      |      ||<   d}||kD  s|} |||<   d |v r|r	 t#        |||       || _        d}dg| _        |D ]"  }||z   }| j(                  j+                  |       $ || _        d| _        y #  t%        d| j                         d|d|d|       Y pxY w)N_width_calculated_oncerP  rP   r   rt   	Flowable 	 in cell(,) can't have auto width
   r   
spanning problem in z
W0=z W=

spanCons=r   )r=   r   r  r  _colSpanCells_spanRangesr   r  indexr  r   rd  r   r   rE   rF   r|   r   r   r  _colpositionsra   _widthrt  )r3   
availWidthri  rP  savedcolSpanCells
spanRangesr   W0r}   Sr   r   r   Vir   r   jispanr   c0c1rq   widths                           r5   _calc_widthzTable._calc_width  s   406htzz*5!194t,DE~~#11!--
!
HDJJaDqT  A  A!)GGDM%aL "DAb1A!QA1B%>>"T2D\)$ ..q39",yiPQsRSTUSVVpquq~q~  @B  rC  qD  .E  #F  FQ]]1>>99!%aB!%aB!2v$&rE.1(,,q2CA.F$%sA'"* !1 !)4 }r!H- S 	-AAIE%%e,	- &'#}%]a]j]j]lmopqrz&{|s   G2 2'Hc           
      H   t        |t        t        f      r-d}|D ]$  }| j                  ||      }| y 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 t        |d      r*	 |j                         }t        |t        t        f      r|S 	 |y	 t        |      j!                  d      }|j"                  }|j$                  }t	        |D cg c]  }t'        |||       c}      S #  Y xY w# t        $ r Y lw xY w#  Y yxY wc c}w )Nr   r  	drawWidth__styledWrap__minWidthr3  )rn   rY   ro   rd  r|   r   _fixedWidthrX   r  r   r{   r  r=   r  AttributeErrorrx   re  rB   rC   r   )	r3   r   r   r   eewfontNamefontSizerq   s	            r5   rd  zTable._elementWidth=  s   ae%A ''!,:d"I H(#}}1g&:aggs5k+JSTSZSZN1k*z!++s5k/R[\[f[fTfq)*671%56q9!<< 1j!JJLas,Qh, 9FLL& ::::a@K(84@AA) "  As0   F ?'F	 ,F 'FF		FFFc                 	   | j                   }|st        | j                  |      }t        |      x}}| j                  }d |v r| j
                  }t        | dd       }	d }
| j                  r1| j                  }| j                  }| j                  }| j                  }ndx}}i }|	r#|	j                  |	j                  |	j                  f}
|}|d d  }|| _        i }t         j"                  }d |v r6|j%                  d       }| j&                  |   }| j(                  |   }d}d}t+        t-        t/        |||                  D ]  \  }\  }}}||f}|j1                  |d       }||v r|s(t3        |t4        t,        t6        f      r| j9                  ||d       x}||<   |H| j;                  |      s7t=        d|d   j?                          d| d| d| j?                  d             |	rE|j@                  |jB                  |jD                  xs d	|jB                  z  c|	_        |	_        |	_        ||v r%|stG        |d
   dz      ||d      z
  |xs d      }| jI                  ||xs | jK                  |      |      \  }}|	r|
\  |	_        |	_        |	_        ||jL                  z   |jN                  z   }t         jP                  s||kD  rddl)m*}  |d|d   j?                  d      tW        |      tW        |      ||tW        |      | j?                  d      fz        |d uxr tY        |      xs dj[                  d      }|jD                  xs d	|jB                  z  t        |      z  }||j\                  |j^                  z   z  }|r4|d   }|d   } || k7  r%|| f}!tG        |j1                  |!|      |      ||!<   d}||kD  s|} |rtG        ||   |      n|||<   |r@|dz   }ta        |d |       }"|"|kD  r(|r&tG        d |jc                         D              }#||#kD  rnd |v r6d |vr|}|r	 te        |||       g x| _4        }dx}"}$tk        |dz
  dd      D ]*  }|jm                  |"       ||   |$z
  }%|"|%z   }||"z
  |%z
  }$|}", |jm                  |"       |"| _7        |jq                          || _9        y #  tg        d| j?                         d|d|d|d|d|d|d|       Y xY w)NrP  rP   r   ru  rv  rw  rx  ry  rc  r   r   )LayoutErrorzGFlowable %s (%sx%s points) too wide for cell(%d,%d) (%sx* points) in
%sr   r3  r*   c              3   &   K   | ]	  }|d      yw)r   NrP   )r   rq   s     r5   r   z%Table._calc_height.<locals>.<genexpr>  s     %Dqad%Ds   rz  z hmax=z lim=z avail=z x z
H0=z H=r{  rv   ):r  r   r  rp   r   r  r=   r  _rowSpanCellsr|  r}  r  	_fontname	_fontsize_leadingr  r	   _FUZZr~  r   r  r  rY   zipr   rn   ro   r   r`  _canGetWidthr   r   rB   rC   rD   r|   rp  rr  rE   rF   allowTableBoundsErrorsreportlab.platypus.doctemplater  r   rx   re  rH   rG   r   r  r   r   _rowpositionsr   ra   _heightr   _hmax)&r3   availHeightr  rj  ri  hmaxr   	longTabler'  rP  r  rowSpanCellsr  r  colpositionsH0r   r   r   r}   r  hr   r   r   r   r  r  dWr   r  r0r1rq   heightmsrr7  r   s&                                         r5   _calc_heightzTable._calc_heightb  s   JJhtzz*5!Vs++	19 //M4t,DE~~#11#11!--
#11.00|
T^^T^^T]]JUB!A DH??D!)GGDM$$Q'$$Q'#,T#aA,-?#@ "KAiq!Q1B%>>"T2D\)$ %atH(=>'+'<'<Qq'FFA! y1B1B11E&09QqT]]_<MYWXVYYZ[\Z]]wx|  yF  yF  GI  yJ  xK  2L  'M  !M#UVU_U_abakakmnmvmv  nIz}~  I  I  {I%RT^T^T]!\1'+X$'T!WQY(?TRSW@U(UVWV\[\$]#'#5#5a8TT=Q=QRS=TUV#WDBq#UZ%RT^T^T]!#amm!3ann!DB#,#C#C1 V&12|  AB  CD  AE  AN  AN  OQ  AR  SY  Z\  S]  ^d  ef  ^g  hi  jk  ms  tu  mv  x|  xE  xE  FH  xI  @J  3J  'K  !K!"$!93q6!?R F Ft LA!"!<c!**nc!f DAQ__Q\\99!%aB!%aB!2v$&rE.1(,,q2CA.F$%sA?"B 3@s=+A.Q!Q3D 5D]F+#"%%DHMMO%D"DC#Cx %c !)d 1}Sdzr!H-
 "$#QtAvb$ 	AHHV!qA
AVq AF	 	
			
z%z~  {H  {H  {J  KO  PS  T^  _j  km  no  px  'y  zs   *R1 13S&c                    d | j                   v sd| j                   v r"| j                         r| j                  |      }nd }| j                  r1| j	                          d | j
                  v r| j                  ||       | j                  r| j                          | j                  |||       | j                  ||       | j                  r| j                          y y )Nrw   )ri  )r  _hasVariWidthElements_calcPreliminaryWidthsr  _calcSpanRangesr  r  r  _calcNoSplitRangesr  _calcSpanRects)r3   r  r  ri  s       r5   _calczTable._calc  s     DOO#sdoo'=4C]C]C_++J7AA
 >>  "tzz!  a 0##% 	+j15 	a(>>! r7   c                 \    | j                   }t        |      }|j                  |      }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~  )r3   rI  rN  rowNums       r5   _culpritzTable._culprit  s3     b''" +W44r7   c                     || j                   }t        t        | j                   |            D ]B  }t        | j                        D ](  }| j                  |   |   }| j                  |      r'  y D y)zCheck for flowables in table cells and warn up front.

        Allow a couple which we know are fixed size such as
        images and graphics.r   r   )r   r   r   r   r   r  )r3   upToRowr>  colr   s        r5   r  zTable._hasVariWidthElements  ss    
 ?dkkGT[['23 	CT[[) ((-c2((/	
 r7   c                     t        |t        t        f      r|D ]  }| j                  |      r y yt        |t              r|j
                  S y)z"Can we work out the width quickly?r   r   )rn   rY   ro   r  r   r  )r3   thingelems      r5   r  zTable._canGetWidth  sP    eT5M* ((. x($$$ r7   c                    t        | j                        }d}d}d}d}d}|D ]Z  }||dz  }|dk(  r|dz  }|dz  }t        |d      r|dz  }|t        |dd       z  }>t	        |t
        t        f      sJ ||z   }\ g }	g }
g }i }d}| j                  }t        | j                        D ]  }||   }||dk(  st        |d      rd}d}t        | j                        D ]p  }| j                  |   |   }| j                  |   |   } |||      xs d}||j                  |j                  z   z  }t        ||      }|xr | j                  |      }r |r|
j!                  |       n|j!                  |       |||<   ||z  }|	j!                  |        t#        |	      | j                  k(  ry|||z   z
  }|dkD  r\|t        |      z  dz  }||z  }|r0|dk  r+|xs |}d|z
  t        |      z  }d}|t        |      z  |z  }ndx}}g }d}|}|j%                         D ]k  \  }}||   }t        |d      rt        |dd       |z  |z  }n|dk(  r|}n| xr |xs d}||k  r|||<   J|j!                  ||z
  |||f       ||z  }||z  }m |r|t        |      z  } |j'                          g }!|D ]F  \  }"}}}| |z  }#|#|k  r!|||<   ||z  }||z  }|s$|t        |      z  } 3|!j!                  |||f       H |!D ]  \  }}}| |z  }#|#|k\  sJ |#||<    n|dkD  rg }$|j%                         D ]F  \  }}|j)                  d      s|t        |dd       z  |z  x||<   }||z  }|$j!                  |       H |$D ]  }||=  ~$t+        |j-                               }|||z   z
  }|dk  rY|t.        j0                  z  |z   dk\  r@| |z  }%t3        |      D ]!  \  }}||vs|%|z  }&||xx   |&z  cc<   ||&z  }# |||z   z
  }d}%n||z
  }|dk  rdn||z  }%|j%                         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.rt   r   Nr   rw   ru   rv   d   )rY   r  r   r{   rn   r   rd  r   r   r   r   r  rE   rF   r|   r  ra   rp   r   sortrz   r   valuesr	   defCWRFr  r  )'r3   r  ri  totalDefinedpercentDefinedpercentTotalnumberUndefinednumberGreedyUndefinedr   givensizeable
unsizeableminimumstotalMinimumelementWidthcolNosizfinalrowNor   r#  new	remainingdefinedPercentage	undefineddefaultWeightdefaultDesireddesiredWidthstotalDesiredeffectiveRemainingminimumdesired
proportionfinalSetdisappointmentadjustedr.  adjdws'                                          r5   r  zTable._calcPreliminaryWidths  s     ! 	0Ay1$c1$%*%1S!!#af-!!SK000+a/	0 
))4;;' 	$E%AyAsFi#&6"4;;/ ;E ,,U3E:E ,,U3E:E&uU38qC5,,U-?-???CsOE:$"3"3E":C; OOE*%%e,"'%U#)	$* u:$ ,"=>	q=!-eJ.?!? D--L<##51D_	!$\!153C C""/l0C"CZ!O122
 ML!*"*.."2 2weHQs#$QsV}\9:EG#X,G"77JNOaGg%&AeH!(( '7EBD G+L&'1&2 , 0l0CC
 ""$?L 	C;NGWe)G3H')#*%$/*g5*');E,<O)OJ '5(AB	C 08 (+GWe)G3H#w...'AeH(
 A~ ( 0 (HE1zz#'1%#2-'?'LL%1$)	(
  (E ("8??#45&,*EF	 {|I,=,==iGJ j- )! +HE1H, U%B$*	+
 ',*EF	 &5	$a<aY|-C"*.."2 )w"S=%) ()(
T_r7   c                    t        | j                        }d}| j                  }t        | j                        }| j
                  }| j                  }t        t        |            D ]v  }||   }||dk(  st        |d      rNd}	|D ]A  }
||
   |   }||
   |   } |||      |j                  z   |j                  z   }t        |	|      }	C ||	z  }i|t        |      z  }x |S )Nr   rw   ru   )rY   r  rd  r   r   r   r  rp   r   rE   rF   r|   r{   )r3   ri  r  r  rowNosr  stylesr  r   r  r  r   r#  r  s                 r5   r  zTable.minWidth  s    ))t{{#!!!!3q6] 	"E%AyAsFi#&6# ,E"5M%0E"5M%0E'e4 ,,--2-?-?@CsOE, q!	" r7   c                 t   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   }|	|kD  r||	}}	|
|kD  r||
}}
|	|k7  s|
|k7  s|	|k7  r2t        |
|dz         D ]   }t        |	|dz         D ]  } |||f        " |
|k7  r2t        |
|dz         D ]   }t        |	|dz         D ]  } |||f        " t        |
|dz         D ]  }t        |	|dz         D ]	  }d|||f<     |	|
||f||	|
f<   ) y)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  ra   r  )r3   r  rq   r   csarsarb   startstopr   y0r   y1s                r5   r  zTable._calcSpanRanges  s    )+*:t{{# 	/A4;;' /#$aA,
1Q3/	/    ''  ''"&.. 	5S%FBFB AvB,rAvB,rAvB,rAvB,rBwRBBwRB2vRr6"2r!t_ '!&r"Q$ 'A1J'' r6"2r!t_ '!&r"Q$ 'A1J'' r2a4 /A"2bd^ /*.
1Q3// &(R$4
2b5!5	5r7   c                 t   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   }|	|kD  r||	}}	|
|kD  r||
}}
|	|k7  s|
|k7  s|	|k7  r2t        |
|dz         D ]   }t        |	|dz         D ]  } |||f        " |
|k7  r2t        |
|dz         D ]   }t        |	|dz         D ]  } |||f        " t        |
|dz         D ]  }t        |	|dz         D ]	  }d|||f<     |	|
||f||	|
f<   ) y)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_rowNoSplitCellsra   r  )r3   nosplitRangesrq   r   r  r  rb   r  r  r   r  r   r  s                r5   r  zTable._calcNoSplitRanges  s    /10mt{{# 	2A4;;' 2&'Aq\ac"2	2 !# "##**##**"&"3"3 	8S%FBFB AvB,rAvB,rAvB,rAvB,rBwRBBwRB2vRr6"2r!t_ '!&r"Q$ 'A1J'' r6"2r!t_ '!&r"Q$ 'A1J'' r2a4 2A"2bd^ 2-1ac*22 )+BB'7be$9	8r7   c                    t        | di       }t        | dd      }| j                  }|r|r|| j                  k(  s|sy| j                  }| j                  }i }i }t        |      dz
  }| j                  j                         D ]  \  }	}
|
d||	<   	 |
\  }}}}||k\  r|	\  }}||z
  dkD  rFt        |dz   |dz         D ]1  }|j                  ||   g       j                  ||dz      ||   f       3 ||z
  dkD  rFt        |dz   |dz         D ]1  }|j                  ||   g       j                  ||   ||dz      f       3 ||   }||dz      }||dz      |z
  }||   |z
  }||||f||	<    ||fD ]'  }|j                         D ]  }
|
j                           ) || _        || _        || _        || _        y#  t        d| j                                Y TxY w)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   rz  )r=   r   _hmax_spanRectsr  r  rp   r}  r   r   
setdefaultra   r   r   r  r  r  _vBlocks_hBlocks)r3   	spanRectsr  r  r  rowpositionsvBlocksr   rlimcoordr   col0row0col1row1r  r>  r9   rq   r   r  r  s                         r5   r  zTable._calcSpanRects8  sG    Db1	tGD)++	)d.B.B(B)))))< ""..446 	WNUE}#'	% W-2*D$dTz8#GCDy{!&tAvd1f!5 uA#..|ArBII<X\]^X^K_`lmq`rJstuDy{!&tAvd1f!5 uA#..|ArBII<X\K]^jkopqkq^rJstu$T*A$T!V,A(a014E)$/!3F()1eV'<Ie$%	W, '! 	A 

	 $#W%DMMO&UVs   F4C
F44Gc           	      X   t        |t              st        |      }|j                         D ]  }t        |      dk\  rt|dd \  }\  }}\  }}t        |t              s@t        |t              s0t        |t              r|t
        vst        |t              r|t
        vrt        d|dt
              | j                  |        |j                  j                         D ]  \  }}	t        | ||	        dD ]3  }
t        | |
      rt        ||
      st        | |
t        ||
             5 y )Nr*   r   zbad style command zN illegal of invalid string coordinate
only rows may be strings with values in rS   )rn   r   rV   rp   rx   _SPECIALROWSr   _addCommandrW   r   r<   rX   r=   )r3   tblstylerb   r7  scsrecerkr   r_   s              r5   r  zTable.setStylel  s   (:.!(+H'') 	"C3x{&)!Ah#7BrGRr#&*R*<"2c*r/E"2c*r/E$);C7 C))5(8&< = =S!	" >>'') 	CAaD1	- 	4A4?wx':Qwx23	4r7   c                 2   |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   )r3   r  r  r  r  s        r5   normCellRangezTable.normCellRange~  s    6T[[(26T[[(26T[[(26T[[(21Ry#dkk!mB/QrCAb<QQQr7   c           	      6   |d   dv r| j                   j                  |       y |d   dk(  r| j                  j                  |       y |d   dk(  r| j                  j                  |       y t	        |      r\t        |      }t        |      dk  rt        d|      t        |      dk  r|j                  d       nt        |d   t        dd	d
|      }||d<   t        |      dk  r|j                  d        t        |      dk  r|j                  d       nt        |d   t        dd	d|      }||d<   t        |      dk  r|j                  d       n|d   }|d}||d<   |dk\  sJ t        |      dk  r|j                  |d          n|d   }|
|d   }||d<   t        |      dk(  sJ | j                  j                  t        |             y |d   dk(  r| j                  |d          y |d d |dd  c\  }\  }}\  }	}
}|t        v r0|d   dk(  r| j                  n| j                   j                  |       y | j#                  ||	||
      \  }}	}}
|	dz  }	t%        ||
dz         D ],  }t%        ||	      D ]  }t'        | j(                  ||||        . y )Nr   )
BACKGROUNDROWBACKGROUNDSCOLBACKGROUNDSSPANNOSPLIT   zbad line command r)   r   r   cap      re   	   r'   r*   ROUNDEDCORNERSr   )r  ra   r  r  _isLineCommandrY   rp   r   r   LINECAPS	LINEJOINSr  ro   r  r  r  r  r  r   _setCellStyler  )r3   rb   r  re   	lineCountspaceopr  r  r  r  r  r   r   s                 r5   r	  zTable._addCommand  s   q6EE##C(VvNN!!#&Vy $$S)C s)C3xz.?w,G!HH 3xz

1"3q68Q5#FA 3xz3::d+ 3xz3::a=#CFIq!VSIA 3xz3::a=F	$ !I&CF A~%~ 3x{CJJs1v.A=FE"CFs8r>!>NN!!%*-V%%  Q(/22AwQR,$R"b8Bf\!#%a5#:4==HHM!%!3!3Br"R!@BBar2a4 JA"2r] J%d&6&61b&IJJr7   c                 ,   d\  }}}| j                   }|j                          | j                  r<j                  }g |d d  |j                  |j
                  fd}||_        	 | j                  D ]  \
  }\  }}	\  }
}}}t        |	t              r	|	t        v r-d k7  r|k7  r|j                         }g k(  r|+|j                          d }n|k7  r|j                         }|k7  r|j                         }| j                  ||
|	|      \  }}
}	} t        | t        j!                  |d            ||	f|
|f||        	 r|_        	 |j#                          d | _        y # r|_        w w xY w)N)NNNc                     | |k(  r| 
j                   k\  s2| 
j                  k  s#||k(  r8|
j                  k\  s|
j                  k  r t	        | |||	             y  	| |||       y r0   )r   r   r  r  r   )xsysxeyeaSLr  rJ   dashre   	ocanvlinerrdweights       r5   
rcCanvLinez$Table._drawLines.<locals>.rcCanvLine  se    VSVVr366zVSVVr366z(Br"VE#d4PQbBr*r7   _drawUnknown)rP  	saveState_roundingRectDefSLlinera   r  rn   r   r  
setLineCapsetDashsetLineJoinr  r=   
_LineOpMapr   restoreState	_curcolor)r3   ccapcdashcjoinrP  r4  r0  r$  r  r  r  r  r   r#  r+  r  rJ   r,  re   r-  r.  r/  s                 @@@@@@@@r5   
_drawLineszTable._drawLines  s   -eUyy##BBqE		I))C+ + #DI	&VZVdVd tRGRWbfeS$eUb*r\/A89sOOC(D<42:( $U]LL& E#t$$T* E!%!3!3Br"R!@BBAZ^^B@AB8bRTXW]_dfkmrs!t$ %	 %	 s   6C.F Fc                 b    dd l }|j                  d      j                  d   }t        d|      )Nr   r   r$  zUnknown line command )sys	_getframef_localsr   )	r3   r  endr/  rJ   r   r#  rA  r$  s	            r5   r1  zTable._drawUnknown  s1    ]]1&&t,0788r7   c                 \    | j                  ||||||       | j                  ||||||       y r0   )_drawBox_drawInnerGrid)r3   r  rD  r/  rJ   r   r#  s          r5   	_drawGridzTable._drawGrid  s0    uc65%?UCuEr7   c                     |\  }}|\  }	}
| j                  ||f|	|f||||       | j                  ||
dz   f|	|
dz   f||||       | j                  ||f||
f||||       | j                  |	dz   |f|	dz   |
f||||       y rm   _drawHLines_drawVLinesr3   r  rD  r/  rJ   r   r#  r  r  r  r  s              r5   rF  zTable._drawBox  s    22"bB8VUE5I"bdb"Q$ZuM"bB8VUE5I"Q$bdBZuMr7   c                     |\  }}|\  }	}
| j                  ||dz   f|	|
f||||       | j                  |dz   |f|	|
f||||       y rm   rJ  rM  s              r5   rG  zTable._drawInnerGrid  s\    22"bdb"XvueUK"Q$b"XvueUKr7   c                     |r1|| j                   k7  r"| j                  j                  |       || _         |r3|| j                  k7  r#| j                  j	                  |       || _        y y y r0   )r;  rP  setStrokeColor
_curweightsetLineWidth)r3   r/  rJ   s      r5   	_prepLinezTable._prepLine	  sW    UDNN*II$$U+"DNfdoo-II""6*$DO .6r7   c                    |\  }}|\  }	}
| j                   ||	dz    }| j                  ||
dz    }t        |      dk  st        |      dk  ry | j                  ||       |d   }|d   }t	        | di       }| j
                  j                  }|dk(  r|D ]  }t        |||||        y |||z   |fd}|D ]  }t        |||||        y )Nr   r   r   rv   r  c                 "    t        | |||||      S r0   r   r   r  r   r  r   r   r   s          r5   <lambda>z#Table._drawHLines.<locals>.<lambda>       U_`bcefhiqrtuzU{ r7   )r  r  rp   rS  r=   rP  r5  r   )r3   r  rD  r/  rJ   r   r#  r  r  r  r  r   rpr   r   r   r   lfs                     r5   rK  zTable._drawHLines  s    22  BqD)2a4(s8Q;#b'!)Vvu%!f"g$z"-99>>A: 7xc1g67 .6&,e{B 1r3Q01r7   c                 X    |\  }}|\  }	}
| j                  ||dz   f|	|
dz   f||||       y rm   )rK  rM  s              r5   _drawHLinesBzTable._drawHLinesB$  s<    22"bdb"Q$ZuMr7   c                    |\  }}|\  }	}
| j                   ||
dz    }| j                  ||	dz    }t        |      dk  st        |      dk  ry | j                  ||       |d   }|d   }t	        | di       }| j
                  j                  fd}|dk(  r|D ]  }t        |||||        y |||z   |fd}|D ]  }t        |||||        y )Nr   r   r   rv   r  c                      ||| ||      S r0   rP   )r  r   r  r   _lines        r5   rX  z#Table._drawVLines.<locals>.<lambda>3  s    bBr@R r7   c                 "    t        | |||||      S r0   rV  rW  s          r5   rX  z#Table._drawVLines.<locals>.<lambda>8  rY  r7   )r  r  rp   rS  r=   rP  r5  r   )r3   r  rD  r/  rJ   r   r#  r  r  r  r  erpcpsrpr   r   rq   r[  s                     r5   rL  zTable._drawVLines)  s    22  BqD)  BqD)s8Q;#b'!)Vvu%!f"g$z"-04		RA: 7xc1g67 .6&,e{B 1r3Q01r7   c                 X    |\  }}|\  }	}
| j                  |dz   |f|	dz   |
f||||       y rm   )rL  rM  s              r5   _drawVLinesAzTable._drawVLinesA<  s<    22"Q$bdBZuMr7   c                 d    | j                  ||       || _        | j                  | j                  fS r0   )r  r  r  r  )r3   r  r  s      r5   wrapz
Table.wrapA  s*    

:{+$T\\**r7   c                      y)z
        This method will be called when the Table is split.
        Special purpose tables can override to do special stuff.
        NrP   )r3   TbyRows      r5   onSplitzTable.onSplitF  s    
 	r7   c           	         | j                   }|D ]  }|dd \  \  }}	\  }
}|	t        v r|	d   dk(  r`| j                  |       |	dk(  rI|rG|dk  r||z  }|
dk  r|
|z  }
| j                  |d   f||dz
  f|
|dz
  ffz   t        |dd        z          |s| j                  |       |	dk(  r|dz
  x}	}|	dk  r|	|z  }	|	|k\  r||k\  r|dz
  }| j                  |d   f||	f|
|ffz   t        |dd        z           y )Nr   r*   r   r   r   r   )r   r  r	  ro   )r3   r   r\   nr0doInRowSplit	_srflModer-  r7  r  r  r  r  s               r5   _cr_0zTable._cr_0M  sH     	HA 1vGRWb\!a5#:$$Q',,a4Ua4U((!A$2qs)b!A#Y1G)GaPQPRe)TU (  #|#XA#R!tR3YR1uh1u1Q3badWr2hR%99%!",FG#	Hr7   c                 ,   t        |      }t        |      }| j                  }	|D ]  }
|
dd \  \  }}\  }}|t        v r|d   dk(  rZ| j	                  |
       |dk(  rC|rA|dk  r||	z  }|dk  r||	z  }| j	                  |
d   f||f||ffz   t        |
dd        z          ||s| j	                  |
       |dk(  r|x}}|dk  r||z  }|dk  r||z  }t        t        ||dz               |z  }|rht        |      }| j	                  |
d   f||j                  t        |            f||j                  t        |            ffz   t        |
dd        z          ||k  r:t        ||z
  d      |z   }t        ||z
  d      |z   }| j	                  |
d   f||f||ffz   t        |
dd        z           | j                  }|rT|\  }}|dk  r||z  }|dk  r||z  }||k  rd | _        y t        ||z
  d      |z   }t        ||z
  d      |z   }||f| _        y y Nr   r*   r   r   r   r   )rp   setr   r  r	  ro   r   rY   r~  r   r|   r  )r3   r   nRowsr  r\   ro  rp  nrrrrSr-  r7  r  r  r  r  cSs                   r5   _cr_1_1zTable._cr_1_1d  sq   *o*o 	HA 1vGRWb\!a5#:$$Q'?*|a4Ua4U((!A$2s)b#Y1G)GaPQPRe)TU (  #{?HR!tR5[R!tR5[RU2bd^$s*B"X  !A$2z/?/?B/H*IBPZP`P`adegahPiKj)k!klqrstutvrwlx!xy!tXRT!SBRT!SBadWr2hR%99%!",FG1	H2   FB!tR5[R!tR5[R!t&*#Aa[_Aa[_&(e# r7   c           	         |D ]  }|dd \  \  }}\  }}	|t         v r|d   dk(  rb| j                  |       |dk(  rK|rI|dk  r	|t        z  }|dk  r	|t        z  }| j                  |d   f|df|dffz   t        |dd        z          |s| j                  |       |dk(  r|x}}	|	dk\  r|	|k  r|dk\  r||k  rd}||k\  r||z  }|	|k\  r|	|z  }	| j                  |d   f||f||	ffz   t        |dd        z           y rs  )r  r	  r-  ro   )
r3   r   r\   ro  rp  r7  r  r  r  r  s
             r5   _cr_1_0zTable._cr_1_0  sD    	HA 1vGRWb\!a5#:$$Q'?*|a4Ua4U((!A$2q'B71C)CE!AB%L)PQ (  #{?HR1uAx1uA!r1ubAgb1ubAgbadWr2hR%99%!",FG%	Hr7   c                 B   ||j                   z
  }||j                   |z   z
  }t        |t        t        f      rGg }g }	d}
| j	                  |||      d   }|j
                  dk(  r	||z
  dz  }nd}|D ]  }|
r4|j                  |k  r!|	j                  |       ||j                  z  }5g c S ||j                  z   |k  r!|j                  |       ||j                  z  }l|j                  |||z
        }|r)|j                  |d          |	j                  |d          nI|s|j
                  dk7  r4|j                  |k  r!|	j                  |       ||j                  z  }ng c S g c S d}
 t        |      t        |	      fS t        |t              r|j                  d      }d	|j                  z  }|j                  xs |t        |      z  }|j
                  dk(  r	||k  r|d
fS |j
                  dk(  r	||k  rd
|fS |j
                  dk(  r||kD  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j                  |d |       dj                  ||d        fS y)NFr   r   r   r   TOPTr3  rc  r   r.   )r   r   )rG   rn   ro   rY   rp  rM   r  ra   re  rx   rC   rD   rp   r   re   )r3   r   r#  	oldHeight	newHeightr  height0height1newCellContentpostponedContentre  
cellHeight
usedHeightflowablesplitsrows
lineHeightcontentHeight
splitPoints                      r5   
_splitCellzTable._splitCell  s   e...u//);<eeT]+N!E++E5%@CJ||x''*49

! #!'1(//98??2  "	(//1W<"))(3(//1J &^^E7:3EFF&--fQi8(//q	: *U\\U-B''9 0 7 7 A '8?? : (*	 $&I EG#!J .)51A+BCCs#;;t$Du~~-J"]]8jCIEM||u$')Ar{")mw.FE{")W$;&!2;&TQ	||u$$
2
) Y'Z*?@
%/-?Q^T
ZJIId;J/0$))D<M2NOO r7   c                    | j                   }| j                  }g }| j                  D ]T  \
  }\  }}\  }	}
}}}}}}}t        |t              rf|t
        v r^|j                  |||f|	|f|||||||f
       |dk(  r|dz
  x}}
n2|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 ra||k  r|
|k\  s	|r3||k(  r-|j                  d||f|	|f|||||||f
       |j                  d||f||
f|||||||f
       |j                  d	|	|f|	|
f|||||||f
       |j                  d
||
f|	|
f|||||||f
       |dk(  sN|rC|j                  d||f|	|dz
  f|||||||f
       |j                  d||f|	|
f|||||||f
       |j                  d
||dz
  f|	|dz
  f|||||||f
       |j                  d||f|	|f|||||||f
       |j                  d||f|	|
f|||||||f
       |j                  |||f|	|
f|||||||f
       |dk(  rq||k  rK|
|k\  rF|sD|j                  d
||dz
  f|	|dz
  f|||||||f
       |j                  d||f|	|f|||||||f
       |j                  |||f|	|
f|||||||f
       |d
k(  rM||k  r'|
|dz
  k\  r|j                  d||f|	|f|||||||f
       |j                  |||f|	|
f|||||||f
       |dk(  rP||k  r*|
|k\  r%|j                  d
||dz
  f|	|dz
  f|||||||f
       |j                  |||f|	|
f|||||||f
       6|j                  |||f|	|
f|||||||f
       W |S )Nr   r   r   r   rv   )BOXOUTLINEGRID	LINEABOVE
LINEBEFORE	LINEAFTER	LINEBELOWr  	INNERGRID)r   r   r  rn   r   r  ra   )r3   r   ro  r*  r-  Ar$  r  r  r  r  r/  rJ   r  r,  re   r   r#  s                     r5   _splitLineCmdszTable._splitLineCmds  s   RVR`R` 2	^NBB"R&%dD%"X&2+="bWr"gvuc4uV[\]{?cMB%BBAvrU{rAvrU{rB"R&%dDRWY^_AbEAvrU{rAvrU{rAvrU{rAvrU{r--qDRUQHHk2b'Br7FE3PTVZ\achijHHlBr7RGVUCQUW[]bdijkHHk2b'Br7FE3PTVZ\achijHHk2b'Br7FE3PTVZ\achij6z'HHk2b'Bqs8VUTWY]_cejlq%rsHHk2a&2b'65RUW[]achjo%pqHHk2ac(R!HfeUXZ^`dfkmr%stHHk2a&2a&&%QTVZ\`bgin%opHHk2b'Br7FESVX\^bdikp%qrHHb"R2b'65#tTSXZ_`a{"a4BE,HHk2ac(R!HfeSRVX\^cejklHHk2a&2a&&%dTXZ_afgh"bWr"gvuc4uV[\]{"a4B1IHHk2a&2a&&%dTXZ_afgh"bWr"gvuc4uV[\]{"q5RUHHk2ac(R!HfeSRVX\^cejkl"bWr"gvuc4uV[\]"bWr"gvuc4uV[\]e2	^h r7   c                 R   g j                   }|D ]  }|dd \  }\  }}\  }	}
|t        v s|
t        v r	 ||       +|
dk  r|
|z  }
|dk  r||z  }|
|kD  r|
dz  }
n|
|k(  r||k  s
||k(  r
|dk7  r|
dz  }
||kD  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)ra   r  r^  )r3   r   r\   oldrowcount	stretchedr7  rb   r  r  r  r  s              r5   _stretchCommandszTable._stretchCommands8  s    2 II	 	7A$%aF!C"R'2b\!R<%7!Avk!Avk!Ava'6bAg#*<!GBAv"'c[&8asRGbW-!"56+	7. !!!r7   c                 %   | j                  ||      }| j                  }t        |t              r|nt	        |      dz   }|r||k  s|s||k  rg S t        | j                        }||k(  r| gS | j                  }|rQ|\  }}|dk  r||z  }|dk  r||z  }||kD  r,| j                  |t        | j                  ||       z
  |      S ||k  rg S | j                  }	|s| }
| j                  }n| j                  D cg c]  }|d d  	 }}| j                  r|| j                  |   k  rg S t        | j                  d |       }| j                  |   }| j                  |   }| j                  }| j                  |   }d}d}d}t        t!        |||            D ]  \  }\  }}}| j"                  r| j$                  j'                  ||fd       6t        |t(        t*        f      r;| j-                  |||      \  }}||j.                  |j0                  z   z  }||kD  s|}t        |t2              s|j5                  d      }d|j6                  z  }|t        |      z  |j.                  z   |j0                  z   }t	        |||j.                  z         }t	        |||j0                  z         }||kD  s|} ||z   |kD  s	|||z
  kD  rz| j"                  sg S t9               }t;        | j<                        D ]  }||f}|| j>                  v s| j$                  j'                  ||fd       5| j$                  jA                         D ]9  \  }}|	|\  } }!}"}#|| k\  s||"k  s||!kD  s"||#k  s(|jC                  |          |sg S g }$| j"                  D ]t  \  }%\  }&}'\  }(})|&dk  r|&| j<                  z  }&|(dk  r|(| j<                  z  }(|'dk  r|'| jD                  z  }'|)dk  r|)| jD                  z  })|$jG                  |%|&|'f|(|)ff       v | j                  D cg c]  }|d d  	 }*}| jH                  }+|D ]  }| j$                  |   \  },}-}.}/| jJ                  |   }0|0d   }1t        | j                  |-|       }2|*|-   |,   }3| jM                  | j                  |-   |,   |3|1|2      }4|4sg c S |4d   ||-   |,<   |4d   ||   |,<   g }5|$D ]t  \  }%}6}7|,|-f|6k(  rS|.|/f|7k(  rL|dz
  |-kD  s|,|.k7  r|5jG                  |%|,|-f|.|dz
  ff       ||/k  s|,|.k7  sH|5jG                  |%|,|f|.|/ff       a|5jG                  |%|6|7f       v |5}$g }8|+D ]`  \  }%}6}7}9|6|,|-fk(  r=|8jG                  |%|6|7d   |dz
  f|9f       |8jG                  |%|6d   |f|7d   |f|9f       L|8jG                  |%|6|7|9f       b |8}+|3jO                         }:|3jP                  dk(  rv|4d   r|4d   rd	|3_(        d
|:_(        n]| j-                  ;d   xs |;d   ||3      d   }<||<z
  dz  }=|;d   r|3xj.                  |=z  c_        n|;d   r|:xj0                  |=z  c_        |:|*|   |,<    | jS                  || j                  | j                  | j                  | j                  | jT                  | jV                  d|*| jX                  t[        | dd       | j\                  t[        | dd       t[        | dd             }
|+|
_$        |$|
_        | j^                  |
_/        | j`                  |
_0        | jb                  |
_1        | jd                  |
_2        | jf                  |
_3        |
ji                          |
jk                          |
jm                          g }>| jn                  D ]_  }?|?\
  }@\  }&}'\  }(})}A}9}B}C}D}E}F|)dk  r|)|
jD                  z  })|(dk  r|(|
j<                  z  }(@dk(  s@dk(  r
|'|k  s|)|k\  s@dk(  r|'|k  s|)|kD  r@dv rf|>jG                  d|&|'f|(|dz
  fA|9BCDEFf
       |>jG                  d|&|f|(|)f|A|9|B|C|D|E|Ff
       |>jG                  d|&|dz
  f|(|dz
  f|A|9|B|C|D|E|Ff
       @dv s|>jG                  d|&|'f|(|'fA|9BCDEFf
       |>jG                  d|&|)f|(|)f|A|9|B|C|D|E|Ff
       |>jG                  d|&|'f|&|)f|A|9|B|C|D|E|Ff
       |>jG                  d|(|'f|(|)f|A|9|B|C|D|E|Ff
       O|>jG                  |?       b |D ]F  }g }G|>D ]9  }?|?\
  }@\  }&}'\  }(})}A}9}B}C}D}E}F| j$                  |   \  },}-}.}/|@dk(  r
|)|-kD  r|'|/k  s@dk(  r|)|-k\  r|'|/k  r|&|.k  r|(|,k\  r@dk(  r|-}H|/dz   }In|-dz
  }H|/}I|'Hk  rGjG                  @|&|'f|(HfA|9BCDEFf
       |,|&kD  r6GjG                  @|&t	        H|'      f|,dz
  tq        |)I      fA|9BCDEFf
       |.|(k  r6GjG                  @|.dz   t	        H|'      f|(tq        |)I      fA|9BCDEFf
       |)Ik\  sGjG                  @|&If|(|)fA|9BCDEFf
       )GjG                  |?       < G}>I |>|
_7        |
j                  |d      S tq        ||z
  ||z
        }J|Jdz   | jV                  k  rg S | jr                  Jz
  }K|K| jV                  k  rg S g }Ld}Mg }Nd}Og }Pt!        |||      D ]n  \  }}}| jM                  |||J|      };|;sg c S |jO                         }:|jP                  dk(  rv|;d   r|;d   rd	|_(        d
|:_(        n]| j-                  |;d   xs |;d   ||      d   }<||<z
  dz  }=|;d   r|xj.                  |=z  c_        n|;d   r|:xj0                  |=z  c_        LjG                  |;d          NjG                  |;d          | j-                  |;d   ||      d   |j.                  z   |j0                  z   }Qt	        M|Q      }M| j-                  |;d   ||      d   |j.                  z   |j0                  z   }Rt	        O|R      }OPjG                  |:       q tq        JM      }St	        O| j                  |   |Sz
        }T| j                  d d  }U|Uju                  |dz   |T       |S|U|<   | j                  d d  }*|*ju                  |dz   P       |d | Lgz   Ngz   ||dz   d  z   }| jS                  || j                  |U| j                  | j                  | jT                  | jV                  d|*| jX                  t[        | dd       | j\                  t[        | dd       t[        | dd             }
| jw                  || jn                  |      |
_7        | jw                  || jH                  |      |
_$        | jw                  || j"                  |      |
_        | jw                  || j^                  |      |
_/        | jw                  || j`                  |      |
_0        | jw                  || jb                  |      |
_1        |dz   }| jX                  }V|Vrty        V      }V|
j\                  }W|Wr|
j                  }Xn|
jz                  }Xt[        | dd       }Yt[        | dd       }Z| jS                  |d | |
j                  Xd | ||	| jT                  | jV                  d|
j                  d | Vt[        | dd       W|YrYd d nd Z      }L|
jD                  }[|
j<                  }\|
j}                  ||      }]|Lj                  ||]|[|       |Lj                  ||
jH                  |[|d       |Lj                  ||
j"                  |[|       |Lj                  ||
j^                  |[|       |
j`                  D ]`  }^Lj                  |^       |^d   d   dk7  r ^dd \  \  }&}'\  }(})Lj                  |^d   f|&|dz
  f|(|dz
  ffz   t)        |^dd        z          b Vrty        V      }V|rtt        |t              r.|d | }_Xd | }`|
j                  d | }at+        t;        |            }nTt+        t        |            }|D bcg c]  }b||b   	 }_}b|D bcg c]  }bX|b   	 }`}b|D bcg c]  }b|
j                  |b    }a}b| jS                  _||d  z   |
j                  `X|d  z   t        |      |	| jT                  | jV                  da|
j                  |d  z   Vt[        | dd       WYZ      }N|Nj                  |[|]|       |Nj                  ||[||
jH                  |d       |Nj                  ||[||
j"                  |       |Nj                  ||[||
j^                  |       n| jS                  ||d  |
j                  X|d  ||	| jT                  | jV                  d|
j                  |d  Vt[        | dd       WYr
ddgYdd  z   nd Z      }N|Nj                  |]|       |Nj                  ||
jH                  |d       |Nj                  ||
j"                  |       |Nj                  ||
j^                  |       |
j`                  D ]Z  }^Nj                  |^       |^d   d   dk7  r ^dd \  \  }&}'\  }(})Nj                  |^d   f|&df|(dffz   t)        |^dd        z          \ |
j                  xL_D        N_D        |
j                  x|L_E        |N_E        | j                  |L       | j                  |N       |L|NgS c c}w c c}w c c}bw c c}bw c c}bw ) N)ignoreSpansr   r   ro  r3  rc  r*   r   r.   r}  r   rT   _cornerRadiir   )r!  r"  r  r  r  r  r$  r%  r   rT   r  r(  r)  r  r  r  )r  r  r  )r  r  r  r  r  FT)rp  r   rU   )r!  r"  r  r  r  r  r$  r%  r   rU   r  r(  r)  r   )G!_getFirstPossibleSplitRowPositionr  rn   r   r|   rp   r  r  
_splitRowsr   r  r   r  r  r  r  r  r  r}  r   ro   rY   rp  rG   rH   rx   re  rC   rt  r   r   r  r   rc   r   ra   r  r  r  r2   rM   r  r  r  r   r=   r   r  r  r  r  r  r  r  r  r  r   r  insertr  r   r  r  rq  r	  r   ry  r{  r   r   rl  )cr3   r  ro  r   r  	maxrepeatr   lohir  rj  r   r9   usedHeights
cellvaluesr%  
cellWidthscurRowHeightminSplitmaxSplit	maxHeightcolumnr   r#  r  r   r  r  r  
splitCellsr?  r  	start_col	start_rowend_colend_rowspanCmdsrb   r  r  r  r  newCellStyles
bkgrndcmdsspan_scspan_srspan_ecspan_erspanRectr~  r  oldStyleresnewSpanCmdsr  rD  newbkgrndcmdsrJ   newStyler   r  marginnewlinecmdslinecmdr$  r/  r  r,  re   r   r#  
moddedcmdsstartrowendrowr  r  r   R0Heightr   R1HeightR1Stylesh0h1r  newRowHeightnewRowHeightsr   ltosplitHr(  r)  r*  r-  r  r7  iRowsiRowHiCSr   sc                                                                                                      r5   r  zTable._splitRowsk  s    
0
0
0
V __
",Z"<J#j/RSBS	AiK|9I $""#c64&=  FB!tR3YR!tR3YRt{S9I9I"Q9O5P'P_kll2	__
A##D"&"2"23QAaD3D3 ""{T5H5H5K'K	d..r23K))!,J))!,JJ++A.L HHI1:3z:Wa;b1c +--u>>d&6&6&:&:FA;&M&UeeT]3 $ 2 25% GIAve..1D1DDDF	)$*	s+ ;;t,D!$u~~!5J'#d)3e6F6FFI\I\\F  #8Z%:J:J-JKH"8Z%:M:M-MNH	)$*	++. H$|3kK78 ~~I U
#DKK0 &F"A;D 2 22((,,fa[$?G +/*:*:*@*@*B 	&JD$#| (EIBIy'7 &) 3 &' 1 !I !W *t 4 %	&&" "I/3~~ 
?+C"b8BAvdkk)Avdkk)Avdkk)Avdkk)OOS2r(RH$=>
? 04/?/? @!1 @ @!--

 ' @9D9=9I9I$9O6GWgw#t4H (I #D$4$4WQ$? @I  -W5g>H//$*:*:7*CG*L*2Iy%QC!	 .1VDM'*'*1vDGG$
 #%K+3 	BUC$g.%7$g.#5 sW}70B + 2 2C'79KgWXYZWZ^3\ ] 7{g.@ + 2 2C'1QXGY3Z ['..UC/@A	B  +H$&M2< K.UC Wg$66 *00#us1vqsmU1ST)00#a!}s1vqkSX1YZ)00#uc51IJK "/J  (}}H(2q6c!f.6HO.3HO !% 2 21Q4<1Q4 QRS TA&2Q&6!%;F t ( 3 3v = 3!"1 ( 6 6& @ 608M!$W-A@9F NNDDOO#//DOO#4??#q,DJJ ']4 @&*&=&= '^D A$T+d; # 	 !+&!%!2!2"nn!]]
"&"4"4"&"4"4$$&!!#  " !#~~ !GY`VBB"R&%dD%QVAvahhAvahhu",B!GrAv{*Q"q&!66'..RGb1XvW\^acgimotv{/|}'..RFRGVUZ\_aegkmrty/z{'..R!Hr!A#hPVX]_bdhjnpuw|/}~0 (..bWr"gvW\^acgimotv{/|}'..bWr"gvW\^acgimotv{/|}'..r"g2wPVX]_bdhjnpuw|/}~'..bWr"gvW\^acgimotv{/|}#**73 1!8 ' 0-D!#J#. +7]dZGRWbfeS$eUZ=A=M=Md=S:'7 K/BLR7]+-"-BL'MbGm  "[0+2)01+2Q;)0!X~ * 1 1%'"bB>65RUW[]achjo$p!"
  '| !+ 1 1%'"c(B.?)@719cRTV\oB^`fhmortxz~  AF  HM  %N!"  '| !+ 1 1%''!)S25F)G"cRTV\oI^`fhmortxz~  AF  HM  %N!"  "V| * 1 1%'"fBxPSUY[_afhm$n!" '--g6W+7Z #-Ka0-d *||KU|CC [;6	H8LMJ!|doo- 	z1I4??* 	BHBHH),ZZ)P *%uOOE5,
ERI ::<<<8+t!'/*/ !..qt|qtUEJ1M"."2a!7Q4!,,6,qT$22f<2		!A$		!A$''!eU;A>AQAQQTYTgTggx,''!eU;A>AQAQQTYTgTggx,)7*< Z2Jx)9)9!)<z)IJL ,,Q/M  Q5)M! ,,Q/M  Q18rd?bT)D1J6D(T__??t??1(

#Dt<"&"9"9#D= k$7  	A //4>>3GAK 11!T5E5EsKAM//4>>3GAK!221d6G6GMAN//4>>3GAK..q$--EAJAA 

(5/%""]]FWWFd>$74D1^^T"1X&QSRS*%*??1WYXYIZ#Dt<"%/:KO!   $$Q\$B	
9U<0
1==|dC
1;;u\2
1>>%5 	HANN1tAw#X 1vGRWbNNAaD7R1IAaCy#99%!",FG		H (5/%*S)[j){
+mmKZ0!%
"34
 "&"45
*45Qa55,67q771;<Aq}}Q'<<d12h$VABZ/"::#4??#$"1==#44&tL>&)"-'   B JJqz)LAJJqz!--tJTJJqz!++lCJJqz!..F QRALLVTUTVZ)j#4??#$qr1B&tL>&)?JAa5;qr?#:PT'   	B JJq<0JJq|dJCJJq\2JJq5 	DANN1tAw$h 1vGRWbNNAaD7RGb!W#55eAabElBC		D !"(	BI !(	BIRR2wm 4j !Af	 67<s&   8AK	AK@AK@+AK@=AKc                     |D ]K  }||   }|d k7  s|d   |d   }}||k7  st        ||      }t        ||      }|dz   }		 |	|kD  rBd | |	<   |	dz  }	 y )Nr   r*   )r   r|   )

impossiblecellsrangesxyr   r  y2yminymaxr   s
             r5   _getRowImpossiblezTable._getRowImpossibleC  s{     	BRjA$wd1Q42r6RDRD1fAT65&*
11 	r7   c                 >   i }| j                   r)|s'| j                  || j                  | j                         | j                  r'| j                  || j
                  | j                         d}d}d}| j                  D ]  }||z   |kD  r |S ||vr|}||z   }|dz   } |S )Nr   r   )r  r  r  r}  r  r  r  r  )r3   r  r  r  r  r   split_atrI  s           r5   r  z'Table._getFirstPossibleSplitRowPositionR  s    
>>+"":d.@.@AQAQR"":d.C.CDDWDWX"" 	BtK
 	 
"dAcA	 r7   c                 2   | j                  ||       | j                  s| j                  rlt        j                  s| j
                  |kD  rg S | j                  || j                         }|r|S | j                  r| j                  || j                        S g S )Nr  )r  r  r  r	   r  r  r  )r3   r  r  r>   s       r5   re  zTable.splitf  s    

:{+??doo33J8NWYPY __[4???R_SF {QQ 	r7   c                    d | _         t        | dd       }|rt        |      |k  ry | j                  }| j                  }t        dd|dz
  f|dz
  df|dz
  |dz
  ff      D cg c]2  \  }\  }}t        | j                  |   | j                  |   ||         4 }}}}| j                  }	| j                  }
|
d   }|	|   }|
|   }|	d   }||z
  }||z
  }t        |||||||g       | _         | j                  j                         }|j                  |||||       | j                  }|j                  d       |j!                  |d       |j                  d       y c c}}}w )Nr  rb  r   r   z%begin table rect clipstrokez%end table rect clip)r3  r=   r|   r   r   r  r   r  r  r  r  RoundingRectDefrP  	beginPath	roundRect
addLiteralclipPath)r3   r   r(  r*  r-  r  r   r   arrZ  rc  r   r  r   r  r   r  r   r7  s                      r5   _makeRoundedCornersClipzTable._makeRoundedCornersClipz  s    $d>$7c+.4f$uQwK1WQK1WeAg&	&  %1Q $""1%dooa&8QH   UYYUGG /B1b"b" MII!	BAq"%II	-.	

1A
	+,-s   #7Ec           
         | j                   \  }}}}}}}}|sy | j                  }	|	j                          d x}
x}x}x| _        | _        |	j
                  }| j                  }|D ]  \	  }}}}}}}}}|d k7  r|
|k7  r|	j                  |       |}
||g k(  r|+|	j                          d }n||k7  r|	j                  |       |}|||k7  r|	j                  |       |}| j                  ||       ||k(  r||kD  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
  kD  rt        d
|||f|dd	      nd }n||kD  s||k  r |||||       2||k(  rd}|d   }|d   }nd
}|d   }|d   }|||z   k\  r|||z
  k  r |||||       m|||z   k  rt        |d||f|dd	      nd }|||z
  kD  rt        |d||f|dd	      nd }|	j                         }|rM |j                  |d     |j                  |d   d   |d   d   |d   d   |d   d   |d   d   |d   d          n|j                  ||       |s|j                  ||       nL |j                  |d     |j                  |d   d   |d   d   |d   d   |d   d   |d   d   |d   d          |	j!                  |dd        |	j#                          y )Nr   r   r*   r   r   r   r   r   )r   r   r   r   r  fill)r3  rP  r2  rQ  r;  r5  r  r6  r7  r8  rS  r   r  moveTocurveTolineTodrawPathr:  )r3   r   r  r   r  r   r  r  r4  rP  r<  r=  r>  r5  r(  r'  r(  r)  r*  r/  rJ   r  r,  re   r   r  r  r  r  r   r   s                                  r5   _restoreRoundingObscuredLinesz#Table._restoreRoundingObscuredLines  s   '+'<'<$B1b"b"6yyBFFFuFuFtyy''8: B	/4R2bc$tDyT3Y$|trz$LLN ET"E4K  &NN65)2vb5BrEBr"%r6#DABAB DABABr"u9RUBr"%^`acdfaf^f\&r"gr\Zlp_abdegbg_g\'$2wl[mq b5BrEBr"%r6!DABAB"DABABr"u9RUBr"%`bcefhch`h\$xB!|\nr]_`bce`e]e\$ubWbqLYko A"Q% 		"Q%(2a58BqE!HRU1Xr!uQx1aQBB"Q% 		"Q%(2a58BqE!HRU1Xr!uQx1aQMM!AAM.EB	/F 	r7   c                 8   | j                   }|j                          d x| _        x| _        | _        t        | d      }|r || d        || d       | j                          | j                          |r	 || d       | j                  sm|rt        t        | j                  | j                  | j                  dd  | j                              D ]  \  }\  }}}} || d|       t        t        ||| j                  d d | j                               D ]>  \  }\  }	}
}} || d|||	|
||f||f       | j#                  |	|
||f||f        || d	       @  || d
        nt        | j                  | j                  | j                  dd  | j                        D ]Z  \  }}}}t        t        ||| j                  d d | j                               D ]"  \  }\  }	}
}}| j#                  |	|
||f||f       $ \ nH|rt%        | j&                        D ]  } || d|       t%        | j(                        D ]u  }| j*                  ||f   }||\  }}}}| j                  |   |   }	| j                  |   |   }
 || d|||	|
||f||f       | j#                  |	|
||f||f        || d	       w  || d
        nt%        | j&                        D ]s  }t%        | j(                        D ]Y  }| j*                  ||f   }||\  }}}}| j                  |   |   }	| j                  |   |   }
| j#                  |	|
||f||f       [ u |r	 || d       | j-                          |r || d        || d       |j/                          | j0                  r| j3                          y y )Nr   
startTablestartBGendBGr   startRowrv   	startCellendCellendRow
startLinesendLinesendTable)rP  r2  rQ  r;  _curcellstyler=   r  _drawBkgrndr  r  r  r   r  r  r  r  r  	_drawCellr   r   r   r  r?  r:  r3  r  )r3   r7  r)  r  r>  rowstylerowpos	rowheightr  cellval	cellstylecolposcolwidthcellRectrq   r   r  r  s                     r5   drawz
Table.draw  sY   II	@DDD$.4+=4,T,'T)$$$&Xd7+~~AJ3tO_O_aeaqaqsw  tF  tF  GH  GI  tJ  LP  L\  L\  L]  B^ ,=E=C69T*U3IRSVWZ\dfjfxfxy|z|f}  @D  @O  @O  TP  JQ 1EEFH k5%)V\^dUehpr{g|}w	FF;KhXaMbc i01 T(+, 9<D<L<LdN^N^`d`r`rstsu`vx|  yI  yI  9J d4C69IRSVWZ\dfjfxfxy|z|f}  @D  @O  @O  TP  JQ dEEFHw	FF;KhXaMbcdd "4;;/ ,ET*U3!&t{{!3 5#'??5%<#@#/4<1Q5&&*&6&6u&=e&DG(,(8(8(?(FI$T+ueWiZ[]^Y_bgioapq NN7I1vvW$T)45 T(+, #4;;/ XE!&t{{!3 X#'??5%<#@#/4<1Q5&&*&6&6u&=e&DG(,(8(8(?(FI NN7I1vvWXX Xd<0T*%T*%	  ..0 !r7   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 ]B  }|||z     }|||z      }|r)|j%                  |       |j'                  |||| dd       ||z
  }D |	dk(  rt        t        t        j                  |            }t!        |      }||
z
  dz   }t#        |      D ]A  }|||z     }||
|z      }|r(|j%                  |       |j'                  ||||dd       ||z   }C |rt)        |t        t*        f      r|d   dv r||
k(  r#||k(  r|r|j-                  |
|f      }|r|\  }}}}|d   |dd  }}|j/                          |j1                         }|j'                  ||||       |j3                  |d	       |d
k(  r|j5                  ||||z   ||d       n |dk(  rA||dz  z   }|j5                  |||||d       |j5                  ||||z   ||d d d   d       n|dk(  rA||dz  z   }|j5                  |||||d       |j5                  |||||z   |d d d   d       n|dk(  r|j5                  |||||z   |d       ns|dk(  rdt!        |      cxk  rdk  rin nf|d d \  \  } }!\  }"}#|| |z  z   } ||"|z  z   }"||!|z  z   }!||#|z  z   }#|d   }$|d   }%t!        |      dk(  r|d   nd }&|j5                  | |!|"|#|%|&|$       nt7        dt8        d|      |dk(  rdt!        |      cxk  rdk  rn n|d   \  }'}(||'|z  z   }'||(|z  z   }(|d   \  })}*|*dk(  r|}*nG|*dk(  r|}*n?|*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 }&|j=                  |'|(|)|%|&|$       nt7        dt8        d|       |j?                          t        j                  |      }|s||
k(  r#||k(  r|r|j-                  |
|f      }|r|\  }}}}|j%                  |       |j'                  ||||dd        y )!Nr  r   r   __call__r  r  r  )VERTICAL
HORIZONTAL	VERTICAL2HORIZONTAL2LINEARGRADIENTRADIALGRADIENTr  r
  F)extendr         @rv   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   rP  r  r  r  r  r=   r  r  r   rX   rY   rf   r   toColorOrNonerp   r   setFillColorrectrn   ro   r   r2  r  r  linearGradientr   r$  r|   radialGradientr:  )+r3   r*  r-  rP  r  r  r"  r!  r  rb   r  r  r  r  argr   r  r   r  r   r  
colorCycler   rowCountr   rJ   colCountxywharg0pxhyhax0ay0ax1ay1r  rS  r   xcycr   refs+                                              r5   r  zTable._drawBkgrnd 	  sX   yy))))%%
OO	Dd3	,0,<,< D	A(C"b8BS\!8AvBJrAvBJrAvBJrAvBJrb!Bb!Bc"Q$uo.Bc"Q$uo.Bb5"R%qAs:&Dr2q!,((
 "#f&:&:C"@A
J7Q;x  A&qw/E"26*A))%0		"b!aRq	AaB  ((!#f&:&:C"@A
J7Q;x A&qw/E!"q&)A))%0		"b!Qqa	@QB JsD<8F 'D D2v"b&Y(}}bW5+/LBAq #AAB#D NN$(AFF2r1a(MM!AM.\)++Br"Q$r#U+K.!C%Z++BBC+N++BBFBDbD	RW+X,!C%Z++BBC+N++BBQDbD	RW+Xz)++BBQE+R// c#h>>58!W2JS#
c"$s1u*C"$s1u*C"$s1u*C"$s1u*C%(VF #AA*-c(A+A4A //S#sAQR[a/b",/@kRUQX-Y"ZZ// c#h>>%(VFB!#bdB!#bdB%(VFAs"G|&'!$h&'!$e&)1Qi!$e&)!Ah&0<AzPRvU`ad`g1h&i iHA%(VF #AA*-c(A+A4A //B1RX/Y",/@kRUQV-W"XX%%'"005Er6b"f#,=="R#9D#/3B1))%0		"b!Qqa	@ID	Ar7   c           	      	   |\  }}|\  }}| j                   |ur| j                   }	|	|j                  |	j                  k7  r%| j                  j                  |j                         |	K|j                  |	j                  k7  s2|j
                  |	j
                  k7  s|j                  |	j                  k7  r;| j                  j                  |j
                  |j                  |j                         || _         |j                  }
|j                  }t        |t        t        t        f      rxt        |t        t        f      s|f}g }g }| j                  ||||||      \  }}|dk(  r||z   |j                  z
  }n=|dk(  r||j                   z   |z   }n%|||j                   z   |j                  z
  |z   dz  z   }|r||d   j#                         z  }t%        |||      D ]  \  }}}|
dk(  r||j&                  z   }n_|
dk(  r||z   |j(                  z
  |z
  }nD|
dv r&|||j&                  z   |j(                  z
  |z
  dz  z   }nt+        d	|
d
t-        |             ||j#                         z  }||z  }|j/                  | j                  ||       ||j1                         z  } n|
dk(  r&| j                  j2                  }||j&                  z   }n|
dv r9| j                  j4                  }|||j&                  z   |j(                  z
  dz  z   }nj|
dk(  r)| j                  j6                  }||z   |j(                  z
  }n<|
dk(  r)| j                  j8                  }||z   |j(                  z
  }nt+        d	|
      t;        |      j=                  d      }t?        |      }|j                  }|j                  }|dk(  r||j                   z   ||z  z   |z
  }nZ|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                  |jB                  |jD                         |jF                  r2| j                  jI                  |jF                  ||||z   ||z   fd       |jJ                  r4| j                  jM                  d|jJ                  ||||z   ||z   fd       y y )N)ri  rj  rU  r}  r.   r  r   r,   RIGHT)CENTREr   zInvalid justification z for r   DECIMALr3  r   zBad valign: onDrawr   )relativer   )Rectr-  )'r  rJ   rP  r  rD   rB   rC   setFontrK   rM   rn   ro   rY   r   rp  rG   rH   rg  r  rE   rF   r   typedrawOnrh  
drawStringdrawCentredStringdrawRightStringdrawAlignedStringrx   re  rp   r=   r   labelrN   linkURLrO   linkRect)r3   r  r  possizer  r  r  r   curjustrM   ri  rj  r   r  r   r   rq   r  valsr   rD   rC   r,  s                            r5   r  zTable._drawCell	  s   ")Y.$$C{ioo:		&&y7{i//3;;>)BTBTX[XdXdBdhqhzhz  B  K  K  iK		!!)"4"4i6H6H)J[J[\!*D""!!guT(34guTl3zWAA%%ghy1Y%WDAqu}Y&)=)==!9222Q6Ii&=&==i>R>RRSTTVYYYWQZ6688wq+ 
'1a<VI,A,A%A7]x	8N8N(NQR(RA11)>)> >y?U?U UVW WY\\\A$'=dXU4PQ7)%TUUQ%%''Q1Q'Q__&&
' v~yy++Y222--yy22HY%:%::9;Q;QQSVVVyy00X%	(>(>>"yy22X%	(>(>> #9$!BCCw<%%d+DD	A''G ))HxY444QwY>xGY&)=)==H!i55	A)BVBVVWXY`W``beeehpp <z!:;; Q1W WXd3Ftyygmm<>>IIinnvvv?PRX[dRd.epqr  IIr9#8#8PVYaPacilucu?v  BC  D !r7   c                     t        |      r8|sd | _        y t        |      t        dt        |      z
  d      dgz  z   | _        y t        d|      )Nr  r   z@cornerRadii should be None or a list/tuple of numeric radii
not )r   rY   r|   rp   r  r   )r3   r(  s     r5   r  zTable._setCornerRadii	  sY     -,7DT+=NRUVWX[\gXhVhijRkmnloRo=pD`al`opqqr7   )ry  )NN@ )r?  r?  r0   rk   )r   )Fr   ):r?   r@   rA   r   r6   ri   r
  r   rV  r`  rp  rr  r  rd  r  r  r  r  r  r  r  r  r  r  r  r  r	  r?  r1  rH  rF  rG  rS  rK  r]  rL  rf  rh  rl  rq  ry  r{  r  r  r  r  r  staticmethodr  re  r	   r  r  r  r  r  r  r  rP   r7   r5   r   r     sv   '+DqQY]ei4dZ^ DDX\%m,`l(&oP409=(~#BJ`D"B5"pd,-5^.8`2$h4$R;Jz,\9FNL%1&N
1&N
+
H.',RH*Xt:x1"fVp ##45(( ,5?? -<KZ91vMA^ND`rr7   r   rH  rF  rG  r]  rK  rL  rf  )r  r  r  r  r  r  r  r  c                       e Zd ZdZdZy)r   z+Henning von Bargen's changes will be activer   N)r?   r@   rA   __doc__r   rP   r7   r5   r   r   
  s    5r7   r   c                   R    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y)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|  y )NzTableRenderCB first argument, z is not a Tablezinvalid TablerenderCB cmd )rn   r   r   rg   r=   )r3   rj  rb   argsmeths        r5   r  zTableRenderCB.__call__
  sW    !E"*7UVZ[\V]U^^m5n*o$otC%:(B3%&HIIQr7   c                     t        d      )Nr  NotImplementedErrorr3   rj  s     r5   r  zTableRenderCB.startTable
      !,//r7   c                     t        d      )Nr  rI  rK  s     r5   r  zTableRenderCB.startBG
      !),,r7   c                     t        d      )Nr  rI  rK  s     r5   r  zTableRenderCB.endBG
  s    !'**r7   c                     t        d      )Nr  rI  )r3   rj  r  s      r5   r  zTableRenderCB.startRow!
      !*--r7   c                     t        d      )Nr  rI  )r3   rj  r  r  r  r  r9  r:  s           r5   r  zTableRenderCB.startCell#
  s    !+..r7   c                     t        d      )Nr  rI  rK  s     r5   r  zTableRenderCB.endCell%
  rN  r7   c                     t        d      )Nr  rI  rK  s     r5   r  zTableRenderCB.endRow'
  s    !(++r7   c                     t        d      )Nr  rI  rK  s     r5   r  zTableRenderCB.startLines)
  rL  r7   c                     t        d      )Nr  rI  rK  s     r5   r  zTableRenderCB.endLines+
  rQ  r7   c                     t        d      )Nr  rI  rK  s     r5   r  zTableRenderCB.endTable-
  rQ  r7   N)r?   r@   rA   rB  r  r  r  r  r  r  r  r  r  r  r  rP   r7   r5   rD  rD  
  s<    N
0-+./-,0..r7   rD  c                     | d   t         v S r   )LINECOMMANDS)rb   s    r5   r  r  0
  s    q6\!!r7   c                 ~   | |   |   }|dk(  rJt        |      }|d   |_        |dkD  r/|d   |_        |dkD  r|d   |_        y |j                  dz  |_        y y |dv r|d   |_        y |dv r|d   |_        y |dk(  r|d   |_        y |d	k(  r4t	        j
                  |d   t	        j                  ddd            |_        y |d
v r|d   |_        y |dk(  r|d   |_	        y |dk(  r|d   |_
        y |dk(  r|d   |_        y |dk(  r|d   |_        y |dk(  r|d   |_        y |dk(  r|d   |_        y |dk(  r|d   |_        y y )NFONTr   r   r   rc  )FONTNAMEFACE)SIZEFONTSIZELEADING	TEXTCOLOR)ALIGN	ALIGNMENTVALIGNLEFTPADDINGRIGHTPADDING
TOPPADDINGBOTTOMPADDINGHREFDESTINATION)rp   rB   rC   rD   r   toColorColorrJ   rK   rM   rE   rF   rG   rH   rN   rO   )r%  r   r   r$  r  r  r   s          r5   r!  r!  3
  sk    Q-
C	V|KayQ3!!9CLs$Qi!ll3.  
#	#ay	#	#ay	yQi	{	NN6!9fll1Qq.AB		%	%q		xAY
	}	 )	~	!!9	|			"1I	v!9	}	 ) 
r7   r  rb  rv   rv   g      ?)rb  )r   r   rm  r)  r  r   r  r  )rv   r   r  )r   rv   r  )r   r   __main__)old_tables_test)r   r   gW[?)M__all____version__rB  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   r\  reportlab.pdfbase.pdfmetricsr   r  r   r   r   collectionsr   r  r   r   r   rr   r   r   r   r  r   r   r   r   r   ro   r   r   r  r   r  r   r9  r   rY   r  rY  rD  r  r!  r+   
GRID_STYLE	BOX_STYLELABELED_GRID_STYLEr  COLORED_GRID_STYLEgreen
LIST_STYLEr?   tests.test_platypus_tablesro  rP   r7   r5   <module>r     s  

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

+5&!V\\25&!V\\2'	)  5&!V\\25'4667Av||4')
 z: r7   