Ë
    £ëiµ}  ã                   ó´  — 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 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.m/Z/m0Z0m1Z1 e$eeee ee"e!e#ee$e$e$edœZ2 e3d«      Z4 e3d«      Z5 e3d«      Z6 G d„ d«      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Ú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   r   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-colorr8   Ústroke)	ÚclipPathr1   Úgradientr   Úmarkerr4   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Úwrapperr9   s      úW/var/www/html/chat/reports/venv/lib/python3.12/site-packages/weasyprint/svg/__init__.pyÚ__init__zNode.__init__Z   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.)rK   rN   rQ   ©rV   s    rX   rT   z	Node.copye   s   € ä�D—M‘M 4§;¡;Ó/Ð/rZ   Nc                 ó:   — | j                   j                  ||«      S )zGet attribute.)rS   Úget)rV   ÚkeyÚdefaults      rX   r^   zNode.geti   s   € à�{‰{�‰˜s GÓ,Ð,rZ   c                 óT   — | j                   j                  j                  dd«      d   S )zXML tag name with no namespace.ú}r   éÿÿÿÿ)rP   ÚtagÚsplitr\   s    rX   rd   zNode.tagm   s(   € ð ×Ñ×#Ñ#×)Ñ)¨#¨qÓ1°"Ñ5Ð5rZ   c                 ó.   — | j                   j                  S )zXML node text.)rP   r   r\   s    rX   r   z	Node.textr   ó   € ð ×Ñ×$Ñ$Ð$rZ   c                 ó.   — | j                   j                  S )zText after the XML node.)rP   Útailr\   s    rX   ri   z	Node.tailw   rg   rZ   c                 ó*   — | j                  d«      dk7  S )z!Whether node should be displayed.ÚdisplayÚnone©r^   r\   s    rX   rk   zNode.display|   s   € ð �x‰x˜	Ó" fÑ,Ð,rZ   c                 óF   — | j                   xr | j                  d«      dk7  S )zWhether node is visible.Ú
visibilityÚhidden)rk   r^   r\   s    rX   ÚvisiblezNode.visible�   s!   € ð �|‰|ÒB §¡¨Ó 6¸(Ñ BÐBrZ   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 |j                  j                  dd«      x}rR|j                  «       j                  d¬«      }t        |«      dk(  r$|d   |j                  d	<   |d   |j                  d
<   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.r9   rc   ÚfontNr   )Úmaxsplitr   r   ú	font-sizezfont-familyÚcurrentColorr&   ÚblackÚinherit)r   r-   r,   T)Útrailing_spaceÚ	text_root)rN   rS   ÚitemsÚNOT_INHERITED_ATTRIBUTESr^   r   rQ   ÚmatchÚstripÚpopre   ÚlenÚCOLOR_ATTRIBUTESrT   rd   Útext_childrenrP   Úetree_children)rV   ÚchildrW   r_   ÚvalueÚ
style_attrÚnormal_attrÚimportant_attrÚnormal_matcherÚimportant_matcherÚruleÚnormalÚ	importantÚdeclarations_listÚdeclarationsÚnamers   ÚpartsÚchildrenÚ_s                       rX   ÚcascadezNode.cascade†   s�  € à—.‘.ˆð Ÿ+™+×+Ñ+Ó-ò 	.‰JˆC�ØÔ2Ò2Ø˜eŸl™lÒ*Ø(-�E—L‘L Ò%ð	.ð Ÿ™ 7Ó+Ð+ˆ:Ð+Ü*<¸ZÓ*HÑ'ˆK™à*,¨b˜ˆKØ,0¯K©KÑ)ˆÐ)Ø'5×';Ñ';¸GÓ'DÖE˜t�$�r“(ÐEˆÐEØ*;×*AÑ*AÀ'Ó*JÖK $�T˜"“XÐKˆ	ÐKØ"(¨;¨-¸À^ÐDTÐ!Uò 	7ÐØ 1ò 7�Ø#/ò 7‘K�D˜%Ø).¯©«�E—L‘L Ò&ñ7ñ7ð	7ð —<‘<×#Ñ# F¨DÓ1Ð1ˆ4Ð1Ø—J‘J“L×&Ñ&°Ð&Ó2ˆEÜ�5‹z˜QŠØ,1°!©H�—‘˜[Ñ)Ø.3°A©h�—‘˜]Ñ+ô $ò 	@ˆCØ�y‰y˜‹~ Ó/Ø$)§I¡I¨g°wÓ$?�—‘˜SÒ!ð	@ð
  Ÿ,™,×+Ñ+Ó-×3Ñ3Ó5ò 	.‰JˆC�Ø˜	Ó!ØŸ™ ›�Ø�=ØŸ™ SÑ)à(-�E—L‘L Ò%ð	.ð �9‰9Ð1Ñ1Ø×-Ñ-Ø¨¸ð .ó >‰KˆH�að 08ö-9Ø&+�×!Ó!ò-9ˆE�N‰NÕ)ð 2ùò= FùÚKùò@-9s   ÂI-Â?I2ÉI7c                 óè   — | j                   €Rg }| j                  D ]:  }t        || j                  «      }| j	                  |«       |j                  |«       Œ< || _         t        | j                   «      S )z&Yield node children, handling cascade.)rR   rN   rK   rQ   r”   ÚappendÚiter)rV   r’   rW   r„   s       rX   Ú__iter__zNode.__iter__º   sd   € à�>‰>Ð!ØˆHØŸ=™=ò '�Ü˜W d§k¡kÓ2�Ø—‘˜UÔ#Ø—‘ Õ&ð'ð &ˆDŒNÜ�D—N‘NÓ#Ð#rZ   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rM   ©Úfloat)Ú.0Únumbers     rX   ú	<genexpr>z#Node.get_viewbox.<locals>.<genexpr>É   s   è ø€ ÒP¨6œ˜vŸÑPùó   ‚N)r^   Útupler'   re   )rV   Úviewboxs     rX   Úget_viewboxzNode.get_viewboxÅ   s7   € à—(‘(˜9Ó%ˆÙÜÑP´Y¸wÓ5G×5MÑ5MÓ5OÔPÓPÐPð rZ   c                 ó<   — dD ]  }t        | ||d¬«      x}sŒ|c S  y)z4Get the href attribute, with or without a namespace.©rA   rB   T)Úallow_relativeNr   )rV   Úbase_urlÚ	attr_nameÚurls       rX   Úget_hrefzNode.get_hrefË   s-   € àGò 	ˆIÜ'¨¨i¸ÐRVÔWÐWˆsÑWØ’
