a
    [XhY                     @   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   Zcanvas_backgroundr   draw_stacking_context)pagestreamr   stacking_context r   ]/var/www/viveiro_mudafortebrasil/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)mcidZoverflowvisibleclipautor   Zopacityr   N)Zstrokefill)6r   r   begin_marked_contentZis_for_root_elementr   r   r   Zrounded_padding_boxr$   endZis_absolutely_positionedZborder_heightZborder_width	rectangleZborder_box_xZborder_box_y	add_grouppage_rectangleZtransformation_matrixZdeterminant	transformvaluesend_marked_content
isinstancer   ZBlockBoxZ	MarginBoxInlineBlockBoxZTableCellBoxZFlexContainerBoxZReplacedBoxr   r   r   r   ZPageBoxZnegative_z_contextsr   Zblock_level_boxesZ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childZ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">
            Zcropz
                  <path d="M0,r;   z hr>   z#" />
                  <path d="M0,r<   z/"
                        transform="translate(z2,0) scale(-1,1)" />
                  <path d="M0,r=   ,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)" />
                Z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-repeatrG   T)r   Zlayersclipped_boxesr   r$   r)   coloralphaZ	set_colorpainting_arear*   r'   itemsr   
fromstringr   r   insertreverseddraw_background_imageimage_rendering)r   bgr   r   r   r   rK   xywidthheightZ
half_bleedsvgtreeimagesizepositionrepeat	unboundedpositioning_arearH   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   rG   efr   )r\   roundspacer   Pattern)rY   rZ   rK   r^   r[   r\   r]   r*   r$   r)   r+   r,   r-   drawr:   r8   maxr   r	   ZctmZadd_patternr   Zset_color_spaceZset_color_specialr'   )r   r_   rQ   Z
painting_xZ
painting_yZpainting_widthZpainting_heightZpositioning_xZpositioning_yZpositioning_widthZpositioning_height
position_x
position_yZrepeat_xZrepeat_yZimage_widthZimage_heightgroupZrepeat_widthZ	n_repeatsZrepeat_heightmatrixpatternx1y1Zx2y2r   r   r    rP      st    












rP   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 )NZborder_collapseZcollapseZempty_cellsshow)r   r   Zcolumn_groupsr6   r   emptydraw_collapsed_bordersr   )r   tableZcolumn_groupcolumn	row_grouprowcellZdraw_cell_backgroundr   r   r    r2   R  s2    









r2   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   )r6   rV   rA   ru   rv   r   r   r    
<listcomp>r  s   
z*draw_collapsed_borders.<locals>.<listcomp>Nc                 S   s   g | ]}|j D ]
}|jqqS r   )r6   ri   rx   r   r   r    ry   y  s   
r&   r   c                    sD   r| t | k r| S r8|  t | kr8|  S |   S d S )N)int)rT   
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   )rg   )
Zborder_listZyx_pairsverticalresultrT   rS   Zinsideyy_rU   )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   r>   )rJ   skip_cell_border_topskip_cell_border_bottomappend)
rS   rT   r   scorer   rU   rI   Zpos_xZpos_y1Zpos_y2	column_positionsr   r   horizontal_bordersr   row_positionssegmentsrs   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   r;   )r   r   rJ   r   )rS   rT   r   r   r   rU   rI   Zpos_yZshift_beforeZshift_afterZpos_x1Zpos_x2r   r   r    add_horizontal  s     "z.draw_collapsed_borders.<locals>.add_horizontalr   )rB   )T)r6   column_widthslistr   lenZcollapsed_border_gridr   Z	is_headerZ	is_footerskipped_rowsrangesortoperator
itemgetterr   r   r   )r   rs   Zrow_heightsr   r   Zoriginal_grid_heightr   r   rS   rT   segmentr   r   rU   rI   ZsideZ
border_boxbxZbyZbwZbhr   )r|   r   r}   r~   r   r   r   r   r   r   r   r   rs   r   r    rr   p  s^    




rr   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``.Z
visibilityr#   Nr   r   r`   rQ   )
r   rU   rV   r   Zreplacedbox_layoutr   r9   r-   replacementrf   )r   r   Z
draw_widthZdraw_heightZdraw_xZdraw_yr   r   r    r5     s    


r5   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   )r0   r
   r   r1   ZInlineFlexBoxZInlineGridBoxr   r   r   r   r   r   r3   r7   text_overflowblock_ellipsislink_annotationr(   	enumerater6   r   rh   ZTextBoxr   r4   r/   ZInlineReplacedBoxr5   )r   r   r   Zoffset_xr   r   r   Zallowed_boxesr   Zellipsisir@   Zchild_offset_xr   r   r    r4     sD    




r4   )TNr   )r   r$   r   )&__doc__r   mathr   Z	xml.etreer   Zformatting_structurer   Zimagesr   Zlayoutr   Zlayout.backgroundr   rk   r	   Zstackingr
   Zborderr   r   r   r   r   rI   r   stackr   textr   r!   r   r   rP   r2   rr   r5   r4   r   r   r   r    <module>   s.   z
cUu  