a
    ¥Q•h‚Y  ã                   @   sô   d Z ddl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 dd	lmZ dd
lmZ ddlmZ ddl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„ Zdd„ Zd%dd„Z dd„ Z!dd„ Z"dd„ Z#dd „ Z$d&d#d$„Z%dS )'z@Take an "after layout" box tree and draw it onto a pydyf stream.é    N)Úfloor)ÚElementTreeé   )Úboxes)ÚSVGImage)Úreplaced)ÚBackgroundLayer)ÚMatrix)ÚStackingContexté   )Údraw_borderÚ	draw_lineÚdraw_outlineÚrounded_boxÚset_mask_border)Ústyled_color)Ústacked)Ú	draw_textc                 C   s^   | j d }t | ¡}t||jjd| j|d� t|| ƒ t|| jdd� t	|| ƒ t
||ƒ dS )zDraw the given PageBox.ÚmarksF)Úclip_boxÚbleedr   )r   N)Ústyler
   Z	from_pageÚdraw_backgroundÚboxÚ
backgroundr   r   Úcanvas_backgroundr   Údraw_stacking_context)ÚpageÚstreamr   Ústacking_context© r    úQ/var/www/sistema_ama/venv/lib/python3.9/site-packages/weasyprint/draw/__init__.pyÚ	draw_page   s    

þ

r"   c              	   C   sæ  t | ƒ��Æ |j}| j|dd� |jrV|jjd dkrVt| |j ¡ ƒ |  ¡  |  	¡  | 
¡ rê|jd rê|jd \}}}}|dkr†d}|dkr’d}|dkr¢| ¡ }|dkr²| ¡ }|  | ¡ | | ¡ | || || ¡ |  ¡  |  	¡  |jd d	k �r
| }| j| jŽ } |j�rD|jj�r,| j|jjŽ  n|  ¡  W d
  ƒ d
S t|tjtjtjtjtjtjfƒ�rˆt| |ƒ t | |j!ƒ t"| |ƒ t | ƒ��¨ |jd dk�o°t|tj#ƒ }|�rÖt| | ¡ ƒ |  ¡  |  	¡  |j$D ]}	t%| |	ƒ �qÜ|j&D ]@}
t| |
ƒ t|
tj'ƒ�rt(| |
ƒ nt | |
j!ƒ t"| |
ƒ �qô|j)D ]}	t%| |	ƒ �q<t|tj*ƒ�rjt+| |j|ƒ |g|j,¢R D ]‚}
t|
tjƒ�r–t-| |
ƒ nb|
j.�rx|
|k�r¶| j|
dd� t|
j.d tj/ƒ�ræ|
j.D ]}t+| |j|ƒ �qÐ|
|k�rx|  ¡  �qx|j0D ]}	t%| |	ƒ �q|j1D ]}	t%| |	ƒ �qW d
  ƒ n1 �sB0    Y  t2| |ƒ |jd d	k �rº| j3}|} t | ƒ�0 | j4|jd ddd� |  5|¡ W d
  ƒ n1 �s°0    Y  |  ¡  W d
  ƒ n1 �sØ0    Y  d
S )z*Draw a ``stacking_context`` on ``stream``.T)ÚmcidÚoverflowÚvisibleÚclipÚautor   Úopacityr   Néÿÿÿÿ)ÚstrokeÚfill)6r   r   Úbegin_marked_contentÚis_for_root_elementr   r   r   Úrounded_padding_boxr&   ÚendÚis_absolutely_positionedÚborder_heightÚborder_widthÚ	rectangleÚborder_box_xÚborder_box_yÚ	add_groupÚpage_rectangleÚtransformation_matrixÚdeterminantÚ	transformÚvaluesÚend_marked_contentÚ
isinstancer   ÚBlockBoxÚ	MarginBoxÚInlineBlockBoxÚTableCellBoxÚFlexContainerBoxÚReplacedBoxr   r   r   r   ÚPageBoxZnegative_z_contextsr   Zblock_level_boxesÚTableBoxÚ
draw_tableZfloat_contextsÚ	InlineBoxÚdraw_inline_levelZblocks_and_cellsÚdraw_replacedboxÚchildrenÚLineBoxZzero_z_contextsZpositive_z_contextsr   ÚidÚ	set_alphaÚdraw_x_object)r   r   r   ÚtopÚrightÚbottomÚleftZoriginal_streamr&   Zchild_contextÚblockÚchildÚgroup_idr    r    r!   r       s¦    ÿþ
þ

þ








.

