
    ,gQ                         d Z ddlmZ ddlmZmZ ddlmZ ddlmZm	Z	 ddl
mZmZmZmZmZ d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zy)u?   Parse and draw definitions: gradients, patterns, masks, uses…    )cycle)ceilhypot   )Matrix   )bounding_boxis_valid_bounding_box)alpha_valuecolor	parse_urlsize	transformc                    ddl m} t        |j                  | j                              }t        | j                        }|j
                  dk(  rt        d      }|d d dk(  xs |d d |d d k(  }|j                  r|r|j                  | j                  v r)| j                  |j                     j                         }|S 	 | j                  j                  |j                        j                         }|| j                  |j                  <   |S |j                         }	 | j                  |      }	 ||	|      }
|
j                  |       |
j                  }|S # t        $ r Y y w xY w# t        $ r Y y w xY w)Nr   )SVGdata    )r   r   r   )r   r   r   get_hrefurlschemefragment	use_cachecopytree	get_child	Exceptiongeturlurl_fetcherget_intrinsic_size)svgnode	font_sizer   
parsed_urlsvg_urlsame_originr   r   bytestring_svguse_svgs              k/home/viktor/gitlab-persoonlijk/factuur-applicatie/venv/lib/python3.12/site-packages/weasyprint/svg/defs.pyget_use_treer*      sg   4==12J G~~B-2A,& 	&2A'"1+%  {#--/==!4!45::<D& K#:xx))**=*=>CCE 6:j112 K !	  __S1N.#.G &&y1<<DK    		s$   ?3E E& 	E#"E#&	E21E2c                    | j                  |j                  d      |j                  d      |      \  }}dD ]  }||j                  v s|j                  |=   t        | ||      x}y|j                  dv rd|j                  v rGd|j                  v r9|j                  d   |j                  d<   |j                  d   |j                  d<   n[d|j
                  _        t        | ||d	
      }t        |      r0|d   |d   z   |j                  d<   |d   |d   z   |j                  d<   d|j
                  _        |j                  |       |j                  t        |f             | j                  j                  ||       y)zDraw use tags.xy)r,   r-   viewBoxmaskN)r!   symbolwidthheightgTstroker   r   r   r   r!   ef)pointgetattribr*   tag_etree_noder	   r
   cascadeoverride_iteriterstreamr   )r!   r"   r#   r,   r-   	attributer   boxs           r)   userD   -   s[   99TXXc]DHHSM9=DAq2 '	#I&' S$	22;xx$$ dkk!h$++&=#';;w#7DKK $(KK$9DKK!#&D sD)DAC$S)'*1vAG$(+AQH%$LLtTG}%JJ1"    c                     || j                   v rt        | || j                   |   |||      S || j                  v rt        | || j                  |   |||      S y)zDraw given gradient or pattern.N)	gradientsdraw_gradientpatternsdraw_pattern)r!   r"   namer#   opacityr5   s         r)   draw_gradient_or_patternrM   K   si    s}}s}}T*IwH 	H		s||D)9gvG 	G 
