o
    Zh0hQ                     @   s   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	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )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                 C   s  ddl m} t|| j}t| j}|jdkrtd}|d d dkp/|d d |d d k}|jrc|rc|j| jv rE| j|j  }|S z| j	
|j }W n
 tyZ   Y d S w || j|j< |S | }z| |}	||	|}
W n
 ty}   Y d S w |
| |
j	}|S )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_svg r'   I/var/www/html/rh/venv/lib/python3.10/site-packages/weasyprint/svg/defs.pyget_use_tree   s:   




r)   c                 C   s  |  |d|d|\}}dD ]}||jv r|j|= qt| || }du r)dS |jdv rsd|jv rId|jv rI|jd |jd< |jd |jd< n&d|j_t| ||d	d
}t|ro|d |d  |jd< |d |d  |jd< d|j_|| |	t
|f | jj||d dS )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   boxr'   r'   r(   use-   s(   


rB   c                 C   sH   || j v rt| || j | |||S || jv r"t| || j| |||S dS )zDraw given gradient or pattern.N)	gradientsdraw_gradientpatternsdraw_pattern)r   r    namer!   opacityr3   r'   r'   r(   draw_gradient_or_patternK   s   

rI   c           3         sF  g }g |D ]5}| t|r|d ndt|d|d t|dd| }t|dd}	|	 j|9  _ |	 qs@dS tdkrP| j	d  d	S | 
|||}
t|
s]dS |d
dkro| j| j}}t }nd\}}|
\}}}}t||||d}|dd}|dv r|d dkr|dd dd  |d dk r| d  d  n>|d |d kr|jdkr|dd n
|d|d d  dd  |d |d kr| |d d   d  d|jv rt|d|| j}|| }|jdkrFd}t|dd||t|dd||}}t|dd||t|dd||}}t|||||||
|	\}}n`|jdksNJ d}t|dd||t|dd||}}t|dd|t||}t|d |||t|d!|||}}t|d"d|t||}t|||||||||||\}}d#d$ D   fd%d$tt d D } fd&d$ttd D }!t D ]0\}"}#|#dkr|"dkr|!|"d  d |!|"d  d< |"td k r|!|" d |!|" d< qt| D ]\}"\}$}%d|$|%fvr |$|%fdkr |$|% |!|" d< qd'\}&}'d|jv ra|j|&|'\}&}'|j||\}(})|(|& |)|' }}|&|(krT| }|(|&}&}(|'|)kra| }|)|'}'})| j|&|'|||||| jj }*|*|&|'|||d |d f|dv}+td d( },|dd }-fd)d*|!D }.|,|-|.}/|d+||+|/}0t d,d*  D r!|&|'||}1|d |d f|dv}+td d( },|dd }-fd-d*| D }.|,|-|.}/|1|d.||+|/}2d/|2j" d0g|1_#|0j" |*$d |*%j" | jj&d1|d2 | jj'|*j"|d2 d	S )3Draw given gradient node.r   offsetr   zstop-opacityz
stop-colorblackFTgradientUnitsuserSpaceOnUse)r   r   )adr5   r6   spreadMethodpadrepeatreflectradialGradientgradientTransformlinearGradientr   x1y1x2z100%y2r   cxz50%cyrfxfyfrc                 S   s   g | ]}|d  qS )r   r'   ).0r   r'   r'   r(   
<listcomp>   s    z!draw_gradient.<locals>.<listcomp>c                    s    g | ]} |  |d   fqS r   r'   re   i)alphasr'   r(   rf          c                    s2   g | ]} | d d  |d  d d dgqS )Nr   r   r'   rh   )colorsr'   r(   rf      s    $r   r   r   r   c                 3   s&    | ]\}}}  |||V  qd S )Ncreate_interpolation_function)re   c0c1n)domaingroupr'   r(   	<genexpr>   s
    
z draw_gradient.<locals>.<genexpr>RGBc                 s   s    | ]}|d kV  qdS )r   Nr'   )re   alphar'   r'   r(   rv      s    c                 3   s(    | ]\}}  d |g|gdV  qdS )rn   r   Nro   )re   rq   rr   )ru   r'   r(   rv      s
    
Gray/z shPatternr2   )(appendmaxr   r8   r
   r   rx   lenr?   	set_colorcalculate_bounding_boxr	   inner_widthinner_heightr   insertr:   r9   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)3r   r    gradientr!   rH   r3   	positionschildstop_opacity
stop_colorr   r/   r0   matrixr5   r6   rP   rQ   spreadtransform_matrixshading_typer[   r\   r]   r^   coordsr_   r`   ra   rb   rc   rd   alpha_couplescolor_couplesri   rx   a0a1bx1by1bx2by2patternextendencodeboundssub_functionsfunctionshadingalpha_streamalpha_shadingr'   )rj   rl   rt   ru   r(   rD   U   s  













rD   c	           *         s<  ddl m}	m}
 |
 \}} | dv rq||kr%|	| }dddg |gfS || } fddtt d D }| d	kr_td
