a
    QhQ                     @   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 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	   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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-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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_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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   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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 )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| }
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   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