rE   c                   67 g }g }|D ]  }|j                  t        |r|d   ndt        |j                  d      |d                   t	        |j                  dd            |z  }	t        |j                  dd            }
|
xj                  |	z  c_        |j                  |
        |syt        |      dk(  r| j                  j                  |d          y	| j                  |||      }t        |      sy|j                  d
      dk(  r#| j                  | j                  }}t               }nd\  }}|\  }}}}t        ||||      }|j                  dd      }|dv r]|d   dkD  r'|j                  dd       |j                  d|d          |d   dk  r|j                  d       |j                  |d          n|d   |d   k(  rO|j                   dk(  r|j                  dd       n|j                  d|d   dz
         |j                  d|d          |d   |d   k(  r+|j                  |d   dz          |j                  |d          d|j"                  v r+t%        |j                  d      || j&                        }||z  }|j                   dk(  rd}t        |j                  dd      ||      t        |j                  dd      ||      }}t        |j                  dd      ||      t        |j                  dd      ||      }}t)        |||||||||	      \  }}}n|j                   dk(  sJ d}t        |j                  dd      ||      t        |j                  dd      ||      }}t        |j                  dd      |t+        ||            }t        |j                  d |      ||      t        |j                  d!|      ||      }}t        |j                  d"d      |t+        ||            } t-        |||||| ||||||      \  }}}|D !cg c]  }!|!d   	 }"}!t/        t        |"      dz
        D #cg c]  }#|"|#   |"|#dz      f }$}#t/        t        |      dz
        D #cg c]  }#||#   d#d ||#dz      d#d dg }%}#t1        |"      D ]D  \  }#}&|&dk(  s|#dkD  r|%|#dz
     d   |%|#dz
     d<   |#t        |      dz
  k  s7|%|#   d   |%|#   d<   F t1        |$      D ]"  \  }#\  }'}(d|'|(fvs|'|(fdk7  s|'|(z  |%|#   d<   $ d$\  })}*d|j"                  v r`j2                  j5                  |)|*      \  })}*|j2                  j5                  ||      \  }+},|+|)z
  |,|*z
  }}|)|+kD  r| }|+|)}+})|*|,kD  r| }|,|*},}*| j                  j7                  |)|*|||||| j                  j8                  z        }-|-j;                  |)|*||      7|d   |d   f6|dv}.t        |      dz
  d%z  }/|dd }067fd&|%D        }17j=                  6|/|0|1      }27j?                  |d'6||.|2      }3tA        d( |"D              r7jC                  |)|*||      }4|d   |d   f6|dv}.t        |      dz
  d%z  }/|dd }07fd)|$D        }17j=                  6|/|0|1      }2|4j?                  |d*6||.|2      }5d+|5jD                   d,g|4_        7jG                  |3jD                         |-jI                  d       |-jK                  7jD                         | j                  jM                  d-|.       | j                  jO                  |-jD                  |.       y	c c}!w c c}#w c c}#w )/Draw given gradient node.r   offsetr   zstop-opacityz
stop-colorblackFTgradientUnitsuserSpaceOnUse)r   r   )adr7   r8   spreadMethodpadrepeatreflectradialGradientgradientTransformlinearGradientr   x1y1x2z100%y2r   cxz50%cyrfxfyfrNr   r   r   r   c              3   N   K   | ]  \  }}}j                  |||        y w)Ncreate_interpolation_function).0c0c1ndomaingroups       r)   	<genexpr>z draw_gradient.<locals>.<genexpr>   s0      (BA 	++FBA>(s   "%RGBc              3   &   K   | ]	  }|d k7    yw)r   N )ro   alphas     r)   ru   z draw_gradient.<locals>.<genexpr>   s     
*%5A:
*s   c              3   P   K   | ]  \  }}j                  d |g|gd        yw)rk   r   Nrm   )ro   rp   rq   rt   s      r)   ru   z draw_gradient.<locals>.<genexpr>   s2      )B //rdAF)s   #&Gray/z shPatternr4   )(appendmaxr   r:   r   r   ry   lenrA   	set_colorcalculate_bounding_boxr
   inner_widthinner_heightr   insertr<   r;   r   normalized_diagonalspread_linear_gradientr   spread_radial_gradientrange	enumerateinverttransform_pointadd_patternctm	add_groupcreate_stitching_functionadd_shadinganyset_alpha_stateidpaint_shading	set_alphadraw_x_objectset_color_spaceset_color_special)8r!   r"   gradientr#   rL   r5   	positionscolorschildstop_opacity
