%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /usr/lib/python3/dist-packages/reportlab/platypus/__pycache__/
Upload File :
Create Path :
Current File : //usr/lib/python3/dist-packages/reportlab/platypus/__pycache__/tables.cpython-312.pyc

�

׸�e��
�~�dZdZdZddlmZmZddlmZddlm	Z	m
Z
mZddlm
Z
ddlmZmZmZmZmZmZmZdd	lmZdd
lmZddlmZddlmZdd
lm Z m!Z!ddlm"Z"ddl#m$Z$dddddd�Z%dddddd�Z&Gd�de	�Z'Gd�d�Z(d�Z)d�Z*d�Z+dKd�Z,ejZfd�Z.d�Z/d�Z0d �Z1dejZfd!�Z2Gd"�d#e3�Z4Gd$�d%e3�Z5e$d&d'�Z6e$d(d)�Z7d*Z8Gd+�d,e�Z9d-d.d.d/d0d1d2d3d4�Z:Gd5�d6e9�Z;e<e:j{��Z>Gd7�d8�Z?d9�Z@d:�ZAe(d;d<d=d>e
j�fd?g�ZCe(d@d<d=dAe
j�fd?g�ZDe(dBd<d=d>e
j�fd@d<d=de
j�fdCd<dDde
j�fdEd<dFde
j�fd?g�ZEe(dBd<d=d>e
j�fd@d<d=de
j�fdCd<dDde
j�fdEd<dFde
j�fd?g�ZGe(dGd<dDde
j�fdGdHd=d>e
j�fdCdFd=de
j�fd?g�ZIeJdIk(rddJlKmLZLeL�yy)L)�Table�
TableStyle�	CellStyle�	LongTablez3.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�eZdZeZdZdZdZdZdZ	dZ
dZdZdZ
dZd	Zd
Zd
Zd
d�Zd
d�Zy
)r�
���r�black�LEFT�white�BOTTOMNc�:�||_|�|j|�yy�N)�name�copy)�selfr1�parents   �;/usr/lib/python3/dist-packages/reportlab/platypus/tables.py�__init__zCellStyle.__init__9s ����	����K�K����c	��|�t|j�}t|�D]+}|jd�r�t	||t||���-|S)N�_)rr1�dir�
startswith�setattr�getattr)r3�resultr1s   r5r2zCellStyle.copy=sP���>��t�y�y�)�F���I�	7�D����s�#�X��F�D�'�$��"5�6�	7��
r7r0)�__name__�
__module__�__qualname__r�fontname�fontsize�leading�leftPadding�rightPadding�
topPadding�
bottomPadding�firstLineIndent�color�	alignment�
background�valign�href�destinationr6r2�r7r5rr*sR���H��H��G��K��L��J��M��O��E��I��J�
�F��D��K��r7rc�&�eZdZdd�Zd�Zd�Zd�Zy)rNc	��|rP|j�dd}|j|_dD]&}t||�s�t||t	||���(ng}|t|xsg�z|_i|_|jj|�y)N��spaceBefore�
spaceAfter)�getCommands�_opts�hasattrr<r=�list�_cmds�update)r3�cmdsr4�kw�pcmds�as      r5r6zTableStyle.__init__Fs�����&�&�(��+�E����D�J�1�
6���6�!�$��D��7�6�!�#4�5�
6��E��T�$�*�"�-�-��
���
��
�
���"�r7c�:�|jj|�yr0)rZ�append)r3�cmds  r5�addzTableStyle.addVs���
�
���#�r7c�Z�ddjtt|j��zS)Nz!TableStyle(
%s
) # end TableStylez  
)�join�map�reprrZ�r3s r5�__repr__zTableStyle.__repr__Xs!��4�v�{�{�3�t�T�Z�Z�CX�7Y�Y�Yr7c��|jSr0)rZrhs r5rVzTableStyle.getCommandsZs���z�z�r7�NN)r?r@rAr6rcrirVrPr7r5rrEs��� �Z�r7rc�R�t|ttf�xrdxst|�S�Nr)�
isinstance�tuplerY�len)�xs r5�_rowLenrr]s$���!�U�4�L�)�)�/�a�9�3�q�6�9r7c��g}|j}g}|j}g}|j}|}dx}	}
|D]�}t|t�r�t|�j	�}|sd}|
dz
}
nk|jd�r%t
|dd�}|	|z
}	|t|��n5|dk(r|t|��nt
|�}||z}n
|�|
dz
}
n||z}||���td|�}|td|	�z}|D]}||xx|zcc<|||z}�td|�}t|�}
|
r|
dk(xr||
zxsd}|D]}|||<�	|S)	acheck 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�%����*gY@r)	rarnr�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��J�A��
�
���a��!��A�����A�����Q������C���!�C�R�&�M���Q����#�a�&�	��C���#�a�&�	��!�H���Q���
�Y�
��F�A�
��F�A�	�!��'
�(	�B�q�	�A�	�#�d�1�+�
�A�
���	�!���	��	�Q�q�T�	���	�B�q�	�A��A��A��
��T�\�a��c�
!�T���	�A��A�a�D�	��Hr7c���|dk(r|Sd|dd|ddzzd|dd|ddzzf}d|dd|ddzzd|dd|ddzzf}d|dd|ddzzd|dd|ddzzf}d|d|dzzd|d|dzzf}d|d|dzzd|d|dzzf}d|d|dzzd|d|dzzf}|dk(r	|d|||gS||||dgS)zVcalculate all or half of a bezier curve
    kind==0 all, 1=first half else second halfr��?rrr*rP)�P�kind�Q0�Q1�Q2�R0�R1�S0s        r5�_calcBezierPointsr��sq���Q�w����1�Q�4��7�1�Q�4��7�?�#�C��1��a���1��a���$9�
:���1�Q�4��7�1�Q�4��7�?�#�C��1��a���1��a���$9�
:���1�Q�4��7�1�Q�4��7�?�#�C��1��a���1��a���$9�
:���2�a�5��A��;���R��U�2�a�5�[� 1�
2���2�a�5��A��;���R��U�2�a�5�[� 1�
2���2�a�5��A��;���R��U�2�a�5�[� 1�
2��"&��'��!��R��2��>��2�b��1���>r7c��||z}|dk(r%|dk(r |\}}	||z
|	f||z
|	f||	|zf||	|zfg}
n�|dk(r%|dk(r |\}}|||z
f|||z
f||z
|f||z
|fg}
nd|dk(r%|dk(r |\}}||z|f||z|f|||z
f|||z
fg}
n:|dk(r%|dk(r |\}}	||	|zf||	|zf||z|	f||z|	fg}
ntd||f����|dk(r|
dd|
ddkDs|d	k(r!|
dd
|
dd
kDr|
j�t|
|�}
|
S)N�right�bottom�top�leftz&Unknown quadrant position (xpos,ypos)=�
left-rightrrv�
bottom-topr)�
ValueError�reverser�)
�xpos�ypos�cornerr�r��	directionr��t�xhi�ylor��yhi�xlos
             r5�_quadrantDefr��s���	�!��A��W�}��x�����C��A�g�s�^�S��U�C�L�3��a��.�3��a��.�I��	
�w��4��;����C��3��7�^�S�#��'�N�S�1�W�c�N�S�1�W�c�N�K��	
�v��$��+����C��A�g�s�^�S�1�W�c�N�S�#��'�N�S�#��'�N�K��	
�v��$��.����C��3��7�^�S�#��'�N�S�1�W�c�N�S�1�W�c�N�K���A�4��+��Q�R�R��,��1�Q�4��7�1�R�5��8�#3�y�,�7N�ST�UV�SW�XY�SZ�[\�]_�[`�ab�[c�Sc�	�	�	���!�T�"�A��Hr7c��|r|j|d�}|r||dd|z
k\s||dd|zkr|||||�yd}t|�}|||z
kr[||krV||\}}	|	||zks|||z
k\r|dz
}�+t||�}
t||	�}|
|kDr||||
|�|}|||z
kr||kr�V|||z
kr|||||�yy)z�
    Draw horizontal lines; do not draw through regions specified in hBlocks
    This also serves for vertical lines with a suitable canvLine
    Nrvrr)�getrpr|�min)�canvLine�scp�ecp�y�hBlocks�FUZZr�r��x0�x1�i0�i1s            r5�_hLiner��s���
�'�+�+�a��-���c�7�2�;�q�>�$�.�.�#�w�q�z�!�}�T�7I�2I���Q�s�1��
����L���#�d�(�l�q��s��Q�Z�F�B���3�t�8�|�r�3�t�8�|��Q�����S���B��S���B��#�v�x��A�b��+��C��#�d�(�l�q��s��s�4�x�<��#�a��A�.�<r7c�d�d|dz
z|z}||z
}t|�D]}|||||�||z}�y)Nr�r)�range)r�r�r�r��ws�count�offset�idxs        r5�
_multiLiner��sG��
�%��'�]�2�
�F���K�A��U�|�����a��a� �	�R���r7c��	||S#t$r)	t|�}||cxkr|krnn|cYSn#YnxYwYnwxYwtd|�d|�d|����)zLprivate converter tries map(value) low<=int(value)<=high or finally an errorzBad z value z in )�KeyError�intr�)�valuerf�low�highr1rb�ivalues       r5�_convert2intr��si����5�z�����	���Z�F��F� �D� ��-��	������t�D�6����t�C�7�;�
<�<s ��	9�/�9�9�3�9�9c�4�	|j|�S#YyxYw�Nr)rz)�objr�s  r5�	_endswithr��s����|�|�A������s��c�<�i}|st|�}ttd�|j�D���D]�\}\}}||k\r�|dz
}t	t||�D�	cgc]}	||	|j
|	d�z��c}	�}
|
||z
k\r�Vt||�D�	cgc]
}	||	��	|	��}}	|s�x||
z}|tt|��z}|D]}	|j
|	d�|z||	<���|j�D]\}	}||	xx|z
cc<�ycc}	wcc}	w)Nc3�*K�|]\}}||f���
y�wr0rP)�.0�ik�ivs   r5�	<genexpr>zspanFixDim.<locals>.<genexpr>�s����%L�%�"�R�r�"�g�%L�s�rr)rp�reversed�sorted�items�sumr�r�r{)�V0r}�spanCons�limr��Mr�r�r�rqr��Xs            r5�
spanFixDimr��s%��
�A��c�"�g���f�%L�8�>�>�;K�%L�M�N�
 �	��'�2�b�
�s�7�H�
�a����%��2�,�7�Q��1��a�e�e�A�a�j��7�8���a��f�9�h��b���6�1��1��
�Q�6��6��(�	�Q���	�U�3�q�6�]����	 �A��5�5��1�:�a�<�A�a�D�	 �
 ��w�w�y����!�	�!���	����8��6s� D
