
    mhv                        d Z ddlZddlmZ ddlmZ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mZ d	dlmZmZmZmZmZ d	dlmZmZ d	dlmZ d	dlmZm Z m!Z!m"Z"m#Z#m$Z$ d	dl%m%Z% d	dl&m'Z'm&Z&m(Z(m)Z) d	dl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 e%eee ee!ee#e"e$ee%e%e%edZ3 e4d      Z5 e4d      Z6 e4d      Z7 G d d      Z8 G d d      Z9 G d de9      Z:y)zRender SVG images.    N)suppress)coshypotpiradianssinsqrt)ElementTree)ElementWrapper   get_url_attribute   )parse_declarationsparse_stylesheets)apply_filters	clip_pathdraw_gradient_or_pattern
paint_maskuse)imagesvg)path)circleellipselinepolygonpolylinerect)text)EMPTY_BOUNDING_BOXbounding_boxextend_bounding_boxis_valid_bounding_box)
PointErroralpha_valuecolor	normalize	parse_urlpreserve_ratiosize	transform)ar   clipPathr   r   r   r   r   r   r   r   r    textPathtspanr   )clip	clip-pathfilterheightidmaskopacityoverflowrotate
stop-colorzstop-opacitystyler,   transform-originviewBoxwidthxydxdy"{http://www.w3.org/1999/xlink}hrefhref)fillzflood-colorzlighting-colorr:   stroke)	r.   r3   gradientr   markerr6   r   patternsymbolc                       e Zd ZdZd Zd ZddZed        Zed        Z	ed        Z
ed	        Zed
        Zd Zd Zd Zd Zd Zed        Zd ZddZd Zd Zd Zd Zy)NodezAn SVG document node.c                     || _         |j                  | _        || _        d | _        |j                  j
                  j                         | _        g | _        d | _        y N)	_wrapperetree_element_etree_node_style	_childrenattribcopyverticesr"   )selfwrapperr;   s      i/var/www/pru.catia.catastroantioquia-mas.com/tasa/lib/python3.12/site-packages/weasyprint/svg/__init__.py__init__zNode.__init__[   sP    "00++22779     c                 B    t        | j                  | j                        S )z<Create a deep copy of the node as it was when first created.)rL   rO   rR   rW   s    rY   rU   z	Node.copyf   s    DMM4;;//r[   Nc                 :    | j                   j                  ||      S )zGet attribute.)rT   get)rW   keydefaults      rY   r_   zNode.getj   s    {{sG,,r[   c                 T    | j                   j                  j                  dd      d   S )zXML tag name with no namespace.}r   )rQ   tagsplitr]   s    rY   re   zNode.tagn   s(     ##))#q1"55r[   c                 .    | j                   j                  S )zXML node text.)rQ   r    r]   s    rY   r    z	Node.texts        $$$r[   c                 .    | j                   j                  S )zText after the XML node.)rQ   tailr]   s    rY   rj   z	Node.tailx   rh   r[   c                 *    | j                  d      dk7  S )z!Whether node should be displayed.displaynone)r_   r]   s    rY   rl   zNode.display}   s     xx	"f,,r[   c                 F    | j                   xr | j                  d      dk7  S )zWhether node is visible.
visibilityhidden)rl   r_   r]   s    rY   visiblezNode.visible   s!     ||B 6( BBr[   c                    |j                   }| j                  j                         D ],  \  }}|t        vs||j                  vs||j                  |<   . |j	                  d      x}rt        |      \  }}ng g }}| j                  \  }}	|j                  |      D 
cg c]  }
|
d   	 }}
|	j                  |      D 
cg c]  }
|
d   	 }}
||g||gfD ]0  }|D ])  }|D ]"  \  }}|j                         |j                  |<   $ + 2 t        D ]6  }|j	                  |      dk(  s|j	                  dd      |j                  |<   8 |j                  j                         j                         D ];  \  }}|dk(  s| j	                  |      }||j                  |= -||j                  |<   = |j                  dv rA|j                  |d	d	
      \  }}|D cg c]  }|j                   c}j                   _        yyc c}
