
    3vjP                         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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                    t        |j                  | j                              }t        | j                        }|j                  dk(  rt        d      }|d d d|d d fv }|j                  r|r|j                  | j
                  v r)| j
                  |j                     j                         }|S 	 | j                  j                  |j                        j                         }|| j
                  |j                  <   |S y y # t        $ r Y y w xY w)Ndata    )r   r   r   )
r   get_hrefurlschemefragment	use_cachecopytree	get_child	Exception)svgnode	font_size
parsed_urlsvg_urlsame_originr   s          F/root/.hermes/venv/lib/python3.12/site-packages/weasyprint/svg/defs.pyget_use_treer$      s    4==12J G~~B-Ra.\72A;$??K{#--/==!4!45::<D :xx))**=*=>CCE 6:j112  +  s   03D   	DDc                    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                  _        d|_        |j                  |       |j                  t        |f             | j                  |j                  d      |j                  d      |      \  }}| j                  j                  ||       y)zDraw use tags.N)r   symbolwidthheightgTstroker   r   r   r   r   xyef)r$   tagattrib_etree_noder	   r
   	_childrencascadeoverride_iteriterpointgetstreamr   )r   r   r   r   boxr,   r-   s          r#   user<      s9   S$	22;xx$$ dkk!h$++&=#';;w#7DKK $(KK$9DKK!#&D sD)DAC$S)'*1vAG$(+AQH%$DNLLtTG}%99TXXc]DHHSM9=DAq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   opacityr+   s         r#   draw_gradient_or_patternrE   8   si    s}}s}}T*IwH 	H		s||D)9gvG 	G 
r=   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                  }}|dd \  }}t               }n d\  }}|\  }}}}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      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|j"                  v rj||z   ||z   },}+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?                  |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?                  |6||.|2d*      }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userSpaceOnUseNr   )r   r   r   r   )adr/   r0   spreadMethodpadrepeatreflectradialGradientgradientTransform0 0linearGradientx1y1x2z100%y2r   cxz50%cyrfxfyfr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   "%c              3   &   K   | ]	  }|d k7    yw)r   N )rh   alphas     r#   rn   z draw_gradient.<locals>.<genexpr>   s     
*%5A:
*s   c              3   P   K   | ]  \  }}j                  d |g|gd        yw)rd   r   Nrf   )rh   ri   rj   rm   s      r#   rn   z draw_gradient.<locals>.<genexpr>   s2      )B //rdAF)s   #&
DeviceGray/z shPatternr*   )(appendmaxr   r9   r   r   rq   lenr:   	set_colorcalculate_bounding_boxr
   inner_widthinner_heightr   insertr1   r2   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   rD   r+   	positionscolorschildstop_opacity
stop_colorr	   r'   r(   bx1by1matrixr/   r0   rN   rO   spreadtransform_matrixshading_typerZ   r[   r\   r]   coordsr^   r_   r`   ra   rb   rc   r   alphasialpha_couplescolor_couplesrq   a0a1bx2by2patternextendencodeboundssub_functionsfunctionshadingalpha_streamalpha_shadingrl   rm   s8                                                         @@r#   r@   r@   B   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#Sv!
1aS!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,-ui##% "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* hoo-;fS#**::3DS#**::3D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fffhOG

*6
**,,S#ufEA,	".44f+/V+1R)') 22FFM3$00&&&(LJ!"=#3#3"4C89	

#a%((#JJy8JJ  F ;I ,))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_positionsrR   r   solidNrS   r   rH   rT   )imagesr   r   r   rx   r   r   r   nextrv   r}   )+r   r   r   rZ   r[   r\   r]   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   } nm||k  s:||    }!||dz
      }"||dz
      }#|!|!|"|"g}$||||#g}% ||$|%      }&|&g||dz
   d |}||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   rR   r   r   rS   rT   NrH   rd   )start)r   r   r   r   r   r   r   rw   absr   r   intr   )'r   r   r   ra   rb   rc   r^   r_   r`   r'   r(   r   r   r   r   r   original_colorsoriginal_positionstwthmax_distancegradient_lengthrepeat_afterrS   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   &  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
$KQxy'AKF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      d|| j                        }||
z  }
|
| j                  j                  z  }
| j                  j                  dd|||||
      }|j!                  |       |j#                  dd||      } |||       j%                  |||| j&                  | j(                         |j+                  |j,                         | j                  j/                  d|       | j                  j1                  |j,                  |       y)rG   r   )ru   r   Fr   r.   patternUnitsrL   r'   r(   r   r   1viewBoxpatternContentUnitsobjectBoundingBoxzscale(z, )r   patternTransformrX   ru   r*   T)r   ru   r3   r1   rz   r
   r   r9   r   r2   popr   inner_diagonalr:   r   r   r   r   drawbase_urlcontextr   r   r   r   )r   r   r   r   rD   r+   ru   r	   r,   r-   r   pattern_widthpattern_heightr'   r(   r   stream_patternrm   s                     r#   rB   rB     sg   #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*+UIs?Q?QS!F*cjjnn$FZZ++	1m^]NN W%$$Q=.IEGS}ncll   *JJy8JJ  !2!26 Br=   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   dyr.   feBlendmodenormal- r   N)r1   r9   rz   r
   r   r8   r:   r   replacetitleset_blend_mode)r   r   filter_noder   r   r	   _r'   r(   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+#,r=   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.r)   	maskUnitsrL   r'   r(   r,   z-10%r-   z120%r  r   rM   N)r3   r1   r9   r{   r|   r8   r   r2   r:   r   	draw_node)r   r   maskr   	width_ref
height_refr,   r-   r'   r(   
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$	"CJr=   N)__doc__	itertoolsr   mathr   r   r   r   r	   r
   utilsr   r   r   r   r   r$   r<   rE   r@   r   r   rB   r  r  rp   r=   r#   <module>r     sO    E    = A A&#4GZzD%Nj%Z0f,,r=   