a
    ¥Q•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r8tdƒ}|d d… dkp^|d d… |d d… k}|jrÂ|rÂ|j| jv rˆ| j|j  ¡ }n8z| j	 
|j¡ ¡ }W n ty²   Y d S 0 || j|j< nF| ¡ }z|  |¡}	||	|ƒ}
W n työ   Y d S 0 |
 |¡ |
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_urlZsvg_urlZsame_originr   r   Zbytestring_svgZuse_svg© r#   úL/var/www/sistema_ama/venv/lib/python3.9/site-packages/weasyprint/svg/defs.pyÚget_use_tree   s2    

þ


r%   c                 C   s  |   | d¡| d¡|¡\}}dD ]}||jv r"|j|= q"t| ||ƒ }du rRdS |jdv ræd|jv r’d|jv r’|jd |jd< |jd |jd< nLd|j_t| ||d	d
�}t|ƒrÞ|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&    



r>   c                 C   sH   || j v r"t| || j | |||ƒS || jv rDt| || 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_patternK   s    
ÿ
ÿrE   c           3         sR  g }g ‰|D ]j}|  t|r"|d ndt| d¡|dƒƒ¡ t| dd¡ƒ| }t| dd¡ƒ}	|	 j|9  _ˆ  |	¡ qˆs€dS tˆƒdkr | j 	ˆd ¡ d	S |  
|||¡}
t|
ƒsºdS | d
¡dkrÞ| j| j }}tƒ }n$d\}}|
\}}}}t||||d�}| dd¡}|dv �rj|d dk�rB| 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�r˜d}t| dd¡||ƒt| dd¡||ƒ }}t| dd¡||ƒt| dd¡||ƒ }}t||ˆ|||||
|ƒ	\}‰}nÀ|jdk�s¨J ‚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 ]`\}"}#|#dk�rª|"dk�râ|!|"d  d |!|"d  d< |"tˆƒd k �rª|!|" d |!|" d< �qªt| ƒD ]:\}"\}$}%d|$|%fv�r|$|%fdk�r|$|% |!|" d< �qd'\}&}'d|jv �rÎ|j |&|'¡\}&}'|j ||¡\}(})|(|& |)|'  }}|&|(k�r´| }|(|& }&}(|'|)k�rÎ| }|)|' }'})| 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Údr1   r2   Ú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>©   ó    z!draw_gradient.<locals>.<listcomp>c                    s    g | ]}ˆ | ˆ |d   f‘qS ©r   r#   ©ra   Úi)Úalphasr#   r$   rb   ª   s   ÿc                    s2   g | ]*}ˆ | d d… ˆ |d  d d… dg‘qS )Nr   r   r#   re   )Úcolorsr#   r$   rb   ­   s   ÿ©r   r   ©r   r   c                 3   s$   | ]\}}}ˆ  ˆ |||¡V  qd S )N©Úcreate_interpolation_function)ra   Úc0Úc1Ún)ÚdomainÚgroupr#   r$   Ú	<genexpr>Ò   s   ÿz draw_gradient.<locals>.<genexpr>ÚRGBc                 s   s   | ]}|d kV  qdS )r   Nr#   )ra   Úalphar#   r#   r$   rr   Ú   rc   c                 3   s&   | ]\}}ˆ   d |g|gd¡V  qdS )rj   r   Nrk   )ra   rm   rn   )rq   r#   r$   rr   à   s   ÿÚGrayú/z shÚPatternr.   )(ÚappendÚmaxr   r4   r
   r   rt   Úlenr;   Ú	set_colorÚcalculate_bounding_boxr	   Úinner_widthÚinner_heightr   Úinsertr6   r5   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!   rD   r/   Ú	positionsÚchildZstop_opacityZ
stop_colorr   r+   r,   Úmatrixr1   r2   rL   rM   ÚspreadÚtransform_matrixÚshading_typerW   rX   rY   rZ   Úcoordsr[   r\   r]   r^   r_   r`   Úalpha_couplesÚcolor_couplesrf   rt   Úa0Úa1Úbx1Úby1Úbx2Úby2ÚpatternÚextendÚencodeÚboundsÚsub_functionsÚfunctionÚshadingÚalpha_streamÚalpha_shadingr#   )rg   rh   rp   rq   r$   r@   U   s   þ


þþþÿþþþ

þ
þ





ÿþÿÿ
þÿÿ
r@   c	           *         s8  ddl m}	m}
 |
ˆ ƒ\}}‰ | dv �rÞ||krJ|	|ˆ ƒ}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sÊJ ‚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 �r˜t|ƒ}(| 	t|ƒ¡ ˆ  	ˆ d |( ¡ ||(| 7 }�qV||&k�rÞt|ƒ}(| 
d
t|ƒ¡ ˆ  
d
ˆ d
 |( ¡ ||(| 8 }�q˜||| |  ||| |   }}||| |  ||| |   }}||||f})ˆ ||)fS )zRepeat linear gradient.r   ©Úgradient_average_colorÚnormalize_stop_positionsrP   r   ÚsolidNc                    s    g | ]}ˆ |d   ˆ |  ‘qS rd   r#   re   ©r•   r#   r$   rb     s   ÿz*spread_linear_gradient.<locals>.<listcomp>rQ   r   rG   rR   )Úimagesr®   r¯   rƒ   rz   r   r†   r   Únextrx   r   )*r˜   r•   rh   rW   rX   rY   rZ   r   r—   r®   r¯   ÚfirstÚlastZaverage_colorÚstop_lengthÚposition_stepsÚ
next_stepsÚnext_colorsÚprevious_stepsÚprevious_colorsr    r¡   ÚbwZbhr¢   r£   Ztx1Zty1Útx2Zty2ÚxbZybZxvZyvZxa1Zxa2Zya1Zya2Z
min_vectorZ
max_vectorÚstepr›   r#   r±   r$   r�   ñ   sZ    


