a
    QhY                     @   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rd}|dkrd}|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rt| | t | |j! t"| | t |  |jd dkot|tj# }|rt| |  |   | 	  |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rt-| |
 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 s0    Y  |   W d
   n1 s0    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rt | T | |j |jd j	}| j
|  |   |   | j
|  |   W d   n1 s0    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|
 d4I7 }|d57 }t|}t|dd| }|	|
f}||f}d6}d7}|| }dd|	|
f}g }t||||||||}|jd| t|jD ]}t| ||j qW d   n1 s0    Y  dS )8zDraw 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rt|d| }nJ|dv r|}n<|dksJ 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rt| |S t| | |jD ]<}|jD ]0}|jD ]$}|jd dks|jst| | qqqd 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rtj d j ndj d jrt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  qd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 s0    Y  W d   n1 s0    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| ||||	 qt| |||||	 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  