�
D�(Dc��eZdZy)�_ExpandedCellTupleN)r?r@rArPr7r5r�r��s��r7r�c��eZdZd�Zy)�_ExpandedCellTupleExc�\�tj||�}||_||_||_|Sr0)ro�__new__�tagType�altText�extras)�cls�seqr�r�r�r3s      r5r�z_ExpandedCellTupleEx.__new__�s,���}�}�S��%������������r7N)r?r@rAr�rPr7r5r�r��s��r7r��RoundingRectDefszx0 y0 w h x1 y1 ar SL�RoundingRectLinez&xs ys xe ye weight color cap dash join)�
splitfirst�	splitlast�inrowsplitstart�
inrowsplitendc��eZdZddddddddddddddddddedfd�Zd�Zd�Zd7d�Zd�Zd	�Z	d8d
�Z
d9d�Zd:d�Zd
�Z
d;d�Zd�Zd�Zd:d�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd �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�Z1e2jffd1�Z4d2�Z5d3�Z6d4�Z7d5�Z8d6�Z9y)?rNrrc�	�|
|_|xsd|_|xsd|_t|tt
f�st
d|j�z��||_t|�x|_
}g|_t|tt
f�}t|tt
f�}|r*tttt|���x|_}n|r|rt|�}nd}|	st j"}	|�t%|dt j&�n||_|r|s�|	dk(rt
|j��d���|	dk(r�t*|_d	tt/�j1��vr=t3d	�at6j8t4_t6j<t4_t+j@|d
|j,jB||fzt4�y|	dk(rtD|_yt
|jG��d|	����|
r||_n|jI|�x|_}|s||gz}nt|�|k7rqt jJr6t|t
�r&t|�}||kr||z
|d
gz||dn1|d|}n+t
|j��d|�dt|��d���|s||gz}n9t|�|k7r+t
|j��d|�dt|��d���tM|�D]g\}}t|�}||k7s�t jJrt|t
�r
||z
dgz||d�Dt
|j��d|�d|�d|�d���|x|_'|_(|x|_)|_*|�bg}tW|�D]J}g}tW|�D]'}|jYt[t]||f����)|jY|��L||_/n||_/g|_0g|_1g|_2g|_3g|_4g|_5||_6||_7||_8||_9|r|ju|�|tvur|jy|�||_=|�||_>|�||_?|dk7r7t|�} | st
d��| |kr||| z
|j-d�zz}||_@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: rvz 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�vAlignrnrorYr��identity�	_renderCBrp�_nrows�_cellvaluesr|rfrr�_ncolsr	�emptyTableActionr=�longTableOptimizer�r�	__class__�globals�keysrr�r
�red�	textColor�yellow�	backColorr6r?r�	identitiy�
normalizeData�allowShortTableRows�	enumerate�_rowHeights�_argH�
_colWidths�_argWr�rarrg�_cellStyles�_bkgrndcmds�	_linecmds�	_spanCmds�_nosplitCmds�	_srflcmds�_sircmds�
repeatRows�
repeatCols�
splitByRow�
splitInRow�setStyler�_setCornerRadii�_rowSplitRangerTrU�_minRowHeights)!r3�data�	colWidths�
rowHeights�stylerrrrrr�r�r��normalizedData�
cellStyles�
rowSplitRangerTrUr�
minRowHeights�cornerRadii�renderCB�nrows�_seqCW�_seqRH�ncolsr�r��d�cellrows�cellcolsr��lmrhs!                                 r5r6zTable.__init__s�����
��(�����(�����$��d�|�,��3�d�m�m�o�E�F�F�!���!�$�i�'���e�����I�u�T�l�3���J��d�|�4����D��W�T�1B�,C�(D�D�$�+��
�6�3�y�>�5��e��I�4N�4N�!1�'8�'@�$+�4�0D�Y�E`�E`�#a�FW�	
���%���(� �D�M�M�O�#4�4X�!Y�Z�Z�!�:�-�!-���%�T�'�)�.�.�2B�-C�C�'5�6H�'I�$�17���$�.�17���$�.��%�%�d�;�$�.�.�:Q�:Q�RW�X]�9^�+^�`p�q�

�	"�8�+�!3���
�!�D�N�N�$4�#5�5L�M]�L`�!a�b�b��#�D��&*�&8�&8��&>�>�D��t��5�)��#4�y�
��^�U�
"��,�,��I�d�1K��	�N���U�7�%*�1�W�y��}�o�$=�I�a�b�M� )�&�5� 1�I� �D�M�M�O�#4�N�5�'�I^�_b�cl�_m�^n�n|�!}�~�~��E�:�,�$6�z�
��_��
%���
�
��0��u�g�EW�X[�\f�Xg�Wh�ht�u�v�v��T�?�	h�C�A�a��A��A��%�x��0�0�Z��$�5G�"�1�W�r�d�N�A�a�b�E�$��
�
��'8�
�5�'��q�c�Qa�bc�ad�de�%f�g�g�
	h�)3�2���4�:�'0�0���$�*����H��5�\�
*�����u��<�A��O�O�I�d�A�a�5�k�$:�;�<�����)�	
*�
 (�D��)�D�������������������
�%���$���$���$�����M�M�%� ��i�'�� � ��-�+����"�*�D���!�(�D�O��D� ��}�%�D�� �!m�n�n��e�� -�u�T�z�=�;R�;R�SW�;X�.X� X�
�+��r7c���t|dd�}t|dd�}t|dd�}ddl}|j|�}|jdd�}|jj
�d	|�d
|�d|�d�S)
z#incomplete, but better than nothingr
z	[unknown]rr�rN�
z
  z(
 rowHeights=z
,
 colWidths=z,
z
) # end table)r=�pprint�pformat�replacerr?)r3r��c�cvr4s     r5rizTable.__repr__vsi���D��{�3���D��k�2��
�T�-��
4���
�^�^�B�
��
�Z�Z��f�
%��LP�N�N�Lc�Lc�de�fg�hj�k�kr7c�t�d�}g}|D](}|D�cgc]
}||���}}|j|��*|Scc}w)z�Takes a block of input data (list of lists etc.) and
        - coerces unicode strings to non-unicode UTF8
        - coerces nulls to ''
        -

        c�8�|�yt|�rt|�S|S)Nr�)rr)�stuffs r5�normCellz%Table.normalizeData.<locals>.normCell�s ���}���u�����&��r7)ra)r3r r<�outData�row�cell�outRows       r5r
zTable.normalizeData�sL��	����	#�C�14�5��h�t�n�5�F�5��N�N�6�"�	#����6s�5c�$�|jr|jSd}t|dd�}t|dd�}t|dd�}t|dd�}|r�d||fvr�d}t|�D]�}t|�D]�}	|||	}
t|
tt
tf�rVt|
t
tf�s|
f}
d}|
D] }|j|�}|s�|d	dd
k7s� n|rR|d	dd
k7rJ||	|df\}
}}}n>|
duxrdxst|
�}
||	|
}}}
|xrt|
t�xrdxsd}|r|d|}|s��n|s��n|rdtt|��z}nd}|rd

t|�fz}nd}d|jjt|�||||fzS)z'Identify our selves as well as possibleNr��unknownr�r�r
rr����z>...rz(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�rnrYrorr�rxrr�r|rgrr?�id)r3�maxLen�vx�nr�ncr8�rh�br�r�r�r��vij�ix�jx�tallests                r5r�zTable.identity�s����:�:�d�j�j�(�
��
�T�(�9�
-��
�T�(�9�
-��
�T�-��
-��
�T�=�$�
/��
�)�B�r�7�*��A��2�Y�
���r�� �A��1��a��A�!�!�T�%��$9�:�)�!�U�4�L�9��t�1���#$�&�C� #���V� 4�A� �Q�r�s�V�V�^� %�&���2�3����,-�q�!�Q�J�M�B��B����I�,�"�6��A���%&��1��B���:�J�q��$:�A��F�Q��!��7�F��2��%�! �"�e�%
�&�(�3�s�2�w�<�7�G��G�
�3�r�"�T�"�X�6F�F�B��B�3�t�~�~�7N�7N�PR�SW�PX�Z\�^`�bi�km�6n�n�nr7c#�K�t|dd�}|D]0}t|dd�r|j|||�D]}|����-|���2y�w)N�canv�__split_only__)r=�splitOn)r3�C�aW�aHrPr7r.s       r5�
_cellListIterzTable._cellListIter�sX�����t�F�4�(���	�A��q�)�$�/����4��2�.��A��G����	�s�AAc�p�t|t�r|}|St|t�r|fn
t|�}d}gj}|j|||�D]�}t|t�rA|s
tdd��}|j|�|jdkr|jdkrd}�T|r)|t||j|j����||���t|d�r8t|j|j|j |j"�}|St|j�}|S)Nr)�_leftExtraIndent�_rightExtraIndentg:�0�yE>)�
leftIndent�rightIndentr�)rnr�rrrarVr�	CellFrame�frameActionrXrYrrXr��__self__r�r�r�)r3r�rTrUrS�framerr7s        r5�_cellListProcesszTable._cellListProcess�s���a�*�+��A�,��)#�1�X�.���G�A�J�A��E��	�	�A��'�'��"�R�0�
���a��)� � )�1�q� Q���M�M�%�(��-�-�d�2�u�7N�7N�t�7S� $�����j��e�.D�.D�QV�Qh�Qh�i�j��a�D�
��q��#�(����A�I�I�a�i�i����Q����'�q�z�z�2���r7c�d�|sy||jz
|jz
}||jz
|jz
}d}d}t	|dd�}	d}
t|t�rJ|j||�}t|jd��|jzdz}t||�|fS|D]z}
|
j|	||�\}}|
j�}|
j�}|�|j|�|�|j|�t||�}|||z|zz
}|
��y|}
�||||
z
z
fS)N�rrrrPr3�333333�?)rErFrGrHr=rnrx�
_elementWidthrp�splitrCr|�wrapOn�getSpaceBefore�
getSpaceAfterra)r3r}r�r��W�HrUrTr�rP�sb0�vw�vhr��sb�sas                r5�
_listCellGeomzTable._listCellGeom�s6����
����
����
/��
�!�,�,�
����
0��
��
���t�F�4�(�����a����#�#�A�q�)�B��Q�W�W�T�]�#�A�J�J�.�s�2�B��q�"�:�r�>�!��		�A��X�X�d�B��+�F�B���!�!�#�B����"�B��}�a�h�h�r�l��}�a�h�h�r�l��A�b�	�A�
��b��2���A��{���		��!�c�'�B�,��r7c
��|syd}d}t|dd�}t|D�cgc]}|j|||�d��c}�Scc}w)NrbrrP)r=r|rf)r3r}rUrTr�r�rPr�s        r5�_listValueWidthzTable._listValueWidth�sJ����
��
���t�F�4�(���Q�7��A�H�H�T�"�R�(��+�7�8�8��7s�Ac
�<�t|dd�ry|st|j|�}d|v�rt|dd�}d}|jr|j}|j
}nd}i}i}||jur|}|dd}n|dd}|j}	|j}
d|vr�|jd�}d}t|	�D]�\}
}||}|
|
|}||
f}|j|d�}||vr|sd}n�|j||�}|�4td|j��d|
�d|�d	|jd
�����||j|jzz
}|r4|d}|d}||k7r%||f}t!|j||�|�||<d}||kDs��|}��|||<d|vr��|r	t#|||�||_d}dg|_|D]"}||z}|j(j+|��$||_d|_y#t%d|j��d
|�d|�d|���Y�pxYw)N�_width_calculated_oncerPrPrrt�	Flowable �	 in cell(�,�) can't have auto width
�r�
spanning problem in z
W0=z W=�

spanCons=r)r=r�rr�
_colSpanCells�_spanRangesr�r�indexrr�rdr�r�rErFr|r�rr�
_colpositionsra�_widthrt)r3�
availWidthrirP�saved�colSpanCells�
spanRangesr��W0r}�Sr�r�r��Vir�r��ji�spanr��c0�c1rq�widths                        r5�_calc_widthzTable._calc_width�s����4�0��6���h�t�z�z�*�5�!��1�9��4��t�,�D��E��~�~�#�1�1��!�-�-�
�!���
��H��D�J�J�����a�D���q�T��� � �A�� � �A��!�)��G�G�D�M����%�a�L�"�D�A�b��1��A��!��Q��A��1��B�%�>�>�"�T�2�D��\�)�$��� �.�.�q��3���9�",�y������i�PQ�s�RS�TU�SV�Vp�qu�q~�q~�@B�rC�qD�.E�#F�F��Q�]�]�1�>�>�9�9���!%�a��B�!%�a��B�!�2�v�$&�r�E��.1�(�,�,�q��2C�A�.F����$%����s��A�'"�*��!��1�!�)�4�}��r�!�H�-�������S����	-�A��A�I�E����%�%�e�,�	-����&'��#��}�%�]a�]j�]j�]l�mo�pq�rz�&{�|�s�
G2�2'Hc
�H�t|ttf�r-d}|D]$}|j||�}|�yt	||�}�&|St|t
�r�|jrpt|d�r,t|jttf�r|jSt|d�r,t|jttf�r|jSt|d�r	t|d�|�dSt|d�r*	|j�}t|ttf�r|S	|�y	t|�j!d�}|j"}|j$}t	|D�cgc]}t'|||���c}�S#Y��xYw#t$rY�lwxYw#YyxYwcc}w)Nrr��	drawWidth�__styledWrap__�minWidthr3)rnrYrordr|r�_fixedWidthrXr�r�r{r�r=r��AttributeErrorrxrerBrCr)	r3r�r�r��e�ew�fontName�fontSizerqs	         r5rdzTable._elementWidth=s����a��e��%��A��
���'�'��!�,���:�d���"�I��
��H�
��(�
#��}�}��1�g�&�:�a�g�g�s�5�k�+J�ST�SZ�SZ�N��1�k�*�z�!�+�+�s�5�k�/R�[\�[f�[f�Tf��q�)�*��6�7�1�%5�6�q�9�!�<�<��1�j�!�
��J�J�L���a��s��,�Q�h�,�
�9��
���F�L�L��&���:�:���:�:���a�@��K��(�8�4�@�A�A��)���"�
��
��
���As0�F�?'F	�,F�'F�F�		F�F�Fc��	�|j}|st|j|�}t|�x}}|j}d|v�r�|j
}t
|dd�}	d}
|jr1|j}|j}|j}
|j}ndx}}i}
|	r#|	j|	j|	jf}
|}|dd}||_i}t j"}d|v�r6|j%d�}|j&|}|j(|}d}d}t+t-t/|||���D�]�\}\}}}||f}|
j1|d�}||vr|s�(t3|t4t,t6f��r�|j9||d�x}||<|�H|j;|�s7t=d|dj?��d|�d|�d|j?d�����|	rE|j@|jB|jDxsd	|jBzc|	_|	_
|	_||vr%|s��tG|d
dz||dz
|xsd�}|jI||xs|jK|�|�\}}|	r|
\|	_|	_
|	_||jLz|jNz}t jPs�||kDr�ddl)m*}|d
|dj?d�tW|�tW|�||tW|�|j?d�fz��|duxrtY|�xsdj[d�}|jDxsd	|jBzt|�z}||j\|j^zz
}|r4|d}|d} || k7r%|| f}!tG|j1|!|�|�||!<d}||kDs���|}���|rtG|||�n|||<|r@|dz}ta|d|�}"|"|kDr(|r&tGd�|jc�D��}#||#kDrnd|vr��6d|vr|}|r	te|||�gx|_4}dx}"}$tk|dz
dd�D]*}|jm|"�|||$z
}%|"|%z}||"z
|%z
}$|}"�,|jm|"�|"|_7|jq�||_9y#tgd|j?��d|�d|�d|�d|�d|�d|�d|���Y��xYw)NrPrPrrurvrwrxryrcrr)�LayoutErrorzGFlowable %s (%sx%s points) too wide for cell(%d,%d) (%sx* points) in
%sr�r3r*c3�&K�|]	}|d���y�w)rNrP)r�rqs  r5r�z%Table._calc_height.<locals>.<genexpr>�s����%D�q�a��d�%D�s�rzz hmax=z lim=z avail=z x z
H0=z H=r{rv):rr�rrpr�rr=r�
_rowSpanCellsr|r}r�	_fontname�	_fontsize�_leadingr
r	�_FUZZr~r�rrrY�zipr�rnrorr`�_canGetWidthr�r�rBrCrDr|rprrrErF�allowTableBoundsErrors�reportlab.platypus.doctemplater�rrxrerHrGr�rr�r�
_rowpositionsr�ra�_heightr��_hmax)&r3�availHeightr�rjri�hmaxr��	longTabler'rPr��rowSpanCellsr�r��colpositions�H0r�r�r�r}r��hr�r�r�r�r�r��dWr�r��r0�r1rq�height�msrr7r�s&                                      r5�_calc_heightzTable._calc_heightbs����J�J���h�t�z�z�*�5�!���V���s��+�+�	��1�9� �/�/�M��4��t�,�D��E��~�~�#�1�1��#�1�1��!�-�-�
�#�1�1��.0�0��|��
��T�^�^�T�^�^�T�]�]�J�U��B��!��A� �D���H��?�?�D��!�)��G�G�D�M���$�$�Q�'���$�$�Q�'������#,�T�#�a��A�,�-?�#@�"�K�A�i�q�!�Q��1��B�%�>�>�"�T�2�D��\�)�$� �%�a��t�H�(=�>�'+�'<�'<�Q�q��'F�F�A��!�� �y��1B�1B�1�1E�&0�9�Q�q�T�]�]�_�<M�Y�WX�VY�YZ�[\�Z]�]w�x|�yF�yF�GI�yJ�xK�2L�'M�!M�#�UV�U_�U_�ab�ak�ak�mn�mv�mv�nI�z}�~�I�I�{I�%R�T�^�T�^�T�]�!�\�1�'+�X�$'��T�!�W�Q�Y�(?��T�RS�W�@U�(U�VW�V\�[\�$]��#'�#5�#5�a��8T�T�=Q�=Q�RS�=T�UV�#W�D�B�q�#�UZ�%R�T�^�T�^�T�]�!#�a�m�m�!3�a�n�n�!D�B�#,�#C�#C��1�� V�&1�2|�AB�CD�AE�AN�AN�OQ�AR�SY�Z\�S]�^d�ef�^g�hi�jk�ms�tu�mv�x|�xE�xE�FH�xI�@J�3J�'K�!K�!"�$��!9�3�q�6�!?�R� F� F�t� L�A�!"���!<�c�!�*�*�n�c�!�f� D�A��Q�_�_�Q�\�\�9�9���!%�a��B�!%�a��B�!�2�v�$&�r�E��.1�(�,�,�q��2C�A�.F����$%����s��A�?"�B3@�s�=��+�A�.�Q��!����Q�3�D� ��5�D��]�F���+�#�"%�%D�H�M�M�O�%D�"D�C�#�C�x� %�c�!�)�d�1�}�S�d��z��r�!�H�-�
"$�#���Q������t�A�v�b��$�	�A�
�H�H�V���!��q��A���
�A��V��q� �A��F�	�	
��������	�	�	����
��z�%�z~�{H�{H�{J�KO�PS�T^�_j�km�no�px�'y�z�s�*
R1�13S&c��d|jvsd|jvr"|j�r|j|�}nd}|jr1|j	�d|j
vr|j
||��|jr|j�|j|||��|j
||��|jr|j�yy)Nrw)ri)r�_hasVariWidthElements�_calcPreliminaryWidthsr�_calcSpanRangesrr�r�_calcNoSplitRangesr��_calcSpanRects)r3r�r�ris    r5�_calczTable._calc�s���
�D�O�O�#�s�d�o�o�'=�4�C]�C]�C_��+�+�J�7�A��A�
�>�>�� � �"��t�z�z�!�� � ��a� �0�����#�#�%�	
���+�j�1��5�	
����a��(��>�>����!�r7c�\�|j}t|�}|j|�}d|zS)z�Return 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.
        ztallest cell %0.1f points)r