ñ	rZ   c                 óJ   — dD ]  }| j                   j                  |d«       Œ  y)z8Remove the href attributes, with or without a namespace.r¥   N)rS   r   )rV   r¨   s     rX   Údel_hrefzNode.del_hrefÑ   s#   € àGò 	-ˆIØ�K‰K�O‰O˜I tÕ,ñ	-rZ   c                 óº   — | sy|rt        j                  dd| «      S t        j                  dd| «      } | j                  dd«      } t        j                  dd| «      S )z>Replace newlines by spaces, and merge spaces if not preserved.Ú z[
	]ú z[
]ú	z +)ÚreÚsubÚreplace)ÚstringÚpreserves     rX   Úprocess_whitespacezNode.process_whitespaceÖ   sU   € ñ ØÙÜ—6‘6˜* c¨6Ó2Ð2ä—V‘V˜H b¨&Ó1ˆFØ—^‘^ D¨#Ó.ˆFÜ—6‘6˜$  VÓ,Ð,rZ   c                 ó°   — | j                   j                  d|› d�«      €y| D ]1  }|j                  d«      |k(  r|c S |j                  |«      }|sŒ/|c S  y)z2Get a child with given id in the whole child tree.z
.//*[@id="z"]Nr3   )rP   Úfindr^   Ú	get_child)rV   Úid_r„   Ú
grandchilds       rX   r¹   zNode.get_childã   s`   € à×Ñ× Ñ  :¨c¨U°"Ð!5Ó6Ð>ØØò 	"ˆEØ�y‰y˜‹ #Ò%Ø’ØŸ™¨Ó-ˆJÚØ!Ò!ñ	"rZ   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¯   r7   )z {http://www.w3.org/2000/svg}trefÚtrefr.   rc   z!{http://www.w3.org/2000/svg}tspan)r^   r¶   rO   r   rP   Úlstripr'   r~   re   rœ   rT   Úpop_rotationÚendswithr¡   Úiter_childrenrd   rK   rQ   Úflattenr   Úfrom_xml_rootr‚   r’   r–   ri   Úrstripr
   ÚElement)rV   Úelementry   rz   r’   Úspacerµ   ÚiÚoriginal_rotater7   Úelement_childrenÚchild_elementr„   Ú
child_nodeÚchild_preserveri   Úanonymous_etreeÚ	anonymouss                     rX   r‚   zNode.text_childrenî   s)  € àˆØ=ˆØ—8‘8˜E“? jÑ0ˆØ $× 7Ñ 7Ø×!Ñ!×&Ñ&¨ó!2ˆ×ÑÔá¡(Ø$(§I¡I×$4Ñ$4°SÓ$9ˆD×ÑÔ!ô �d—h‘h˜xÓ(Ó)×/Ñ/Ó1×7Ñ7¸Ó<öCØÙ@Aô �!�HðCˆð Cð !×%Ñ%Ó'ˆÙØ×Ñ˜o¨vÔ6Ø�9Š9Ø!ŸY™Y×/Ñ/°Ó4ˆNÜ  ×!6Ñ!6Ó!8Ó9ÐØ-ó %	+ˆMØ!×/Ñ/ˆEØ�y‰yÐHÑHÜ! -°·±Ó=�
Ø-4�
×&Ñ&Ô*ð #×.Ñ.�Ø).¯©«�×!Ñ!Ô&Ü .× <Ñ <¸UÓ C‘ä! -°·±Ó=�
Ø'Ÿ^™^¨EÓ2°jÑ@ˆNØ*.×*AÑ*AØ—
‘
˜Nó+,ˆJ×"Ñ"Ô'à2<×2JÑ2JØ˜~ó3/Ñ/ˆJÔ à'Ÿ_™_×5Ñ5°cÓ:ˆNÙ 8°:Ñ#=Ø×'Ñ'¨¸Ô@Ø�O‰O˜JÔ'Ø×*Ñ*¨5¯:©:°xÓ@ˆDÙ˜]Ð.>¸rÑ.BÑBÙØŸ;™; sÓ+�DÛÜ"-×"5Ñ"5Ø7ó#9�ä Ü"×0Ñ0°ÓAÀ4Ç;Á;óP�	à-1�	×%Ñ%Ô*Ù"Ø×*Ñ*¨?¸FÔCÙ!©(Ø1:·±×1FÑ1FÀsÓ1K�I×)Ñ)Ô.Ø—>’>Ø%.§^¡^×%<Ñ%<¸SÓ%A�NØ—‘ 	Ö*ðK%	+ñN ™X©hØ$(§I¡I×$4Ñ$4°SÓ$9ˆD×ÑÔ!à˜Ð'Ð'ùò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Â   ri   ÚremoveÚjoin)rV   Úflattened_textr„   s      rX   rÂ   zNode.flatten-  sm   € àŸ)™)š/ rÐ*ˆÜ˜$“Zò 	ˆEØ×!Ñ! %§-¡-£/Ô2Ø×!Ñ! %§*¡*Ò"2°Ô3Ø�K‰K˜Õð	ð �w‰w�~Ó&Ð&rZ   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   rc   N)Ústrr   )r�   rÈ   rÉ   r7   s     €€rX   rŸ   z$Node.pop_rotation.<locals>.<genexpr>8  s/   øè ø€ ò ),àô ¡�—
‘
˜1”¨_¸RÑ-@×Añ),ùs   ƒ+.r7   N)rÓ   Úranger€   r   rS   )rV   rÉ   r7   s    ``rX   r¿   zNode.pop_rotation6  s4   ù€ à #§¡ô ),äœ3˜tŸy™y›>Ó*ô),ó !,ˆ�‰�HÒrZ   c                 ó>   ‡— t        dt        fdˆfd„i«      | _        y)u$   Override nodeâ€™s children iterator.rK   r˜   c                 ó   •— ‰S rM   © )r“   Úiterators    €rX   ú<lambda>z$Node.override_iter.<locals>.<lambda>A  s   ø€ °H€ rZ   N)ÚtyperK   Ú	__class__)rV   rÜ   s    `rX   Úoverride_iterzNode.override_iter<  s    ø€ ô Ø”T�G˜jÓ*<Ð=ó?ˆ�rZ   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)rV   r   rã   rä   r¢   s        rX   Úset_svg_sizezNode.set_svg_sizeC  s—   € à+ˆÔØ-ˆÔÜ"'¨¸Ó"HÌ4ÐPQË7Ñ"RˆÔà×&Ñ&Ó(Ð(ˆ7Ð(Ø07¸±
¸GÀA¹JÐ-ˆCŒO˜SÕ-à03×0BÑ0BÀC×DWÑDWÐ-ˆCŒO˜SÔ-Ü" 3§?¡?°C×4DÑ4DÓEÌÈQËÑOˆÕrZ   rM   ©F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rY   rT   r^   Úpropertyrd   r   ri   rk   rq   r”   r˜   r£   rª   r¬   Ústaticmethodr¶   r¹   r‚   rÂ   r¿   rà   ré   rÛ   rZ   rX   rK   rK   W   sÉ   „ Ùò	!ò0ó-ð ñ6ó ð6ð ñ%ó ð%ð ñ%ó ð%ð ñ-ó ð-ð ñCó ðCò29òh	$òQòò-ð
 ñ