stop_colorr	   r1   r2   matrixr7   r8   rU   rV   spreadtransform_matrixshading_typer`   ra   rb   rc   coordsrd   re   rf   rg   rh   ri   r   alphasialpha_couplescolor_couplesry   a0a1bx1by1bx2by2patternextendencodeboundssub_functionsfunctionshadingalpha_streamalpha_shadingrs   rt   s8                                                         @@r)   rH   rH   U   s    IF "&IbMA8$i35 	6 #599^Q#?@7J599\7;<
L(j!" 	V	

VAY'--dIvFL .||O$(88)9)9vv!
1a!qA+\\.%0F&&Q<!Q"MM!VAY'R=1QMM&*% Q<9Q<'||//  A&  IaL1$45MM!VAY'R=IbM)Yr]Q./MM&*%hoo-$LL,-y##% "F*||''dA&	59dA&	6:  dF+Y>dA&	6:  %;Ivr2r2|V%M!	66 ||////dE*Iu=dE*Iv>  c5)9eE66JKdB'E:dB'F;  (,,tQ'E%4HI$:Ivr2r2r1eV%!	66 %++5eAh+F+ s6{Q') 
F1q5M")M )
 s6{Q') 
2Aq1ubq)1-)M )
 f% :5A:1u*7A*>q*Aa!e$Q'3v;?"&3A&6q&9a #: !/ *8BRH"bV!3"$r'M!Q* HChoo-#**::3DS#**::5&ISc	39v 9FECC9WFCCjj$$S%0GIGc3v6ElIbM*F00F&kAo'Fq_F(&(M ../HeVVVX?G 
*6
**,,S#ufEA,	".44f+/V+1R)') 22FFM3$00&&&&(D!"=#3#3"4C89	

#a%((#JJy8JJ  F ;K ,))s   ]=]
,]c	                 j   ddl m}	m}
  |
|      \  }}}| dv r_||k(  r |	||      }dddg |gfS ||z
  }t        t	        |      dz
        D cg c]  }||dz      ||   z
   }}| dk(  rAt        dg|      }t        |      }t        dg|ddd	         }t        |ddd	         }na| d
k(  sJ t        dg|ddd	   d|      }t        |ddd	   |z         }t        dg|d|ddd	         }t        ||ddd	   z         }|\  }}}}|dkD  r|||z   fn||z   |f\  }}|dkD  r|||z   fn||z   |f\  }}|j                  ||      \  }}|j                  ||      \  }}||} }||z
  ||z
  }"}!||k  r||fn||f\  }#}$||k  r||fn||f\  }%}&|#|z
  |!z  |%| z
  |"z  z   t        |!|"      dz  z  }'|$|z
  |!z  |&| z
  |"z  z   t        |!|"      dz  z  }(||(k  rJt        |      })|j                  t        |             |j                  |d	   |)z          ||)|z  z  }||(k  rJ||'kD  rLt        |      })|j                  dt        |             |j                  d|d   |)z
         ||)|z  z  }||'kD  rL|||z
  |z  z   |||z
  |z  z   }}|||z
  |z  z   |||z
  |z  z   }}||||f}*|||*fS c c}w )zRepeat linear gradient.r   gradient_average_colornormalize_stop_positionsrY   r   solidNrZ   r   rP   r[   )imagesr   r   r   r   r   r   r   nextr~   r   )+r   r   r   r`   ra   rb   rc   r	   r   r   r   firstlastaverage_colorstop_lengthr   position_steps
next_stepsnext_colorsprevious_stepsprevious_colorsr   r   bwbhr   r   tx1ty1tx2ty2xbybxvyvxa1xa2ya1ya2
min_vector
max_vectorstepr   s+                                              r)   r   r      s    J5i@E4&& D=269EMgtR-88 Ul 3y>A-.0 a!ey|+0 0
 X3N34J-K"A#=tt(<#=>N#F4R4L1OY&&&MN4R4$8M!MnMNJttv 56K"A#Q#Q#QN4R4<P#QRN#FVDbD\$9:O (S"b&(1fCr?38S/S&(1fCr?38S/S ))"b1S))"b1S cBsC#IB!$sC:c
S!$sC:c
SRx2orR75R=A;MM
Rx2orR75R=A;MM
 Z