r|r~)r3rIrN�rowNums    r5�_culpritzTable._culprit�s3���
�
���b�'�����'�"��+�W�4�4r7c���|�|j}tt|j|��D]B}t|j�D](}|j||}|j|�r�'y�Dy)z�Check for flowables in table cells and warn up front.

        Allow a couple which we know are fixed size such as
        images and graphics.rr)r�r�r�r�r�r�)r3�upToRowr>�colr�s     r5r�zTable._hasVariWidthElements�ss��
�?�d�k�k�G���T�[�[�'�2�3�	�C��T�[�[�)�
���(�(��-�c�2���(�(��/��
�	�
r7c��t|ttf�r|D]}|j|�r�yyt|t�r|j
Sy)z"Can we work out the width quickly?rr)rnrYror�rr�)r3�thing�elems   r5r�zTable._canGetWidthsP���e�T�5�M�*��
���(�(��.��
��
��x�
(��$�$�$�r7c��t|j�}d}d}d}d}d}|D]Z}|�|dz
}�|dk(r|dz
}|dz
}�t|d�r|dz
}|t|dd�z
}�>t	|t
tf�sJ�||z}�\g}	g}
g}i}d}
|j}t|j�D]�}||}|�|dk(st|d�r�d}d}t|j�D]p}|j||}|j||}|||�xsd}||j|jzz
}t||�}|xr|j|�}�r|r|
j!|�n|j!|�|||<|
|z
}
��|	j!|���t#|	�|jk(ry||
|zz
}|dkD�r\|t|�zdz}||z
}|r0|dkr+|xs|}d|z
t|�z}d}|t|�z|z}ndx}}g}d}|}|j%�D]k\}}||}t|d�rt|dd�|z|z}n|dk(r|}n|xr|xsd}||kr|||<�J|j!||z
|||f�||z
}||z
}�m|�r�|t|�z} |j'�g}!|D]F\}"}}}| |z}#|#|kr!|||<||z}||z}|s�$|t|�z} �3|!j!|||f��H|!D]\}}}| |z}#|#|k\sJ�|#||<��n|dkDr�g}$|j%�D]F\}}|j)d�s�|t|dd�z|zx||<}||z
}|$j!|��H|$D]}||=�~$t+|j-��}
|||
zz
}|dkrY|t.j0z|zdk\r@||z}%t3|�D]!\}}||vs�|%|z}&||xx|&zcc<||&z}�#|||
zz
}d}%n||z
}|dkrdn||
z}%|j%�D]
\}}||%z||<�|x|_|_|S)	z�Fallback 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.rtrNrrwrurv�d)rYrr�r{rnr�rdr�r�r�r�rrErFr|r�rarpr��sortrzr��valuesr	�defCWRFrr)'r3r�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'                                       r5r�zTable._calcPreliminaryWidthss���
�������������� !���	0�A��y��1�$���c���1�$��%��*�%��1�S�!��!�#����a���f�
�-��!�!�S��K�0�0�0�+�a�/��	0������
������)�)���4�;�;�'�	$�E��%��A��y�A�s�F�i��#�&6�����"�4�;�;�/�;�E� �,�,�U�3�E�:�E� �,�,�U�3�E�:�E�&�u�U�3�8�q�C��5�,�,�U�-?�-?�?�?�C���s�O�E��:�$�"3�"3�E�":�C�;���O�O�E�*��%�%�e�,�"'������%�����U�#�)	$�*�u�:����$���,��"=�>�	��q�=�!-�e�J�.?�!?�� D���-�-�L��<�#�#5�1�D�_�	�!$�\�!1�5��3C� C�
�"��"/��l�0C�"C�Z�!O��12�2�
��
�M��L�!*��"*�.�.�"2�
2���w��e�H���Q�s�#�$�Q�s��V�}�\�9�:�E�G��#�X�,�G�"7�7�J�N�O�a�G��g�%�&�A�e�H�!�(�(� ���'�7�E�B�D� �G�+�L�&�'�1�&�
2��,0��l�0C�C�
��"�"�$���?L�	C�;�N�G�W�e�)�G�3�H��'�)�#*��%��$��/��*�g�5�*�'�);�E�,�<O�)O�J� ����'�5�(A�B�	C�08�(�+�G�W�e�)�G�3�H�#�w�.�.�.�'�A�e�H�(�
�A�~��� (��� 0�(�H�E�1��z�z�#��'1�%��#�2��-�'?��'L�L��%��1�$��)�������	(�
�(�E� ���(��"�8�?�?�#4�5��&�,��*E�F�	���{�|�I�,=�,=�=�i�G��J� �j��-�� )�!��+�H�E�1��H�,� ��U���%��B���$��*��	+�
'�,��*E�F�	���&��5�	�$�a�<�a�Y�|�-C��"*�.�.�"2�
)���w�"�S�=��%��
)�()�(��
�T�_��r7c��t|j�}d}|j}t|j�}|j
}|j}tt|��D]v}||}|�|dk(st|d�rNd}	|D]A}
||
|}||
|}|||�|jz|jz}
t|	|
�}	�C||	z
}�i|t|�z
}�x|S)Nrrwru)
rYrrdr�r�r�rrpr�rErFr|r{)r3rir�r��rowNosr��stylesr�r�r�r�r�r#r�s              r5r�zTable.minWidth�s������������)�)���t�{�{�#���!�!���!�!���3�q�6�]�	"�E��%��A��y�A�s�F�i��#�&6���#�,�E�"�5�M�%�0�E�"�5�M�%�0�E�'��e�4� �,�,�-�-2�-?�-?�@�C���s�O�E�,�������q��!��	"��r7c�t�ix|_}t|j�D]'}t|j�D]
}||||f|||f<��)g|_g|_|jj}|j
j}|jD�]&\}}}|\}	}
|\}}|	dkr|	|jz}	|dkr||jz}|
dkr|
|jz}
|dkr||jz}|	|kDr||	}}	|
|kDr||
}}
|	|k7s|
|k7s�|	|k7r2t|
|dz�D] }t|	|dz�D]}|||f���"|
|k7r2t|
|dz�D] }t|	|dz�D]}|||f���"t|
|dz�D]}t|	|dz�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
        rrN)r}r�r�r�r|r�rar)
r3r�rqr��csa�rsarb�start�stopr��y0r��y1s
             r5r�zTable._calcSpanRanges�s��)+�*���:��t�{�{�#�	/�A��4�;�;�'�
/��#$�a��A�,�
�1�Q�3��
/�	/� ������� � �'�'��� � �'�'��"&�.�.�	5��S�%���F�B���F�B���A�v�B����,�r��A�v�B����,�r��A�v�B����,�r��A�v�B����,�r��B�w��R�B���B�w��R�B���2�v��R���r�6�"�2�r�!�t�_�'��!&�r�"�Q�$��'�A���1��J�'�'��r�6�"�2�r�!�t�_�'��!&�r�"�Q�$��'�A���1��J�'�'��r�2�a�4��/�A�"�2�b��d�^�/��*.�
�1�Q�3��/�/�&(��R��$4�
�2�b�5�!�5	5r7c�t�ix|_}t|j�D]'}t|j�D]
}||||f|||f<��)g|_g|_|jj}|j
j}|jD�]&\}}}|\}	}
|\}}|	dkr|	|jz}	|dkr||jz}|
dkr|
|jz}
|dkr||jz}|	|kDr||	}}	|
|kDr||
}}
|	|k7s|
|k7s�|	|k7r2t|
|dz�D] }t|	|dz�D]}|||f���"|
|k7r2t|
|dz�D] }t|	|dz�D]}|||f���"t|
|dz�D]}t|	|dz�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
        rrN)�_nosplitRangesr�r�r��_colNoSplitCells�_rowNoSplitCellsrar)