þ""&&
&&

""r�   c           %         sž  ddl m}m} |ˆƒ\}}‰||| |  ||| |   }}| dv �r„| ¡ }ˆ ¡ ‰|j |	|
¡\}}ttt|ƒt|| ƒƒtt|ƒt|| ƒƒƒ}|| }t	|| | ƒ}|dk�r6d| }| dkrÖ||9 }n>| dksâJ ‚g }t
|ƒD ]$}||dd|d �rd	nd… 7 }qî‡fd
d„t
|ƒD ƒ‰||| 7 }|dk�rZ||||||f}ˆ||fS || }d}t|ƒ‰ ˆ �rê| dk�rŒ||ˆ  7 }nB| dk�sšJ ‚t
ˆ ƒD ]*}||dd|| d �rÀd	nd… 7 }�q¢‡ ‡fdd„t
ˆ ƒD ƒˆ ‰|ˆ  }|dk�r||||||f}ˆ||fS ˆd ˆd	 fdk�s0J ‚d|  k �rHdk �sNn J ‚ˆddd	… }d| }| dk�r||ddd	… }t|dd�D ]ú\}}||k�rÖ|| d… | }‡ fdd„ˆ| d… D ƒ}|ˆ ‰ �q„||k �rˆ||  }||d   } ˆ|d   }!||| | g}"||||!g}#||"|#ƒ}$|$g||d  d…  | }‡ fdd„ˆ|d  d… D ƒ}|d ˆ  g|¢ˆ¢‰ �q„�qˆ||||||f}ˆ||fS )zRepeat radial gradient.r   r­   rP   r   r   rQ   rR   NrG   c                    s   g | ]}ˆ D ]}|| ‘qqS r#   r#   ©ra   rf   Úpositionr±   r#   r$   rb   W  s   z*spread_radial_gradient.<locals>.<listcomp>c                    s"   g | ]}ˆD ]}|ˆ  | ‘qqS r#   r#   rÀ   )Úfull_repeatÚoriginal_positionsr#   r$   rb   q  s   ÿrj   )Ústartc                    s   g | ]}|ˆ  d  ‘qS rd   r#   ©ra   rÁ   ©rÂ   r#   r$   rb   Š  s   ÿc                    s   g | ]}|d  ˆ  ‘qS rd   r#   rÅ   rÆ   r#   r$   rb   ›  s   )r²   r®   r¯   r   r…   r†   r   ry   Úabsr   rƒ   Úintr„   )%r˜   r•   rh   r^   r_   r`   r[   r\   r]   r+   r,   r—   r®   r¯   r´   rµ   Úoriginal_colorsÚtwÚthÚmax_distanceÚgradient_lengthÚrepeat_afterrQ   rf   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r„t| d	d¡|dƒ}t| d
d¡|dƒ}nŒ|d |d  }}t|j	 
d	d¡|dƒ| }t|j	 
d
d¡|dƒ| }d|v�r||j	d	< ||j	d
< | d¡dk�rd|› d|› d�|j	d< |dk�s$|dk�r(dS d|j	v �rPt| d¡|| jƒ}||
 }
|
| jj }
| j dd|||||
¡}| |¡ | dd||¡}||| ƒ |||| j| j| j¡ | |j¡ | jjd|d� | jj|j|d� dS )rF   r   )rw   r   Fr   r0   ÚpatternUnitsrK   r+   r,   r   r   Ú1r(   ÚpatternContentUnitsÚobjectBoundingBoxzscale(z, ú)r   ÚpatternTransformrw   r.   T)r   rw   r7   r6   r|   r	   r   r4   r   r5   Úpopr   Úinner_diagonalr;   rˆ   r‡   r�   r‰   ÚdrawÚbase_urlr   Úcontextr‘   rŽ   r’   r“   )r   r    r¤   r!   rD   r/   rw   r   r&   r'   r—   Zpattern_widthZpattern_heightr+   r,   r™   Zstream_patternrq   r#   r#   r$   rB   ¥  sT    ÿÿ


ÿþ


þrB   c                 C   sð   |D ]æ}|j dkr°| d¡dkr||  ||¡}t|ƒrr|\}}}}t| dd¡|dƒ| }	t| dd¡|dƒ| }
qžd }	}
n"|  | dd¡| dd¡|¡\}	}
| jj|	|
d� q|j d	kr| d
d¡}| dd¡ 	¡  dd¡}| j 
|¡ qdS )z+Apply filters defined in given filter node.ÚfeOffsetÚprimitiveUnitsrÜ   Údxr   r   Údyr0   ÚfeBlendÚmodeÚnormalú-ú r   N)r6   r4   r|   r	   r   r3   r;   r   ÚreplaceÚtitleZset_blend_mode)r   r    Zfilter_noder!   r–   r   Ú_r+   r,   ræ   rç   ré   r#   r#   r$   Úapply_filtersØ  s"    

ÿ
rð   c                 C   sL  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-   Ú	maskUnitsrK   r+   r,   r&   z-10%r'   z120%rì   r(   ri   N)r7   r6   r4   r}   r~   r3   r   r5   r;   r�   Ú	draw_node)r   r    r)   r!   Z	width_refZ
height_refr&   r'   r+   r,   Z
svg_streamr#   r#   r$   Ú
paint_maskî  s0    ÿÿ
ÿ
"
ró   c                 C   s   d|j v r|| j|j d < dS )zStore a clip path definition.rŽ   N)r5   Ú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>   rE   r@   r�   r‚   rB   rð   ró   rõ   r#   r#   r#   r$   Ú<module>   s    "
 Gm3