o
    Zh0hY                     @   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
   	from_pagedraw_backgroundbox
backgroundr   r   canvas_backgroundr   draw_stacking_context)pagestreamr   stacking_context r!   N/var/www/html/rh/venv/lib/python3.10/site-packages/weasyprint/draw/__init__.py	draw_page   s   



r#   c              	   C   s  t |  |j}| j|dd |jr+|jjd dkr+t| |j  |   | 	  |
 ru|jd ru|jd \}}}}|dkrCd}|dkrId}|dkrQ| }|dkrY| }| | | | | || ||  |   | 	  |jd d	k r| }| j| j } |jr|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(| |
 qt | |
j! t"| |
 q|j)D ]}	t%| |	 qt|tj*r-t+| |j| |g|j,R D ]B}
t|
tjrDt-| |
 q4|
j.ru|
|krT| j|
dd t|
j.d tj/rl|
j.D ]
}t+| |j| qa|
|kru|   q4|j0D ]}	t%| |	 qz|j1D ]}	t%| |	 qW d
   n	1 sw   Y  t2| | |jd d	k r| j3}|} t |  | j4|jd ddd | 5| W d
   n	1 sw   Y  |   W d
   d
S 1 sw   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   PageBoxnegative_z_contextsr   block_level_boxesTableBox
draw_tablefloat_contexts	InlineBoxdraw_inline_levelblocks_and_cellsdraw_replacedboxchildrenLineBoxzero_z_contextspositive_z_contextsr   id	set_alphadraw_x_object)r   r    r   toprightbottomleftoriginal_streamr'   child_contextblockchildgroup_idr!   r!   r"   r       s   *












9

$r   Tr!   c              
   C   s  |du rdS t | a |r$|jd jD ]}t| | q|   |   |jjdkr`t | * | |j |jd j	}| j
|  |   |   | j
|  |   W d   n1 s[w   Y  |rT|rT|jd j	\}}}	}
dd | D }d|
 d|	 d}d	|v r(|d
g 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7 }d|v r|d
g 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|d  d1|	 d2|d  d|
 d&|d  d%|d  d-|d  d3|d  d1|	 d4|
 d57 }|d67 }t|}t|dd| }|	|
f}||f}d7}d8}|| }dd|	|
f}g }t||||||||}|jd| t|jD ]
}t| ||j qYW d   dS 1 spw   Y  dS )9zDraw 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>   s    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">
            crop z
                  <path d="M0,rV   z hrY   z#" />
                  <path d="M0,rW   z/"
                        transform="translate(z2,0) scale(-1,1)" />
                  <path d="M0,rX   ,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-repeatrg   T)r   layersclipped_boxesr   r'   r0   coloralpha	set_colorpainting_arear4   r,   itemsjoinr   
fromstringr   r   insertreverseddraw_background_imageimage_rendering)r   bgr   r   r   r   rm   xywidthheight
half_bleedsvgtreeimagesizepositionrepeat	unboundedpositioning_areari   layerr!   r!   r"   r      sR  





		


		


$r   c              	   C   s|  |j d u s
d|jv rd S |j\}}}}|j\}}}	}
|j\}}|j\}}|j\}}|dkrf|dkrf|jsD| |||| |   | 	  | j
| j }|j|| || d |j |||| | |j d S |dkrrt|d| }n$|dv ry|}n|dksJ t|	| }|dkr|	| |d  }d}n|	}|dkrt|d| }n$|dv r|}n|dksJ t|
| }|dkr|
| |d  }d}n|
}t|| || d}|| j }| dd|||||}|
dd||}t| G |j |||| ||j | d | |j |jr| j\}}}}| |||| ||  n| |||| |   W d    d S 1 s7w   Y  d S )	Nr   rg   efr   )r   roundspacer   Pattern)r}   r~   rm   r   r   r   r   r4   r'   r0   r7   r8   r;   drawrU   rS   maxr   r	   ctmadd_patternr   set_color_spaceset_color_specialr,   )r   r   rt   
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grouprepeat_width	n_repeatsrepeat_heightmatrixpatternx1y1x2y2r!   r!   r"   rs      sv   









$rs   c                 C   s  t | |j |jD ]}t | |j |jD ]}t | |j qq	|jD ]4}t | |j |jD ](}t | |j |jD ]}|jd dkpJ|jd dkpJ|j }|rSt | |j q7q,q!|jd dkrbt| |S t| | |jD ]}|jD ]}|jD ]}|jd dks|jst| | qtqoqjd S )Nborder_collapsecollapseempty_cellsshow)r   r   column_groupsrO   r   emptydraw_collapsed_bordersr   )r   tablecolumn_groupcolumn	row_grouprowcelldraw_cell_backgroundr!   r!   r"   rI   R  sB   










rI   c                    sJ  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rXtj d j ndj d jritj d j ndj	}|ru|  nd t}|  fdd	g d	fd
d		
f	dd}	
f	dd}t
D ]}||d qt
D ]}	|d|	 t
D ]}||d |	 |||	d  qqjtdd D ]:}
|
\}}}}}}t| # |\}}}}t|||}t| |||| || ||| W d   n	1 sw   Y  qdS )z/Draw borders of table cells when they collapse.c                 S      g | ]}|j D ]}|jqqS r!   )rO   ry   r_   r   r   r!   r!   r"   
<listcomp>r      z*draw_collapsed_borders.<locals>.<listcomp>Nc                 S   r   r!   )rO   r   r   r!   r!   r"   r   y  r   r*   r   c                    s@   r| t | k r| S r|  t | kr|  S |   S )N)int)rw   
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 ]P\}}|r#d|  ko k n  o!d|  kokn  }nd|  ko, kn  o:d|  ko8k n  }|rT|| d}| | | \}\}}	}t ||	}q|d S )Nr   r   r   )r   )
border_listyx_pairsverticalresultrw   rv   insideyy_rx   )r   
grid_widthr   r!   r"   half_max_width  s   20
z.draw_collapsed_borders.<locals>.half_max_widthc           
         s   |dd}| |  \}\}}}|dks|j dkrd S  |  }| }|dks+js<||| d f|| fgdd8 }|d  }	|d ksKjs`|	|d | d f|d | fgdd7 }	||||d||d|	| ff d S )NFr   r   r   )r   rY   )rk   skip_cell_border_topskip_cell_border_bottomappend)
