
    ,gY                         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 Zd ZddZ d Z!d Z"d Z#d Z$	 	 ddZ%y)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                     | j                   d   }t        j                  |       }t        ||j                  j
                  d| j                  |       t        ||        t        || j                  d       t        ||        t        ||       y)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_contexts       p/home/viktor/gitlab-persoonlijk/factuur-applicatie/venv/lib/python3.12/site-packages/weasyprint/draw/__init__.py	draw_pager$      sy    JJwE&006 $$//%tzz FD!FD22UC&"23    c           
          t        |       5  |j                  }| j                  |d       |j                  r`|j                  j
                  d   dk7  rDt        | |j                  j                                | j                          | j                          |j                         r|j
                  d   r|j
                  d   \  }}}}|dk(  rd}|dk(  rd}|dk(  r|j                         }|dk(  r|j                         }| j                  |j                         |z   |j                         |z   ||z
  ||z
         | j                          | j                          |j
                  d   d	k  r| } | j                   | j"                   } |j$                  rT|j$                  j&                  r$ | j(                  |j$                  j*                    n| j-                          	 d
d
d
       y
t/        |t0        j2                  t0        j4                  t0        j6                  t0        j8                  t0        j:                  t0        j<                  f      r.t?        | |       tA        | |jB                         tE        | |       t        |       5  |j
                  d   dk7  xr t/        |t0        jF                         }|r:t        | |j                                | j                          | j                          |jH                  D ]  }	tK        | |	        |jL                  D ]W  }
t?        | |
       t/        |
t0        jN                        rtQ        | |
       6tA        | |
jB                         tE        | |
       Y |jR                  D ]  }	tK        | |	        t/        |t0        jT                        rtW        | |j                  |       |g|jX                  D ]  }
t/        |
t0        j<                        rt[        | |
       *|
j\                  s7|
|k7  r| j                  |
d       t/        |
j\                  d   t0        j^                        r(|
j\                  D ]  }tW        | |j                  |        |
|k7  s| j-                           |j`                  D ]  }	tK        | |	        |jb                  D ]  }	tK        | |	        	 d
d
d
       te        | |       |j
                  d   d	k  rT| jf                  }} t        |       5  | ji                  |j
                  d   dd       | jk                  |       d
d
d
       | j-                          d
d
d
       y
# 1 sw Y   xY w# 1 sw Y   .xY w# 1 sw Y   y
xY w)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_ids                r#   r   r       s    
 t$""##Cd#3 "" %%++J79D 0 5 5 I I KLKKMJJL'')cii.?'*yy'8$Cf}**,v~'')  "U*C,<,<,>,Dufsl, KKMJJL99Y!#$O%V%%v'<'<=F$$((44   #";";"B"BC))+Kt$ t$T cENNEOO!00%2D2D!22E4E4EG H FC(FCNN3$V_ 6	= 		*%2 3sEMM22   FC$;$;$=>

 "2!E!E =%fm<= *;; /.eU^^4vu-#FE,<,<=./ "2!@!@ =%fm<= #u/!&*:*?*?E B 0 A AB 
4eU%6%67$VU3^^|33E3E!%.."4emmD%*^^ TE-f6F6K6KUST|113
4 "2!A!A =%fm<= "2!E!E =%fm<=k6	=r 	VS!99Y!#yyH$F /  9!5d N$$X./ 	!!#it$ t$d6	= 6	=|/ /at$ t$sR   GU4,BU4FUA,U<AU	?U43U(;U4U%	!U4(U1	-U44U=c                     |yt        |       5  |rJ|j                  d   j                  D ]  }t        | |        | j	                          | j                          |j                  j                  dkD  rt        |       5  | j                  |j                         |j                  d   j                  } | j                  |  | j	                          | j                           | j                  |  | j                          ddd       |r|r|j                  d   j                  \  }}}	}
|j                         D ci c]  \  }}||dz   }}}d|
 d|	 d}d|v r|d	j                  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      z  }d|v r|d	j                  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.|
 d/|d    d0|	 d1|d    d|
 d%|d    d$|d    d,|d    d2|d    d0|	 d3|
 d4      z  }|d5z  }t        j                  |      }t!        |dd|       }|	|