-ó ð
-ò	"ó=(ò~'ò,ò?ó
PrZ   rK   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚLazyDefsc                 ó.   — || _         || _        i | _        y rM   )Ú_nameÚ_svgÚ_data)rV   r�   r   s      rX   rY   zLazyDefs.__init__Q  s   € ØˆŒ
ØˆŒ	Øˆ�
rZ   c                 ó$   — | j                  |«      S rM   rm   ©rV   r�   s     rX   Ú__getitem__zLazyDefs.__getitem__V  ó   € Ø�x‰x˜‹~ÐrZ   c                 óŒ  — |sy || j                   v r| j                   |   S | j                  j                  j                  |«      }|�`| j                  |j
                  j                  «       v r:|| j                   |<   | j                  dv r,| j                  j                  || «       nd | j                   |<   | j                   |   S )N)rF   rH   )rö   rõ   Útreer¹   rô   rd   ÚlowerÚinherit_element)rV   r�   Únodes      rX   r^   zLazyDefs.getY  s£   € ÙØØ�4—:‘:ÑØ—:‘:˜dÑ#Ð#Ø�y‰y�~‰~×'Ñ'¨Ó-ˆØÐ §
¡
¨d¯h©h¯n©nÓ.>Ñ >Ø#ˆD�J‰J�tÑØ�z‰zÐ4Ñ4Ø—	‘	×)Ñ)¨$°Õ5à#ˆD�J‰J�tÑØ�z‰z˜$ÑÐrZ   c                 ó$   — | j                  |«      S rM   rm   rø   s     rX   Ú__contains__zLazyDefs.__contains__g  rú   rZ   N)rë   rì   rí   rY   rù   r^   r  rÛ   rZ   rX   rò   rò   P  s   „ òò
ò órZ   rò   c                   óx   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	dd	„Z
d
„ Zed„ «       Zdd„Zdd„Zd„ Zd„ Zdd„Zy)ÚSVGzAn SVG document.Nc                 ó0  — t        j                  |«      }t        ||||«      }t        ||«      | _        || _        || _        || _        t        d| «      | _	        t        d| «      | _
        t        d| «      | _        t        d| «      | _        t        d| «      | _        t        d| «      | _        t        d| «      | _        t        d| «      | _        i | _        d	d	g| _        d	d	g| _        d	| _        | j                  j+                  | j                  «       y )
Nr1   rF   r   rG   r4   rH   r   rI   r   )r   rÃ   r   rK   rü   Úfont_configÚurl_fetcherr©   rò   ÚfiltersÚ	gradientsÚimagesÚmarkersÚmasksÚpatternsÚpathsÚsymbolsÚ	use_cacheÚcursor_positionÚcursor_d_positionÚtext_path_widthr”   )rV   rü   r©   r  r  rW   r9   s          rX   rY   zSVG.__init__n  sô   € Ü ×.Ñ.¨tÓ4ˆÜ! '¨3°¸[ÓIˆÜ˜ %Ó(ˆŒ	Ø&ˆÔØ&ˆÔØˆŒä ¨$Ó/ˆŒÜ! *¨dÓ3ˆŒÜ˜w¨Ó-ˆŒÜ ¨$Ó/ˆŒÜ˜f dÓ+ˆŒ
Ü  ¨DÓ1ˆŒÜ˜f dÓ+ˆŒ
Ü ¨$Ó/ˆŒàˆŒà ! 1˜vˆÔØ"# Q ˆÔØ ˆÔà�	‰	×Ñ˜$Ÿ)™)Õ$rZ   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%ú%Nr2   )rü   r^   r*   )rV   Ú	font_sizeÚintrinsic_widthÚintrinsic_heights       rX   Úget_intrinsic_sizezSVG.get_intrinsic_size‡  s}   € àŸ)™)Ÿ-™-¨°Ó8ˆØ�/Ñ!Ø"‰Oä" ?°IÓ>ˆOàŸ9™9Ÿ=™=¨°6Ó:ÐØÐ"Ñ"Ø#Ðð Ð 0Ð0Ð0ô  $Ð$4°iÓ@ÐàÐ 0Ð0Ð0rZ   c                 ó6   — | j                   j                  «       S )z*Get document viewBox as a tuple of floats.)rü   r£   r\   s    rX   r£   zSVG.get_viewbox—  s   € à�y‰y×$Ñ$Ó&Ð&rZ   c                 ó^   — t        ||| j                  «      t        ||| j                  «      fS )z.Compute size of an x/y or width/height couple.)r*   ræ   rç   )rV   r=   r>   r  s       rX   Úpointz	SVG.point›  s2   € ô ��I˜t×/Ñ/Ó0Ü��I˜t×0Ñ0Ó1ð3ð 	3rZ   c                 ó0   — t        ||| j                  «      S )z'Compute size of an arbirtary attribute.)r*   rè   )rV   Úlengthr  s      rX   r  z
SVG.length¡  s   € ä�F˜I t×':Ñ':Ó;Ð;rZ   c                 ó²   — || _         | j                  j                  | ||«       || _        || _        | j                  | j                  t        d«      «       y)zDraw image on a stream.Ú12ptN)Ústreamrü   ré   r§   ÚcontextÚ	draw_noder*   )rV   r   rã   rä   r§   r!  s         rX   ÚdrawzSVG.draw¥  sC   € àˆŒà�	‰	×Ñ˜t ^°_ÔEà ˆŒØˆŒà�‰�t—y‘y¤$ v£,Õ/rZ   c                 óî  — |j                   dk(  ryt        |j                  dd«      ||«      }g }|xr |j                   dv }|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	«      | _        |r| j                  ||«       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  j0                  Ž  d}|j2                  rˆt4        j                  |j                   «      t6        k(  rb|j                  d«      x}dv rBd}| j                  j                  d	d	d	d	«      }|j                  | j                  «       || _        t8        |_        |j                   dk(  r| j<                  }| j>                  }|j@                  rD|j                   t4        v r2tC        tD        «      5  t5        |j                      | ||«       ddd«       |j2                  �rO|j                   tF        v�r<|D �]6  }|xr/ |j                   dk(  xs d|jH                  v xs d|jH                  v }|r| j                  }|d   | _        | j%                  |||«       |r| _        t4        j                  |j                   «      t6        k(  xr4 t4        j                  |j                   «      t6        k(  xr |j@                  }|sŒÊtK        |j:                  «      sŒà|j:                  dd \  }}||j:                  d   z   }||j:                  d   z   }tM        |j:                  ||f||ff«      |_        �Œ9 |j                   dk(  r!| jN                  jQ                  tR        «       |�r| j                  jT                  }|jW                  «       | _        | j                  j	                  «        tK        |j:                  «      r�|j:                  \  }
}}}|
|z
  ||z
  |
|z   |z   ||z   |z   fjX                  d   dd dk(  r|dz  n|}|j                   dk(  sd|jH                  v sd|jH                  v r| j                  j                  | ¬«       | j                  j[                  |«       | j                  j]                  «        | j^                  j                  t        |j                  d «      «      j                  «      }|rta        | |||«       |r| jc                  ||«       | je                  |||«       |rÖd	|cxk  rdk  rËn nÈ| jg                  ||«      } tK        | «      sd	d	| jh                  | jj                  f} | \  }
}}}|
||
|z   ||z   f| j                  jX                  d   dd | j                  jT                  }|jW                  «       | _        | j                  jm                  |dd¬!«       | j                  j[                  |«       |j                   dk(  rd	d	g| _7        d	d	g| _8        d	| _9        |r| j                  j]                  «        yy# 1 sw Y   �ŒGxY w)"zDraw a node.ÚdefsNru   Ú1em)r   r   r   r   r   r   r   r1   r5   r   r   r0   ÚclipPathUnitsÚobjectBoundingBoxr=   r>   r<   r2   )r,   ÚdÚeÚfÚgF©Úfill_strokeztext-anchor)ÚmiddleÚendTr   r   rc   r   râ   ÚBBoxr/  )r*  r4   )rD   rC   ):rd   r*   r^   r   Ú
push_stater  r(   Úfragmentr   r+   r%   r–   Ú	add_groupÚset_graphical_stater  Úctmr  rP   r"  Ú	rectangler/   r0  ÚdeterminantÚinvertÚvaluesrk   ÚTAGSr   r    Útext_bounding_boxrã   rä   rq   r   r$   Ú	DEF_TYPESrS   r#   r"   rü   ré   r   r3   r   ÚextraÚdraw_x_objectÚ	pop_stater  r   r.  Údraw_markersÚcalculate_bounding_boxræ   rç   Ú	set_alphar  r  r  )!rV   rÿ   r  r.  Úoriginal_streamsÚcall_fill_strokeÚfilter_r5   Ú	clip_pathÚold_ctmr=   r>   r<   r2   Ú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_alignr4   Úboxs!                                    rX   r"  zSVG.draw_node°  sJ  € à�8‰8�vÒØô ˜Ÿ™ +¨uÓ5°yÀ)ÓLˆ	àÐà&ò P¨4¯8©8ð 8Pð ,PÐñ Ø�K‰K×"Ñ"Ô$ð —,‘,×"Ñ"¤9¨T¯X©X°hÓ-?Ó#@×#IÑ#IÓJˆÙÜ˜$  g¨yÔ9ð 	�‰�t˜YÔ'ô ˜dŸh™h y°!Ó4Ó5ˆÙ˜1 Ô+¨!Õ+Ø×#Ñ# D§K¡KÔ0ØŸ+™+×/Ñ/°°1°a¸Ó;ˆDŒKñ Ø×$Ñ$ T¨9Ô5ô ˜dŸh™h {Ó3Ó4×=Ñ=ˆ	Ú˜ d§j¡jÒ0Ø—k‘k—o‘oˆGØŸ
™
 9Ñ-ˆIØ�}‰}˜_Ó-Ð1DÒDØ—z‘z $§(¡(¨3£-°·±¸#³À	ÓJ‘��1Ø $§
¡
Ø—H‘H˜WÓ% t§x¡x°Ó'9¸9ó!F‘��và—‘×%Ñ%¨°¸1ÀÐ%ÔBØ$×0Ñ0×4Ñ4ˆLØ(+ˆI×!Ñ!Ô%Ø�N‰N˜9 i¸UˆNÔCØ(4ˆI×!Ñ!Ô%ð �K‰K×!Ñ! ! Q¨¨1Ô-Ø�K‰K×ÑÔØ�K‰K�O‰OÔØ—k‘k—o‘oˆGØ×"Ò"Ø%�—‘×%Ñ%¨°'·.±.Ñ(@×'HÑ'HÑIð "ÐØ�<Š<œDŸH™H T§X¡XÓ.´$Ò6Ø#Ÿx™x¨Ó6Ð6�Ð;LÑLØ$(Ð!ØŸ™×-Ñ-¨a°°A°qÓ9�Ø ×'Ñ'¨¯©Ô4Ø#�”Ü%7ˆDÔ"ð �8‰8�uÒØ!×0Ñ0ˆNØ"×2Ñ2ˆOð �<Š<˜DŸH™H¬Ñ,Üœ*Ó%ñ 6Ü�T—X‘X‘˜t T¨9Ô5÷6ð �<‹<˜DŸH™H¬IÒ5Øó F�Ø-ò WØ—I‘I Ñ'ÒU¨3°%·,±,Ð+>ÒUÀ#ÈÏÉÐBUð áØ!%§¡�JØ"2°2Ñ"6�D”KØ—‘˜u i°Ô=ÙØ",�D”Kä—H‘H˜TŸX™XÓ&¬$Ñ.ò "Ü—H‘H˜UŸY™YÓ'¬4Ñ/ò"à—M‘Mð #ò &Ü0°×1HÑ1HÔIØ Ø"×4Ñ4°R°aÐ8‘F�B˜Ø˜e×5Ñ5°aÑ8Ñ8�BØ˜e×5Ñ5°aÑ8Ñ8�BÜ-@Ø×.Ñ.°"°b°¸BÀ¸8Ð0Dó.F�DÖ*ð'Fð. �8‰8�uÒØ�I‰I×"Ñ"¤3¨¸ÔHò Ø—{‘{—~‘~ˆHØ*×.Ñ.Ó0ˆDŒKØ�K‰K×"Ñ"Ô$Ü$ T×%;Ñ%;Ô<Ø&*×&<Ñ&<Ñ#��1�e˜Vð ˜	‘M 1 y¡=Ø˜‘I 	Ñ)¨1¨v©:¸	Ñ+Að*C�—‘˜FÑ#¡AÐ&ð (3°hÒ'>˜% !š)ÀE�Ø—8‘8˜vÒ%¨°·±Ñ);¸sÀdÇkÁkÑ?QØ—K‘K×)Ñ)¨W¨HÐ)Ô5Ø�K‰K×%Ñ% hÔ/Ø�K‰K×!Ñ!Ô#ð �z‰z�~‰~œi¨¯©°Ó(8Ó9×BÑBÓCˆÙÜ�t˜T 4¨Ô1ñ Ø×Ñ˜T 9Ô-ð 	×Ñ˜$ 	¨;Ô7ñ ˜1 Ô+¨!Õ+Ø×-Ñ-¨d°IÓ>ˆCÜ(¨Ô-Ø˜!˜T×-Ñ-¨t×/@Ñ/@ÐA�Ø"%ÑˆAˆq�%˜Ø+,¨a°°U±¸AÀ¹JÐ+FˆD�K‰K×Ñ˜fÑ%¡aÐ(à—{‘{—~‘~ˆHØ*×.Ñ.Ó0ˆDŒKØ�K‰K×!Ñ! '°$¸TÐ!ÔBØ�K‰K×%Ñ% hÔ/ð �8‰8�vÒØ$% q 6ˆDÔ Ø&'¨ VˆDÔ"Ø#$ˆDÔ áØ�K‰K×!Ñ!Õ#ð ÷_6ñ 6ús   Ð
a*á*a4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 rÒt        | ||||«      \  }}}}|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.NrG   )ÚstartÚmidr0  zmarker-©NNrY  r   r   r0  rZ  ÚrefXÚrefYÚmarkerWidthrâ   ÚmarkerHeightr;   ÚpreserveAspectRatioÚxMidYMidr¯   rl   Úminr   é   é   ÚmaxÚmarkerUnitsÚuserSpaceOnUseústroke-widthÚorient)Úautoúauto-start-reverserk  é´   )r*  r+  r6   rp   )rp   Úscroll)rU   r(   r^   r3  rS   r   r   r
  r  r)   r£   re   rý   r  r   rœ   r   r2  r+   r   r   r7  r/   r0  r"  r@  )!rV   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„   r6   s!                                    rX   rA  zSVG.draw_markersL  s‰  € à�}Š}ØàˆÜ! $§(¡(¨8Ó"4Ó5×>Ñ>ˆØ/ò 	2ˆHØ! ( Ð,ˆIØ˜DŸK™KÑ'Ü$-¨d¯k©k¸)Ñ.DÓ$E×$NÑ$N�˜Ò!à$1�˜Ò!ð	2ð $‰ˆ�Øˆà�m‹mà—M‘M×%Ñ% aÓ(ˆEØ-1¯]ª]�T—]‘]×&Ñ& qÔ)ÀˆFÙØ˜wÒ&Ü ¨¡™N‘Eà#¤b™[¨6°!©9Ñ4¸Ñ9�EØ!'‘�™à�Ø �ð $(§<¡<×#3Ñ#3°G¸HÑ4EÓ#FÐF�KÐFÙ$*™5°�Øð (,§z¡zØ—‘ Ó'¨¯©¸Ó)@Øó(Ñ$ˆK˜ð +/¯*©*Ø—‘ ¨qÓ1Ø—‘ °Ó2Øó+Ñ'ˆL˜-ð ˜K×.Ñ.Ñ.Ü)7Ø˜+ y°,Àó*OÑ&�˜ ! Qð  ×+Ñ+Ó-ñ >�˜ ¨~ð $Ÿ™Ø)¨:ó7ß7<±u¸S³zÀ!ñE�à˜F’?Ø.3Ð3�J¡à!& q¨ ×!1Ñ!1Ó!3�JØ!& q r §¡Ó!2�Jà Ò&Ø˜}¨|¸gÑ/EÑEÈÑJÑJ‘FØ 5Ò(Ø˜m¨l¸WÑ.DÑDÑD�Fà Ò&ØØ&¨¸Ñ)@Ñ@ÀAñFñ F‘Fà 5Ò(Ø˜n¨}¸wÑ/FÑFÑF�Fð ˜FØ  7Ñ*¨M¸GÑ,CðE‘ð %&Ð%�˜'Ø˜q ,°Ð>�ð �‰˜}Ó-Ð1AÒAØŸ™ D§H¡H¨^¸QÓ$?ÀÓK�Ø˜5Ñ �Ø˜5Ñ �ð %Ÿ™¨°1Ó5ˆJØÐ!?Ñ?Ü¤ jÓ 1Ó2‘ØÐ3Ò3¸ÀGÒ8KØœ ›Ñ%�ð %ó (�Ø—‘×&Ñ&Ô(à%�—‘×%Ñ%Øœc %›jÑ(¨'´C¸³JÑ*>Ø�Hœs 5›zÑ)¨7´S¸³ZÑ+?ðð óð —‘×%Ñ%¨¨¸¸Ð%ÔEà&Ÿ?™?¨:°xÓ@�ØÐ3Ñ3Ø)�D—K‘K×)Ñ)¨8Ñ4Ø—K‘K×$Ñ$Ô&Ø—K‘K—O‘OÔ%à—‘˜u i°Ô=Ø—‘×%Ñ%Ö'ð!(ñ$ !'‘u¨GˆHðy �mŽmrZ   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.rl   r[  z(url\(.+\)) *(.*)r   r   N)r~   r±   ÚcompileÚsearchr(   rM  r3  )r…   r}   Úsourcer&   s       rX   Ú	get_paintzSVG.get_paint»  sˆ   € ñ ˜ šØà—‘“ˆÜ—
‘
Ð/Ó0×7Ñ7¸Ó>ˆÙÜ˜uŸ{™{¨1›~Ó.×7Ñ7ˆFØ—K‘K “NÒ* dˆEð
 �uˆ}Ðð ˆFØ’M˜TˆEà�uˆ}ÐrZ   c                 ó
  ‡ ‡— ‰ j                  |j                  dd«      «      \  }}t        |j                  dd«      «      }|‰ j                  v }|‰ j                  v }|r?|s=|s;t        |«      }	|	xj                  |z  c_        ‰ j                  j                  |	«       ‰ j                  |j                  d«      «      \  }
}t        |j                  dd«      «      }|
‰ j                  v }|
‰ j                  v }|rA|s?|s=t        |«      }	|	xj                  |z  c_        ‰ j                  j                  |	d¬«       ‰ j                  |j                  d	d
«      ‰«      }|r‰ j                  j                  |«       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-                  |«       y)z-Set stroke and fill colors, and line options.rC   rw   úfill-opacityr   rD   ústroke-opacityT©rD   rh  Ú1pxc              3   óL   •K  — | ]  }|d k7  r‰j                  |‰«      –— Œ y­w)rl   N)r  )r�   r…   r  rV   s     €€rX   rŸ   z*SVG.set_graphical_state.<locals>.<genexpr>æ  s-   øè ø€ ò PØ.3Ø?DÈºð �K‰K˜˜y×)ñPùs   ƒ!$zstroke-dasharrayc              3   ó&   K  — | ]	  }|d k(  –— Œ y­w©r   NrÛ   ©r�   r…   s     rX   rŸ   z*SVG.set_graphical_state.<locals>.<genexpr>ë  s   è ø€ Ò7 5�E˜Q•JÑ7ùó   ‚c              3   ó&   K  — | ]	  }|d k  –— Œ y­wr’  rÛ   r“  s     rX   rŸ   z*SVG.set_graphical_state.<locals>.<genexpr>ì  s   è ø€ Ò6 %�E˜A•IÑ6ùr”  zstroke-dashoffsetr   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrM   r›   r“  s     rX   rŸ   z*SVG.set_graphical_state.<locals>.<genexpr>ð  s   è ø€ Ò F°%¤ u§Ñ Fùr    zstroke-linecapÚbuttÚroundÚsquarer   zstroke-linejoinÚmiterÚbevelzstroke-miterlimitrc  N)rŠ  r^   r%   r  r  r&   Úalphar   Ú	set_colorr  Úset_line_widthr¡   r'   re   ÚallÚanyÚsumÚabsÚset_dashÚset_line_capÚset_line_joinrœ   Úset_miter_limit)rV   rÿ   r  r   Úfill_sourceÚ
fill_colorÚfill_opacityÚfill_in_gradientÚfill_in_patternÚstream_colorÚstroke_sourceÚstroke_colorÚstroke_opacityÚstroke_in_gradientÚstroke_in_patternÚstroke_widthÚ
dash_arrayÚdash_conditionÚoffsetÚ
sum_dashesÚline_capÚ	line_joinÚmiter_limits   ` `                    rX   r5  zSVG.set_graphical_stateÌ  sÌ  ù€ ð #'§.¡.°·±¸&À'Ó1JÓ"KÑˆ�ZÜ" 4§8¡8¨N¸AÓ#>Ó?ˆØ&¨$¯.©.Ð8ÐØ%¨¯©Ð6ˆÙÑ/±?Ü  Ó,ˆLØ×Ò ,Ñ.ÕØ�K‰K×!Ñ! ,Ô/ð '+§n¡n°T·X±X¸hÓ5GÓ&HÑ#ˆ�|Ü$ T§X¡XÐ.>ÀÓ%BÓCˆØ*¨d¯n©nÐ<ÐØ)¨T¯]©]Ð:ÐÙÑ!3Ñ7HÜ  Ó.ˆLØ×Ò .Ñ0ÕØ�K‰K×!Ñ! ,°tÐ!Ô<Ø—{‘{ 4§8¡8¨N¸EÓ#BÀIÓNˆÙØ�K‰K×&Ñ& |Ô4ô ô Pä�d—h‘hÐ1Ó2Ó3×9Ñ9Ó;ôPó Pˆ
ð ò 7ÜÑ7¨JÔ7Ó7Ð7ò7äÑ6¨:Ô6Ó6Ð6ð 	ñ Ø—[‘[ §¡Ð*=Ó!>À	ÓJˆFØ˜ŠzÜ Ñ F¸:Ô FÓF�
Ø#¤c¨&£k°JÑ&>Ñ>�Ø�K‰K× Ñ  ¨VÔ4ð —8‘8Ð,¨fÓ5ˆØ�wÒØ‰HØ˜Ò!Ø‰HàˆHØ�‰× Ñ  Ô*ð —H‘HÐ.°Ó8ˆ	Ø˜ÒØ‰IØ˜'Ò!Ø‰IàˆIØ�‰×!Ñ! )Ô,ô ˜DŸH™HÐ%8¸!Ó<Ó=ˆØ˜Š?ØˆKØ�‰×#Ñ# KÕ0rZ   c                 ó  — | j                  |j                  dd«      «      \  }}t        |j                  dd«      «      }t        | ||||d¬«      }|xs |}| j                  |j                  d«      «      \  }	}
t        |j                  dd«      «      }t        | ||	||d	¬«      }| j	                  |j                  d
d«      |«      }|
xs |xr |}|j                  d«      dk(  }|r/|r|rd}n|rd}n|rd}nd}| j
                  j                  |«       y|r|r| j
                  j                  |«       y|r| j
                  j                  «        y|r| j
                  j                  |«       y| j
                  j                  «        y)z!Paint fill and stroke for a node.rC   rw   rŒ  r   FrŽ  rD   r�  Trh  r�  z	fill-ruleÚevenoddr   r   râ   N)rŠ  r^   r%   r   r  r   Úset_text_renderingÚfill_and_strokerD   rC   r0  )rV   rÿ   r  r   r§  r¨  r©  Ú
fill_drawnrC   r­  r®  r¯  Ústroke_drawnr²  rD   Úeven_oddÚtext_renderings                    rX   r.  zSVG.fill_stroke  se  € ð #'§.¡.°·±¸&À'Ó1JÓ"KÑˆ�ZÜ" 4§8¡8¨N¸AÓ#>Ó?ˆÜ-Ø�$˜ Y°ÀUôLˆ
àÒ'˜Zˆð '+§n¡n°T·X±X¸hÓ5GÓ&HÑ#ˆ�|Ü$ T§X¡XÐ.>ÀÓ%BÓCˆÜ/Ø�$˜ y°.ÈôOˆà—{‘{ 4§8¡8¨N¸EÓ#BÀIÓNˆØÒ. ,Ò@°Lˆð —8‘8˜KÓ(¨IÑ5ˆÙÙ™$Ø!"‘ÙØ!"‘ÙØ!"‘à!"�Ø�K‰K×*Ñ*¨>Õ:á™Ø—‘×+Ñ+¨HÕ5ÙØ—‘×"Ñ"Õ$ÙØ—‘× Ñ  Õ*à—‘—‘Õ!rZ   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è   r8  r   r:  )rV   rÿ   r  Útransform_originÚtransform_stringÚmatrixs         rX   r+   zSVG.transform5  sh   € àŸ8™8Ð$6Ó7ÐØŸ8™8 KÓ0ÐÙØäØÐ.°	¸4×;NÑ;NóPˆà×ÒØ!ˆD�K‰K×!Ñ! 6§=¡=Ò1ð rZ   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(   r3  rþ   rS   r{   Únextr—   rà   r˜   )rV   rÆ   r%  rB   Úparentr_   r…   s          rX   rþ   zSVG.inherit_elementA  s½   € à×Ñ §¡Ó)ˆÙØØ×ÑÔØ—‘œ) D›/×2Ñ2Ó3ˆÙØØ×Ñ˜V TÔ*Ø Ÿ-™-×-Ñ-Ó/ò 	,‰JˆC�Ø˜'Ÿ.™.Ò(Ø&+�—‘˜sÒ#ð	,ô ”�W“˜tÓ$Ð,Ø×!Ñ! &§/¡/Ó"3Õ4ð -rZ   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#   )rV   rÿ   r  rD   rW  s        rX   rB  zSVG.calculate_bounding_boxQ  sQ   € á�T×&Ñ&Ð.Ü˜t T¨9°fÓ=ˆCÜ$ SÔ)¨a°s¸1¸2°wÑ.>ÙØ�JØ$'�Ô!Ø× Ñ Ð rZ   rM   ©Trê   )rë   rì   rí   rî   rY   r  r£   r  r  r#  r"  rA  rð   rŠ  r5  r.  r+   rþ   rB  rÛ   rZ   rX   r  r  k  sa   „ Ùó%ò21ò 'ò3ò<ò	0óZ$òxm4ð^ ñó ðó @1óD%"òN
2ò5ô !rZ   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                 ó–   •— t         ‰| �  |j                  |j                  |j                  |j
                  «       || _        || _        y rM   )ÚsuperrY   rP   r©   r  r  r   rü   )rV   rü   r   rß   s      €rX   rY   zPattern.__init__^  s6   ø€ Ü‰Ñ˜×)Ñ)¨3¯7©7°C·O±OÀSÇ_Á_ÔUØˆŒØˆ�	rZ   c                 ó~   •— || j                   k(  r| j                  j                   | _         t        ‰| �  ||d¬«       y )NTr-  )rü   r   rÎ  r"  )rV   rÿ   r  r.  rß   s       €rX   r"  zPattern.draw_nodec  s4   ø€ ð �4—9‘9ÒØŸ™Ÿ™ˆDŒIÜ‰Ñ˜$ 	°tÐÕ<rZ   rÊ  )rë   rì   rí   rî   rY   r"  Ú__classcell__)rß   s   @rX   rÌ  rÌ  \  s   ø„ Ù(ô÷
=ñ =rZ   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   Úshapesr   r   r   r   r   r   r   r!   r    r"   r#   Úutilsr$   r%   r&   r'   r(   r)   r*   r+   r;  Ú	frozensetr|   r�   r=  rK   rò   r  rÌ  rÛ   rZ   rX   ú<module>rÚ     sê   ðÙ ã 	Ý ß 3× 3Ý !å %å $ß 6ß JÓ Jß Ý ß B× BÝ ÷Ró R÷÷ ó ð
 
ØØØØØØØØØØØØØñ€ñ" %ð &ó Ð ñ2 ð ó Ð ñ ð 
ó 
€	÷vPñ vP÷rñ ÷6n!ñ n!ôb=ˆcõ =rZ   