w c c}
w c c}w )z>Apply CSS cascade and other related operations to given child.r;   rd   currentColorr'   blackinheritNr    r/   r-   T)trailing_space	text_root)rO   rT   itemsNOT_INHERITED_ATTRIBUTESr_   r   rR   matchstripCOLOR_ATTRIBUTESrU   re   text_childrenrQ   etree_children)rW   childrX   r`   value
style_attrnormal_attrimportant_attrnormal_matcherimportant_matcherrulenormal	importantdeclarations_listdeclarationsnamechildren_s                     rY   cascadezNode.cascade   s&   .. ++++- 	.JC22ell*(-ELL%	. 7++:+*<Z*H'K*,bK,0KK))'5';';G'DEt$r(EE*;*A*A'*JK$T"XK	K"(;-^DT!U 	7 1 7#/ 7KD%).ELL&77	7 $ 	@Cyy~/$)IIgw$?S!	@
  ,,++-335 	.JC	!=S)(-ELL%	. 9911-- . >KHa 08-9&+!!-9ENN) 2- FK0-9s   G=?HHc                     | j                   Rg }| j                  D ]:  }t        || j                        }| j	                  |       |j                  |       < || _         t        | j                         S )z&Yield node children, handling cascade.)rS   rO   rL   rR   r   appenditer)rW   r   rX   r   s       rY   __iter__zNode.__iter__   sd    >>!H== 'Wdkk2U#&' &DNDNN##r[   c                 |    | j                  d      }|r)t        d t        |      j                         D              S y)z&Get node viewBox as a tuple of floats.r=   c              3   2   K   | ]  }t        |        y wrN   float).0numbers     rY   	<genexpr>z#Node.get_viewbox.<locals>.<genexpr>   s     P6vP   N)r_   tupler(   rf   )rW   viewboxs     rY   get_viewboxzNode.get_viewbox   s7    ((9%PYw5G5M5M5OPPP r[   c                 <    dD ]  }t        | ||d      x}s|c S  y)z4Get the href attribute, with or without a namespace.rC   rD   T)allow_relativeNr   )rW   base_url	attr_nameurls       rY   get_hrefzNode.get_href   s-    G 	I'iRVWWsW
	r[   c                 J    dD ]  }| j                   j                  |d         y)z8Remove the href attributes, with or without a namespace.r   N)rT   pop)rW   r   s     rY   del_hrefzNode.del_href   s#    G 	-IKKOOIt,	-r[   c                     | sy|rt        j                  dd|       S t        j                  dd|       } t        j                  dd|       } t        j                  dd|       S )z>Replace newlines by spaces, and merge spaces if not preserved. z[
	] z[
]	z +)resub)stringpreserves     rY   process_whitespacezNode.process_whitespace   sW     66*c622VVHb&1FVVD#v.F66$V,,r[   c                 p    | D ]1  }|j                  d      |k(  r|c S |j                  |      }|s/|c S  y)z2Get a child with given id in the whole child tree.r5   N)r_   	get_child)rW   id_r   
grandchilds       rY   r   zNode.get_child   s=     	"Eyy#%-J!!	"r[   c                 V   g }d}| j                  |      dk(  }| j                  |j                  j                  |      | j                  _        |r,|s*| j                  j                  d      | j                  _        t        | j                  d            j                         j                  d      D cg c]  }|rt        |       }}|j                         }	|r| j                  ||	       | j                  r| j                  j                  d      }t        |j                               }
|
D ]=  }|j                  }|j                  dv rht!        || j"                        }d|j                  _        |j                  }|j%                         |j                  _        t'        j(                  |      }nt!        || j"                        }|j                  |      dk(  }| j                  |j                  |      |j                  _        |j+                  ||      \  |_        }|j                  j                  d      }|rd|vr|j                  ||	       |j/                  |       | j                  |j0                  |      }|r||
d   u r|s|j3                  d      }|sut5        j6                  d      }t!        t'        j(                  |      | j"                        }||j                  _        |r|j                  ||	       |r,|s*|j                  j                  d      |j                  _        |j                  r|j                  j                  d      }|j/                  |       @ |r.|s,|s*| j                  j3                  d      | j                  _        ||fS c c}w )	z<Handle text node by fixing whitespaces and flattening tails.z+{http://www.w3.org/XML/1998/namespace}spacer   r   r9   )z {http://www.w3.org/2000/svg}treftrefr0   rd   z!{http://www.w3.org/2000/svg}tspan)r_   r   rP   r    rQ   lstripr(   r|   rf   r   rU   pop_rotationendswithr   iter_childrenre   rL   rR   flattenr   from_xml_rootr~   r   r   rj   rstripr
   Element)rW   elementrw   rx   r   spacer   ioriginal_rotater9   element_childrenchild_elementr   