*r   Tr    c              K   C   sì  |du rdS t | ƒ��À |rH|jd jD ]}t| |ƒ q(|  ¡  |  ¡  |jjdkrÀt | ƒ�T |  |j¡ |jd j	}| j
|Ž  |  ¡  |  ¡  | j
|Ž  |  ¡  W d  ƒ n1 s¶0    Y  |�r¨|�r¨|jd j	\}}}	}
dd„ | ¡ D ƒ}d|
› d|	› d�}d	|v �rè|d
|d › d|d › d|d › d|d › d|	› d|d › d|d › d|	› d|
› d|d › d|d › d|
› d|d › d|d › d|d › d|d › d|	› d|
› d|d › d|d › d|
› d|d › d|d › d|	› d�17 }d|v �r4|d|d › d|	› d|d › d|	› d|d › d|d › d|d › d |d › d!|d › d"|
› d#|	› d$|d › d%|d › d$|d › d&|d › d'|d › d"|
› d(|	› d)|d › d*|d › d|
› d+|d › d$|d › d,|d › d-|d › d.|
› d/|d › d0|	› d1|d › d|
› d%|d › d$|d › d,|d › d2|d › d0|	› d3|
› d4�I7 }|d57 }t |¡}t|dd| ƒ}|	|
f}||f}d6}d7}|| }dd|	|
f}g }t||||||||ƒ}|j d|¡ t|jƒD ]}t| ||jƒ �q²W d  ƒ n1 �sÞ0    Y  dS )8zÕDraw the background color and image to a ``pdf.stream.Stream``.

    If ``clip_box`` is set to ``False``, the background is not clipped to the
    border box of the background, but only to the painting area.

    Nr)   r   c                 S   s   i | ]\}}||d  “qS )g      à?r    )Ú.0ÚkeyÚvaluer    r    r!   Ú
<dictcomp>¹   ó    z#draw_background.<locals>.<dictcomp>z
              <svg height="z	" width="z‹"
                   fill="transparent" stroke="black" stroke-width="1"
                   xmlns="http://www.w3.org/2000/svg">
            Úcropz
                  <path d="M0,rO   z hrR   z#" />
                  <path d="M0,rP   z/"
                        transform="translate(z2,0) scale(-1,1)" />
                  <path d="M0,rQ   ú,z1) scale(-1,-1)" />
                  <path d="M0,z1"
                        transform="translate(0,z.) scale(1,-1)" />
                  <path d="Mz,0 vz!" />
                  <path d="Mz/) scale(-1,-1)" />
                  <path d="Mz$,0) scale(-1,1)" />
                Úcrossz
                  <circle r="z7" transform="scale(0.5)
                     translate(zI) scale(0.5)" />
                  <path transform="scale(0.5) translate(z,0)" d="
                    M-z
                    M0,0 vz"" />
                  <circle r="z." transform="
                    translate(0,z+) scale(0.5)
                    translate(z,-z.) scale(0.5)" />
                  <path d="M-z
                    hz M0,0 v-z) scale(0.5) translate(z%,0)" />
                  <circle r="z6" transform="scale(0.5)
                    translate(z-) scale(0.5)" />
                  <path d="Mz
                    vz M0,0 hz8"
                    transform="scale(0.5) translate(0,z#)" />
                  <circle r="z," transform="
                    translate(z.,0) scale(0.5)
                    translate(-z M0,0 h-z,0) scale(0.5) translate(0,z)" />
                z</svg>)ú	no-repeatr^   T)r   ÚlayersÚclipped_boxesr   r&   r/   ÚcolorÚalphaÚ	set_colorÚpainting_arear3   r+   Úitemsr   Ú