r3�
nosplitRangesrqr�r�r�rbr�r�r�r�r�r�s
             r5r�zTable._calcNoSplitRangess��/1�0���m��t�{�{�#�	2�A��4�;�;�'�
2��&'��A�q�\�
�a��c�"�
2�	2�!#��� "����#�#�*�*���#�#�*�*��"&�"3�"3�	8��S�%���F�B���F�B���A�v�B����,�r��A�v�B����,�r��A�v�B����,�r��A�v�B����,�r��B�w��R�B���B�w��R�B���2�v��R���r�6�"�2�r�!�t�_�'��!&�r�"�Q�$��'�A���1��J�'�'��r�6�"�2�r�!�t�_�'��!&�r�"�Q�$��'�A���1��J�'�'��r�2�a�4��2�A�"�2�b��d�^�2��-1�
�a��c�*�2�2�)+�B��B�'7�
�b��e�$�9	8r7c��t|di�}t|dd�}|j}|r|r||jk(s|sy|j}|j}i}i}t|�dz
}|jj�D]�\}	}
|
�d||	<�	|
\}}}
}||k\r�|	\}}|
|z
dkDrFt|dz|
dz�D]1}|j||g�j||dz||f��3||z
dkDrFt|dz|dz�D]1}|j||g�j||||
dzf��3||}||dz}||
dz|z
}|||z
}||||f||	<��||fD]'}|j�D]}
|
j���)||_||_||_||_y#td|j����Y��TxYw)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�Nrrrz)r=r��_hmax_spanRectsrr�rpr}r�r��
setdefaultrarr�r�r�r��_vBlocks�_hBlocks)r3�	spanRectsr�r�r��rowpositions�vBlocksr��rlim�coordr��col0�row0�col1�row1r�r>r9rqr�r�r�s                      r5r�zTable._calcSpanRects8sG���D��b�1�	��t�G�D�)���+�+�	��)��d�.B�.B�(B�)���)�)���)�)�������<� ��"��"�.�.�4�4�6�	W�N�U�E��}�#'�	�%� �W�-2�*�D�$��d��T�z�8�#�G�C���D�y��{�!&�t�A�v�d�1�f�!5�u�A�#�.�.�|�A��r�B�I�I�<�X\�]^�X^�K_�`l�mq�`r�Js�t�u��D�y��{�!&�t�A�v�d�1�f�!5�u�A�#�.�.�|�A��r�B�I�I�<�X\�K]�^j�ko�pq�kq�^r�Js�t�u�$�T�*�A�$�T�!�V�,�A�(��a��0�1�4�E�)�$�/�!�3�F�()�1�e�V�'<�I�e�$�%	W�,�'�!�	�A�����
���
�
��
�	�$�����
���
�#����W�%�D�M�M�O�&U�V�s�F4�C
F4�4Gc	�X�t|t�st|�}|j�D]�}t|�dk\rt|dd\}\}}\}}t|t�s@t|t�s0t|t�r|t
vst|t�r|t
vrt
d|�dt
����|j|���|jj�D]\}}	t|||	��dD]3}
t||
�r�t||
�s�t||
t||
���5y)Nr*rzbad style command zN illegal of invalid string coordinate
only rows may be strings with values in rS)
rnrrVrprx�_SPECIALROWSr��_addCommandrWr�r<rXr=)r3�tblstylerbr7�sc�sr�ec�er�kr�r_s           r5rzTable.setStylels���(�:�.�!�(�+�H��'�'�)�	"�C��3�x��{�&)�!�A�h�#��7�B�r�G�R���r�#�&�*�R��*<�"�2�c�*�r��/E�"�2�c�*�r��/E�$�);�C�7�C)�)5�(8�&<�=�=����S�!�	"��>�>�'�'�)�	�C�A�a��D��1��	�-�	4�A��4��?�w�x��':���Q�w�x��2�3�	4r7c�2�|dkr||jz}|dkr||jz}|dkr||jz}|dkr||jz}td|�t|jdz
|�td|�t|jdz
|�fS)z0ensure cell range ends are with the table boundsrr)r�r�r|r�)r3rr
rrs     r5�
normCellRangezTable.normCellRange~s���
��6��T�[�[�(�2�
��6��T�[�[�(�2�
��6��T�[�[�(�2�
��6��T�[�[�(�2��1�R�y�#�d�k�k�!�m�B�/��Q�r��C����A�
�b�<Q�Q�Qr7c	�6�|ddvr|jj|�y|ddk(r|jj|�y|ddk(r|jj|�yt	|��r\t|�}t
|�dkrtd|����t
|�dkr|jd�nt|dtdd	d
|�}||d<t
|�dkr|jd�t
|�dkr|jd�nt|dtdd	d
|�}||d<t
|�dkr|jd�n|d}|�d}||d<|dk\sJ�t
|�dkr|j|d�n|d}|�
|d}||d<t
|�dk(sJ�|jjt|��y|ddk(r|j|d�y|dd|ddc\}\}}\}	}
}|tvr0|ddk(r|jn|j j|�y|j#||	||
�\}}	}}
|	dz
}	t%||
dz�D],}t%||	�D]}
t'|j(||
||���.y)Nr)�
BACKGROUND�ROWBACKGROUNDS�COLBACKGROUNDS�SPAN�NOSPLIT�zbad line command r)rr�cap��re�	r'r*�ROUNDEDCORNERSr�)rrarr�_isLineCommandrYrpr�r��LINECAPS�	LINEJOINSrrorrrrrr��
_setCellStyler)r3rbrre�	lineCount�space�oprrr
rr�r�r�s              r5r	zTable._addCommand�s����q�6�E�E����#�#�C�(�
��V�v�
��N�N�!�!�#�&�
��V�y�
 ����$�$�S�)�
�C�
 ��s�)�C��3�x��z��.?��w�,G�!H�H��3�x��z��
�
�1�
�"�3�q�6�8�Q��5�#�F����A���3�x��z�3�:�:�d�+��3�x��z�3�:�:�a�=�#�C��F�I�q�!�V�S�I����A���3�x��z�3�:�:�a�=���F�	��$� !�I�&�C��F� �A�~�%�~��3�x��{�C�J�J�s�1�v�.��A����=���F�E�"�C��F��s�8�r�>�!�>��N�N�!�!�%��*�-�
��V�%�
%�� � ��Q��(�/2�2�A�w��Q�R��,�$�R��"�b�8�B��f��\�!�#%�a�5�#�:����4�=�=�H�H��M�!%�!3�!3�B�r�"�R�!@���B��B��a����r�2�a�4��J�A�"�2�r�]�J��%�d�&6�&6��1�b�&�I�J�Jr7c�,���������d\}}}|j}|j�|j��r<�j}g|dd|j�|j
���������fd�}||_	|jD]�\
}\}}	\}
}�����}}
t|	t�r	|	tvr�-�dk7r|�k7r|j���}���gk(r|�+|j�d}n�|k7r|j���}��|�k7r|j���}|j||
|	|�\}}
}	}t|tj!|d��||	f|
|f��||
���	�r�|_	|j#�d|_y#�r�|_wwxYw)N)NNNc
����||k(r|�
jk\s2|�
jks#||k(r8|�
jk\s|�
jkr�t	||||������	�y�	||||�yr0)r�r�r�r�r�)�xs�ys�xe�ye�aSLrrJ�dashre�	ocanvline�rrd�weights    ��������r5�
rcCanvLinez$Table._drawLines.<locals>.rcCanvLine�se�����V��S�V�V��r�3�6�6�z���V��S�V�V��r�3�6�6�z��(��B�r�"�V�E�#�d�4�P�Q��b��B�r�*r7�_drawUnknown)rP�	saveState�_roundingRectDef�SL�linerarrnrr�
setLineCap�setDash�setLineJoinrr=�
_LineOpMapr��restoreState�	_curcolor)r3�ccap�cdash�cjoinrPr4r0r$rrr
rr�r#r+rrJr,rer-r.r/s              @@@@@@@@r5�
_drawLineszTable._drawLines�s����-���e�U��y�y�������#�#������B��B�q�E��	�	�I��)�)�C�
+�
+�#�D�I�	&�VZ�Vd�Vd�
t�R��G�R��W�b��f�e�S�$��e�U��b��*�r�\�/A�8���9��s���O�O�C�(��D��<�4�2�:��(����� $���U�]��L�L��&� �E��#��t���$�$�T�*� �E�!%�!3�!3�B�r�"�R�!@���B��B�A���Z�^�^�B��@�A�B��8�b�RT�X�W]�_d�fk�mr�s�!
t�$�%��	����������%��	��s
�6C.F�Fc�b�ddl}|jd�jd}td|����)Nrrr$zUnknown line command )�sys�	_getframe�f_localsr�)	r3r��endr/rJr�r#rAr$s	         r5r1zTable._drawUnknown�s1���
�]�]�1�
�
&�
&�t�
,���0���7�8�8r7c�\�|j||||||�|j||||||�yr0)�_drawBox�_drawInnerGrid)r3r�rDr/rJr�r#s       r5�	_drawGridzTable._drawGrid�s0���
�
�u�c�6�5�%��?����U�C����u�Er7c��|\}}|\}	}
|j||f|	|f||||�|j||
dzf|	|
dzf||||�|j||f||
f||||�|j|	dz|f|	dz|
f||||�yrm��_drawHLines�_drawVLines�r3r�rDr/rJr�r#rrr
rs           r5rFzTable._drawBox�s������2����2����"�b��B��8�V�U�E�5�I����"�b��d��b�"�Q�$�Z����u�M����"�b��B��8�V�U�E�5�I����"�Q�$���b��d�B�Z����u�Mr7c��|\}}|\}	}
|j||dzf|	|
f||||�|j|dz|f|	|
f||||�yrmrJrMs           r5rGzTable._drawInnerGrids\�����2����2����"�b��d��b�"�X�v�u�e�U�K����"�Q�$���b�"�X�v�u�e�U�Kr7c���|r1||jk7r"|jj|�||_|r3||jk7r#|jj	|�||_yyyr0)r;rP�setStrokeColor�
_curweight�setLineWidth)r3r/rJs   r5�	_prepLinezTable._prepLine	sW���U�D�N�N�*��I�I�$�$�U�+�"�D�N��f�d�o�o�-��I�I�"�"�6�*�$�D�O�.�6r7c��|\}}|\}	}
|j||	dz}|j||
dz}t|�dkst|�dkry|j||�|d}
|d}t	|di�}|j
j}|dk(r|D]}t||
|||��y|||z|fd�}|D]}t||
|||��y)Nrrrrvr�c�"�t||||||�Sr0�r��r�r�r�r�r�r�r�s       r5�<lambda>z#Table._drawHLines.<locals>.<lambda> ���U_�`b�ce�fh�iq�rt�uz�U{�r7)rr�rprSr=rPr5r�)r3r�rDr/rJr�r#rrr
rr��rpr�r�r�r��lfs                  r5rKzTable._drawHLiness������2����2�� � ��B�q�D�)��
�
�
��2�a�4�
(���s�8�Q�;�#�b�'�!�)�V����v�u�%��!�f���"�g���$�z�"�-���9�9�>�>���A�:��
7���x��c�1�g�6�
7�.6�&��,�e�{�B��
1���r�3��Q��0�
1r7c�X�|\}}|\}	}
|j||dzf|	|
dzf||||�yrm)rKrMs           r5�_drawHLinesBzTable._drawHLinesB$s<�����2����2����"�b��d��b�"�Q�$�Z����u�Mr7c��|\}}|\}	}
|j||
dz}|j||	dz}t|�dkst|�dkry|j||�|d}
|d}t	|di�}|j
jfd�}|dk(r|D]}t|||
||��y|||z|fd�}|D]}t|||
||��y)Nrrrrvr�c��|||||�Sr0rP)r�r�r�r��_lines     r5rXz#Table._drawVLines.<locals>.<lambda>3s���b��B�r�@R�r7c�"�t||||||�Sr0rVrWs       r5rXz#Table._drawVLines.<locals>.<lambda>8rYr7)r�rrprSr=rPr5r�)r3r�rDr/rJr�r#rrr
r�erp�cp�srprr�rqr[s                  r5rLzTable._drawVLines)s������2����2�� � ��B�q�D�)��� � ��B�q�D�)���s�8�Q�;�#�b�'�!�)�V����v�u�%��!�f���"�g���$�z�"�-��04�	�	���R���A�:��
7���x��c�1�g�6�
7�.6�&��,�e�{�B��
1���r�3��Q��0�
1r7c�X�|\}}|\}	}
|j|dz|f|	dz|
f||||�yrm)rLrMs           r5�_drawVLinesAzTable._drawVLinesA<s<�����2����2����"�Q�$���b��d�B�Z����u�Mr7c�d�|j||�||_|j|jfSr0)r�r�r�r�)r3r�r�s   r5�wrapz
Table.wrapAs*���
�
�:�{�+�$������T�\�\�*�*r7c��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.onSplitFs��
	
r7c	��|j}|D]�}|dd\\}}	\}
}|	tvr�|	ddk(r`|j|�|	dk(rI|rG|dkr||z
}|
dkr|
|z
}
|j|df||dz
f|
|dz
ffzt|dd�z���|s��|j|�|	dk(r��|dz
x}	}|	dkr|	|z
}	|	|k\r��||k\r|dz
}|j|df||	f|
|ffzt|dd�z���y)Nrr*rr�r�r�)r�rr	ro)r3r�r\�nr0�doInRowSplit�	_srflModer-r7rrr
rs            r5�_cr_0zTable._cr_0MsH�������	H�A� ��1�v��G�R��W�b���\�!��a�5�#�:��$�$�Q�'��,�,���a�4��U����a�4��U����(�(�!�A�$��2�q��s�)�b�!�A�#�Y�1G�)G��a�PQ�PR�e��)T�U�� �(�� � ��#��|�#�X��A�#�
��R��!�t�R�3�Y�R��1�u�h��1�u�1�Q�3�b����a��d�W�r�2�h��R��%9�9�%��!�"��,�F�G�#	Hr7c�,�t|�}t|�}|j}	|D�]�}
|
dd\\}}\}
}|tvr�|ddk(rZ|j	|
�|dk(rC|rA|dkr||	z
}|
dkr|
|	z
}
|j	|
df||f|
|ffzt|
dd�z��||s�|j	|
�|dk(r��|x}}|dkr||z
}|dkr||z
}tt
||dz��|z}|rht|�}|j	|
df||jt|��f|
|jt|��ffzt|
dd�z�||kr��:t||z
d�|z}t||z
d�|z}|j	|
df||f|
|ffzt|
dd�z����|j}|rT|\}}|dkr||z
}|dkr||z
}||krd|_yt||z
d�|z}t||z
d�|z}||f|_yy�Nrr*rr�r�r�)rp�setr�rr	ror�rYr~r�r|r)r3r��nRowsrr\rorp�nrr�rrSr-r7rrr
r�cSs                r5�_cr_1_1z
Table._cr_1_1dsq���*�o���*�o�������	H�A� ��1�v��G�R��W�b���\�!��a�5�#�:��$�$�Q�'��?�*�|��a�4��U����a�4��U����(�(�!�A�$��2�s�)�b�#�Y�1G�)G��a�PQ�PR�e��)T�U�� �(�� � ��#��{�?�H����R��!�t�R�5�[�R��!�t�R�5�[�R��U�2�b��d�^�$�s�*�B���"�X��� � �!�A�$��2�z�/?�/?��B��/H�*I�B�PZ�P`�P`�ad�eg�ah�Pi�Kj�)k�!k�lq�rs�tu�tv�rw�lx�!x�y��!�t�X��R��T�!��S��B��R��T�!��S��B����a��d�W�r�2�h��R��%9�9�%��!�"��,�F�G�1	H�2�
 �
 ��
��F�B���!�t�R�5�[�R��!�t�R�5�[�R��!�t�&*��#���A��a�[��_����A��a�[��_��&(��e��#�r7c	��|D]�}|dd\\}}\}}	|tvr�|ddk(rb|j|�|dk(rK|rI|dkr	|tz
}|dkr	|tz
}|j|df|df|dffzt|dd�z���|s��|j|�|dk(r��|x}}	|	dk\r|	|kr��|dk\r||krd}||k\r||z}|	|k\r|	|z}	|j|df||f||	ffzt|dd�z���yrs)rr	r-ro)
r3r�r\rorpr7rrr
rs
          r5�_cr_1_0z
Table._cr_1_0�sD���	H�A� ��1�v��G�R��W�b���\�!��a�5�#�:��$�$�Q�'��?�*�|��a�4��U����a�4��U����(�(�!�A�$��2�q�'�B��7�1C�)C�E�!�A�B�%�L�)P�Q�� �(�� � ��#��{�?�H����R��1�u��A��x��1�u��A��!�r��1�u�b�A�g�b��1�u�b�A�g�b����a��d�W�r�2�h��R��%9�9�%��!�"��,�F�G�%	Hr7c�B�||jz
}||j|zz
}t|ttf��rGg}g}	d}
|j	|||�d}|j
dk(r	||z
dz}nd}|D]�}
|
r4|
j|kr!|	j|
�||
jz}�5gcS||
jz|kr!|j|
�||
jz
}�l|
j|||z
�}|r)|j|d�|	j|d�nI|s|j
dk7r4|
j|kr!|	j|
�||
jz}ngcSgcSd}
��t|�t|	�fSt|t��r|jd�}d	|jz}|jxs|t|�z}|j
dk(r	||kr|d
fS|j
dk(r	||krd
|fS|j
dk(r
||kDrd
|fS|d
fSt|�dkrgS|j
dk(r||z}n/|j
dk(rt|�||zz
}n||z
|zd|zz}t|�}dj|d|�dj||d�fSy)
NFrr�rr�TOPTr3rcr�r.)r�r�)rGrnrorYrprMr�rarerxrCrDrpr�re)r3r�r#�	oldHeight�	newHeightr��height0�height1�newCellContent�postponedContentre�
cellHeight�
usedHeight�flowable�splits�rows�
lineHeight�
contentHeight�
splitPoints                   r5�
_splitCellzTable._splitCell�s����e�.�.�.���u�/�/�)�;�<���e�e�T�]�+��N�!���E��+�+�E�5�%�@��C�J��|�|�x�'�'�*�4��9�
��
�!�#
!������'�1�(�/�/��9��8�?�?�2�� "�	��(�/�/�1�W�<�"�)�)�(�3��(�/�/�1�J�&�^�^�E�7�:�3E�F�F��&�-�-�f�Q�i�8�(�/�/��q�	�:�*�U�\�\�U�-B�'���'�9� 0� 7� 7�� A� '�8�?�?� :��(*�	�$&�I� �E�G#
!�J�.�)�5�1A�+B�C�C�
��s�
#��;�;�t�$�D��u�~�~�-�J�"�]�]�8�j�C��I�E�M��|�|�u�$��'�)A��r�{�"�����)�m�w�.F��E�{�"�����)��W�$���;�&�!�2�;�&��T��Q���	��|�|�u�$�$�
�2�
�����)� ��Y�'�Z�*?�@�
�%��/�-�?�Q��^�T�
��Z��J��I�I�d�;�J�/�0�$�)�)�D���<M�2N�O�O�r7c
��|j}|j}g}|jD�]T\
}\}}\}	}
}}}
}}}}t|t�rf|t
vr^|j
|||f|	|f|||
||||f
�|dk(r|dz
x}}
n2|dk(r|}|}
n(|dkr||z
}|	dkr|	|z
}	|||f|	|f|||
||||f
|d<��|dkr||z
}|	dkr|	|z
}	|dkr||z
}|
dkr|
|z
}
|dv�ra||kr|
|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
�|dk(s��N|rC|j
d||f|	|dz
f|||
||||f
�|j
d||f|	|
f|||
||||f
����|j
d
||dz
f|	|dz
f|||
||||f
�|j
d||f|	|f|||
||||f
�|j
d||f|	|
f|||
||||f
����|j
|||f|	|
f|||
||||f
���|dk(rq||krK|
|k\rF|sD|j
d
||dz
f|	|dz
f|||
||||f
�|j
d||f|	|f|||
||||f
�|j
|||f|	|
f|||
||||f
����|d
k(rM||kr'|
|dz
k\r|j
d||f|	|f|||
||||f
�|j
|||f|	|
f|||
||||f
����|dk(rP||kr*|
|k\r%|j
d
||dz
f|	|dz
f|||
||||f
�|j
|||f|	|
f|||
||||f
���6|j
|||f|	|
f|||
||||f
���W|S)
Nr�rr�rrv)�BOX�OUTLINE�GRID�	LINEABOVE�
LINEBEFORE�	LINEAFTER�	LINEBELOWr��	INNERGRID)r�r�rrnrrra)r3r�ror*r-�Ar$rrr
rr/rJrr,rer�r#s                  r5�_splitLineCmdszTable._splitLineCmds�s�������������RV�R`�R`�2	^�N�B���B��"�R�&�%��d�D�%���"�X�&�2��+=����"�b��W�r�"�g�v�u�c�4��u�V[�\�]��{�?���c�M�B����%��B��B��A�v�r�U�{�r��A�v�r�U�{�r���B��"�R��&�%��d�D�RW�Y^�_�A�b�E���A�v�r�U�{�r��A�v�r�U�{�r��A�v�r�U�{�r��A�v�r�U�{�r��-�-��q�D�R��U���Q���H�H�k�2�b�'�B�r�7�F�E�3�PT�VZ�\a�ch�i�j��H�H�l�B�r�7�R��G�V�U�C�QU�W[�]b�di�j�k��H�H�k�2�b�'�B�r�7�F�E�3�PT�VZ�\a�ch�i�j��H�H�k�2�b�'�B�r�7�F�E�3�PT�VZ�\a�ch�i�j��6�z�'��H�H�k�2�b�'�B�q��s�8�V�U�TW�Y]�_c�ej�lq�%r�s��H�H�k�2�a�&�2�b�'�6�5�RU�W[�]a�ch�jo�%p�q��H�H�k�2�a��c�(�R��!��H�f�e�UX�Z^�`d�fk�mr�%s�t��H�H�k�2�a�&�2�a�&�&�%�QT�VZ�\`�bg�in�%o�p��H�H�k�2�b�'�B�r�7�F�E�SV�X\�^b�di�kp�%q�r��H�H�b�"�R��2�b�'�6�5�#�t�T�SX�Z_�`�a��{�"��a�4�B��E�,��H�H�k�2�a��c�(�R��!��H�f�e�S�RV�X\�^c�ej�k�l��H�H�k�2�a�&�2�a�&�&�%��d�TX�Z_�af�g�h����"�b��W�r�"�g�v�u�c�4��u�V[�\�]��{�"��a�4�B��1��I��H�H�k�2�a�&�2�a�&�&�%��d�TX�Z_�af�g�h����"�b��W�r�"�g�v�u�c�4��u�V[�\�]��{�"��q�5�R��U��H�H�k�2�a��c�(�R��!��H�f�e�S�RV�X\�^c�ej�k�l����"�b��W�r�"�g�v�u�c�4��u�V[�\�]����"�b��W�r�"�g�v�u�c�4��u�V[�\�]�e2	^�h�r7c�R�gj}|D]�}|dd\}\}}\}	}
|tvs|
tvr	||��+|
dkr|
|z
}
|dkr||z
}|
|kDr|
dz
}
n|
|k(r||ks
||k(r
|dk7r|
dz
}
||kDs
||k(r
|dk(r|dz
}||||f|	|
ff|ddz���|jS)a2Stretches 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

        rr*rr�r�N)rarr^)r3r�r\�oldrowcount�	stretchedr7rbrrr