child_nodechild_preserverj   anonymous_etree	anonymouss                     rY   r~   zNode.text_children   s)   =88E?j0 $ 7 7!!&&!2($(II$4$4S$9D! dhhx()//177<C@A !HC C !%%'ov699!YY//4N !6!6!89- %	+M!//EyyHH!-=
-4
&&* #..).!!& . < <U C!-=
'^^E2j@N*.*A*A

N+,J""'2<2J2J~3//J'__55c:N8:#=''@OOJ'**5::x@D].>r.BB;;s+D"-"5"57#9 "00A4;;P	-1	%%*"**?FC!(1:1F1Fs1KI)).>>%.^^%<%<S%AN	*K%	+N Xh$(II$4$4S$9D!''gCs   5N&c                    | j                   xs dg}t        |       D ]Q  }|j                  |j                                |j                  |j                  xs d       | j                  |       S dj                  |      S )z)Flatten text in node and in its children.r   )r    listr   r   rj   removejoin)rW   flattened_textr   s      rY   r   zNode.flatten%  sm    ))/r*$Z 	E!!%--/2!!%**"23KK	 ww~&&r[   c                     dj                  fdt        t        | j                              D              | j                  d<   y)zMerge nested letter rotations.r   c              3   `   K   | ]%  }t        rj                  d       nd          ' yw)r   rd   N)strr   )r   r   r   r9   s     rY   r   z$Node.pop_rotation.<locals>.<genexpr>0  s/      ), 

1_R-@A),s   +.r9   N)r   rangelenr    rT   )rW   r   r9   s    ``rY   r   zNode.pop_rotation.  s4     # ),3tyy>*), !,Hr[   c                 >    t        dt        fdfdi      | _        y)u$   Override node’s children iterator.rL   r   c                     S rN    )r   iterators    rY   <lambda>z$Node.override_iter.<locals>.<lambda>9  s    H r[   N)typerL   	__class__)rW   r   s    `rY   override_iterzNode.override_iter4  s      TGj*<=?r[   c                 R   ||_         ||_        t        ||      t        d      z  |_        | j                         x}r|d   |d   c|_        |_        n#|j                   |j                  c|_        |_        t        |j                  |j                        t        d      z  |_        y)z="Set SVG concrete and inner widths and heights from svg node.r      N)	concrete_widthconcrete_heightr   r	   normalized_diagonalr   inner_widthinner_heightinner_diagonal)rW   r   r   r   r   s        rY   set_svg_sizezNode.set_svg_size;  s    +-"'"H4PQ7"R&&((7(07
GAJ-COS-030B0BCDWDW-COS-"3??C4D4DEQOr[   rN   F)__name__
__module____qualname____doc__rZ   rU   r_   propertyre   r    rj   rl   rq   r   r   r   r   r   staticmethodr   r   r~   r   r   r   r   r   r[   rY   rL   rL   X   s    	!0- 6 6 % % % % - - C C*9Z	$Q-
 
- 
-"=(~',?
Pr[   rL   c                   z    e Zd ZdZd Zd Zd Zd Zd Zd Z	ddZ
d	 Zed
        ZddZd Zd Zd Zd ZddZy)SVGzAn SVG document.c                    t        j                  |      }t        ||      }t        ||      | _        || _        i | _        i | _        i | _        i | _	        i | _
        i | _        i | _        i | _        i | _        ddg| _        ddg| _        d| _        | j                  j%                  | j                         | j'                  | j                         | j)                          y )Nr   )r   r   r   rL   treer   filters	gradientsimagesmarkersmaskspatternspathssymbols	use_cachecursor_positioncursor_d_positiontext_path_widthr   
