a
    [XhQ                     @   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   Zget_hrefurlschemefragmentZ	use_cachecopytreeZ	get_child	Exceptiongeturlurl_fetcherZget_intrinsic_size)svgnode	font_sizer   
parsed_urlZsvg_urlZsame_originr   r   Zbytestring_svgZuse_svg r   X/var/www/viveiro_mudafortebrasil/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 rd|jv rd|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	   ZcascadeZoverride_iteriterstreamr   )r   r   r   r"   r#   	attributer   Zboxr   r   r    use-   s&    



r7   c                 C   sH   || j v r"t| || j | |||S || jv rDt| || j| |||S dS )zDraw given gradient or pattern.N)Z	gradientsdraw_gradientpatternsdraw_pattern)r   r   namer   opacityr+   r   r   r    draw_gradient_or_patternK   s    

r=   c           3         sR  g }g |D ]j}| t|r"|d ndt|d|d t|dd| }t|dd}	|	 j|9  _ |	 qsdS tdkr| j	d  d	S | 
|||}
t|
sd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rd}t|dd||t|dd|| }}t|dd||t|dd|| }}t|||||||
|	\}}n|jdksJ 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< qt| 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-colorZblackFTgradientUnitsuserSpaceOnUse)r   r   )adr-   r.   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   rX   i)alphasr   r    rY      s   c                    s2   g | ]*} | d d  |d  d d dgqS )Nr   r   r   r\   )colorsr   r    rY      s   r   r   r   r   c                 3   s$   | ]\}}}  |||V  qd S )NZcreate_interpolation_function)rX   c0c1n)domaingroupr   r    	<genexpr>   s   z draw_gradient.<locals>.<genexpr>ZRGBc                 s   s   | ]}|d kV  qdS )r   Nr   )rX   alphar   r   r    rh      rZ   c                 3   s&   | ]\}}  d |g|gdV  qdS )ra   r   Nrb   )rX   rc   rd   )rg   r   r    rh      s   ZGray/z shPatternr*   )(appendmaxr   r0   r
   r   ri   lenr5   Z	set_colorcalculate_bounding_boxr	   inner_widthinner_heightr   insertr2   r1   r   Znormalized_diagonalspread_linear_gradientr   spread_radial_gradientrange	enumerateinverttransform_pointadd_patternctm	add_groupZcreate_stitching_functionZadd_shadinganyset_alpha_stateidZpaint_shading	set_alphadraw_x_objectset_color_spaceset_color_special)3r   r   Zgradientr   r<   r+   	positionschildZstop_opacityZ
stop_colorr   r'   r(   matrixr-   r.   rC   rD   spreadtransform_matrixZshading_typerN   rO   rP   rQ   coordsrR   rS   rT   rU   rV   rW   Zalpha_couplesZcolor_couplesr]   ri   Za0Za1bx1by1bx2by2patternextendencodeZboundsZsub_functionsfunctionZshadingZalpha_streamZalpha_shadingr   )r^   r_   rf   rg   r    r8   U   s   













r8   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rtd
g|R }t|}td
g|ddd R }t|ddd }n|| dksJ 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 rt|}(|	t|  	 d |(  ||(| 7 }qV||&krt|}(|
d
t|  
d
 d
 |(  ||(| 8 }q||| |  ||| |   }}||| |  ||| |   }}||||f}) ||)fS )zRepeat linear gradient.r   gradient_average_colornormalize_stop_positionsrG   r   ZsolidNc                    s    g | ]} |d    |  qS r[   r   r\   r   r   r    rY     s   z*spread_linear_gradient.<locals>.<listcomp>rH   r   r?   rI   )imagesr   r   ru   rn   r   rx   r   nextrl   rr   )*r   r   r_   rN   rO   rP   rQ   r   r   r   r   firstlastZaverage_colorZstop_lengthZposition_stepsZ
next_stepsZnext_colorsZprevious_stepsZprevious_colorsr   r   ZbwZbhr   r   Ztx1Zty1Ztx2Zty2xbZybZxvZyvZxa1Zxa2Zya1Zya2Z
min_vectorZ
max_vectorstepr   r   r   r    rs      sZ    


""&&
&&

""rs   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sJ 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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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   rG   r   r   rH   rI   Nr?   c                    s   g | ]} D ]}|| qqS r   r   rX   r]   positionr   r   r    rY   W  s   z*spread_radial_gradient.<locals>.<listcomp>c                    s"   g | ]}D ]}|  | qqS r   r   r   )full_repeatoriginal_positionsr   r    rY   q  s   ra   )startc                    s   g | ]}|  d  qS r[   r   rX   r   r   r   r    rY     s   c                    s   g | ]}|d    qS r[   r   r   r   r   r    rY     s   )r   r   r   r   rw   rx   r   rm   absr   ru   intrv   )%r   r   r_   rU   rV   rW   rR   rS   rT   r'   r(   r   r   r   r   r   Zoriginal_colorsZtwthZmax_distanceZgradient_lengthZrepeat_afterrH   r]   r   Zrepeat_beforeZpartial_repeatreverseZratior   Znew_positionsr   Z
next_colorZnext_positionZaverage_colorsZaverage_positionsZ
zero_colorr   )r   r   r   r    rt   8  s    "
(

"













rt   c              	   C   s  ddl m} d|j_| |||}t|s.dS |d |d  }}	t||	d}
|ddkrt|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 )r>   r   )rk   r   Fr   r,   patternUnitsrB   r'   r(   r   r   1r$   patternContentUnitsobjectBoundingBoxzscale(z, )r   patternTransformrk   r*   T)r   rk   r3   r2   ro   r	   r   r0   r   r1   popr   Zinner_diagonalr5   rz   ry   r   r{   Zdrawbase_urlr   contextr   r~   r   r   )r   r   r   r   r<   r+   rk   r   r"   r#   r   Zpattern_widthZpattern_heightr'   r(   r   Zstream_patternrg   r   r   r    r:     sT    





r:   c                 C   s   |D ]}|j dkr|ddkr|| ||}t|rr|\}}}}t|dd|d| }	t|dd|d| }
qd }	}
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   dyr,   feBlendmodenormal- r   N)r2   r0   ro   r	   r   r/   r5   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)   	maskUnitsrB   r'   r(   r"   z-10%r#   z120%r   r$   r`   N)r3   r2   r0   rp   rq   r/   r   r1   r5   r}   Z	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)r1   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!   r7   r=   r8   rs   rt   r:   r   r   r   r   r   r   r    <module>   s    "
 Gm3