3
ybW7@                 @   s  d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	m
Z
mZmZ ddlmZ ddlmZ d	d
lmZ d	dlmZ d	ddd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#d$ Zd%d& Z d'd( Z!d)d* Z"d7d,d-Z#d.d/ Z$d0d1 Z%d2d3 Z&d4d5 Z'd6S )8zU
Externally defined elements managers.

This module handles gradients and patterns.

    )radians   )cairo)color)node_formatpreserve_ratiopainturls	transform)rect)size   )Tree)match_features            )normalZmultiplyZscreenZdarkenZlightenc             C   s   || }|j d}|r|d dkr|dd |krt|}|rF|d nd}|dd }||krt| || || }td| ||j | jd||< x,|j D ] \}	}
|	|| kr|
|| |	< qW dS )zAUpdate the attributes of the def according to its href attribute.z"{http://www.w3.org/1999/xlink}hrefr   #r   Nz#%s)urlparentZparent_children
tree_cache)getr	   update_def_hrefr   childrenr   items)surfaceZdef_nameZdef_dictZdef_nodehrefZ	href_urlsZhref_urlZ	href_nameZ	href_nodekeyvalue r!   U/var/www/html/enquirykeeper_venv/lib/python3.6/site-packages/cairosvg/surface/defs.pyr   ,   s     
 r   c             C   s6   x0d
D ](}||j j kr|t| |d |d < qW d	S )zParse the SVG definitions.markergradientpatternpathmaskfiltersidN)r#   r$   r%   r&   r'   r(   )taglowergetattr)r   nodeZdef_typer!   r!   r"   	parse_defA   s    r/   c             C   sL   || j kr$t| || j  t| ||S || jkrHt| || j t| ||S dS )zGradient or pattern color.N)	gradientsr   draw_gradientpatternsdraw_pattern)r   r.   namer!   r!   r"   gradient_or_patternI   s    

r5   c             C   s   t | | dS )zStore a marker definition.N)r/   )r   r.   r!   r!   r"   r#   S   s    r#   c             C   s   t | | dS )zStore a mask definition.N)r/   )r   r.   r!   r!   r"   r'   X   s    r'   c             C   s   t | | dS )zStore a filter definition.N)r/   )r   r.   r!   r!   r"   filter_]   s    r6   c             C   s   t | | dS )z#Store a linear gradient definition.N)r/   )r   r.   r!   r!   r"   linear_gradientb   s    r7   c             C   s   t | | dS )z#Store a radial gradient definition.N)r/   )r   r.   r!   r!   r"   radial_gradientg   s    r8   c             C   s   t | | dS )zStore a pattern definition.N)r/   )r   r.   r!   r!   r"   r%   l   s    r%   c             C   s   || j |d < dS )zStore a clip path definition.r*   N)paths)r   r.   r!   r!   r"   	clip_pathq   s    r:   c             C   s  | j | }d|_||d< |jddkr0d\}}njt| |jdd}t| |jdd}t| |jdd}	t| |jdd}
|	}|
}d	|jd
d|	|
f |d
< t| |jdd||d< t| |jdd||d< t| |jdd||d< t| |jdd||d< |jddkr>|d }|d }d|d |d |d |d f |d< ddlm} ||d| j| }| jj  | jj	|| | jj
|d |j |d |j  | jj|j | jj  dS )z&Paint the mask of the current surface.gopacityZ	maskUnitsuserSpaceOnUsexywidthheightz%s scale(%f, %f)r
    z-10%z120%z%f %f %f %fviewBoxr   )
SVGSurfaceN)r>   r?   )masksr+   r   r   rB   rD   dpicontextsave	translatescaler@   rA   mask_surfacer   restore)r   r.   r4   r<   Z	mask_node	width_ref
height_refr>   r?   r@   rA   rD   rK   r!   r!   r"   
paint_maskv   sD    


rO   c          	   C   sp  | j | }t| |jd |jddkr6d"\}}d}nXt| |jdd}t| |jdd}t| |jddd}	t| |jd	dd}
d
 } }}|jdkrt| |jdd|}t| |jdd|}t| |jdd|}t| |jdd|}tj||||}n|jdkrt| |jdd|}t| |jdd|}t| |jdd|}t| |jdt||}t| |jdt||}tj||d|||}|jddkr|j	tj
d
|	 ddd
|
 | |	 | |
  |jttd|jddj   d}xV|jD ]L}t|t| |jdd
}t|jddt|jd d
}|j|f|  qW |jttd|jddj   | jj| d!S )#zGradients colors.ZgradientTransformZgradientUnitsr=   r>   r?   Zxyr@   1rA   r   ZlinearGradientx1z0%x2z100%y1y2ZradialGradientrz50%cxcyfxfyr   z	EXTEND_%sZspreadMethodpadoffsetz
stop-colorZblackzstop-opacityT)r>   r?   )r0   r
   r   r   r+   r   ZLinearGradientstrZRadialGradient
set_matrixMatrix
set_extendr-   upperr   maxr   floatZadd_color_stop_rgbarG   
set_source)r   r.   r4   Zgradient_noderM   rN   Zdiagonal_refr>   r?   r@   rA   rQ   rR   rS   rT   Zgradient_patternrU   rV   rW   rX   rY   r[   childZ
stop_colorr!   r!   r"   r1      sN    

&
r1   c             C   s  | j | }d|_t| |jd |jdrXt| |jdddoPt| |jdddsdS n,t| |jdddo~t| |jdddsdS |jd	d
krt| |jdd}t| |jdd}t| |jddd}t| |jddd}nt| |jdd}t| |jdd}	t| |jdd| }t| |jdd|	 }t| |jddd| }t| |jddd|	 }d|kr||d< ||d< |jddkrd||	f |d< ddlm}
 |