parse_defsinherit_defs)rW   r   r   rX   r;   s        rY   rZ   zSVG.__init__L  s     ..t4!'3/%(	

 !1v"#Q 		$))$		"r[   c                     | j                   j                  dd      }d|v rd}nt        ||      }| j                   j                  dd      }d|v rd}||fS t        ||      }||fS )z Get intrinsic size of the image.r>   z100%%Nr4   )r   r_   r+   )rW   	font_sizeintrinsic_widthintrinsic_heights       rY   get_intrinsic_sizezSVG.get_intrinsic_sized  s}    ))--8/!"O"?I>O99==6:""#  000  $$4i@ 000r[   c                 6    | j                   j                         S )z*Get document viewBox as a tuple of floats.)r   r   r]   s    rY   r   zSVG.get_viewboxt  s    yy$$&&r[   c                 ^    t        ||| j                        t        ||| j                        fS )z.Compute size of an x/y or width/height couple.)r+   r   r   )rW   r?   r@   r   s       rY   pointz	SVG.pointx  s2     It//0It0013 	3r[   c                 0    t        ||| j                        S )z'Compute size of an arbirtary attribute.)r+   r   )rW   lengthr   s      rY   r  z
SVG.length~  s    FIt':':;;r[   c                     || _         | j                  j                  | ||       || _        || _        || _        | j                  | j                  t        d             y)zDraw image on a stream.12ptN)streamr   r   r   url_fetchercontext	draw_noder+   )rW   r  r   r   r   r  r  s          rY   drawzSVG.draw  sM     		t^_E &tyy$v,/r[   c                    |j                   dk(  ryt        |j                  dd      ||      }g }|r| j                  j	                          | j
                  j                  t        |j                  d            j                        }|rt        | |||       | j                  ||       t        |j                  dd            }|rLd|cxk  rdk  rAn n>|j                  | j                         | j                  j                  dddd      | _        t        |j                  d	            j                  }|r|| j                  v r| j                  j                  }| j                  |   } |j                  d
      dk(  r| j                  |j                  d      |j                  d      |      \  }	}
| j                  |j                  d      |j                  d      |      \  }}| j                  j                  |||	|
       |j                   j                   }d|j                   _         | j#                  ||d       ||j                   _         | j                  j%                  dddd       | j                  j'                          | j                  j)                          | j                  j                  }|j*                  r0 | j                  j                  ||j,                  z  j.                    d}|j0                  rt2        j                  |j                         t4        k(  rb|j                  d      x}dv rBd}| j                  j                  dddd      }|j                  | j                         || _        t6        |_        |j                   dk(  r| j:                  }| j<                  }|j>                  rD|j                   t2        v r2tA        tB              5  t3        |j                      | ||       ddd       |j0                  rO|j                   tD        vr<|D ]6  }|xr/ |j                   dk(  xs d|jF                  v xs d|jF                  v }|r| j                  }|d   | _        | j#                  |||       |r| _        t2        j                  |j                         t4        k(  xr4 t2        j                  |j                         t4        k(  xr |j>                  }|stI        |j8                        s|j8                  dd \  }}||j8                  d   z   }||j8                  d   z   }tK        |j8                  ||f||ff      |_        9 |j                   dk(  r!| jL                  jO                  tP               |r| j                  jR                  }|jU                         | _        | j                  j	                          tI        |j8                        r|j8                  \  }	}
}}|	|z
  |
|z
  |	|z   |z   |
|z   |z   fjV                  d   dd dk(  r|dz  n|}|j                   dk(  sd|jF                  v sd|jF                  v r| j                  j                  |        | j                  jY                  |       | j                  j[                          | j\                  j                  t        |j                  d            j                        }|rt_        | |||       |r| ja                  ||       | jc                  |||       |rd|cxk  rdk  rn n| je                  ||      }tI        |      sdd| jf                  | jh                  f}|\  }	}
}}|	|
|	|z   |
|z   f| j                  jV                  d   dd | j                  jR                  }|jU                         | _        | j                  jk                  |dd        | j                  jY                  |       |j                   dk(  rddg| _6        ddg| _7        d| _8        |r| j                  j[                          yy# 1 sw Y   GxY w)!zDraw a node.defsNz	font-size1emr3   r7   r   r   r2   clipPathUnitsobjectBoundingBoxr?   r@   r>   r4   )r-   defgFfill_strokeztext-anchor)middleendTr   r    rd   r   r   BBoxr  )r  r6   )rF   rE   )9re   r+   r_   r  
push_stater   r)   fragmentr   r,   r&   r   	add_groupr   ctmr  rQ   r  	rectangler1   r  determinantinvertvaluesrl   TAGSr    r!   text_bounding_boxr   r   rq   r   r%   	DEF_TYPESrT   r$   r#   r   r   r   r5   r   extradraw_x_object	pop_stater   r   r  draw_markerscalculate_bounding_boxr   r   	set_alphar   r   r   ) rW   noder   r  original_streamsfilter_r7   r   old_ctmr?   r@   r>   r4   original_tagnew_ctmtext_anchor_shifttext_anchorgroupr   r   r   	new_chunk
new_streamvisible_text_childx1y1x2y2group_idx_alignr6   boxs                                    rY   r  zSVG.draw_node  s   88v +u5y)L	KK""$ ,,""9TXXh-?#@#I#IJ$gy9 	tY' dhhy!451+!+##DKK0++//1a;DK dhh{34==	djj0kkooG