#DMM${+,Yr]T12D;&&D	 Z j 'DMM!T/23Q	!t 34TK''E	 j  27e##R27d*:%:B27e##R27d*:%:B"b"Fff$$i0s   J0c           
         ddl m}m}  ||      \  }}}|||z
  |z  z   |||z
  |z  z   }}| dv r|j                         }|j                         }|j                  j                  |	|
      \  }}t        t        t        |      t        ||z
              t        t        |      t        ||z
                    }||z
  }t        ||z
  |z        }|dkD  rgd|z   }| dk(  r||z  }n+| dk(  sJ g }t        |      D ]  }||dd|dz  rd	nd   z  } t        |      D cg c]  }|D ]  }||z   	  }}}|||z  z  }|dk(  r||||||f}|||fS ||z  }d}t        |      }|re| dk(  r	|||z  z  }n,| dk(  sJ t        |      D ]  }||dd||z   dz  rd	nd   z  } t        |      D cg c]  }|D ]
  }||z
  |z     c}}|z   }||z
  }|dk(  r||||||f}|||fS |d   |d	   fd
k(  sJ d|cxk  rdk  sJ  J |ddd	   }d|z
  }| dk(  r|ddd	   }t        |d      D ]  \  }}||k(  r)|| d |z   }|| d D cg c]
  }||z
  dz
   } }| |z   } no||k  s:||    }!||dz
      }"||dz
      }#|!|!|"|"g}$||||#g}% ||$|%      }&|&g||dz
   d z   |z   }||dz
   d D cg c]
  }|dz
  |z
   } }|dz
  |z
  g| |} n ||||||f}|||fS c c}}w c c}}w c c}w c c}w )zRepeat radial gradient.r   r   rY   r   r   rZ   r[   NrP   rk   )start)r   r   r   r   r   r   r   r   absr   r   intr   )'r   r   r   rg   rh   ri   rd   re   rf   r1   r2   r   r   r   r   r   original_colorsoriginal_positionstwthmax_distancegradient_lengthrepeat_afterrZ   r   positionr   repeat_beforefull_repeatpartial_repeatreverserationew_positionsr   
next_colornext_positionaverage_colorsaverage_positions
zero_colors'                                          r)   r   r   8  s    J5i@E4!b&E!!2R4#7B&& ++-&^^- ..uf=BBR"W&CGSb\(BDb&\A-@A!%F!& ***v DAo.Ba!e.BCCFD ',FmO!"IO8@HOOI O<//A7"b"b!,Fff,, _,  -(!/K77***{+ ?Ao=\!1Q 6"A=? ?F? 5:+4F4/0 24 K(*4*46?@I
 '4Q"b"b!,Fff,,
 #1%'9"'=>&HHH>%A%%%%%$TrT*N"Y-dd3O$WA6 	KAx5  )!-6 %7rs$;!=  {*Q.!= != *I5	% (+,q1uX6
 2QU8 <"'
J!G%-ue]$K!3"$57
$!a%	(BBVK *AE()4!63;HqL;.!6 !6 #QY4Q}QyQ	5	8 "b"b!$Fff$$WO442!="!6s   K)K?K%K$c           	      
   ddl m} d|j                  _        | j	                  |||      }t        |      sy|d   |d   }	}t        ||	      }