f}||f}d6}d7}||z   }dd|	|
f}g }t#        ||||||||      }|j                  j%                  d|       t'        |j                        D ]  }t)        | ||j*                          	 ddd       y# 1 sw Y   xY wc c}}w # 1 sw Y   yxY w)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   g      ?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,rY   z hr\   z#" />
                  <path d="M0,rZ   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)" />
                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*   r3   coloralpha	set_colorpainting_arear7   r/   itemsjoinr   
fromstringr   r	   insertreverseddraw_background_imageimage_rendering)r!   bgr   r   r   r   rm   xywidthheightkeyvalue
half_bleedsvgtreeimagesizepositionrepeat	unboundedpositioning_areari   layers                           r#   r   r      s    
z	 VEyy}22 )FC()KKMJJL 88>>A   * "		" ; ;   -0

   -0 U"$))B-"="=Aq%=B[[]KzsE#us{*KJK"89UG 4C
     $U|n,./9&/A.BC$U|n,./9'/B.CD. /4W5  %X/	 02	 3=W2E1F	G.	
 /4W
 56
 7=X
>  %X/ 02 3=V2D1EF0 17x8 #6]O ,0 1;50A/BC #7^, -1 2<H1E0FG. /4W 56 7=X> #6]O ,0 1;80D/EF0 17x8 #7^, -1 2<E1B0CD. /4W5   %    (/01  %w&'(25(9':;9 :?@ "%()	 *+	 ,6e+<*=	 >@	 AFe~	N	
 !<.
) )234! "()  %g &( )38(<'=> )23 46 7A6J5KL Ho& '/ 05X.?@! "( )@ AFwG )012  *&12 34 5;8< (/0 13 4>f3E2FG Fm_ %, -2&M?;7  8>h! ?!" )12#"3#$  %g%$& %& !+7 34'& 56'& 7=X'&>'( )12)( 35)( 6@5H4I)(J)* Gn%+* &.+* /4Gn-=+*>+,  %g-, &A-, BH-,I- 0 8OC))#.DT4v6E6?D1vH/FI$tOM !1eV4M#tXvy- -1E IIQ&bii( 	EE!&%1C1CD	EkVE VE  L+VE VEs2   A1O4 BO!?O4O.JO4!O+	&O44O=c           	         |j                   d|j                  v ry |j                  \  }}}}|j                  \  }}}	}
|j                  \  }}|j
                  \  }}|j                  \  }}|dk(  r|dk(  r|j                  s4| j                  ||||       | j                          | j                           | j                  | j                   }|j                  ||z   ||z          |j                   j                  ||||       | j                  |j                         y |dk(  rt!        |d|z        }n1|dv r|}n*|dk(  sJ t#        |	|z        }|dk\  r|	|z
  |dz
  z  }d}n|	}|dk(  rt!        |d|z        }n1|dv r|}n*|dk(  sJ t#        |
|z        }|dk\  r|
|z
  |dz
  z  }d}n|
}t%        ||z   ||z         }|| j&                  z  }| j)                  dd|||||      }|j                  dd||      }t+        |       5  |j                   j                  ||||       |j                  |j                         | j-                  d       | j/                  |j                         |j                  r,| j                  \  }}}}| j                  ||||z
  ||z
         n| j                  ||||       | j1                          d d d        y # 1 sw Y   y xY w)	Nr   rg   efr   )r   roundspacer   Pattern)r   r   rm   r   r   r   r   r7   r*   r3   r:   r;   r>   drawrX   rV   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y2s                              r#   rs   rs      s   {{a5::o>C>Q>Q;J
NO HM="35G"^^J
Hh %