9-Iy}}_-1DDzz$((3-#	J1 $

HHW%txx'99!Fv%%1%B$0044L(+I!!%NN9iUNC(4I!!% KK!!!Q1-KKKKOOkkooG""%%%'..(@'H'HI "<<DHHTXX.$6#xx66;LL$(!--aAq9 ''4#%7D" 88u!00N"22O <<DHH,*% 6TXXtT956 <<DHHI5 F- WII'U3%,,+>U#BU !%J"22"6DKui=",DKHHTXX&$. "HHUYY'4/"MM # &01H1HI "44Ra8FBe55a88Be55a88B-@.."bB80D.FD*'F. 88uII""3H {{~~H*..0DKKK""$$T%;%;<&*&<&<#1eV 	M1y=I	)1v:	+A*CF#A& (3h'>%!)E88v%);sdkk?QKK))WH)5KK%%h/KK!!# zz~~i(89BBCtT41 T9- 	$	;7 1+!+--dI>C(-!T--t/@/@A"%Aq%+,aUAJ+FDKKf%a({{~~H*..0DKKK!!'$T!BKK%%h/ 88v$%q6D &'VD"#$D KK!!# _6 6s   %aac           
      p   |j                   syi }t        |j                  d            j                  }dD ]@  }d| }||j                  v r&t        |j                  |         j                  ||<   <|||<   B d\  }}	d}|j                   r|j                   j                  d      }
|j                   r|j                   j                  d      nd}|r*|dk(  rt        |d   z
  }n|	t        z   |d   z
  dz  }|\  }}	n|	}d	}| j                  j                  ||         x}s|rd
nd}| j                  |j                  d      |j                  d      |      \  }}| j                  |j                  dd      |j                  dd      |      \  }}d|j                  v rt        | ||||      \  }}}}|j                         \  }}}}|j                  dd      j                  d      d   }|dk(  rdx}}n&|dd j                         }|dd j                         }|d
k(  r||||z  z
  dz  z  }n|dk(  r||||z  z
  z  }|d
k(  r||||z  z
  dz  z  }n|dk(  r||||z  z
  z  }||||z  ||z  f}n
dx}}dd||f}|j                  d      dk7  r,| j                  |j                  dd      |      }||z  }||z  }|j                  dd      }|dvrt        t        |            }n|dk(  r|dk(  r|t        d       z  }|D ]  }| j                   j#                           | j                   j$                  |t'        |      z  |t)        |      z  | t)        |      z  |t'        |      z  g|
  | j                   j%                  | | !       |j                  d"d#      } | d$v rM | j                   j*                  |  | j                   j-                          | j                   j/                          | j1                  |||       | j                   j3                            |rd