|d| j| }t	j
|j	}|jt	j |jt	j|j| dd|j| | |  | jj| dS )zDraw a pattern image.r;   ZpatternTransformrC   r@   r   rA   Fr   ZpatternUnitsr=   r>   r?   0ZpatternContentUnitsobjectBoundingBoxzscale(%s, %s)r
   )rD   NT)r2   r+   r
   r   r   poprB   rD   rF   r   ZSurfacePatternr_   ZEXTEND_REPEATr]   r^   r@   rA   rG   rc   )r   r.   r4   Zpattern_noder>   r?   Zpattern_widthZpattern_heightr@   rA   rD   Zpattern_surfaceZpattern_patternr!   r!   r"   r3      sF    


r3   midc             C   s  |dkrxt t|jddt t|jddt t|jddd|_t t|jdd}x|jj D ]}|j| qfW | jj |j| f}|dkr|jj	| dS |d	kr|jj	| x|jr|jj
d
\}}|jj
d
}|jj
d
}	|dkr|	}x|D ]}
|
jdsq |
dd }
|
| jkr | j|
 }|jdd}|dkr`t||	 d }ntt|}| jj }|\}}|jddkrd}nt| | jjd}t| |\}}}}t| |d }|t| |jddd }|t| |jddd }|r|d }|d }n|}|}| jj  x||jD ]r}| jj  | jj|| | jj| | jj|| t| || t|  | jj|| | j| | jj  q(W | jj| q W qW |dkr|jj	| dS )zDraw a marker.startzmarker-startrB   z
marker-midz
marker-end)ri   rh   endr#   Nrj   r   r   r   Zorientre   autor   ZmarkerUnitsr=   zstroke-widthZmarkerWidth3r>   ZmarkerHeightr?      rh   )listr	   r   markersvaluesextendrG   Zget_current_pointZpending_markersappendrg   Ztangents
startswithrb   r   Z	copy_pathr   Zparent_noder   r   new_pathr   rH   rI   rotaterJ   drawrL   Zappend_path)r   r.   positionZall_markersZmarkers_listZpending_markerZ
next_pointro   Zangle1Zangle2Zactive_markerZmarker_nodeZangleZ	temp_pathZ	current_xZ	current_yZ
base_scaleZscale_xZscale_yZtranslate_xZtranslate_yZviewboxr@   rA   Zviewbox_widthZviewbox_heightrd   r!   r!   r"   draw_marker  sx    







rx   c       	      C   s   |d | j krd S || jkr| j| }x|jD ]}|jdkr.|jddkrt| |jdd}t| |jdd}t| |jd	d
d| }t| |jdd
d| }n(t| |jd	d
d}t| |jdd
d}| jj|| q.W d S )Nr*   ZfeOffsetprimitiveUnitsrf   r@   r>   rA   r?   dxr   r   dy)rE   filtersr   r+   r   r   rG   rI   )	r   r.   r4   filter_noderd   r@   rA   rz   r{   r!   r!   r"   prepare_filterT  s    


r~   c             C   sd   |d | j krd S || jkr`| j| }x8|jD ].}|jdkr.| jjtj|jddtd  q.W d S )Nr*   ZfeBlendmoder   )rE   r|   r   r+   rG   Zset_operatorBLEND_OPERATORSr   )r   r.   r4   r}   rd   r!   r!   r"   apply_filter_before_paintingh  s    



r   c       	   	   C   sx  |d | j krd S || jkrt| j| }xH|jD ]<}|jdkr2| jj  | jj  |jddkrt| |jdd}t| |jdd}t| |jdd}t| |jdd}nd\}}}}|t| |jdd	d
7 }|t| |jdd	d
7 }|t| |jdd	d
9 }|t| |jdd	d
9 }t	| t
||||d | jjtt|jdd
 t|jdd
  | jj  | jj  q2W d S )Nr*   ZfeFloodry   rf   r>   r?   r@   rA   r   r   )r>   r?   r@   rA   zflood-colorzflood-opacity)r   r   r   r   )rE   r|   r   r+   rG   rH   rt   r   r   r   dictZset_source_rgbar   r   rb   fillrL   )	r   r.   r4   r}   rd   r>   r?   r@   rA   r!   r!   r"   apply_filter_after_paintingu  s0    




r   c             C   s6  | j j  | j jt| |jddt| |jdd d|krB|d= d|krP|d= d|kr^|d= d|krl|d= |jd}t|}|r|d nd}t||| jd}t|j	sdS |j
d	krd
|krd|kr|d
 |d  |d
< |d< | jt| |  | j| |jdd |jdd | j j  |j
dkr2| j j  dS )z%Draw the content of another SVG file.r>   r?   rC   r'   z"{http://www.w3.org/1999/xlink}hrefr   N)r   r   r   svgr@   rA   r   Zstrokeuse)rG   rH   rI   r   r   r	   r   r   r   Zxml_treer+   Zset_context_sizer   rv   rg   rL   )r   r.   r   Z	tree_urlsr   treer!   r!   r"   r     s6    
$




r   N)rh   )(__doc__mathr   rB   r   Zcolorsr   Zhelpersr   r   r   r	   r
   Zshapesr   unitsr   parserr   featuresr   r   r   r/   r5   r#   r'   r6   r7   r8   r%   r:   rO   r1   r3   rx   r~   r   r   r   r!   r!   r!   r"   <module>   s>   
+4-
R