K;8{#: Z^,.KKMJJL !  &"7"78*}4%5 	 	7\?KUXX&;
 ;N(:;	(	("7"""+k9:	>
 .;	ANLJ -L ;L!o*=>	(	($7""",|;<	>/,>9q=QMJ.Mj=0J4NOF
fjjF  	1k<}fNGaL-@E	 
\?Kehh'y)  ,??#22NBBRR"Wb2g6Z^_U
 
 
s   CKKc                 6   t        | |j                         |j                  D ]?  }t        | |j                         |j                  D ]  }t        | |j                          A |j                  D ]  }t        | |j                         |j                  D ]w  }t        | |j                         |j                  D ]P  }|j                  d   dk(  xs! |j                  d   dk(  xs |j
                   }|s;t        | |j                         R y  |j                  d   dk(  rt        | |      S t        | |       |j                  D ]O  }|j                  D ]>  }|j                  D ]-  }|j                  d   dk(  s|j
                  r"t        | |       / @ Q y )Nborder_collapsecollapseempty_cellsshow)r   r   column_groupsrR   r   emptydraw_collapsed_bordersr   )r!   tablecolumn_groupcolumn	row_grouprowcelldraw_cell_backgrounds           r#   rL   rL   R  s   FE,,-++ 7 7 78"++ 	7FFF$5$56	77 ^^ 
=		 4 45%% 	=CFCNN3 =KK 12j@ #JJ}-7#

N % (#FDOO<=	=
= {{$%3%fe44^^ .	%% 	.C .::m,6djj-.	..r%   c                    !"# j                   D cg c]  }|j                   D ]  }|j                   ! }}}j                  }|r|syj                   D cg c]  }|j                   D ]  }|j                   ! c}}!t	        j
                        t        |      t        |      t              k(  sJ j                  \  #j                  d   |d   z          !j                  !d   |d   z          j                   d   j                  r#t        j                   d   j                         ndj                   d   j                  r#t        j                   d   j                         ndj                  }|r|z
  ndt        #      }|z
  fd g "d
 fd	 !"#f	d} !"#f	d}	t              D ]  }
 |	|
d        t              D ]3  } |d|       t              D ]  }
 ||
dz   |        |	|
|dz           5 "j                  t        j                  d      	       "D ]K  }|\  }}}}}}t!        |       5  |\  }}}}t#        |||      }t%        | ||||z   ||z   |||       ddd       M yc c}}w c c}}w # 1 sw Y   dxY w)z/Draw borders of table cells when they collapse.Nr-   r   c                 n    r| t        |      z   k  r| S r| z
  t        |      z
  k\  r| z   S | z   S )N)int)rw   
horizontalbody_rows_offsetfooter_rowsfooter_rows_offsetgrid_heightheader_rowss     r#   
row_numberz*draw_collapsed_borders.<locals>.row_number  sM    1{S_<<HQ+";c*o"MM))) '''r%   c                    d}|D ]u  \  }}|r#d|cxk  xr 
k  nc xr d|cxk  xr k  nc }n"d|cxk  xr 
k  nc xr d|cxk  xr k  nc }|sP ||       }| |   |   \  }\  }}	}t        ||	      }w |dz  S )Nr   r   r   )r   )border_listyx_pairsverticalresultrw   rv   insideyy_rx   r   
grid_widthr   s             r#   half_max_widthz.draw_collapsed_borders.<locals>.half_max_width  s     	,DAqa-+-F!q2FJ2Fa.;.F13FJ3F(l;#.r?1#5 =AuaVU+	, zr%   c                 t  	  |d      }|   |    \  }\  }}}|dk(  s|j                   dk(  ry 
|    }|   }|dk7  sj                  s| || dz
  f|| fgd      z  }|dz      }	|dz
  k7  sj                  s|	 |dz   | dz
  f|dz   | fgd      z  }	j                  ||||d||d|	|z
  ff       y )NFr   r   r   )r   r\   )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_borderss             r#   add_verticalz,draw_collapsed_borders.<locals>.add_vertical  s   e,'7';A'>$$ueA:) #q!633n"aQZ!Q$85J JFq1u%au'D'Dn"a!eQU^a!eQZ$@5R RF5%6F?0SU 	Vr%   c                 j  	 |dk(  rj                   ry |k(  rj                  ry  |d      }|   |    \  }\  }}}|dk(  s|j                  dk(  ry |   } |dz
  | f|| fg      } |dz
  | dz   f|| dz   fg      }	|    |z
  }
| dz      |	z   }j                  ||||d|
|||
z
  dff       y )Nr   Tr   r   rY   )r   r   rk   r   )rv   rw   r   r   r   rx   rj   pos_yshift_beforeshift_afterpos_x1pos_x2r   r   r   r   r   r   r   r   r   s               r#   add_horizontalz.draw_collapsed_borders.<locals>.add_horizontal  s   6e00 = =d+'9"'=a'@$$ueA:)a %&6!a%aV8LM$%5QAAPQE
7ST!!$|3!!a%(;65%vPQ/RT 	Ur%   r   )rz   )T)rR   ry   column_widthsr   listr   lencollapsed_border_gridr   	is_header	is_footerskipped_rowsrangesortoperator
itemgetterr   r   r   )$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   s$    `                     @@@@@@@@@@@@@r#   r   r   p  s    %*NN' %%' 	

''K ' ''MM(-'$%%' 	''M E223k"K]#J-....+0+F+F((,R0=3DDEr*[_<=~~a""%..+445~~b##%..,556%%L'+5/0-;
( 
( HV V"U U" : q!; %Qz" 	%AQ"1a!e$	%% MMh))!,M- M3:05%jV_ 	M'NBB t4Efb"b2grBwueL	M 	MMW''L	M 	Ms   $J*%$J02-J66J?	c           	         |j                   d   dk7  s|j                  r|j                  syt        j                  |      \  }}}}|dk  s|dk  ryt        |       5  | j                  d       | j                  ||       t        |       5  |j                  j                  | |||j                   d          ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)zEDraw the given :class:`boxes.ReplacedBox` to a ``pdf.stream.Stream``.
visibilityr)   Nr   r   r   rt   )
r   rx   ry   r   replacedbox_layoutr   rW   r>   replacementr   )r!   r   
draw_widthdraw_heightdraw_xdraw_ys         r#   rQ   rQ     s    
yy)+399CJJ.6.I.I#.N+JVVQ+*	 O6V,V_ 	O OO  
K;L1MO	OO O	O 	OO Os$   0C,C	8C	C	CCc           	      D   t        |t              rV|}t        j                  t        j                  t        j
                  f}t        |j                  |      sJ t        | |       y t        | |       t        | |j                         t        | |       t        |t        j                  t        j                  f      rd }t        |t        j                        r|j                  }|j                  }n|j                   }d}	|r| j#                  |dd       t%        |j&                        D ]  \  }
}|
t)        |j&                        dz
  k(  r|}	t        |t              r|}n||j*                  z   |j*                  z
  }t        |t        j,                        rt/        | ||||	       |t1        | |||||	        |r| j3                          y y t        |t        j4                        rt7        | |       y t        |t        j,                        sJ t/        | |||       y )NnoneTLink)r'   tagr   )rA   r   r   rD   InlineFlexBoxInlineGridBoxr   r   r   r   r   r   rN   rS   text_overflowblock_ellipsislink_annotationr0   	enumeraterR   r   r   TextBoxr   rO   r@   InlineReplacedBoxrQ   )r!   r    r   offset_xr  r  r"   allowed_boxesr  ellipsisir`   child_offset_xs                r#   rO   rO     s   #'--u/B/BEDWDWX*..>>>f&67$/FC cEOOU]];<"O#u}}- # 1 1!$!3!3"%"5"5H++Cd+G%cll3 V5CLL)A---He_5%-N%-0@0@%@3>>%QNeU]]3fe^]HU%e^]HVV ))+ U445VS)c5==111fc8];r%   )TN )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   rL   r   rQ   rO   r  r%   r#   <module>r     so    F   ! (   /  & V V   
4w$t`EFRj.<rMjO& DJ%+)<r%   