nd}|j                   ryy)%zDraw markers defined in a node.NrH   )startmidr  zmarker-NNrC  r   r   r  rD  refXrefYmarkerWidthr   markerHeightr=   preserveAspectRatioxMidYMidr   rm   minr         maxmarkerUnitsuserSpaceOnUsestroke-widthorient)autoauto-start-reverserU     )r  r  r8   rp   )rp   scroll)rV   r)   r_   r  rT   r   r   r   r  r*   r   rf   lowerr  r   r   r  r  r,   r   r   r"  r1   r  r  r+  )!rW   r/  r   r  r   common_markerposition	attributeangle1angle2r  anglesanglemarker_nodetranslate_xtranslate_ymarker_widthmarker_heightscale_xscale_yr   clip_xclip_yviewbox_widthviewbox_heightalign
x_position
y_positionclip_boxscale
node_angler   r8   s!                                    rY   r,  zSVG.draw_markers$  s   }}!$((8"45>>/ 	2H!(,IDKK'$-dkk).D$E$N$N!$1!	2 $mmMM%%a(E-1]]T]]&&q)Fw&NE#b[6!949E!'  $(<<#3#3GH4E#FFKF$*5 (,zz')@($K +/**q12+'L- K...)7+y,*O&!Q  ++- >~ $):77<uSz!EF?.33J!&q!1!1!3J!&qr!2J&}|g/EEJJF5(mlW.DDDF&&)@@AF FF5(n}w/FFFF F 7*MG,CE %&%'q,> }-1AADHH^Q$?K5 5  %15J!??j 1233G8K% % (&&(%%%c%j('CJ*>Hs5z)7SZ+?  %%%E&??:x@33)DKK))84KK$$&KKOO%ui=%%'!($ !'uGHy mmr[   c                    | r| dk(  ry| j                         } t        j                  d      j                  |       }|r=t	        |j                  d            j                  }|j                  d      xs d}||fS d}| xs d}||fS )z9Get paint fill or stroke attribute with a color or a URL.rm   rE  z(url\(.+\)) *(.*)r   r   N)r|   r   compilesearchr)   r7  r  )r   r{   sourcer'   s       rY   	get_paintzSVG.get_paint  s     

/077>u{{1~.77FKKN*dE
 u} FMTEu}r[   c                     |j                   dv r|sy j                  |j                  dd            \  }}t        |j                  dd            }t	         |||d      }|r=|s;t        |      }|xj                  |z  c_         j                  j                  |       |xs |}	 j                  |j                  d	            \  }
}t        |j                  d
d            }t	         ||
|d      }|r?|s=t        |      }|xj                  |z  c_         j                  j                  |d       |xs |} j                  |j                  dd            }|r j                  j                  |       nd}t         fdt        |j                  d            j                         D              }|xr( t        d |D               xr t        d |D               }|re j                  |j                  d            }|dk  r#t!        d |D              }|t#        |      |z  z
  } j                  j%                  ||       |j                  dd      }|dk(  rd}n
