
    j6                     P   d Z ddlmZmZ ddlmZ ddl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 ej        ej        ej        ej        ej        d	Zej        ej        ej        ej        d
ZddZd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.dS )zs
Externally defined elements managers.

This module handles clips, gradients, masks, patterns and external nodes.

   )calculate_bounding_boxis_non_empty_bounding_box)match_features)paintsize	transform)Tree)rect)cairo)	parse_url)darkenlightenmultiplynormalscreen)nonepadreflectrepeatNc                    ||         }t          |                                          j        }|t                      }||v r||vr|                    |           t          | |||           ||         }t          d| |j        ||j         | j	        |j
                  ||<   |                                D ]\  }}|||         vr|||         |<   dS dS dS )zAUpdate the attributes of the def according to its href attribute.N#)urlurl_fetcherparentparent_children
tree_cacheunsafe)r   get_hreffragmentsetaddupdate_def_hrefr	   r   childrenr   r   items)	surfacedef_namedef_dictchaindef_nodehref	href_nodekeyvalues	            T/home/ubuntu/budget-transfer-bot/.venv/lib/python3.11/site-packages/cairosvg/defs.pyr"   r"       s   !HX&&(())2D}xD--		$x777TN	!HH,@83D/D)(/C C C
 $//++ 	0 	0JC(8,,,*/"3' --	0 	0    c                 l    t          | |           |j        r|j        D ]}t          | |           dS dS )zBRecursively visit all child nodes and process definition elements.N)	parse_defr#   parse_all_defs)r%   nodechilds      r.   r2   r2   4   sX     gt } +] 	+ 	+E7E****+ +	+ 	+r/   c                     dD ]=}||j                                         v r d|v r|t          | | d          |d         <   >dS )zParse the SVG definitions.)markergradientpatternpathmaskfilterimageidsN)taglowergetattr)r%   r3   def_types      r.   r1   r1   @   sa     @ @ tx~~''''DDLL;?GG^^^,,T$Z8	@ @r/   c                     || j         v r(t          | || j                    t          | |||          S || j        v r(t          | || j                   t	          | |||          S dS )zGradient or pattern color.N)	gradientsr"   draw_gradientpatternsdraw_pattern)r%   r3   nameopacitys       r.   gradient_or_patternrJ   I   sx    w   w'8999WdD':::	!	!	!w'7888GT4999 
"	!r/   c                 &    t          | |           dS )zStore a marker definition.Nr1   r%   r3   s     r.   r6   r6   S       gtr/   c                 &    t          | |           dS )zStore a mask definition.NrL   rM   s     r.   r:   r:   X   rN   r/   c                 &    t          | |           dS )zStore a filter definition.NrL   rM   s     r.   filter_rQ   ]   rN   r/   c                 &    t          | |           dS )z#Store a linear gradient definition.NrL   rM   s     r.   linear_gradientrS   b   rN   r/   c                 &    t          | |           dS )z#Store a radial gradient definition.NrL   rM   s     r.   radial_gradientrU   g   rN   r/   c                 &    t          | |           dS )zStore a pattern definition.NrL   rM   s     r.   r8   r8   l   rN   r/   c                 2    d|v r|| j         |d         <   dS dS )zStore a clip path definition.r=   N)pathsrM   s     r.   	clip_pathrY   q   s(    t||$(d4j!!! |r/   c                    | j         |         }d|_        ||d<   |                    d          dk    rd\  }}nt          | |                    d          d          }t          | |                    d          d          }t          | |                    d          d          }	t          | |                    d	          d          }
|	p| j        }|
p| j        }t          | |                    dd
          |          |d<   t          | |                    dd
          |          |d<   t          | |                    d	d          |          |d	<   t          | |                    dd          |          |d<   |                    d          dk    r |d         }|d         } dj        di ||d<   ddlm}  ||d| j	        |           }| j
                                         | j
                            ||           | j
                            |d         |j        z  |d	         |j        z             | j
                            |j                   | j
                                         dS )z&Paint the mask of the current surface.grI   	maskUnitsuserSpaceOnUsexyr_   r`   widthheightz-10%z120%z{x} {y} {width} {height}viewBoxr   
SVGSurfaceN )masksr?   getr   ra   rb   formatr%   re   dpicontextsave	translatescalemask_surfacer   restore)r%   r3   rH   rI   	mask_node	width_ref
height_refr_   r`   ra   rb   re   ro   s                r.   
paint_maskrt   w   sq   d#IIM"Ii}}[!!%555 (	::$((3----$((3----Wdhhw//55gtxx11377*W]	-w~
'9==f#=#=yIIIcN'9==f#=#=zJJIcNx00*> >Ihw//< <Ig }}[!!%555cNcN@9@MM9MM	)######:iw{GDDLOOa###O'\//(l113 3 3 O  !3444Or/   c                    | j         |         }|                    d          dk    rd\  }}d}nt          | |          }t          |          sdS t	          | |d         d          }	t	          | |d         d	          }
t	          | |d
         d          }t	          | |d         d	          }dx}x}}|j        dk    rt	          | |                    dd          |          }t	          | |                    dd          |          }t	          | |                    dd          |          }t	          | |                    dd          |          }t          j        ||||          }n|j        dk    rt	          | |                    dd          |          }t	          | |                    dd          |          }t	          | |                    dd          |          }t	          | |                    dt          |                    |          }t	          | |                    dt          |                    |          }t          j	        ||d|||          }ndS |                    d          dk    r:|
                    t          j        d|z  ddd|z  |	 |z  |
 |z                       t          | |                    d          |           d}|j        D ]}t          |t	          | |                    d          d                    }|                     |                    dd          t!          |                    dd                    |z            } |j        |g|R   |                    t&                              |                    dd           t&          d                               | j                            |           d!S )"zGradients colors.gradientUnitsr]   r^   xyF    r_   r   r`         linearGradientx1z0%x2z100%y1y2radialGradientrz50%cxcyfxfygradientTransformoffsetz