|j                  d      dk(  r;t        |j                  d	d      |d      }t        |j                  d
d      |d      }n|d   |d   }}t        |j                  j                  d	d      |d      |z  }t        |j                  j                  d
d      |d      |z  }d|vrH||j                  d	<   ||j                  d
<   |j                  d      dk(  rd| d| d|j                  d<   |dk(  s|dk(  ryd|j                  v r+t        |j                  d      || j                        }||
z  }
|
| j                  j                  z  }
| j                  j                  dd|||||
      }|j!                  |       |j#                  dd||      } |||       j%                  |||| j&                  | j(                  | j*                         |j-                  |j.                         | j                  j1                  d|       | j                  j3                  |j.                  |       y)rO   r   )r}   r!   Fr   r6   patternUnitsrT   r1   r2   r   r   1r.   patternContentUnitsobjectBoundingBoxzscale(z, )r   patternTransformr}   r4   T)r   r}   r=   r<   r   r
   r   r:   r   r;   popr   inner_diagonalrA   r   r   r   r   drawbase_urlr   contextr   r   r   r   )r!   r"   r   r#   rL   r5   r}   r	   r,   r-   r   pattern_widthpattern_heightr1   r2   r   stream_patternrt   s                     r)   rJ   rJ     sk   #G--dIvFL .?LOqAa1F{{>"&66W[[!4iCgkk(A6	1E$Qav##GS19a@5H 	 ##Hc2IqAFJ 	G#&3GNN7#'5GNN8${{015HH06ugRxq.I{+ ^q0W^^+$KK*+Y8J8JL!F*cjjnn$FZZ++	1m^]NN W%$$Q=.IEGS}ncll&   *JJy8JJ  !2!26 BrE   c                    |D ]Q  }|j                   dk(  r|j                  d      dk(  rj| j                  ||      }t        |      rH|\  }}}}t	        |j                  dd      |d      |z  }	t	        |j                  dd      |d      |z  }
n;dx}	}
n6| j                  |j                  dd      |j                  dd      |      \  }	}
| j                  j                  |	|
       |j                   d	k(  s|j                  d
d      }|j                  dd      j                         j                  dd      }| j                  j                  |       T y)z+Apply filters defined in given filter node.feOffsetprimitiveUnitsr   dxr   r   dyr6   feBlendmodenormal- r   N)r<   r:   r   r
   r   r9   rA   r   replacetitleset_blend_mode)r!   r"   filter_noder#   r   r	   _r1   r2   r  r  r  s               r)   apply_filtersr    s8    ,99
"/04GG"99$	J(6*6'Aq%eiia0)Q?%GBeiia0)Q?&HBKBIIdA&		$(:IGBJJ  2 ,YY)#99VX.D<<S)//199#rBDJJ%%d+#,rE   c                    d|j                   _        |j                  d      dk(  r| j                  | j                  }}n4| j                  |j                  d      |j                  d      |      \  }}t        |j                  dd      ||      |j                  d<   t        |j                  dd      ||      |j                  d<   t        |j                  dd	      ||      |j                  d<   t        |j                  dd	      ||      |j                  d<   |j                  d      dk(  r_|j                  d      |j                  d      }}|j                  d      |j                  d      }	}| d
| d
| d
|	 |j                  d<   n	d\  }}||}	}| j                  }
| j                  j                  ||||	      | _        | j                  ||       |
| _        y)zApply given mask node.r3   	maskUnitsrT   r1   r2   r,   z-10%r-   z120%r  r.   rj   N)r=   r<   r:   r   r   r9   r   r;   rA   r   	draw_node)r!   r"   r/   r#   	width_ref
height_refr,   r-   r1   r2   
svg_streams              r)   
paint_maskr    s   Dxx 00 #1A1A:	 #		HHWtxx19!>	: DHHS&19iHDKKDHHS&19jIDKK 6"Iz;DKK&!9i9DKK xx 00xx}dhhsm1)488H+=v$%3as!E7!F8!<I1!:vJ++Aq%@CJMM$	"CJrE   c                 Z    d|j                   v r|| j                  |j                   d   <   yy)zStore a clip path definition.r   N)r;   paths)r!   r"   r#   s      r)   	clip_pathr    s*    t{{'+		$++d#$ rE   N)__doc__	itertoolsr   mathr   r   r   r   r	   r
   utilsr   r   r   r   r   r*   rD   rM   rH   r   r   rJ   r  r  r  rx   rE   r)   <module>r     sU    E    = A AD#<GYxD%Nj%Z0f,,>,rE   