rs           r5�_stretchCommandszTable._stretchCommands8s���2�I�I�	��	7�A�$%�a��F�!�C��"�R�'�2�b��\�!�R�<�%7��!����A�v��k�!���A�v��k�!���A�v��a�����'���6�b�A�g�#��*<��!�G�B��A�v�"��'�c�[�&8��a����s�R��G�b��W�-��!�"��5�6�+	7�.�!�!�!r7c��%�|j||��}|j}t|t�r|n
t	|�dz}|r||ks|s||krgSt|j�}||k(r|gS|j}|rQ|\}}|dkr||z
}|dkr||z
}||kDr,|j|t|j||�z
|��S||krgS|j}	|s|}
|j}�
n|jD�cgc]}|dd��	}}|jr||j|krgSt|jd|�}
|j|}|j|}|j}|j|}d}d}d}tt!|||��D�]\}\}}}|j"r|j$j'||fd���6t|t(t*f�r;|j-|||�\}}||j.|j0zz
}||kDs��|}��t|t2�s��|j5d�}d|j6z}|t|�z|j.z|j0z}t	|||j.z�}t	|||j0z�}||kDs��|}��||z|kDs	|||
z
kD�rz|j"sgSt9�}t;|j<�D]�}||f}||j>vs�|j$j'||fd���5|j$jA�D]9\}}|��	|\} }!}"}#|| k\s�||"ks�||!kDs�"||#ks�(|jC|�����|sgSg}$|j"D]t\}%\}&}'\}(})|&dkr|&|j<z
}&|(dkr|(|j<z
}(|'dkr|'|jDz
}'|)dkr|)|jDz
})|$jG|%|&|'f|(|)ff��v|jD�cgc]}|dd��	}*}|jH}+|D�]}|j$|\},}-}.}/|jJ|}0|0d}1t|j|-|�}2|*|-|,}3|jM|j|-|,|3|1|2�}4|4sgcS|4d||-|,<|4d|||,<g}5|$D]t\}%}6}7|,|-f|6k(rS|.|/f|7k(rL|dz
|-kDs|,|.k7r|5jG|%|,|-f|.|dz
ff�||/ks|,|.k7s�H|5jG|%|,|f|.|/ff��a|5jG|%|6|7f��v|5}$g}8|+D]`\}%}6}7}9|6|,|-fk(r=|8jG|%|6|7d|dz
f|9f�|8jG|%|6d|f|7d|f|9f��L|8jG|%|6|7|9f��b|8}+|3jO�}:|3jPdk(rv|4dr|4drd	|3_(d
|:_(n]|j-;dxs|;d||3�d}<||<z
dz}=|;dr|3xj.|=z
c_n|;dr|:xj0|=z
c_|:|*||,<��|jS||j|j|j|j|jT|jVd|*|jXt[|dd�|j\t[|d
d�t[|dd���}
|+|
_$|$|
_|j^|
_/|j`|
_0|jb|
_1|jd|
_2|jf|
_3|
ji�|
jk�|
jm�g}>|jnD�]_}?|?\
}@\}&}'\}(})}A}9}B}C}D}E}F|)dkr|)|
jDz
})|(dkr|(|
j<z
}(@dk(s@dk(r
|'|ks|)|k\s@dk(r�|'|ks|)|kDr�@dvrf|>jGd|&|'f|(|dz
fA|9BCDEFf
�|>jGd|&|f|(|)f|A|9|B|C|D|E|Ff
�|>jGd|&|dz
f|(|dz
f|A|9|B|C|D|E|Ff
�@dvs��|>jGd|&|'f|(|'fA|9BCDEFf
�|>jGd|&|)f|(|)f|A|9|B|C|D|E|Ff
�|>jGd|&|'f|&|)f|A|9|B|C|D|E|Ff
�|>jGd|(|'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$|\},}-}.}/|@dk(r
|)|-kDr|'|/ks@dk(r�|)|-k\r�|'|/kr�|&|.kr�|(|,k\r�@dk(r|-}H|/dz}In|-dz
}H|/}I|'HkrGjG@|&|'f|(HfA|9BCDEFf
�|,|&kDr6GjG@|&t	H|'�f|,dz
tq|)I�fA|9BCDEFf
�|.|(kr6GjG@|.dzt	H|'�f|(tq|)I�fA|9BCDEFf
�|)Ik\s��GjG@|&If|(|)fA|9BCDEFf
���)GjG|?���<G}>��I|>|
_7|
j|d��Stq||
z
||z
�}J|Jdz|jVkrgS|jrJz
}K|K|jVkrgSg}Ld}Mg}Nd}Og}Pt!|||�D�]n\}}}|jM|||J|�};|;sgcS|jO�}:|jPdk(rv|;dr|;drd	|_(d
|:_(n]|j-|;dxs|;d||�d}<||<z
dz}=|;dr|xj.|=z
c_n|;dr|:xj0|=z
c_LjG|;d�NjG|;d�|j-|;d||�d|j.z|j0z}Qt	M|Q�}M|j-|;d||�d|j.z|j0z}Rt	O|R�}OPjG|:���qtqJM�}St	O|j||Sz
�}T|jdd}U|Uju|dz|T�|S|U|<|jdd}*|*ju|dzP�|d|LgzNgz||dzdz}|jS||j|U|j|j|jT|jVd|*|jXt[|dd�|j\t[|d
d�t[|dd���}
|jw||jn|�|
_7|jw||jH|�|
_$|jw||j"|�|
_|jw||j^|�|
_/|jw||j`|�|
_0|jw||jb|�|
_1|dz}|jX}V|VrtyV�}V|
j\}W|Wr
|
j}Xn|
jz}Xt[|d
d�}Yt[|dd�}Z|jS|d||
jXd|||	|jT|jVd|
jd|Vt[|dd�W|YrYddndZ��}L|
jD}[|
j<}\|
j}||��}]|Lj||]|[|�|Lj||
jH|[|d��|Lj||
j"|[|�|Lj||
j^|[|�|
j`D]`}^Lj�|^�|^dddk7r� ^dd\\}&}'\}(})Lj�|^df|&|dz
f|(|dz
ffzt)|^dd�z��bVrtyV�}V|�rtt|t�r.|d|}_Xd|}`|
jd|}at+t;|��}nTt+t�|��}|D�bcgc]}b||b��	}_}b|D�bcgc]}bX|b��	}`}b|D�bcgc]}b|
j|b��}a}b|jS_||dz|
j`X|dzt|�|	|jT|jVda|
j|dzVt[|dd�WYZ��}N|Nj�|[|]|�|Nj�||[||
jH|d��|Nj�||[||
j"|�|Nj�||[||
j^|�n�|jS||d|
jX|d||	|jT|jVd|
j|dVt[|dd�WYr
ddgYddzndZ��}N|Nj�|]|�|Nj�||
jH|d��|Nj�||
j"|�|Nj�||
j^|�|
j`D]Z}^Nj�|^�|^dddk7r� ^dd\\}&}'\}(})Nj�|^df|&df|(dffzt)|^dd�z��\|
j�xL_DN_D|
j�x|L_E|N_E|j�|L�|j�|N�|L|NgScc}wcc}wcc}bwcc}bwcc}bw) N)�ignoreSpansrr�ror3rcr*r�r.r}rrT�_cornerRadiir�)
r!r"rrrrr$r%r�rTrr(r)r�r�r�)r�r�r�)r�r�r�r�r�FT)rpr�rU)
r!r"rrrrr$r%r�rUrr(r)r�)G�!_getFirstPossibleSplitRowPositionrrnr�r|rpr
r�
_splitRowsr�rr�rrrrr�rr}r�rorYrprGrHrxrerCrtr�r�r�r�rcr�rarr�r�r2rMrrrr�r=r�rrrrr�r�r�r�rr�r��insertr�rrr�rqr	r�ryr{r�r�rl)cr3r�ror�r�	maxrepeatr��lo�hirrjr 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�spanCmdsrbrr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/rr,rer�r#�
moddedcmds�startrow�endrowr�r�r��R0Heightr��R1Height�R1Styles�h0�h1r��newRowHeight�
newRowHeightsr��lto�splitHr(r)r*r-rr7�iRows�iRowH�iCSr�sc                                                                                                   r5r�zTable._splitRowsks����
0�
0���
0�
V���_�_�
�",�Z��"<�J�#�j�/�RS�BS�	��A�i�K�|��9���I��$�"�"�#���c�6�4�&�=�
�
 �
 ��
��F�B���!�t�R�3�Y�R��!�t�R�3�Y�R���t����{�S��9I�9I�"�Q�9O�5P�'P�_k��l�l��2���	��_�_�
���A��#�#�D�"&�"2�"2�3�Q�A�a�D�3�D�3��"�"�{�T�5H�5H��5K�'K��	��d�.�.�r��2�3�K��)�)�!�,�J��)�)�!�,�J����J��+�+�A�.�L��H��H��I�1:�3�z�:�Wa�;b�1c�
+�-��-���u��>�>�d�&6�&6�&:�&:�F�A�;��&M�&U���e�e�T�]�3� $� 2� 2�5�%�� G�I�A�v��e�.�.��1D�1D�D�D�F��	�)�$*�	���s�+� �;�;�t�,�D�!$�u�~�~�!5�J�'�#�d�)�3�e�6F�6F�F��I\�I\�\�F� #�8�Z�%�:J�:J�-J�K�H�"�8�Z�%�:M�:M�-M�N�H��	�)�$*�	�+
+�.�H�$�|�3��k�K�7�8��~�~��I� �U�
�#�D�K�K�0�&�F�"�A�;�D��� 2� 2�2��(�(�,�,�f�a�[�$�?�G�+/�*:�*:�*@�*@�*B�	&�J�D�$�#�|� (�EI�B�I�y�'�7� &�)� 3� &�'� 1� !�I�
� !�W�� *���t� 4� %�	&�
&�""��I���/3�~�~�
?�+�C��"�b�8�B���A�v��d�k�k�)���A�v��d�k�k�)���A�v��d�k�k�)���A�v��d�k�k�)���O�O�S�2�r�(�R��H�$=�>�
?�04�/?�/?� @�!��1�� @�
� @�!�-�-�
�
'�@9�D�9=�9I�9I�$�9O�6�G�W�g�w�#���t�4�H� (���I� #�D�$4�$4�W�Q�$?� @�I� -�W�5�g�>�H��/�/�$�*:�*:�7�*C�G�*L�*2�I�y�%�Q�C��!�	�.1��V�D��M�'�*�'*�1�v�D��G�G�$�
#%�K�+3�	B���U�C�$�g�.�%�7�$�g�.�#�5� ��s�W�}��7�0B� +� 2� 2�C�'�7�9K�g�WX�YZ�WZ�^�3\� ]� �7�{�g��.@� +� 2� 2�C�'�1���QX�GY�3Z� [�'�.�.��U�C�/@�A�	B� +�H�$&�M�2<�K�.��U�C�� �W�g�$6�6�*�0�0�#�u�s�1�v�q��s�m�U�1S�T�)�0�0�#��a��!�}�s�1�v�q�k�SX�1Y�Z�)�0�0�#�u�c�5�1I�J�K�"/�J� (�}�}��H����(�2��q�6�c�!�f�.6�H�O�.3�H�O�!%� 2� 2�1�Q�4�<�1�Q�4��� Q�RS� T�A�&2�Q�&6�!�%;�F� ��t� (� 3� 3�v� =� 3�!"�1�� (� 6� 6�&� @� 6�08�M�!�$�W�-�A@9�F�N�N�D�D�O�O�#�/�/�D�O�O�#���4�?�?�#���q�,�D�J�J� '��]�4� @�&*�&=�&=� '��^�D� A�$�T�+�d�;�#�	��!+��
�&���!%�!2�!2���"�n�n���!�]�]��
�"&�"4�"4���"&�"4�"4����$�$�&��!�!�#�� � �"�!��#�~�~�!�G�Y`�V�B���B��"�R�&�%��d�D�%�QV��A�v��a�h�h����A�v��a�h�h����u��"��,�B�!�G�r�A�v��{�*��Q��"�q�&��!6�6�'�.�.��R��G�b��1��X�v�W\�^a�cg�im�ot�v{�/|�}�'�.�.��R��F�R��G�V�UZ�\_�ae�gk�mr�ty�/z�{�'�.�.��R��!��H�r�!�A�#�h�PV�X]�_b�dh�jn�pu�w|�/}�~���0�(�.�.��b��W�r�"�g�v�W\�^a�cg�im�ot�v{�/|�}�'�.�.��b��W�r�"�g�v�W\�^a�cg�im�ot�v{�/|�}�'�.�.��r�"�g��2�w�PV�X]�_b�dh�jn�pu�w|�/}�~�'�.�.��b��W�r�"�g�v�W\�^a�cg�im�ot�v{�/|�}�#�*�*�7�3� �1!�8'�0-�D�!#�J�#.�+7��]d�Z��G�R��W�b��f�e�S�$��e�UZ�=A�=M�=M�d�=S�:���'�7� �K�/�B��L�R�7�]��+�-�"��-�B��L��'�M�b�G�m� "�[�0�+2��)0�1���+2�Q�;��)0��!�X�~� *� 1� 1�%'�"�b��B��>�6�5�RU�W[�]a�ch�jo�$p�!"�
 '��|�!+� 1� 1�%'�"�c�(�B�.?�)@�7�1�9�c�RT�V\�o�B^�`f�hm�or�tx�z~�AF�HM�%N�!"� '��|�!+� 1� 1�%'�'�!�)�S��2�5F�)G�"�c�RT�V\�o�I^�`f�hm�or�tx�z~�AF�HM�%N�!"� "�V�|� *� 1� 1�%'�"�f���B�x���PS�UY�[_�af�hm�$n�!"�'�-�-�g�6�W+7�Z#-�K�a0-�d*����|�|�K�U�|�C�C��[�;�6�	�H�8L�M�J��!�|�d�o�o�-��	����z�1�I��4�?�?�*��	��B��H��B��H��H�),�Z��Z�)P�
*�%���u��O�O�E�5�,�
�E�R����I� �:�:�<���<�<�8�+���t��!��'/���*/���!�.�.�q��t�|�q��t�U�E�J�1�M��".��"2�a�!7���Q�4�!�,�,��6�,��q�T�$�2�2�f�<�2��	�	�!�A�$���	�	�!�A�$���'�'��!��e�U�;�A�>��AQ�AQ�Q�TY�Tg�Tg�g���x��,���'�'��!��e�U�;�A�>��AQ�AQ�Q�TY�Tg�Tg�g���x��,������)�7
*�<�Z��2�J��x��)9�)9�!�)<�z�)I�J�L� �,�,�Q�/�M�� � ��Q���5�)�M�!�� �,�,�Q�/�M�� � ��Q���1����8�r�d�?�b�T�)�D��1���J�6�D��������(�T�_�_��?�?�t����?�?�1�(��
�
�#�D��t�<�"&�"9�"9�#�D���=� ��k�$�7��	�A��/�/��4�>�>�3�G�A�K� �1�1�!�T�5E�5E�s�K�A�M��/�/��4�>�>�3�G�A�K�!�2�2�1�d�6G�6G��M�A�N��/�/��4�>�>�3�G�A�K��.�.�q�$�-�-��E�A�J��A��A��
�
���(�5�/�%��"�"����]�]�F��W�W�F��d�>�$�7���4��D�1��
�^�^�T�"�1�X����&�QS�RS�*�%�*�����?�?�1����WY�XY�IZ��#�D��t�<�"%�/:�K���O��!�������������$�$�Q�\�$�B�	�
����9�U�<�0�
����1�=�=��|�d��C�
����1�;�;�u�\�2�
����1�>�>�%��5����	H�A��N�N�1����t�A�w��#�X� ��1�v��G�R��W�b���N�N�A�a�D�7�R��1��I��A�a�C�y�#9�9�%��!�"��,�F�G�		H��(�5�/�%���*�S�)��[�j�)���{�
�+���m�m�K�Z�0��!�%�
�"3�4�
�"�&��"4�5�
�*4�5�Q��a��5��5�,6�7�q����7��7�1;�<�A�q�}�}�Q�'�<��<�����d�1�2�h�����$�V�A�B�Z�/�"�:��:�#���4�?�?�#$�"�1�=�=���#4�4��&�t�L��>�&)�"-�'� ��B�
�J�J�q��z�)�L�A��J�J�q��z�!�-�-��t�J�T��J�J�q��z�!�+�+�l�C��J�J�q��z�!�.�.��F�����Q�R��A�L�L�V�TU�TV�Z�)�j�#���4�?�?�#$����q�r�1B��&�t�L��>�&)�?J�A�a�5�;�q�r�?�#:�PT�'� �	�B�
�J�J�q��<�0��J�J�q����|�d�J�C��J�J�q����\�2��J�J�q�����5����	D�A��N�N�1����t�A�w��$�h� ��1�v��G�R��W�b���N�N�A�a�D�7�R��G�b�!�W�#5�5�e�A�a�b�E�l�B�C�		D�!"���(��	�B�I� !���(��	�B�I����R�����R���2�w���m
4��j!A��f	6��7��<s&�8AK	�AK�@AK�@+AK�@=AKc��|D]K}||}|dk7s�|d|d}}||k7s�t||�}t||�}|dz}		|	|kDr�Bd||	<|	dz
}	�y)Nrr*)r�r|)
�
impossible�cells�ranges�xyr�r��y2�ymin�ymaxr�s
          r5�_getRowImpossiblezTable._getRowImpossibleCs{���	�B��R�j�A��$�w���d�1�Q�4�2���r�6��R���D��R���D��1�f�A���T�6�5�&*�
�1�
��1����	r7c�>�i}|jr)|s'|j||j|j�|jr'|j||j
|j�d}d}d}|jD]}||z|kDr|S||vr|}||z}|dz}�|S)Nrr)rr�r�r}rr�r�r
)r3r�r�r�r�r��split_atrIs        r5r�z'Table._getFirstPossibleSplitRowPositionRs����
��>�>�+��"�"�:�d�.@�.@��AQ�AQ�R�����"�"�:�d�.C�.C�D�DW�DW�X�
��
�����"�"�	�B���t�K���
��	�
�"�����d�A���c�A�
	��r7c�2�|j||�|js|jrltjs|j