rv   rw   r   scorer   rx   rj   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s,|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   rV   )r   r   rk   r   )rv   rw   r   r   r   rx   rj   pos_yshift_beforeshift_afterpos_x1pos_x2r   r!   r"   add_horizontal  s    "
z.draw_collapsed_borders.<locals>.add_horizontalr   )r`   )T)rO   column_widthslistr   lencollapsed_border_gridr   	is_header	is_footerskipped_rowsrangesortoperator
itemgetterr   r   r   )r   r   row_heightsr   r   original_grid_heightr   r   rv   rw   segmentr   r   rx   rj   side
border_boxbxbybwbhr!   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r"   r   p  sf   




 r   c              	   C   s   |j d dks|jr|jsdS t|\}}}}|dks |dkr"dS t| = | d | j||d t|  |j	| |||j d  W d   n1 sNw   Y  W d   dS W d   dS 1 sfw   Y  dS )zEDraw the given :class:`boxes.ReplacedBox` to a ``pdf.stream.Stream``.
visibilityr&   Nr   r   r   rt   )
r   rx   ry   r   replacedbox_layoutr   rT   r;   replacementr   )r   r   
draw_widthdraw_heightdraw_xdraw_yr!   r!   r"   rN     s    


"rN   r'   nonec                 C   st  t |tr|}tjtjtjf}t |j|sJ t| | d S t| | t	| |j
 t| | t |tjtjfrd }t |tjrF|j}|j}n|j}d}	|rU| j|ddd t|jD ]7\}
}|
t|jd kri|}	t |trq|}n||j |j }t |tjrt| ||||	 qZt| |||||	 qZ|r|   d S d S t |tjrt| | d S t |tjsJ t| ||| d S )Nr   TLink)r$   tagr   )r>   r
   r   rA   InlineFlexBoxInlineGridBoxr   r   r   r   r   r   rK   rP   text_overflowblock_ellipsislink_annotationr-   	enumeraterO   r   r   TextBoxr   rL   r=   InlineReplacedBoxrN   )r   r   r   offset_xr   r  r    allowed_boxesr  ellipsisir]   child_offset_xr!   r!   r"   rL     sF   



rL   )TNr!   )r   r'   r   )&__doc__r   mathr   	xml.etreer   formatting_structurer   imagesr   layoutr   layout.backgroundr   r   r	   stackingr
   borderr   r   r   r   r   rj   r   stackr   textr   r#   r   r   rs   rI   r   rN   rL   r!   r!   r!   r"   <module>   s0    
zcUu