
     h`5                        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j0                  ej2                  ej4                  ej6                  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.y)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                               j                  }|
t               }||v r||vr|j	                  |       t        | |||       ||   }t        d| |j                  ||j                   | j                  |j                        ||<   |j                         D ]  \  }}|||   vs|||   |<    yyy)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	            i/home/developers/rajanand/mypropertyqr-fmb-refixing-v2/venv/lib/python3.12/site-packages/cairosvg/defs.pyr"   r"       s    !HX&&()22D}xD-		$x7TN	!H:H,@,@83D3D/D))(//C
 $//+ 	0JC(8,,*/"3'	0 .    c                 p    t        | |       |j                  r|j                  D ]  }t        | |        yy)zBRecursively visit all child nodes and process definition elements.N)	parse_defr#   parse_all_defs)r%   nodechilds      r.   r2   r2   4   s9     gt }}]] 	+E7E*	+ r/   c                     dD ]9  }||j                   j                         v s d|v s%|t        | | d      |d   <   ; y)zParse the SVG definitions.)markergradientpatternpathmaskfilterimageidsN)taglowergetattr)r%   r3   def_types      r.   r1   r1   @   sK     @ txx~~''DDL;?GGz^,T$Z8	@r/   c                     || j                   v r%t        | || j                          t        | |||      S || j                  v r%t        | || j                         t	        | |||      S y)zGradient or pattern color.N)	gradientsr"   draw_gradientpatternsdraw_pattern)r%   r3   nameopacitys       r.   gradient_or_patternrJ   I   si    w   w'8'89WdD'::	!!	!w'7'78GT499 
"r/   c                     t        | |       y)zStore a marker definition.Nr1   r%   r3   s     r.   r6   r6   S       gtr/   c                     t        | |       y)zStore a mask definition.NrL   rM   s     r.   r:   r:   X   rN   r/   c                     t        | |       y)zStore a filter definition.NrL   rM   s     r.   filter_rQ   ]   rN   r/   c                     t        | |       y)z#Store a linear gradient definition.NrL   rM   s     r.   linear_gradientrS   b   rN   r/   c                     t        | |       y)z#Store a radial gradient definition.NrL   rM   s     r.   radial_gradientrU   g   rN   r/   c                     t        | |       y)zStore a pattern definition.NrL   rM   s     r.   r8   r8   l   rN   r/   c                 2    d|v r|| j                   |d   <   yy)zStore a clip path definition.r=   N)pathsrM   s     r.   	clip_pathrY   q   s     t|$(d4j! r/   c                    | j                   |   }d|_        ||d<   |j                  d      dk(  rd\  }}nt        | |j                  d      d      }t        | |j                  d      d      }t        | |j                  d      d      }	t        | |j                  d	      d      }
|	xs | j                  }|
xs | j
                  }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j                  di ||d<   ddlm}  ||d| j                  |       }| j                  j                          | j                  j                         | j                  j                  |d   |j                  z  |d	   |j
                  z         | j                  j                  |j                         | j                  j!                          y)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   s   d#IIM"Ii}}[!%55 (	:$((3--$((3--Wdhhw/5gtxx137*W]]	-w~~
'9==f#=yIIcN'9==f#=zJIcNx0*>Ihw/<Ig }}[!%55cNcN@9@@M9M	)#iw{{GDLOOOOa#OO'\///(l1113 OO  !3!34OOr/   c                 z   | j                   |   }|j                  d      dk(  rd\  }}d}n^t        | |      }t        |      syt	        | |d   d      }	t	        | |d   d	      }
t	        | |d
   d      }t	        | |d   d	      }dx}x}}|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|||      }ny|j                  d      dk7  r7|j                  t        j                  dz  dddz  	 |z  
 |z               t        | |j                  d      |       d}|j                  D ]y  }t        |t	        | |j                  d      d            }| j                  |j                  dd      t!        |j                  dd            |z        } |j"                  |g|  { |j%                  t&        j                  |j                  dd       t&        d                 | j(                  j+                  |       y!)"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,q/3/,q/3/Wl1os3g|A4011	1J,,'=,,T48)D'=,,T6:IF'=,,T48*E'=,,T48*E //BB?			.	.-++C7F'=,,T599E'=,,T59:F'=,,T3r7;YG'=,,T3r7;ZH //B2r1E  )-==##ELLIq!QZ1ucFl%D 	E ""#679IK F'' BVT'599X+>BC&&IIlG,%))NA./'9;
 	-,,VAjAB  0 4 4.%02B52I!K L OO/0r/   c           
         | j                   |   }t        |j                  dd            |z  |d<   d|_        t	        | |j                  d             |j                  d      r;t        | |j                  dd      d      rt        | |j                  dd      d      s<yt        | |j                  dd	      d      rt        | |j                  dd	      d      sy|j                  d
      dk(  rst        | |j                  d      d      }t        | |j                  d      d      }t        | |j                  dd	      d      }t        | |j                  dd	      d      }nt        | |      \  }	}	}
}t        | |j                  d      d      |
z  }t        | |j                  d      d      |z  }t        | |j                  dd      d      |
z  }t        | |j                  dd      d      |z  }d|vr*||d<   ||d<   |j                  d      dk(  rd|
 d| d|d<   |dk(  s|dk(  ryddlm	}  ||d| j                  |       }t        j                  |j                        }|j                  t        j                         |j                  t        j                   |j"                  |z  d	d	|j$                  |z  | |              | j&                  j)                  |       y)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CgMLLg|''(:;<	"Wl..w:A>Wl..x;Q?Wl..w:A>Wl..x;Q?'+;;,**3/5,**3/5Wl&6&6w&BAFg|'7'7!'DaH4WdC1eV,**3/3e;,**3/3f<,**7C8!<uD 	 ,**8S91=F 	L($1L!%3L" 56:MM.4UG2fXQ,G[) ~4# tW[['JO**?+@+@AOu223u||-q!/!aR 9 : OO/r/   c                 v   d|v r|d   | j                   v ry|| j                  v r| j                  |   }|j                  D ]  }|j                  dk(  s|j	                  d      dk(  ryt        | |j	                  d      d      }t        | |j	                  d      d	      }t        | |j	                  d
d      d      |z  }t        | |j	                  dd      d      |z  }n:t        | |j	                  d
d      d      }t        | |j	                  dd      d      }| j                  j                  ||        yy)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
gmm3wood+ )) 	2EyyJ&??#348KK $((7*;SAE!'488H+=sCFguyyq'91=EBguyyq'91=FBguyyq'91=Bguyyq'91=B))"b1	2 r/   c           	      :   d|v r|d   | j                   v ry|| j                  v rw| j                  |   }|j                  D ]X  }|j                  dk(  s| j                  j                  t        j                  |j                  dd      t        d                Z yy)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
gmm3wood+ )) 	MEyyI%,,_-@-@IIfh/1J.L M	M r/   c                    d|v r|d   | j                   v ry|| j                  v r| j                  |   }|j                  D ]  }|j                  dk(  s| j                  j                          | j                  j                          |j                  d      dk(  rqt        | |j                  d      d      }t        | |j                  d      d      }t        | |j                  d      d      }t        | |j                  d	      d      }nd
\  }}}}|t        | |j                  dd      d      z  }|t        | |j                  dd      d      z  }|t        | |j                  dd      d      z  }|t        | |j                  d	d      d      z  }t        | t        ||||              | j                  j                  | j                  t        |j                  d            d   t        |j                  dd                    | j                  j                          | j                  j!                            yy)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  s   t|T
gmm3wood+ )) 	*EyyI%$$&((*??#348KKWdhhsmS9AWdhhsmS9A $((7*;SAE!'488H+=sCF*4'Aq%T'599S!#4a88T'599S!#4a88guyy!'<a@@$w		(A(>BBWdQ!5HI///1B1B%))M23A6%))OQ782: ; $$&'')+	* r/   c           	      h   | j                   j                          | j                   j                  t        | |j	                  d      d      t        | |j	                  d      d             d|v r|d= d|v r|d= d|v r|d= d|v r|d= t        |j                               j                         }	 t        ||j                  || j                  |j                        }t        |j                        s| j                   j                          y|j                   dv r d|_        d	|v rd
|v r|d	   |d
   c|d	<   |d
<   | j#                  |       |j	                  dd       |j	                  dd       | j                   j                          y# t        $ r | j                   j                          Y yw xY w)z%Draw the content of another SVG node.r_   r`   rc   r:   )r   r   r   r   r   N)svgsymbolr   ra   rb   r   stroke)rk   rl   rm   r   rh   r   r   geturlr	   r   r   r   	TypeErrorrp   r   xml_treer?   draw)r%   r3   r*   trees       r.   user   O  s   OOOOWdhhsmS)4#+LN
d{I
d{IDO~LT]]_%,,.D$"2"24))$++? $--(!xx$$ d?x4/,0M4>)DM4>LLHHVTHHXtOO%  !s   /.F #F10F1)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 $ + +     ##%%''!!## ##!!	 0(	+@:





)$N:z/d2*M*>$r/   