|kDrgS|j
||j��}|r|S|jr|j
||j��SgS)Nr�)r�rrr	r�r�r�)r3r�r�r>s    r5rezTable.splitfs����
�
�:�{�+��?�?�d�o�o��3�3����J�8N�WY�PY��_�_�[�4�?�?�?R�_�S�F���
�������{�����Q�Q��	r7c���d|_t|dd�}|rt|�|kry|j}|j}tdd|dz
f|dz
df|dz
|dz
ff�D���cgc]2\}\}}t
|j||j|||���4}}}}|j}	|j}
|
d}|	|}|
|}
|	d}|
|z
}||z
}t|||||
||g�|_|jj�}|j|||||�|j}|jd�|j!|d��|jd�ycc}}}w)Nr�rbrrz%begin table rect clip��strokez%end table rect clip)r3r=r|r�r�rr�r
rr�r�RoundingRectDefrP�	beginPath�	roundRect�
addLiteral�clipPath)r3r�r(r*r-rr�r��arrZrcr�r�r�r�r�r�r�r7s                   r5�_makeRoundedCornersClipzTable._makeRoundedCornersClipzs��� $����d�>�$�7���c�+�.��4�f���������$���u�Q�w�K��1�W�Q�K��1�W�e�A�g�&�	&������%�1�Q��$�"�"�1�%�d�o�o�a�&8��Q��H�����
�
��
�
�
��
��U��
��Y��
��Y��
��U����G����G�� /��B��1�b�"�b�"� M����I�I���!��	���B��A�q�"�%��I�I��	���-�.�	�
�
�1�A�
��	���+�,��-s�#7Ec
��|j\}}}}}}}}|sy|j}	|	j�dx}
x}x}x|_|_|	j
}
|j}|D�]�\	}}}}}}}}}|dk7r|
|k7r|	j|�|}
|�|gk(r|�+|	j�d}n||k7r|	j|�|}|�||k7r|	j|�|}|j||�||k(r�||kDs||kr|
||||���||k(r
d}|d}|d}nd}|d}|d}|||zk\r|||z
kr|
||||���|||zkrtd|||f|dd�	�nd}|||z
kDrtd
|||f|dd�	�nd}n�||kDs||kr
|
||||���2||k(r
d}|d}|d}nd
}|d}|d}|||zk\r|||z
kr
|
||||���m|||zkrt|d||f|dd�	�nd}|||z
kDrt|d||f|dd�	�nd}|	j�}|rM|j|d�|j|dd|dd|dd|dd|dd|dd�n|j||�|s|j||�nL|j|d�|j|dd|dd|dd|dd|dd|dd�|	j!|dd�����|	j#�y)
Nr�rr*r�rrr�r�)r�r�r�r��r��fill)r3rPr2rQr;r5r�r6r7r8rSr�r��moveTo�curveTo�lineTo�drawPathr:)r3r�r�r�r�r�r�r�r4rPr<r=r>r5r(r'r(r)r*r/rJrr,rer�r�r�r�r�r�r�s                               r5�_restoreRoundingObscuredLinesz#Table._restoreRoundingObscuredLines�s���'+�'<�'<�$��B��1�b�"�b�"��6��y�y������BF�F��F�u�F�u�F�t�����y�y���'�'��8:�B	/�4�R��2�b���c�$�t��D�y�T�3�Y�����$����|�t�r�z��$��L�L�N� �E�������T�"�����E�4�K�� � ��&����N�N�6�5�)��2�v��b�5�B�r�E���B�r�"�%���r�6�#�D��A��B��A��B� �D��A��B��A��B��r�"�u�9��R��U����B�r�"�%��^`�ac�df�af�^f�\�&��r�"�g�r��\�Z�lp��_a�bd�eg�bg�_g�\�'�$��2�w���l�[�mq���b�5�B�r�E���B�r�"�%���r�6�!�D��A��B��A��B�"�D��A��B��A��B��r�"�u�9��R��U����B�r�"�%��`b�ce�fh�ch�`h�\�$�x��B���!�|�\�nr��]_�`b�ce�`e�]e�\�$�u�b��W�b�q�L�Y�ko����� �A������"�Q�%� ��	�	�"�Q�%��(�2�a�5��8�B�q�E�!�H�R��U�1�X�r�!�u�Q�x��1��a��Q�����B�������B������"�Q�%� ��	�	�"�Q�%��(�2�a�5��8�B�q�E�!�H�R��U�1�X�r�!�u�Q�x��1��a��Q��M�M�!�A�A�M�.�EB	/�F	
���r7c
�8�|j}|j�dx|_x|_|_t|d�}|r||d�||d�|j
�|j�|r	||d�|j�sm|r�tt|j|j|jdd|j��D]�\}\}}}}||d|�tt|||jdd|j ��D]>\}\}	}
}}||d|||	|
||f||f�|j#|	|
||f||f�||d	��@||d
����n�t|j|j|jdd|j�D]Z\}}}}tt|||jdd|j ��D]"\}\}	}
}}|j#|	|
||f||f��$�\�nH|r�t%|j&�D]�}||d|�t%|j(�D]u}|j*||f}
|
��|
\}}}}|j||}	|j||}
||d|||	|
||f||f�|j#|	|
||f||f�||d	��w||d
���n�t%|j&�D]s}t%|j(�D]Y}|j*||f}
|
��|
\}}}}|j||}	|j||}
|j#|	|
||f||f��[�u|r	||d�|j-�|r||d�||d
�|j/�|j0r|j3�yy)Nr��
startTable�startBG�endBGr�startRowrv�	startCell�endCell�endRow�
startLines�endLines�endTable)rPr2rQr;�
_curcellstyler=r��_drawBkgrndrrr�r�rr�r
rr�	_drawCellr�r�r�r�r?r:r3r�)r3r7r)r�r>�rowstyle�rowpos�	rowheightr��cellval�	cellstyle�colpos�colwidth�cellRectrqr�r�r�s                  r5�drawz
Table.draw�sY���I�I��	���
�@D�D���D�$�.�4�+=��4��,����T�,�'��T�)�$��$�$�&������X�d�7�+��~�~��AJ�3�t�O_�O_�ae�aq�aq�sw�tF�tF�GH�GI�tJ�LP�L\�L\�L]�B^�,�=�E�=�C��6�9��T�*�U�3�IR�SV�WZ�\d�fj�fx�fx�y|�z|�f}�@D�@O�@O�TP�JQ�1�E��E���F�H� ��k�5�%��)�V\�^d�Ue�hp�r{�g|�}����w�	�F�F�;K�h�Xa�Mb�c� ��i�0�1��T�(�+�
,�9<�D�<L�<L�d�N^�N^�`d�`r�`r�st�su�`v�x|�yI�yI�9J�d�4�C��6�9�IR�SV�WZ�\d�fj�fx�fx�y|�z|�f}�@D�@O�@O�TP�JQ�d�E��E���F�H����w�	�F�F�;K�h�Xa�Mb�c�d�d��"�4�;�;�/�,�E��T�*�U�3�!&�t�{�{�!3�5��#'�?�?�5�%�<�#@��#�/�4<�1�Q��5�&�&*�&6�&6�u�&=�e�&D�G�(,�(8�(8��(?��(F�I�$�T�+�u�e�W�i�Z[�]^�Y_�bg�io�ap�q� �N�N�7�I��1�v��v��W�$�T�)�4�5��T�(�+�,�#�4�;�;�/�X�E�!&�t�{�{�!3�X��#'�?�?�5�%�<�#@��#�/�4<�1�Q��5�&�&*�&6�&6�u�&=�e�&D�G�(,�(8�(8��(?��(F�I� �N�N�7�I��1�v��v��W�
X�X��X�d�<�0�������T�*�%��T�*�%�	����� � ��.�.�0�!r7c��
�|j}|j}|j}|j}|j}|j
}|j}t|dd�}|jD�]\}	\}
}\}}
}|tvr�|
dkr|
|z}
|dkr||z}|dkr||z}|
dkr|
|z}
||
}||}|t|dz|�}|t|
dz|�}||z
||z
}}t|d�r|||||||���|	dk(r�tttj|��}t!|�}|
|z
dz}t#|�D]B}|||z}|||z}|r)|j%|�|j'||||dd��||z
}�D��|	dk(r�tttj|��}t!|�}||
z
dz}t#|�D]A}|||z}||
|z}|r(|j%|�|j'||||dd��||z}�C���|�r�t)|tt*f��r�|ddv�r�||
k(r#|
|k(r|r|j-|
|f�}|r|\}}}}|d|dd}}|j/�|j1�}|j'||||�|j3|d�	�|d
k(r|j5||||z||d���n |d
k(rA||dzz}|j5|||||d��|j5||||z||ddd�d���n�|dk(rA||dzz}|j5|||||d��|j5|||||z|ddd�d���n�|dk(r|j5|||||z|d���ns|dk(r�dt!|�cxkrdkrinnf|dd\\} }!\}"}#|| |zz} ||"|zz}"||!|zz}!||#|zz}#|d}$|d}%t!|�dk(r|dnd}&|j5| |!|"|#|%|&|$��n�t7dt8�d|����|dk(r�dt!|�cxkrdkr�nn�|d\}'}(||'|zz}'||(|zz}(|d\})}*|*dk(r|}*nG|*dk(r|}*n?|*dk(r
t||�}*n-|*dk(r
t;||�}*nt7d|d�d t8�d|����|)|*z})|d}$|d}%t!|�dk(r|dnd}&|j=|'|(|)|%|&|$��nt7dt8�d|����|j?����tj|�}|s���||
k(r#|
|k(r|r|j-|
|f�}|r|\}}}}|j%|�|j'||||dd����y)!Nr�rr�__call__rr�r)�VERTICAL�
HORIZONTAL�	VERTICAL2�HORIZONTAL2�LINEARGRADIENT�RADIALGRADIENTr�r
F)�extendr�@rvrr	r
�rrr*)�	positionsrzWrong length for z arguments rr�r�r�r|zBad radius, z, for ) r�r�rPrr�r
rr=rrr�rXrYrfr
�
toColorOrNonerpr��setFillColor�rectrnror�r2r�r��linearGradientr�r$r|�radialGradientr:)+r3r*r-rPr�r�r"r!r�rbrrr
r�argr�r�r�r�r�r��
colorCycler��rowCountr�rJ�colCount�xywh�arg0�p�xh�yh�ax0�ay0�ax1�ay1rrSr��xc�ycr��refs+                                           r5r�zTable._drawBkgrnd 	sX�����������y�y���)�)���)�)���%�%�
��O�O�	��D��d�3�	�,0�,<�,<�D	A�(�C��"�b�8�B��S��\�!�8��A�v�B��J�r��A�v�B��J�r��A�v�B��J�r��A�v�B��J�r��b�!�B��b�!�B��c�"�Q�$�u�o�.�B��c�"�Q�$�u�o�.�B��b�5�"�R�%�q�A��s�:�&��D��r�2�q�!�,��(�(�
"�#�f�&:�&:�C�"@�A�
��J�����7�Q�;���x�� �A�&�q��w�/�E�"�2��6�*�A���)�)�%�0��	�	�"�b�!�a�R��q�	�A��a��B�
 ��(�(�!�#�f�&:�&:�C�"@�A�
��J�����7�Q�;���x���A�&�q��w�/�E�!�"�q�&�)�A���)�)�%�0��	�	�"�b�!�Q�q�a�	�@��Q��B�
��J�s�D��<�8���F�'D�D��2�v�"�b�&�Y�(�}�}�b��W�5���+/�L�B��A�q� #�A���A�B��#�D��N�N�$����(�A��F�F�2�r�1�a�(��M�M�!�A�M�.��\�)��+�+�B�r�"�Q�$�r�#�U�+�K���.��!�C�%�Z���+�+�B��B��C��+�N��+�+�B��B��F�B��D�b�D�	�RW�+�X���,��!�C�%�Z���+�+�B��B��C��+�N��+�+�B��B��Q���D�b�D�	�RW�+�X��z�)��+�+�B��B��Q���E�+�R��/�/��c�#�h�>��>�58��!�W�2�J�S�#�
��c�"$�s�1�u�*�C�"$�s�1�u�*�C�"$�s�1�u�*�C�"$�s�1�u�*�C�%(��V�F� #�A��A�*-�c�(�A�+��A��4�A� �/�/��S�#�s�A�QR�[a�/�b�",�/@���k�RU�QX�-Y�"Z�Z��/�/��c�#�h�>��>�%(��V�F�B��!#�b��d��B�!#�b��d��B�%(��V�F�A�s�"�G�|�&'��!$�h��&'��!$�e��&)�1�Q�i��!$�e��&)�!�A�h��&0�<��A��z��PR�v�U`�ad�`g�1h�&i� i���H�A�%(��V�F� #�A��A�*-�c�(�A�+��A��4�A� �/�/��B��1��RX�/�Y�",�/@���k�RU�QV�-W�"X�X��%�%�'�"�0�0��5�E���r�6�b�"�f��#,�=�=�"�R��#9�D�#�/3���B��1��)�)�%�0��	�	�"�b�!�Q�q�a�	�@�ID	Ar7c	��	�|\}}|\}}|j|ur�|j}	|	�|j|	jk7r%|jj|j�|	�K|j|	jk7s2|j
|	j
k7s|j|	jk7r;|jj|j
|j|j�||_|j}
|j}t|tttf��rxt|ttf�s|f}g}g}
|j|||||
|��\}}|dk(r||z|jz
}n=|dk(r||j z|z}n%|||j z|jz
|zdzz}|r||dj#�z
}t%|||
�D]�\}}}|
dk(r||j&z}n_|
dk(r||z|j(z
|z
}nD|
dvr&|||j&z|j(z
|z
dzz}nt+d	|
�d
t-|�����||j#�z}||z}|j/|j||�||j1�z}���n�|
dk(r&|jj2}||j&z}n�|
dvr9|jj4}|||j&z|j(z
dzz}nj|
dk(r)|jj6}||z|j(z
}n<|
dk(r)|jj8}||z|j(z
}nt+d	|
����t;|�j=d
�}t?|�}|j}|j}|dk(r||j z||zz|z
}nZ|dk(r||z|jz
|z
}n?|dk(r,||j |z|jz
||zzdzz|z
}nt+d|����|D]}||||�||z}�tA|dd�}|r(||j|jB|jD�|jFr2|jjI|jF||||z||zfd��|jJr4|jjMd|jJ||||z||zfd��yy)N)rirjrUr}r.rrr,�RIGHT)�CENTREr�zInvalid justification z for r��DECIMALr3r�zBad valign: �onDrawr)�relativer�)�Rectr-)'r�rJrPrrDrBrC�setFontrKrMrnrorYrrprGrHrgr�rErFr��type�drawOnrh�
drawString�drawCentredString�drawRightString�drawAlignedStringrxrerpr=r��labelrN�linkURLrO�linkRect)r3rr�pos�sizerr�rr�cur�justrMrirjr�r�r�r�rqr�valsr�rDrCr,s                         r5r�zTable._drawCell�	s������"���)����Y�.��$�$�C��{�i�o�o����:��	�	�&�&�y���7��{�i�/�/�3�;�;�>�)�BT�BT�X[�Xd�Xd�Bd�hq�hz�hz�B�K�K�iK��	�	�!�!�)�"4�"4�i�6H�6H�)�J[�J[�\�!*�D���"�"���!�!���g�u�T�(�3�4��g�u�T�l�3��z�W��A��A��%�%�g�h�y�1��Y�%�W�D�A�q��u�}��Y�&��)=�)=�=����!��9�2�2�2�Q�6���I�i�&=�&=�=�i�>R�>R�R�ST�T�VY�Y�Y����W�Q�Z�6�6�8�8���w�q��+�

'���1�a���<�V�I�,A�,A�%A���7�]��x��	�8N�8N�(N�QR�(R�A��1�1����)>�)>� >�y�?U�?U� U�VW� W�Y\�\�\�A�$�'=�d�X�U�4�PQ�7�)�%T�U�U��Q�%�%�'�'���Q���������1�Q�'��Q�_�_�&�&��

'��v�~��y�y�+�+���Y�2�2�2���-�-��y�y�2�2���H�Y�%:�%:�:�9�;Q�;Q�Q�SV�V�V������y�y�0�0���X�%�	�(>�(>�>����"��y�y�2�2���X�%�	�(>�(>�>�� �#9�$��!B�C�C��w�<�%�%�d�+�D��D�	�A��'�'�G� �)�)�H��x���Y�4�4�4�Q�w�Y�>�x�G������Y�&��)=�)=�=��H����!��i�5�5�	�A�)�BV�BV�V�WX�Y`�W`�`�be�e�e�hp�p�� �<��z�!:�;�;��
���Q��1�
��W���
��W�X�d�3�F���t�y�y����g�m�m�<��>�>��I�I���i�n�n�v�v�v��?P�RX�[d�Rd�.e�pq��r�� � ��I�I���r�9�#8�#8���PV�Ya�Pa�ci�lu�cu�?v�BC��
D�!r7c��t|�r8|sd|_yt|�tdt|�z
d�dgzz|_ytd|����)Nrrz@cornerRadii should be None or a list/tuple of numeric radii
not )rrYr|rpr�r�)r3r(s  r5rzTable._setCornerRadii�	sY�� ��-�,7��D��T�+�=N�RU�VW�X[�\g�Xh�Vh�ij�Rk�mn�lo�Ro�=p�D���`�al�`o�p�q�qr7)ry)NN�@)r?r?r0rk)r)Fr�):r?r@rArr6rir
r�rVr`rprrr�rdr�r�r�r�r�r�r�r�r�r�rrr	r?r1rHrFrGrSrKr]rLrfrhrlrqryr{r�r�r�r�r��staticmethodr�rer	r�r�r�rr�r�rrPr7r5rrsv��'+��D���q�Q�Y]�ei��4��d�Z^� �D�D�X\�%��m,�`l��(&o�P��4�09�=(�~#B�J`�D"�B
5�"��p�d�,-5�^.8�`2$�h4�$R�;J�z,�\9�F�N�L�%�1�&N�
1�&N�
+�

�H�.',�RH�*X�t:�x1"�fV�p�#�#4�5���(�(,5�?�?�-�<K�Z91�vMA�^ND�`rr7rrHrFrGr]rKrLrf)r�r�r�r�r�r�r�r�c��eZdZdZdZy)rz+Henning von Bargen's changes will be activerN)r?r@rA�__doc__r�rPr7r5rr
s��5��r7rc�R�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zy
)�
TableRenderCBzDtable render callback abstract base klass to be called in Table.drawc��t|t�stdt|��d���t	||d�}|std|����||g|���y)NzTableRenderCB first argument, z is not a Tablezinvalid TablerenderCB cmd )rnrr�rgr=)r3rjrb�args�meths     r5rzTableRenderCB.__call__
sW���!�E�"�*�7U�VZ�[\�V]�U^�^m�5n�*o�$o��t�C��%���:�(B�3�%�&H�I�I��Q�
��
r7c��td��)Nr���NotImplementedError�r3rjs  r5r�zTableRenderCB.startTable
�
��!�,�/�/r7c��td��)Nr�rIrKs  r5r�zTableRenderCB.startBG
�
��!�)�,�,r7c��td��)Nr�rIrKs  r5r�zTableRenderCB.endBG
s
��!�'�*�*r7c��td��)Nr�rI)r3rjr�s   r5r�zTableRenderCB.startRow!
�
��!�*�-�-r7c��td��)Nr�rI)r3rjr�r�rrr9r:s        r5r�zTableRenderCB.startCell#
s
��!�+�.�.r7c��td��)Nr�rIrKs  r5r�zTableRenderCB.endCell%
rNr7c��td��)Nr�rIrKs  r5r�zTableRenderCB.endRow'
s
��!�(�+�+r7c��td��)Nr�rIrKs  r5r�zTableRenderCB.startLines)
rLr7c��td��)Nr�rIrKs  r5r�zTableRenderCB.endLines+
rQr7c��td��)Nr�rIrKs  r5r�zTableRenderCB.endTable-
rQr7N)r?r@rArBrr�r�r�r�r�r�r�r�r�r�rPr7r5rDrD
s<��N��
0�-�+�.�/�-�,�0�.�.r7rDc��|dtvSr�)�LINECOMMANDS)rbs r5rr0
s���q�6�\�!�!r7c�~�|||}|dk(rJt|�}|d|_|dkDr/|d|_|dkDr|d|_y|jdz|_yy|dvr|d|_y|dvr|d|_y|dk(r|d|_y|d	k(r4t	j
|dt	jddd��|_y|d
vr|d|_y|dk(r|d|_	y|dk(r|d|_
y|d
k(r|d|_y|dk(r|d|_y|dk(r|d|_
y|dk(r|d|_y|dk(r|d|_yy)N�FONTrrrrc)�FONTNAME�FACE)�SIZE�FONTSIZE�LEADING�	TEXTCOLOR)�ALIGN�	ALIGNMENT�VALIGN�LEFTPADDING�RIGHTPADDING�
TOPPADDING�
BOTTOMPADDING�HREF�DESTINATION)rprBrCrDr
�toColor�ColorrJrKrMrErFrGrHrNrO)r%r�r�r$r�r�r�s       r5r!r!3
sk���Q�-��
�C�	�V�|���K���a�y����Q�3�!�!�9�C�L���s�$�Q�i���!�l�l�3�.����
�#�	#��a�y���	�#�	#��a�y���	�y���Q�i���	�{�	��N�N�6�!�9�f�l�l�1�Q�q�.A�B��	�	�%�	%��q�	��
�	�x���A�Y��
�	�}�	� ��)���	�~�	�!�!�9���	�|�	������	��	�"�1�I���	�v���!�9���	�}�	� ��)���
r7r�rb�rvrvg�?)rb)rrrmr)r�r�r�r�)rvrr�)rrvr�)rr�__main__)�old_tables_test)rr�gW[����?)M�__all__�__version__rB�reportlab.platypus.flowablesrr�	reportlabr	�reportlab.lib.stylesr
rr�
reportlab.libr
�reportlab.lib.utilsrrrrrrr�reportlab.lib.validatorsr�reportlab.lib.rl_accelr�reportlab.lib.abagrr\�reportlab.pdfbase.pdfmetricsrr�rrr�collectionsrrr rrrrr�r�r�r�r�r�r�r�r�ror�r�r�r�rrr9rrYrrYrDrr!r+�
GRID_STYLE�	BOX_STYLE�LABELED_GRID_STYLEr�COLORED_GRID_STYLE�green�
LIST_STYLEr?�tests.test_platypus_tablesrorPr7r5�<module>r�s���

��
��
	��@��K�K� �j�j�j�:�)�0�4�G�3�"��Q�q�a�!�	D���q�!�Q�q�
A�	����6��0:�.
�`?�
�*1:���/�,�
=��"&�9�?�?��(	��	��5���/�0G�H���0�1Y�Z��
K��~#r�H�~#r�@H#� �$�,�*�)�*�*�.�
�����J�O�O�%�&��.�.�8"�%$�N��e�W�d�F�L�L�1�'�)��
�
��U�G�T�6�<�<�0�'�)�
�	� ��5�'�4����6��U�G�Q����-��5�&�!�V�\�\�2��5�&�!�V�\�\�2�'�	)��� ��5�'�4����6��U�G�Q��
�
�+��5�&�!�V�\�\�2��5�&�!�V�\�\�2�'�	)�����5�&�!�V�\�\�2��5�'�4����6��6�7�A�v�|�|�4�'�)��
��z��:���r7

Zerion Mini Shell 1.0