
    BhQ                         S r SSKJr  SSKJrJr  SSKJr  SSKJrJ	r	  SSK
JrJrJrJrJr  S	 rS
 rS rS rS rS rS rS rS rS rg)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                    SSK Jn  [        UR                  U R                  5      5      n[        U R                  5      nUR
                  S:X  a  [        S5      nUS S S:H  =(       d    US S US S :H  nUR                  (       a  U(       a  UR                  U R                  ;   a)  U R                  UR                     R                  5       nU$  U R                  R                  UR                  5      R                  5       nXpR                  UR                  '   U$ UR                  5       n U R                  U5      n	U" X5      n
U
R                  U5        U
R                  nU$ ! [         a     g f = f! [         a     g f = f)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              E/var/www/html/env/lib/python3.13/site-packages/weasyprint/svg/defs.pyget_use_treer*      sc   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' /E7 '
E43E47
FFc                    U R                  UR                  S5      UR                  S5      U5      u  p4S H!  nXQR                  ;   d  M  UR                  U	 M#     [        XU5      =nc  gUR                  S;   a  SUR                  ;   aI  SUR                  ;   a9  UR                  S   UR                  S'   UR                  S   UR                  S'   O\SUR
                  l        [        XUS	S
9n[        U5      (       a0  US   US   -   UR                  S'   US   US   -   UR                  S'   SUR
                  l        UR                  U5        UR                  [        U45      5        U R                  R                  X4S9  g)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   -   sO   99TXXc]DHHSM9=DA2	#I& 3 S	22;xx$$ dkk!h$++&=#';;w#7DKK $(KK$9DKK!#&D s)DAC$S))'*1vAG$(+AQH%$LLtTG}%JJ1"    c                     X R                   ;   a  [        XU R                   U   X4U5      $ X R                  ;   a  [        XU R                  U   X4U5      $ g)zDraw given gradient or pattern.N)	gradientsdraw_gradientpatternsdraw_pattern)r!   r"   namer#   opacityr5   s         r)   draw_gradient_or_patternrM   K   s]    }}s}}T*IH 	H		s||D)9vG 	G 
rE   c                   ^6^7 / n/ nU H  nUR                  [        U(       a  US   OS[        UR                  S5      US5      5      5        [	        UR                  SS5      5      U-  n	[        UR                  SS5      5      n
U
=R                  U	-  sl        UR                  U
5        M     U(       d  g[        U5      S:X  a  U R                  R                  US   5        g	U R                  XU5      n[        U5      (       d  gUR                  S
5      S:X  a"  U R                  U R                  p[        5       nOSu  pUu  nnnn[        UUUUS9nUR                  SS5      nUS;   a_  US   S:  a'  UR                  SS5        UR                  SUS   5        US   S:  a%  UR                  S5        UR                  US   5        OUS   US   :X  aP  UR                   S:X  a  UR                  SS5        OUR                  SUS   S-
  5        UR                  SUS   5        US   US   :X  a+  UR                  US   S-   5        UR                  US   5        SUR"                  ;   a+  [%        UR                  S5      UU R&                  5      nUU-  nUR                   S:X  a  Sn[        UR                  SS5      X<5      [        UR                  SS5      X=5      nn[        UR                  SS5      X<5      [        UR                  SS5      X=5      nn[)        UXgUUUUX5	      u  pgnOUR                   S:X  d   eSn[        UR                  SS5      X<5      [        UR                  SS5      X=5      nn[        UR                  SS5      U[+        X5      5      n[        UR                  S U5      X<5      [        UR                  S!U5      X=5      nn[        UR                  S"S5      U[+        X5      5      n [-        UXgUUU UUUXU5      u  pgnU V!s/ s H  n!U!S   PM
     n"n![/        [        U"5      S-
  5       V#s/ s H  n#U"U#   U"U#S-      4PM     n$n#[/        [        U5      S-
  5       V#s/ s H  n#UU#   S#S UU#S-      S#S S/PM     n%n#[1        U"5       HJ  u  n#n&U&S:X  d  M  U#S:  a  U%U#S-
     S   U%U#S-
     S'   U#[        U5      S-
  :  d  M<  U%U#   S   U%U#   S'   ML     [1        U$5       H(  u  n#u  n'n(SU'U(4;  d  M  U'U(4S:w  d  M  U'U(-  U%U#   S'   M*     S$u  n)n*SUR"                  ;   a`  WR2                  R5                  U)U*5      u  n)n*UR2                  R5                  X5      u  n+n,U+U)-
  U,U*-
  pU)U+:  a  U* nU+U)n+n)U*U,:  a  U* nU,U*n,n*U R                  R7                  U)U*XXXR                  R8                  -  5      n-U-R;                  U)U*X5      m7US   US   4m6US;  n.[        U5      S-
  S%-  n/USS n0U6U74S& jU% 5       n1T7R=                  T6U/U0U15      n2T7R?                  US'T6UU.U25      n3[A        S( U" 5       5      (       a  T7RC                  U)U*X5      n4US   US   4m6US;  n.[        U5      S-
  S%-  n/USS n0U74S) jU$ 5       n1T7R=                  T6U/U0U15      n2U4R?                  US*T6UU.U25      n5S+U5RD                   S,3/U4l        T7RG                  U3RD                  5        U-RI                  S5        U-RK                  T7RD                  5        U R                  RM                  S-US.9  U R                  RO                  U-RD                  US.9  g	s  sn!f s  sn#f s  sn#f )/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   P   >#    U  H  u  pnTR                  TXU5      v   M     g 7f)Ncreate_interpolation_function).0c0c1ndomaingroups       r)   	<genexpr> draw_gradient.<locals>.<genexpr>   s.      (&IBA 	++FBA>>&s   #&RGBc              3   *   #    U  H	  oS :g  v   M     g7f)r   N )ro   alphas     r)   ru   rv      s     
*6%A:6s   c              3   T   >#    U  H  u  pTR                  S U/U/S5      v   M     g7f)rk   r   Nrm   )ro   rp   rq   rt   s      r)   ru   rv      s2      )' //rdAFF's   %(Gray/z shPatternr4   )(appendmaxr   r:   r   r   rz   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_couplesrz   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'--dvFL ..||O$(88)9)9v!
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&	9dA&	:  dF+Y>dA&	:  %;Ir2r2|%M!	6 ||////dE*I=dE*I>  c5)9eE6JKdB':dB';  (,,tQ'E%4HI$:Ir2r2r1e%!	6 %++F5eAhFF+ s6{Q')'A 
F1q5M"'  )
 s6{Q')'A 
2Aq1ubq)1-'  )
 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 0 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6ElIbM*F00F&kAo'Fq_F(&(M ../HeVVVX?G 
*6
***,,S#u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   SSK Jn	Jn
  U
" U5      u  pnU S;   Gag  X:X  a  U	" X!5      nSSS/ U/4$ X-
  n[        [	        U5      S-
  5       Vs/ s H  nXS-      X   -
  PM     nnU S:X  aA  [        S/UQ75      n[        U5      n[        S/USSS	2   Q75      n[        USSS	2   5      nOaU S
:X  d   e[        S/USSS	2   QSPUQ75      n[        USSS	2   U-   5      n[        S/UQSPUSSS	2   Q75      n[        X"SSS	2   -   5      nUu  nnnnUS:  a  UUU-   4OUU-   U4u  nnUS:  a  UUU-   4OUU-   U4u  nnUR                  X45      u  nnUR                  XV5      u  nnUUn nUU-
  UU-
  n"n!UU:  a  UU4OUU4u  n#n$UU:  a  UU4OUU4u  n%n&U#U-
  U!-  U%U -
  U"-  -   [        U!U"5      S-  -  n'U$U-
  U!-  U&U -
  U"-  -   [        U!U"5      S-  -  n(UU(:  aL  [        U5      n)UR                  [        U5      5        UR                  US	   U)-   5        UU)U-  -  nUU(:  a  ML  UU':  aN  [        U5      n)UR                  S[        U5      5        UR                  SUS   U)-
  5        UU)U-  -  nUU':  a  MN  X5U-
  U-  -   X5U-
  U-  -   pSXFU-
  U-  -   XFU-
  U-  -   pdX4XV4n*XU*4$ s  snf )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@E&& =26EMgtR-88 l 3y>A-.0. !ey|+. 	 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#FDbD\$9:O (S"b&(1fCr?38S/S&(1fCr?38S/S ))"1S))"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  7e##R7d*:%:7e##R7d*:%:bFf$$i0s   J0c           
         SSK JnJn  U" U5      u  pnXXU-
  U-  -   XXU-
  U-  -   pU S;   Ga  UR                  5       nUR                  5       nUR                  R                  X5      u  nn[        [        [        U5      [        UU-
  5      5      [        [        U5      [        UU-
  5      5      5      nX-
  n[        UU-
  U-  5      nUS:  av  SU-   nU S:X  a  UU-  nO3U S:X  d   e/ n[        U5       H  nUUSSUS-  (       a  S	OS2   -  nM     [        U5       VVs/ s H  nU  H  nUU-   PM
     M     nnnUUU-  -  nUS:X  a	  X4XVXx4nXU4$ UU-  nSn[        U5      nU(       at  U S:X  a	  UUU-  -  nO4U S:X  d   e[        U5       H  nUUSSUU-   S-  (       a  S	OS2   -  nM     [        U5       VVs/ s H  nU  H  nUU-
  U-   PM     M     snnU-   nUU-
  nUS:X  a	  X4XVXx4nXU4$ US   US	   4S
:X  d   eSUs=:  a  S:  d   e   eUSSS	2   nSU-
  nU S:X  a  USSS	2   n[        USS9 H  u  nnUU:X  a,  UU* S U-   nUU* S  Vs/ s H  nUU-
  S-
  PM     n nU U-   n  OuUU:  d  M@  UU*    n!UUS-
  *    n"UUS-
  *    n#U!U!U"U"/n$UUUU#/n%U" U$U%5      n&U&/UUS-
  * S -   U-   nUUS-
  * S  Vs/ s H  nUS-
  U-
  PM     n nUS-
  U-
  /U QUQn  O   X4XVXx4nXU4$ s  snnf s  snnf s  snf s  snf )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  sP    J5i@Eb&E!!2R4#7&& ++-&^^- ..u=BBR"W&CGSb\(BD&\A-@A!%F!& ***vAo.Ba!e.BCCF ' ',FmO&3IHIm  O<//A7bb,Ff,, _,  -(!/K77***{+Ao=\!1Q 6"A=? ?F , 5:+4F44Fq 2H K(* 2 +4F46?@I
 '4Qbb,Ff,,
 #1%'9"'=>&HHH>%A%%%%%$TrT*N"Y-dd3O$WA6KAx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!64 4<HqL;.4  !6 #QY4Q}QyQ	5 78 bb$Ff$$WO442!="!6s   #K4 K:L Lc           	         SSK Jn  SUR                  l        U R	                  XU5      n[        U5      (       d  gUS   US   p[        XS9n
UR                  S5      S:X  a;  [        UR                  S	S5      US5      n[        UR                  S
S5      US5      nOUS   US   p[        UR                  R                  S	S5      US5      U-  n[        UR                  R                  S
S5      US5      U-  nSU;  aG  XR                  S	'   XR                  S
'   UR                  S5      S:X  a  SU SU S3UR                  S'   US:X  d  US:X  a  gSUR                  ;   a)  [        UR                  S5      X0R                  5      nX-  n
XR                  R                  -  n
U R                  R                  SSXXU
5      nUR!                  U5        UR#                  SSX5      nU" X 5      R%                  UXU R&                  U R(                  U R*                  5        UR-                  UR.                  5        U R                  R1                  SUS9  U R                  R3                  UR.                  US9  g)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     sR   #G--dvFL ..?LOqaF{{>"&66W[[!4iCgkk(A6	1E$Qav##GS19a@5H 	 ##Hc2IqAFJ 	G#&3NN7#'5NN8${{015HH06ugRxq.I{+ ^q0W^^+$KK*+Y8J8JL!*jjnn$FZZ++	1m]N W%$$Q=IEG}cll&   *JJy8JJ  !2!26 BrE   c                    U GHT  nUR                   S:X  a  UR                  S5      S:X  al  U R                  X5      n[        U5      (       aG  Uu    pgn[	        UR                  SS5      US5      U-  n	[	        UR                  SS5      US5      U-  n
O9S=pO5U R                  UR                  SS5      UR                  SS5      U5      u  pU R                  R                  XS9  M  UR                   S	:X  d  M  UR                  S
S5      nUR                  SS5      R                  5       R                  SS5      nU R                  R                  U5        GMW     g)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    s.   99
"/04GG"99$J(66*6'Aqeiia0)Q?%GBeiia0)Q?&HBKBIIdA&		$(:IGJJ  2 ,YY)#99VX.D<<S)//199#rBDJJ%%d+# rE   c                    SUR                   l        UR                  S5      S:X  a  U R                  U R                  pTO3U R                  UR                  S5      UR                  S5      U5      u  pE[        UR                  SS5      X45      UR                  S'   [        UR                  SS5      X55      UR                  S'   [        UR                  SS	5      X55      UR                  S'   [        UR                  SS	5      X45      UR                  S'   UR                  S5      S:X  a]  UR                  S5      UR                  S5      pvUR                  S5      UR                  S5      pU S
U S
U S
U	 3UR                  S'   OSu  pgXEpU R                  n
U R                  R                  XgX5      U l        U R                  X#5        Xl        g)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&19HDKKDHHS&19IDKK 6"I;DKK&!99DKK xx 00xx}dhhsm1)488H+=v$%3as!E7!F8!<I!vJ++A%@CJMM$"JrE   c                 \    SUR                   ;   a  XR                  UR                   S   '   gg)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  ry   rE   r)   <module>r     sU    E    = A AD#<GYxD%Nj%Z0f,,>,rE   