stop-colorblackzstop-opacityspreadMethodr   T)rD   rh   r   r   r   r?   r   LinearGradientstrRadialGradient
set_matrixMatrixr   r#   max	map_colorfloatadd_color_stop_rgba
set_extendEXTEND_OPERATORSrk   
set_source)r%   r3   rH   rI   gradient_noderr   rs   diagonal_refbounding_boxr_   r`   ra   rb   r|   r}   r~   r   gradient_patternr   r   r   r   r   r   r4   
stop_colors                             r.   rE   rE      s   %d+M))-=== (	:-gt<<(66 	5,q/3//,q/3//Wl1os33g|A44011	1J,,,'=,,T488)DD'=,,T6::IFF'=,,T488*EE'=,,T488*EE /BB??		.	.	.-++C77FF'=,,T5999EE'=,,T599:FF'=,,T3r77;;YGG'=,,T3r77;;ZHH /B2r1EE u ))-===##ELIq!QZ1ucFl%D %D 	E 	E 	E ""#6779IK K K F' B BVT'599X+>+>BBCC&&IIlG,,%))NA..//'9; ;
 	-,VAjAAAAA  0 4 4.%002B52I!K !K L L L O/0004r/   c           
         | j         |         }t          |                    dd                    |z  |d<   d|_        t	          | |                    d                     |                    d          rMt          | |                    dd          d          r%t          | |                    dd          d          sdS nLt          | |                    dd	          d          r%t          | |                    dd	          d          sdS |                    d
          dk    rt          | |                    d          d          }t          | |                    d          d          }t          | |                    dd	          d          }t          | |                    dd	          d          }nt          | |          \  }	}	}
}t          | |                    d          d          |
z  }t          | |                    d          d          |z  }t          | |                    dd          d          |
z  }t          | |                    dd          d          |z  }d|vr/||d<   ||d<   |                    d          dk    rd|
 d| d|d<   |dk    s|dk    rdS ddlm	}  ||d| j
        |           }t          j        |j                  }|                    t          j                   |                    t          j        |j        |z  d	d	|j        |z  | |                      | j                            |           dS )zDraw a pattern image.rI   r   r[   patternTransformrc   ra   rb   Frx   patternUnitsr]   r_   r`   1patternContentUnitsobjectBoundingBoxzscale(z, )r   g        rd   NT)rF   r   rh   r?   r   r   r   popr%   re   rj   r   SurfacePatternr   EXTEND_REPEATr   r   ra   rb   rk   r   )r%   r3   rH   rI   pattern_noder_   r`   pattern_widthpattern_height_ra   rb   re   pattern_surfacepattern_patterns                  r.   rG   rG      s   #D)L#L$4$4Y$B$BCCgMLLg|''(:;;<<<	"" Wl..w::A>> 	Wl..x;;Q??	5	 Wl..w::A>> 	Wl..x;;Q??	5''+;;;,**3//55,**3//55Wl&6&6w&B&BAFFg|'7'7!'D'DaHH4WdCC1eV,**3//33e;,**3//33f<,**7C88!<<uD 	 ,**8S991==F 	L(($1L!%3L" 566:MMM,GU,G,Gf,G,G,G[) ~44u###### jtW['JJO*?+@AAOu2333u|-q!/!aR 9  9 : : : O///4r/   c                    d|v r|d         | j         v rdS || j        v r<| j        |         }|j        D ](}|j        dk    r|                    d          dk    rt          | |                    d          d          }t          | |                    d          d	          }t          | |                    d
d          d          |z  }t          | |                    dd          d          |z  }nJt          | |                    d
d          d          }t          | |                    dd          d          }| j                            ||           (dS dS )z(Apply a filter transforming the context.r=   NfeOffsetprimitiveUnitsr   ra   r_   rb   r`   dxrx   r   dy)rg   filtersr#   r?   rh   r   rk   rm   )	r%   r3   rH   filter_noder4   ra   rb   r   r   s	            r.   prepare_filterr     s^   t||T
gm33wod+ ) 	2 	2EyJ&&??#3448KKK $((7*;*;SAAE!'488H+=+=sCCFguyyq'9'91==EBguyyq'9'91==FBBguyyq'9'91==Bguyyq'9'91==B))"b111 	2 	2r/   c           	      .   d|v r|d         | j         v rdS || j        v rt| j        |         }|j        D ]a}|j        dk    rR| j                            t                              |                    dd          t          d                              `dS dS )z4Apply a filter transforming the painting operations.r=   NfeBlendmoder   )rg   r   r#   r?   rk   set_operatorBLEND_OPERATORSrh   )r%   r3   rH   r   r4   s        r.   apply_filter_before_paintingr   "  s    t||T
gm33wod+ ) 	M 	MEyI%%,,_-@-@IIfh//1J.L .L M M M 	M 	Mr/   c                    d|v r|d         | j         v rdS || j        v re| j        |         }|j        D ]Q}|j        dk    r@| j                                         | j                                         |                    d          dk    rt          | |                    d          d          }t          | |                    d          d          }t          | |                    d          d          }t          | |                    d	          d          }nd
\  }}}}|t          | |                    dd          d          z  }|t          | |                    dd          d          z  }|t          | |                    dd          d          z  }|t          | |                    d	d          d          z  }t          | t          ||||                      | j        j        |                     t          |                    d                    d         t          |                    dd                                | j                                         | j                                         QdS dS )z@Apply a filter using the painted surface to transform the image.r=   NfeFloodr   r   r_   r`   ra   rb   )rx   rx   r   r   rx   r   )r_   r`   ra   rb   zflood-colorzflood-opacity)rg   r   r#   r?   rk   rl   new_pathrh   r   r
   dictset_source_rgbar   r   r   fillrp   )	r%   r3   rH   r   r4   r_   r`   ra   rb   s	            r.   apply_filter_after_paintingr   0  sb   t||T
gm33wod+ ) 	* 	*EyI%%$$&&&((***??#3448KKKWdhhsmmS99AWdhhsmmS99A $((7*;*;SAAE!'488H+=+=sCCFF*4'Aq%T'599S!#4#4a888T'599S!#4#4a888guyy!'<'<a@@@$w		(A(>(>BBBWdQ!5HHHIII//1B1B%))M2233A6%))OQ77882: 2: ; ; $$&&&'')))/ 	* 	*r/   c           	         | xj         dz  c_         |j        s| j         dk    rt          d          | j                                         | j                            t          | |                    d          d          t          | |                    d          d                     d|v r|d= d|v r|d= d|v r|d= d|v r|d= t          |	                                          
                                }	 t          ||j        || j        |j                  }n*# t          $ r | j                                         Y d	S w xY wt!          |j                  s| j                                         d	S |j        d
v r&d|_        d|v rd|v r|d         |d         c|d<   |d<   |                     |           |                    dd	           |                    dd	           | j                                         d	S )z%Draw the content of another SVG node.r   i u8   Abort rendering: more than 100 000 referenced elementsr_   r`   rc   r:   )r   r   r   r   r   N)svgsymbolr   ra   rb   r   stroke)reference_countr   
ValueErrorrk   rl   rm   r   rh   r   r   geturlr	   r   r   	TypeErrorrp   r   xml_treer?   draw)r%   r3   r*   trees       r.   user   O  s0   q ; U72W<<STTTOOWdhhsmmS))4#+L+LN N N
d{{I
d{{IDO~~LT]]__%%,,..D$"24)$+? ? ?    !!! $-(( !!!x$$$ d??x4//,0M4>)DM4>LLHHVTHHXtOs   :#D #EE)N)/__doc__r   r   r   featuresr   helpersr   r   r   parserr	   shapesr
   r%   r   r   r   OPERATOR_DARKENOPERATOR_LIGHTENOPERATOR_MULTIPLYOPERATOR_OVEROPERATOR_SCREENr   EXTEND_NONE
EXTEND_PADEXTEND_REFLECTr   r   r"   r2   r1   rJ   r6   r:   rQ   rS   rU   r8   rY   rt   rE   rG   r   r   r   r   rf   r/   r.   <module>r      s    L K K K K K K K $ $ $ $ $ $ + + + + + + + + + +                         #%'!#  #!	  0 0 0 0(	+ 	+ 	+@ @ @: : :  
  
  
  
  
  
) ) )$ $ $N: : :z/ / /d2 2 2*M M M* * *>' ' ' ' 'r/   