o
    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 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$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)	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    Z/var/www/html/optinet_system/venv/lib/python3.10/site-packages/weasyprint/draw/__init__.py	draw_page   s   



r"   c              
   C   s^  |    |j}|jr$|jjd dkr$t| |j  |   |   |	 rn|jd rn|jd \}}}}|dkr<d}|dkrBd}|dkrJ|
 }|dkrR| }| | | | | || ||  |   |   |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tjfrt| | t| |j  t!| | |    |jd dkot|tj" }|rt| |  |   |   |j#D ]}	t$| |	 q|j%D ]}
t| |
 t|
tj&rt'| |
 qt| |
j  t!| |
 q|j(D ]}	t$| |	 qt|tj)r#t*| |j| t+|j| ||j,i |j-D ]}	t$| |	 q0|j.D ]}	t$| |	 q<W d   n	1 sPw   Y  t/| | |jd dk r| j0}|} |    | j1|jd d	d	d
 | 2| W d   n1 sw   Y  W d   dS W d   dS W d   dS 1 sw   Y  dS )z*Draw a ``stacking_context`` on ``stream``.overflowvisibleclipautor   opacityr   NT)strokefill)3stackedr   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
isinstancer   BlockBox	MarginBoxInlineBlockBoxTableCellBoxFlexContainerBoxGridContainerBoxReplacedBoxr   r   r   r   PageBoxnegative_z_contextsr   block_level_boxesTableBox
draw_tablefloat_contexts	InlineBoxdraw_inline_leveldraw_block_levelblocks_and_cellszero_z_contextspositive_z_contextsr   id	set_alphadraw_x_object)r   r   r   toprightbottomleftoriginal_streamr%   child_contextblockgroup_idr    r    r!   r      s   '









0
 ad$r   Tr    c              
   C   s  |du rdS |   u |r$|jd jD ]}t| | q|   |   |jjdkrt|  > |   * | 	|j |jd j
}| j|  |   |   | j|  |   W d   n1 s`w   Y  W d   n1 sow   Y  |rh|rh|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 qmW d   dS 1 sw   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   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,rQ   z hrT   z#" />
                  <path d="M0,rR   z/"
                        transform="translate(z2,0) scale(-1,1)" />
                  <path d="M0,rS   ,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-repeatrb   T)r*   layersclipped_boxesr   r%   r-   coloralphaartifact	set_colorpainting_arear1   r)   itemsjoinr   
fromstringr   r   insertreverseddraw_background_imageimage_rendering)r   bgr   r   r   r   ri   xywidthheight
half_bleedsvgtreeimagesizepositionrepeat	unboundedpositioning_areard   layerr    r    r!   r      sV  


 

		


		


$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sI| |||| | 	  | 
  | j| j }|j|| || d |j |||| | |j W d    d S 1 stw   Y  d S |dkrt|d| }n$|dv r|}n|dksJ 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||}|  y |  [ |j |||| |  ||j W d    n	1 s&w   Y  | d | |j |jrN| j\}}}}| |||| ||  n| |||| |   W d    n1 sew   Y  W d    d S W d    d S 1 s~w   Y  d S )	Nr   rb   efr   )r|   roundspacer   Pattern)ry   rz   ri   r~   r{   r|   rg   r}   r1   r%   r-   r4   r5   r8   drawrP   rN   maxr   r	   ctmadd_patternr*   set_color_spaceset_color_specialr)   )r   r   rp   
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!   ro      s~   









Tro   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_groupschildrenr   emptydraw_collapsed_bordersr   )r   tablecolumn_groupcolumn	row_grouprowcelldraw_cell_backgroundr    r    r!   rF   D  sB   










rF   c                    st  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 ]O}
|
\}}}}}}|\}}}}t|||}|  , |   t| |||| || ||| W d   n	1 s"w   Y  W d   n	1 s2w   Y  qdS )z/Draw borders of table cells when they collapse.c                 S      g | ]}|j D ]}|jqqS r    )r   ru   rZ   r   r   r    r    r!   
<listcomp>d      z*draw_collapsed_borders.<locals>.<listcomp>Nc                 S   r   r    )r   r   r   r    r    r!   r   k  r   rY   r   c                    s@   r| t | k r| S r|  t | kr|  S |   S )N)int)rs   
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resultrs   rr   insideyy_rt   )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   rT   )rf   skip_cell_border_topskip_cell_border_bottomappend)
rr   rs   r   scorer   rt   re   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   rQ   )r   r   rf   r   )rr   rs   r   r   r   rt   re   pos_yshift_beforeshift_afterpos_x1pos_x2r   r    r!   add_horizontal  s    "
z.draw_collapsed_borders.<locals>.add_horizontalr   )r[   )T)r   column_widthslistr   lencollapsed_border_gridr   	is_header	is_footerskipped_rowsrangesortoperator
itemgetterr   rg   r*   r   )r   r   row_heightsr   r   original_grid_heightr   r   rr   rs   segmentr   r   rt   re   side
border_boxbxbybwbhr    )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r   b  sj   



  r   c              	   C   s   |j d dks|jr|jsdS t|\}}}}|dks |dkr"dS |  = | d | j||d |   |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   rp   )
r   rt   ru   r   replacedbox_layoutr*   rO   r8   replacementr   )r   r   
draw_widthdraw_heightdraw_xdraw_yr    r    r!   draw_replacedbox  s    


"r   r%   nonec              	   C   s  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rt |tjrC|j}|j}d}t|jD ]M\}	}
|	t|jd krY|}t |
tra|}n||
j |j }t |
tjr| |
d t| |
||| W d    n1 sw   Y  qJt| ||
||| qJd S t |tjr| |d t| | W d    d S 1 sw   Y  d S t |tjsJ t| ||| d S )Nr   r   SpanFigure)r:   r
   r   r=   InlineFlexBoxInlineGridBoxr   r   r   r   r   r   rH   LineBoxtext_overflowblock_ellipsis	enumerater   r   r   TextBoxmarkedr   rI   InlineReplacedBoxr   )r   r   r   offset_xr   r   r   allowed_boxesellipsisichildchild_offset_xr    r    r!   rI     sH   




"rI   c              	   C   s   |  D ]D\}}t|tjr*||d t|| W d    n1 s$w   Y  n|jrBt|jd tjrB|jD ]}t|| | q9t	| || qd S )Nr   rY   )
rj   r:   r   rA   r  r   r   r   rI   rJ   )r   r   rK   rW   r	  r    r    r!   rJ     s   
rJ   )TNr    )r   r%   r   )%__doc__r   mathr   	xml.etreer   formatting_structurer   imagesr   layoutr   layout.backgroundr   r   r	   stackingr
   borderr   r   r   r   r   re   r   textr   r"   r   r   ro   rF   r   r   rI   rJ   r    r    r    r!   <module>   s0    
lcVu
(