fromstringr   r   ÚinsertÚreversedÚdraw_background_imageÚimage_rendering)r   Úbgr   r   r   r   rd   ÚxÚyÚwidthÚheightZ
half_bleedÚsvgÚtreeÚimageÚsizeÚpositionÚrepeatÚ	unboundedÚpositioning_arear`   Úlayerr    r    r!   r   š   sL   


&ÿÿ
ÿÿÿþýüþýûüÿûøø	÷	÷ýûø	÷û	÷øý

ÿþÿþÿÿüüúùþúúú
ö
öùþôôùôôññùïþïùïïëëþù

þr   c              	   C   s„  |j d u sd|jv rd S |j\}}}}|j\}}}	}
|j\}}|j\}}|j\}}|dkrÌ|dkrÌ|jsˆ|  ||||¡ |  ¡  |  	¡  | j
| jŽ }|j|| || d� |j  ||||¡ |  |j¡ d S |dkrät|d| ƒ}nJ|dv rò|}n<|dksþJ ‚t|	| ƒ}|dk�r*|	| |d  }d}n|	}|dk�rHt|d| ƒ}nN|dv �rX|}n>|dk�sfJ ‚t|
| ƒ}|dk�r’|
| |d  }d}n|
}t|| || d�}|| j }|  dd|||||¡}| 
dd||¡}t| ƒ�Œ |j  ||||¡ | |j¡ |  d¡ |  |j¡ |j�rH| j\}}}}|  |||| || ¡ n|  ||||¡ |  ¡  W d   ƒ n1 �sv0    Y  d S )	Nr   r^   ©ÚeÚfr   )ru   ÚroundÚspacer   ÚPattern)rr   rs   rd   rw   rt   ru   rv   r3   r&   r/   r6   r7   r:   ÚdrawrN   rL   Úmaxr   r	   ÚctmÚadd_patternr   Úset_color_spaceÚset_color_specialr+   )r   rx   rj   Ú
painting_xÚ
painting_yÚpainting_widthÚpainting_heightÚpositioning_xÚpositioning_yÚpositioning_widthÚpositioning_heightÚ
position_xÚ
position_yÚrepeat_xÚrepeat_yÚimage_widthÚimage_heightÚgroupZrepeat_widthÚ	n_repeatsZrepeat_heightÚmatrixÚpatternÚx1Úy1Úx2Úy2r    r    r!   ri   ý   st    ÿ




ÿ
ÿ




ÿ

ri   c                 C   s  t | |jƒ |jD ](}t | |jƒ |jD ]}t | |jƒ q(q|jD ]h}t | |jƒ |jD ]P}t | |jƒ |jD ]8}|jd dkp”|jd dkp”|j }|rnt | |jƒ qnqXqB|jd dkrÄt| |ƒS t| |ƒ |jD ]<}|jD ]0}|jD ]$}|jd dk�s|jsèt| |ƒ qèqÞqÔd S )NÚborder_collapseÚcollapseÚempty_cellsÚshow)r   r   Úcolumn_groupsrJ   r   ÚemptyÚdraw_collapsed_bordersr   )r   ÚtableÚcolumn_groupÚcolumnÚ	row_groupÚrowÚcellZdraw_cell_backgroundr    r    r!   rF   R  s2    




ÿý




rF   c                    sR  dd„ ˆj D ƒ}ˆj}|r|s"dS dd„ ˆj D ƒ‰
tˆjƒ‰t|ƒ‰t|ƒ‰ˆtˆƒks\J ‚ˆj\‰‰ˆ ˆd |d  ¡ ˆ
 ˆ
d |d  ¡ ˆj d jr°tˆj d j ƒ‰nd‰ˆj d jrÒtˆj d j ƒ‰nd‰ˆj	}|rê|ˆ ‰ nd‰ tˆƒ}|ˆ ‰‡ ‡‡‡‡fdd„‰	g ‰d‡‡‡	fd
d„	‰‡‡‡‡‡	‡
‡‡‡f	dd„}‡‡‡‡‡	‡
‡‡‡f	dd„}t
ˆƒD ]}||dƒ �qht
ˆƒD ]<}	|d|	ƒ t
ˆƒD ]"}||d |	ƒ |||	d ƒ �q˜�q‚ˆjt d¡d� ˆD ]v}
|
\}}}}}}t| ƒ�F |\}}}}t|||ƒ}t| |||| || |||ƒ W d  ƒ n1 �s@0    Y  �qÖdS )z/Draw borders of table cells when they collapse.c                 S   s   g | ]}|j D ]
}|j‘qqS r    )rJ   ro   ©rV   r¥   r¦   r    r    r!   Ú
<listcomp>r  s   
ÿz*draw_collapsed_borders.<locals>.<listcomp>Nc                 S   s   g | ]}|j D ]
}|j‘qqS r    )rJ   rŽ   r¨   r    r    r!   r©   y  s   
ÿr)   r   c                    sD   ˆr| ˆt |ƒ k r| S ˆr8| ˆˆ t |ƒ kr8| ˆ S | ˆ  S d S )N)Úint)rm   Ú
horizontal)Úbody_rows_offsetÚfooter_rowsÚfooter_rows_offsetÚgrid_heightÚheader_rowsr    r!   Ú
row_number•  s
    z*draw_collapsed_borders.<locals>.row_numberTc           
         s²   d}|D ] \}}|rFd|  ko&ˆ k n  oBd|  ko>ˆkn  }n0d|  koXˆ kn  otd|  kopˆk n  }|rˆ|| d�}| | | \}\}}	}t ||	ƒ}q|d S )Nr   ©r«   r   )r€   )
Zborder_listZyx_pairsÚverticalÚresultrm   rl   ÚinsideÚyyÚ_rn   )r¯   Ú
grid_widthr±   r    r!   Úhalf_max_width£  s    20z.draw_collapsed_borders.<locals>.half_max_widthc           
         sæ   ˆ|dd�}ˆ| |  \}\}}}|dks4|j dkr8d S ˆ |  }ˆ| }|dksVˆjsx|ˆˆ|| d f|| fgdd�8 }ˆ|d  }	|ˆd ks–ˆjsÀ|	ˆˆ|d | d f|d | fgdd�7 }	ˆ ||||d||d|	| ff¡ d S )NFr²   r   r   )r³   rR   )rb   Úskip_cell_border_topÚskip_cell_border_bottomÚappend)
rl   rm   r¶   Úscorer   rn   ra   Úpos_xÚpos_y1Úpos_y2©	Úcolumn_positionsr¯   r¹   Úhorizontal_bordersr±   Úrow_positionsÚsegmentsr¢   Úvertical_bordersr    r!   Úadd_vertical°  s$    ÿÿÿz,draw_collapsed_borders.<locals>.add_verticalc                    sâ   |dkrˆj rd S |ˆkr$ˆjr$d S ˆ|dd�}ˆ| |  \}\}}}|dksX|jdkr\d S ˆ| }ˆˆ|d | f|| fgƒ}ˆˆ|d | d f|| d fgƒ}	ˆ |  | }
ˆ | d  |	 }ˆ ||||d|
|||
 dff¡ d S )Nr   Tr²   r   rO   )rº   r»   rb   r¼   )rl   rm   r¶   r½   r   rn   ra   Úpos_yZshift_beforeZshift_afterÚpos_x1Úpos_x2rÁ   r    r!   Úadd_horizontalÁ  s     "ÿz.draw_collapsed_borders.<locals>.add_horizontalr   )rW   )T)rJ   Úcolumn_widthsÚlistrÂ   ÚlenÚcollapsed_border_gridr¼   Ú	is_headerÚ	is_footerÚskipped_rowsÚrangeÚsortÚoperatorÚ
itemgetterr   r   r   )r   r¢   Úrow_heightsrÌ   rÒ   Zoriginal_grid_heightrÇ   rË   rl   rm   Úsegmentr·   r   rn   ra   ÚsideZ
border_boxÚbxÚbyÚbwÚbhr    )r¬   rÂ   r­   r®   r¯   r¸   r¹   r°   rÃ   r±   rÄ   rÅ   r¢   rÆ   r!   r¡   p  s^    ÿÿ




r¡   c              	   C   sÈ   |j d dks|jr|jsdS t |¡\}}}}|dks@|dkrDdS t| ƒ�h |  d¡ | j||d� t| ƒ�( |j 	| |||j d ¡ W d  ƒ n1 sœ0    Y  W d  ƒ n1 sº0    Y  dS )zEDraw the given :class:`boxes.ReplacedBox` to a ``pdf.stream.Stream``.Ú
visibilityr%   Nr   r   ry   rj   )
r   rn   ro   r   Úreplacedbox_layoutr   rM   r:   Úreplacementr   )r   r   Ú
draw_widthÚdraw_heightZdraw_xZdraw_yr    r    r!   rI   å  s    


ÿrI   r&   Únonec                 C   sv  t |tƒr<|}tjtjtjf}t |j|ƒs.J ‚t| |ƒ �n6t| |ƒ t	| |j
ƒ t| |ƒ t |tjtjfƒ�r8d }t |tjƒrŽ|j}|j}n|j}d}	|r¬| j|ddd� t|jƒD ]p\}
}|
t|jƒd krÔ|}	t |tƒrä|}n||j |j }t |tjƒ�rt| ||||	ƒ q¶t| |||||	ƒ q¶|�rr|  ¡  n:t |tjƒ�rRt| |ƒ n t |tjƒ�sdJ ‚t| |||ƒ d S )Nrã   TÚLink)r#   Útagr   )r=   r
   r   r@   ÚInlineFlexBoxÚInlineGridBoxr   r   r   r   r   r   rG   rK   Útext_overflowÚblock_ellipsisÚlink_annotationr,   Ú	enumeraterJ   rÎ   r�   ÚTextBoxr   rH   r<   ÚInlineReplacedBoxrI   )r   r   r   Úoffset_xrè   ré   r   Zallowed_boxesrê   ÚellipsisÚirT   Zchild_offset_xr    r    r!   rH   ø  sD    



ÿ
rH   )TNr    )r   r&   rã   )&Ú__doc__rÕ   Úmathr   Ú	xml.etreer   Úformatting_structurer   Úimagesr   Úlayoutr   Zlayout.backgroundr   r•   r	   Zstackingr
   Úborderr   r   r   r   r   ra   r   Ústackr   Útextr   r"   r   r   ri   rF   r¡   rI   rH   r    r    r    r!   Ú<module>   s.   z
cUu  ÿ