o
    h~Q                     @   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'   U/var/www/html/optinet_system/venv/lib/python3.10/site-packages/weasyprint/svg/defs.pyget_use_tree   s:   




r)   c                 C   s   t | || }du rdS |jdv rVd|jv r,d|jv r,|jd |jd< |jd |jd< n&d|j_t| ||dd}t|rR|d |d	  |jd< |d
 |d  |jd< d|j_|| |t|f | 	|
d|
d|\}}| jj||d dS )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	   cascadeoverride_iteriterpointgetstreamr   )r   r    r!   r   boxr0   r1   r'   r'   r(   use-   s    

r?   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!   opacityr/   r'   r'   r(   draw_gradient_or_patternF   s   

rF   c           3         sH  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d|| j}|| }|jdkrGd}t|dd||t|dd||}}t|dd||t|dd||}}t|||||||
|	\}}n`|jdksOJ 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 rb|j|&|'\}&}'|j||\}(})|(|& |)|' }}|&|(krU| }|(|&}&}(|'|)krb| }|)|'}'})| 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/||+|/}2d0|2j" d1g|1_#|0j" |*$d |*%j" | jj&d2|d3 | jj'|*j"|d3 d	S )4Draw given gradient node.r   offsetr   zstop-opacityz
stop-colorblackFTgradientUnitsuserSpaceOnUse)r   r   )adr3   r4   spreadMethodpadrepeatreflectradialGradientgradientTransform0 0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'   rc   i)alphasr'   r(   rd          c                    s2   g | ]} | d d  |d  d d dgqS )Nr   r   r'   rf   )colorsr'   r(   rd      s    $r   r   r   r   c                 3   s&    | ]\}}}  |||V  qd S )Ncreate_interpolation_function)rc   c0c1n)domaingroupr'   r(   	<genexpr>   s
    
z draw_gradient.<locals>.<genexpr>RGBc                 s   s    | ]}|d kV  qdS )r   Nr'   )rc   alphar'   r'   r(   rt      s    c                 3   s(    | ]\}}  d |g|gdV  qdS )rl   r   Nrm   )rc   ro   rp   )rs   r'   r(   rt      s
    
Gray/z shPatternr.   )(appendmaxr   r<   r
   r   rv   lenr=   	set_colorcalculate_bounding_boxr	   inner_widthinner_heightr   insertr5   r6   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!   rE   r/   	positionschildstop_opacity
stop_colorr   r+   r,   matrixr3   r4   rM   rN   spreadtransform_matrixshading_typerY   rZ   r[   r\   coordsr]   r^   r_   r`   ra   rb   alpha_couplescolor_couplesrg   rv   a0a1bx1by1bx2by2patternextendencodeboundssub_functionsfunctionshadingalpha_streamalpha_shadingr'   )rh   rj   rr   rs   r(   rA   P   s  












rA   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_positionsrQ   r   solidNc                    s    g | ]} |d    |  qS re   r'   rf   r   r'   r(   rd      ri   z*spread_linear_gradient.<locals>.<listcomp>rR   r   rH   rS   )imagesr   r   r   r|   r   r   r   nextrz   r   )*r   r   rj   rY   rZ   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   rQ   r   r   rR   rS   NrH   c                    s   g | ]} D ]}|| qqS r'   r'   rc   rg   positionr   r'   r(   rd   R  s
    z*spread_radial_gradient.<locals>.<listcomp>c                    s"   g | ]}D ]}|  | qqS r'   r'   r   )full_repeatoriginal_positionsr'   r(   rd   l  s    
rl   )startc                    s   g | ]}|  d  qS re   r'   rc   r   r   r'   r(   rd     s    
c                    s   g | ]}|d    qS re   r'   r   r   r'   r(   rd     s    )r   r   r   r   r   r   r   r{   absr   r   intr   )%r   r   rj   r`   ra   rb   r]   r^   r_   r+   r,   r   r   r   r   r   original_colorstwthmax_distancegradient_lengthrepeat_afterrR   rg   r   repeat_beforepartial_repeatreverseratior   new_positionsr   
next_colornext_positionaverage_colorsaverage_positions
zero_colorr'   )r   r   r   r(   r   3  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d|| j}||
 }
|
| jj }
| jdd|||||
}|| |dd||}||| |||| j| j| j ||j | jjd|d | jj|j|d dS )rG   r   )ry   r   Fr   r2   patternUnitsrL   r+   r,   r   r   1viewBoxpatternContentUnitsobjectBoundingBoxzscale(z, )r   patternTransformrW   ry   r.   T)r   ry   r7   r5   r~   r	   r   r<   r   r6   popr   inner_diagonalr=   r   r   r   r   drawbase_urlr   contextr   r   r   r   )r   r    r   r!   rE   r/   ry   r   r0   r1   r   pattern_widthpattern_heightr+   r,   r   stream_patternrs   r'   r'   r(   rC     sT   





rC   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   dyr2   feBlendmodenormal- r   N)r5   r<   r~   r	   r   r;   r=   r   replacetitleset_blend_mode)r   r    filter_noder!   r   r   _r+   r,   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.r-   	maskUnitsrL   r+   r,   r0   z-10%r1   z120%r  r   rk   N)r7   r5   r<   r   r   r;   r   r6   r=   r   	draw_node)r   r    maskr!   	width_ref
height_refr0   r1   r+   r,   
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)r6   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)   r?   rF   rA   r   r   rC   r  r  r  r'   r'   r'   r(   <module>   s"    "
 Gm3