g|R }t|}td
g|ddd R }t|ddd }n>| dkseJ td
g|ddd d
|R }t|ddd | }td
g|d
|ddd R }t||ddd  }|\}}}}|d
kr||| fn|| |f\}}|d
kr||| fn|| |f\}}|||\}}|||\}}||}}|| || } }!||k r||fn||f\}"}#||k r||fn||f\}$}%|"| |  |$| |!  t| |!d  }&|#| |  |%| |!  t| |!d  }'||'k rKt|}(|	t|  	 d |(  ||(| 7 }||'k s,||&krqt|}(|
d
t|  
d
 d
 |(  ||(| 8 }||&ksP||| |  ||| |  }}||| |  ||| |  }}||||f}) ||)fS )zRepeat linear gradient.r   gradient_average_colornormalize_stop_positionsrT   r   solidNc                    s    g | ]} |d    |  qS rg   r'   rh   r   r'   r(   rf     rk   z*spread_linear_gradient.<locals>.<listcomp>rU   r   rK   rV   )imagesr   r   r   r~   r   r   r   nextr|   r   )*r   r   rl   r[   r\   r]   r^   r   r   r   r   firstlastaverage_colorstop_length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   r'   r   r(   r      s^   


""$$
&&



""
r   c           %         s  ddl m}m} |\}}||| |  ||| |  }}| dv r| } |j|	|
\}}ttt|t|| tt|t|| }|| }t	|| | }|dkrd| }| dkrj||9 }n| dkspJ g }t
|D ]}||dd|d rd	nd 7 }qvfd
dt
|D ||| 7 }|dkr||||||f}||fS || }d}t|  r| dkr||  7 }n| dksJ t
 D ]}||dd|| d rd	nd 7 }qˇ fddt
 D  |  }|dkr||||||f}||fS d d	 fdksJ d|  k rdk s J  J ddd	 }d| }| dkr7|ddd	 }t|ddD ]{\}}||krc|| d | } fdd| d D }|  nV||k r||  }||d   } |d   }!||| | g}"||||!g}#||"|#}$|$g||d  d  | } fdd|d  d D }|d   g| nq=||||||f}||fS )zRepeat radial gradient.r   r   rT   r   r   rU   rV   NrK   c                    s   g | ]} D ]}|| qqS r'   r'   re   ri   positionr   r'   r(   rf   W  s
    z*spread_radial_gradient.<locals>.<listcomp>c                    s"   g | ]}D ]}|  | qqS r'   r'   r   )full_repeatoriginal_positionsr'   r(   rf   q  s    
rn   )startc                    s   g | ]}|  d  qS rg   r'   re   r   r   r'   r(   rf     s    
c                    s   g | ]}|d    qS rg   r'   r   r   r'   r(   rf     s    )r   r   r   r   r   r   r   r}   absr   r   intr   )%r   r   rl   rb   rc   rd   r_   r`   ra   r/   r0   r   r   r   r   r   original_colorstwthmax_distancegradient_lengthrepeat_afterrU   ri   r   repeat_beforepartial_repeatreverseratior   new_positionsr   
next_colornext_positionaverage_colorsaverage_positions
zero_colorr'   )r   r   r   r(   r   8  s   "
(
 



 






r   c              	   C   s  ddl m} d|j_| |||}t|sdS |d |d }}	t||	d}
|ddkrBt|d	d|d}t|d
d|d}nD|d |d }}t|j	
d	d|d| }t|j	
d
d|d| }d|vr||j	d	< ||j	d
< |ddkrd| d| d|j	d< |dks|dkrdS d|j	v rt|d|| j}||
 }
|
| jj }
| jdd|||||
}|| |dd||}||| |||| j| j| j ||j | jjd|d | jj|j|d dS )rJ   r   )r{   r   Fr   r4   patternUnitsrO   r/   r0   r   r   1r,   patternContentUnitsobjectBoundingBoxzscale(z, )r   patternTransformr{   r2   T)r   r{   r;   r:   r   r	   r   r8   r   r9   popr   inner_diagonalr?   r   r   r   r   drawbase_urlr   contextr   r   r   r   )r   r    r   r!   rH   r3   r{   r   r*   r+   r   pattern_widthpattern_heightr/   r0   r   stream_patternru   r'   r'   r(   rF     sT   





rF   c                 C   s   |D ]s}|j dkrX|ddkr>| ||}t|r9|\}}}}t|dd|d| }	t|dd|d| }
nd }	}
n| |dd|dd|\}	}
| jj|	|
d q|j d	kru|d
d}|dd	 dd}| j
| qdS )z+Apply filters defined in given filter node.feOffsetprimitiveUnitsr   dxr   r   dyr4   feBlendmodenormal- r   N)r:   r8   r   r	   r   r7   r?   r   replacetitleset_blend_mode)r   r    filter_noder!   r   r   _r/   r0   r   r   r   r'   r'   r(   apply_filters  s&   


r	  c                 C   sJ  d|j _|ddkr| j| j}}n| |d|d|\}}t|dd|||jd< t|dd|||jd< t|dd	|||jd< t|dd	|||jd< |ddkr|d|d}}|d|d}}	| d
| d
| d
|	 |jd< n	d\}}||}}	| j}
| j	||||	| _| 
|| |
| _dS )zApply given mask node.r1   	maskUnitsrO   r/   r0   r*   z-10%r+   z120%r  r,   rm   N)r;   r:   r8   r   r   r7   r   r9   r?   r   	draw_node)r   r    r-   r!   	width_ref
height_refr*   r+   r/   r0   
svg_streamr'   r'   r(   
paint_mask  s0   

"

r  c                 C   s"   d|j v r|| j|j d < dS dS )zStore a clip path definition.r   N)r9   paths)r   r    r!   r'   r'   r(   	clip_path  s   
r  N)__doc__	itertoolsr   mathr   r   r   r   r   r	   utilsr
   r   r   r   r   r)   rB   rI   rD   r   r   rF   r	  r  r  r'   r'   r'   r(   <module>   s"    "
 Gm3