|dk(  rd}nd} j                  j'                  |       |j                  dd      }|dk(  rd}n
|dk(  rd}nd} j                  j)                  |       t+        |j                  dd            }|dk  rd} j                  j-                  |       |j                  d      d k(  }|r/|r|	rd}n|rd}n|	rd}nd!} j                  j/                  |       y|	r|r j                  j1                  |       y|r j                  j3                          y|	r j                  j5                  |       y j                  j7                          y)"z!Paint fill and stroke for a node.rv   NrE   rt   zfill-opacityr   F)rF   rF   zstroke-opacityTrR  1pxc              3   L   K   | ]  }|d k7  rj                  |        yw)rm   N)r  )r   r   r   rW   s     rY   r   z"SVG.fill_stroke.<locals>.<genexpr>  s-      P.3?D KKy)Ps   !$zstroke-dasharrayc              3   &   K   | ]	  }|d k(    ywr   Nr   r   r   s     rY   r   z"SVG.fill_stroke.<locals>.<genexpr>  s     75EQJ7   c              3   &   K   | ]	  }|d k    ywrz  r   r{  s     rY   r   z"SVG.fill_stroke.<locals>.<genexpr>  s     6%EAI6r|  zstroke-dashoffsetr   c              3   2   K   | ]  }t        |        y wrN   r   r{  s     rY   r   z"SVG.fill_stroke.<locals>.<genexpr>  s      F%u Fr   zstroke-linecapbuttroundsquarer   zstroke-linejoinmiterbevelzstroke-miterlimitrM  z	fill-ruleevenoddr   )re   ru  r_   r&   r   r'   alphar  	set_colorr  set_line_widthr   r(   rf   allanysumabsset_dashset_line_capset_line_joinr   set_miter_limitset_text_renderingfill_and_strokerF   rE   r  )rW   r/  r   r    fill_source
fill_colorfill_opacity
fill_drawnstream_colorrE   stroke_sourcestroke_colorstroke_opacitystroke_drawnrF   stroke_width
dash_arraydash_conditionoffset
sum_dashesline_cap	line_joinmiter_limiteven_oddtext_renderings   ` `                      rY   r  zSVG.fill_stroke  s{   8800 #'..&'1J"KZ"488NA#>?-$YUL
j ,L,.KK!!,/'Z '+nnTXXh5G&H#|$TXX.>%BC/$y.O .L.0KK!!,t!<-{{488NE#BINKK&&|4F  Pdhh12399;P P
  77J77776:666 	 [[*=!>	JFz  F: FF
#c&kJ&>>KK  V4 88,f5wH!HH  * HH.8	I'!II!!), DHH%8!<=?K##K0 88K(I5$!"!"!"!"KK**>:++H5""$  *!r[   c                     |j                  d      }|j                  d      }|syt        |||| j                        }|j                  r$ | j                  j                  |j
                    yy)z*Apply a transformation string to the node.r<   r,   N)r_   r,   r   r#  r  r%  )rW   r/  r   transform_origintransform_stringmatrixs         rY   r,   zSVG.transform  sh    88$6788K0.	4;N;NP!DKK!!6==1 r[   c                     t         D ]M  }||j                  j                         v s d|j                  v s/|t	        | | d      |j                  d   <   O |D ]  }| j                  |        y)zParse defs included in a tree.r5   sN)r(  re   rX  rT   getattrr   )rW   r/  def_typer   s       rY   r   zSVG.parse_defs  sn    ! 	HH488>>++0CCG
!n-dkk$.?@	H  	#EOOE"	#r[   c                     | j                   | j                  fD ])  }|j                         D ]  }| j                  ||        + y)z7Handle inheritance of different defined elements lists.N)r   r   r%  inherit_element)rW   r  r   s      rY   r   zSVG.inherit_defs  sC    ^^T]]3 	4D;;= 4$$Wd34	4r[   c                    |j                  | j                        }|sy|j                          |j                  t	        |      j
                        }|sy| j                  ||       |j                  j                         D ]#  \  }}||j                  vs||j                  |<   % t        t        |      d       |j                  |j                                yy)z2Recursively handle inheritance of defined element.N)r   r   r   r_   r)   r  r  rT   ry   nextr   r   r   )rW   r   r  rD   parentr`   r   s          rY   r  zSVG.inherit_element  s    ))D/223VT* ----/ 	,JC'..(&+s#	, Wt$,!!&//"34 -r[   c                     |s|j                   +t        | |||      }t        |      rd|dd vr|r|S ||_         |j                   S )z%Calculate the bounding box of a node.Nr   r   )r"   r$   )rW   r/  r   rF   rA  s        rY   r-  zSVG.calculate_bounding_box-  sQ    T&&.tT9f=C$S)as12w.>J$'!   r[   NTr   )r   r   r   r   rZ   r  r   r  r  r  r  r,  r   ru  r  r,   r   r   r  r-  r   r[   rY   r   r   I  se    01 '3<0S$jm4^   ]"~
2#45 !r[   r   c                   .     e Zd ZdZ fdZd fd	Z xZS )PatternzSVG node applied as a pattern.c                 j    t         |   |j                  |j                         || _        || _        y rN   )superrZ   rQ   r   r   r   )rW   r   r   r   s      rY   rZ   zPattern.__init__:  s*    ))3773	r[   c                 ~    || j                   k(  r| j                  j                   | _         t        |   ||d       y )NTr  )r   r   r  r  )rW   r/  r   r  r   s       rY   r  zPattern.draw_node?  s4     499DI$	t<r[   r  )r   r   r   r   rZ   r  __classcell__)r   s   @rY   r  r  8  s    (
= =r[   r  );r   r   
contextlibr   mathr   r   r   r   r   r	   	xml.etreer
   
cssselect2r   urlsr   cssr   r   r  r   r   r   r   r   r   r   r   r   shapesr   r   r   r   r   r   r    r"   r!   r#   r$   utilsr%   r&   r'   r(   r)   r*   r+   r,   r&  	frozensetrz   r}   r(  rL   r   r  r   r[   rY   <module>r     s     	  3 3 ! % $ 6 U U   B B R R  
 
$ % &  2      
 
	mP mPbl! l!^=c =r[   