+
    ŒvjÎ”  ã                   óÈ  € R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHtHt ^ RI	H
t
 ^ RIHt ^ RIHt ^ RIHtHtHt ^ RIHtHtHt ^ RI5 ^ R	IHt ^ R
IHtHtHt ^ RIHtHt ^RIH t  ^ RI!H"t" ]PF                  t#]PH                  t$]PJ                  t%RPM                  4       t'RPM                  4       t(RPM                  4       t)RPM                  4       t*RPM                  4       t+]PX                  3R lt-]PX                  3R lt.^ ^ ]PX                  3R lt/R t0R%R lt1 ! R R]24      t3]RRRRR]RRRRR/t4R t5 ! R R 4      t6 ! R! R"]4      t7R&R# lt8]9R$8X  d
   ]8! 4        R# R# )'a  An experimental SVG renderer for the ReportLab graphics framework.

This will create SVG code from the ReportLab Graphics API (RLG).
To read existing SVG code and convert it into ReportLab graphics
objects download the svglib module here:

  http://python.net/~gherman/#svglib
N)ÚBytesIOÚStringIO)ÚstringWidth)Úfp_str)ÚasNative)ÚgetStateDeltaÚRendererÚrenderScaledDrawing)ÚSTATE_DEFAULTSÚPathÚUserNode)Ú*)Ú	rl_config)ÚRLStringÚ	isUnicodeÚisBytes)ÚFILL_EVEN_ODDÚFILL_NON_ZERO)Ú	_getImage)ÚgetDOMImplementationzsstroke-width stroke-linecap stroke stroke-opacity fill fill-opacity stroke-dasharray stroke-dashoffset fill-rule idzWstroke-width stroke-linecap stroke stroke-opacity stroke-dasharray stroke-dashoffset idz<font-family font-weight font-style font-variant font-size idzTstroke-width stroke-linecap stroke stroke-opacity stroke-dasharray stroke-dashoffsetzfill fill-opacityc                óR   € \        4       p\        W3RV/VB  VP                  4       # )z>Returns a SVG as a string in memory, without touching the diskÚshowBoundary)r   Ú
drawToFileÚgetvalue)Údr   ÚkwdsÚss   &&, Ú`/var/www/html/daimler-pipeline/venv/lib/python3.14/site-packages/reportlab/graphics/renderSVG.pyÚdrawToStringr   '   s'   € ä‹
€AÜˆqÑ6 ,Ð6°Ò6Ø�:‰:‹<Ðó    c                 ó    € \        V 4      p \        V P                  V P                  33/ VB p\	        W^ ^ VR7       VP                  V4       R# )é    ©r   N)r	   Ú	SVGCanvasÚwidthÚheightÚdrawÚsave)r   Úfnr   r   Úcs   &&&, r   r   r   -   sA   € Ü˜AÓ€AÜ�1—7‘7˜AŸH™HÐ%Ñ-¨Ñ-€AÜˆˆq�! ,Õ/Ø‡F�Fˆ2†Jr   c                óT   € \        4       pVP                  \        V 4      WW4R7       R# )zAs it says.r"   N)Ú_SVGRendererr&   r	   )ÚdrawingÚcanvasÚxÚyr   Úrs   &&&&& r   r&   r&   3   s!   € ä‹€AØ‡F�FÔ˜wÓ'¨°A€FÖQr   c                ó�   € . p\        ^ \        V 4      ^4       F)  pVP                  W,          W^,           ,          34       K+  	  V# )zc
given a list of coordinates [x0, y0, x1, y1....]
produce a list of points [(x0,y0), (y1,y0),....]
)ÚrangeÚlenÚappend)ÚLÚPÚis   &  r   Ú_pointsFromListr8   9   s?   € ð 	€AÜ�1”S˜“V˜QÖˆØ	�‰�!•$˜˜A�#��Ö ñ  ð €Hr   c                óþ   € V P                  V4      pVP                  4        FW  w  rV\        V4      pV'       g   VP                  WW4       K+  VP	                  V4      pTP                  YX;'       g    T4       KY  	  V# )ao  Transform a DOM node into new node and copy selected attributes.

Creates a new DOM node with tag name 'newTag' for document 'doc'
and copies selected attributes from an existing 'node' as provided
in 'attrDict'. The source 'node' can be None. Attribute values will
be converted to strings.

E.g.

    n = transformNode(doc, "node1", x="0", y="1")
    -> DOM node for <node1 x="0" y="1"/>

    n = transformNode(doc, "node1", x=0, y=1+1)
    -> DOM node for <node1 x="0" y="2"/>

    n = transformNode(doc, "node1", node0, x="x0", y="x0", zoo=bar())
    -> DOM node for <node1 x="[node0.x0]" y="[node0.y0]" zoo="[bar()]"/>
)ÚcreateElementÚitemsÚstrÚsetAttributeÚgetAttribute)	ÚdocÚnewTagÚnodeÚattrDictÚnewNodeÚnewAttrÚattrÚsattrÚattrVals	   &&&,     r   ÚtransformNoderH   E   sn   € ð( ×Ñ Ó'€GØ!Ÿ™Ö)‰ˆÜ�T“ˆßØ× Ñ  Ö0à×'Ñ'¨Ó.ˆGØ× Ñ  ×*:Ð*:°UÖ;ñ *ð €Nr   c                   óÎ   a € ] tR t^dt o RtR]P                  R]P                  R]P                  R]P                  R]P                  R]P                  /tRR ltR	 tR
 tRtV tR# )ÚEncodedWriterz}
EncodedWriter(encoding) assumes .write will be called with
either unicode or utf8 encoded bytes. it will accumulate
unicode
zutf-32z	utf-32-bez	utf-32-lezutf-16z	utf-16-bez	utf-16-lec                óò   € \         P                  V 4       \        P                  ! V4      P                  ;V n        pV'       d   R V9   g   RV9   d%   V P                  V P                  V,          4       R# R# )Ú16Ú32N)ÚlistÚ__init__ÚcodecsÚlookupÚnameÚencodingÚwriteÚBOMS)ÚselfrS   Úboms   &&&r   rO   ÚEncodedWriter.__init__r   sT   € Ü�‰�dÔÜ#)§=¢=°Ó#:×#?Ñ#?Ð?ˆŒ˜ß�4˜8Ô# t¨xÔ'7Ø�J‰J�t—y‘y Õ*Ö+ñ (8r   c                óB  € \        V4      '       d    VP                  R 4      pM,\        V4      '       g   \        R\        V4      ,          4      hV P                  V4       R#    \        P                  ! 4       w  r#p\	        T4      p??\        RT: RT: 24      h; i)úutf-8zString z not encoded as 'utf-8'
error=z?EncodedWriter.write(%s) argument should be 'utf-8' bytes or strN)	r   ÚdecodeÚsysÚexc_infor<   Ú
ValueErrorr   Úasciir4   )rV   ÚuÚetÚevÚtbs   &&   r   rT   ÚEncodedWriter.writex   s„   € Ü�1�:Š:ðXØ—X‘X˜gÓ&‘ô ˜1—’ÜÐ^ÔafÐghÓaiÕiÓjÐjØ�‰�AŽøðXÜ Ÿ\š\›^‘
�˜Ü˜“W�Ø˜Ý ÓQRÒSUÐ!VÓWÐWús   “A$ Á$:Bc                ó.   € R P                  V 4      pV R V# )Ú :NNN©Újoin)rV   r0   s   & r   r   ÚEncodedWriter.getvalue…   s   € Ø�G‰G�D‹MˆØ�ˆGØˆr   ©rS   N)F)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rP   Ú	BOM_UTF32ÚBOM_UTF32_BEÚBOM_UTF32_LEÚ	BOM_UTF16ÚBOM_UTF16_BEÚBOM_UTF16_LErU   rO   rT   r   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   rJ   rJ   d   si   ø‡ € ñð 	�×!Ñ!Ø�F×'Ñ'Ø�F×'Ñ'Ø�×!Ñ!Ø�F×'Ñ'Ø�F×'Ñ'ð
€Dô,ò÷ð r   rJ   Únonzeroznon-zeroÚevenoddzeven-oddc                  ó2   € R P                  R V  4       4      # )Ú c              3   óp   "  € T F,  pR V,          P                  R4      P                  R4      x € K.  	  R# 5i)z%fÚ0Ú.N)Úrstrip)Ú.0Úas   & r   Ú	<genexpr>Úpy_fp_str.<locals>.<genexpr>”   s-   é € ÐFÁ¸A�d˜Q•h×&Ñ& sÓ+×2Ñ2°3×7Ð7Ãùs   ‚46rg   )Úargss   *r   Ú	py_fp_strr‡   “   s   € Ø�8‰8ÑFÁÓFÓGÐGr   c                   óˆ  a € ] tR t^—t o R/R ltR0R ltR1R lt. R3R ltR tR t	^ R]
R3R	 ltR
 tR t. ^ 3R ltR tR tR tR tR tR tR2R ltR2R ltR3R ltR4R ltR5R ltR tR6R ltR tR0R ltR0R ltR7R ltR8R lt R9R lt!R1R  lt"R! t#]$! RR"7      3R# lt%R$ t&R% t'R& t(R' t)R( t*R) t+R* t,R+ t-R, t.R- t/R.t0V t1R# ):r#   c           	     óÌ
  a a€ VS n         \        P                  ! V4      P                  S n        VS n        VP                  RR4      pVP                  R/ 4      S n        VP                  RR4      o\        S\        4      '       d   V3R lS n
        M-\        S4      '       d	   SS n
        M\        R\        : R24      hVP                  R	R
4      S n        VP                  RR
4      p\        S n        V;w  S n        S n        S n        . S n        / S n        R
S n        R;S n        ;S n        ;S n        ;S n        ;S n        ;S n        S n        VP                  RR4      '       d   \:        S n        M\<        S n        V 3R lS n        \A        R4      pVPC                  RRR4      p	VPE                  RRV	4      S n#        S PF                  PH                  S n%        \M        \        V^ ,          4      \        S P"                  4      RRS P                   S P"                  3,          RRR7      p
\N        S P                  ,          V
R&   RV
R&   V
PQ                  VP                  R/ 4      4       V
PS                  4        F   w  r¼S PJ                  PU                  W¼4       K"  	  S PF                  PW                  R4      pS PF                  PY                  R4      pVP[                  V4       S PJ                  P[                  V4       S PF                  PW                  R4      pS PF                  PY                  R4      pVP[                  V4       S PJ                  P[                  V4       S P]                  \^        R,          \^        R ,          4       S Pa                  \^        R!,          4       S Pc                  ^4       S Pe                  ^ 4       S Pg                  ^4       V'       g�   \i        S PF                  R"R#R$7      p\i        S PF                  R%^ ^ S P                   S P"                  R&7      pVP[                  V4       S PJ                  P[                  V4       \M        R'R(7      pM)\M        RS P                   S P"                  3,          R)7      p\i        S PF                  R*3R+R,R-R.S P"                  ,          /VB S n5        V'       dj   \i        S PF                  R*VR/R07      S n6        S Pl                  P[                  S Pj                  4       S PJ                  P[                  S Pl                  4       M%S PJ                  P[                  S Pj                  4       S Pj                  S n7        R# )1aô  
verbose = 0 >0 means do verbose stuff
useClip = False True means don't use a clipPath definition put the global clip into the clip property
                to get around an issue with safari
extraXmlDecl = ''   use to add extra xml declarations
scaleGroupId = ''   id of an extra group to add around the drawing to allow easy scaling
svgAttrs = {}       dictionary of attributes to be applied to the svg tag itself
fontSizer = 'px'    a string unit or acallable that returns a string fontSize value
ÚuseClipFÚ	fontHacksÚ	fontSizerÚpxc                 ó   <€ R S 2V ,          # )ú%s© )ÚvÚfzs   &€r   Ú<lambda>Ú$SVGCanvas.__init__.<locals>.<lambda>©   s   ø€ ¨¨B¨4 y°1¦}r   z
fontSizer=zB should be a str unit eg px/pt or a callable that returns a stringÚextraXmlDeclrf   ÚscaleGroupIdNÚ
use_fp_strc                  óD   <€ SP                   ! V !  P                  R R4      # )r}   Ú,)r   Úreplace)r†   rV   s   *€r   r“   r”   ¾   s   ø€  T§[¢[°$Ñ%7×%?Ñ%?ÀÀCÔ%Hr   ÚminidomÚsvgz-//W3C//DTD SVG 1.0//ENz8http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtdzxMinYMin meetz	0 0 %d %dzhttp://www.w3.org/2000/svgz1.0)r$   r%   ÚpreserveAspectRatioÚviewBoxÚxmlnsÚversionú	fill-rulezhttp://www.w3.org/1999/xlinkzxmlns:xlinkÚsvgAttrsÚtitlez...ÚdescÚfontNameÚfontSizeÚstrokeColorÚclipPathÚclip)ÚidÚrect)r.   r/   r$   r%   zclip-path: url(#clip))Ústyle)r©   Úgrª   ÚgroupÚ	transformzscale(1,-1) translate(0,-%d)z
scale(1,1))rª   r¯   )8ÚverboserP   rQ   rR   rS   rW   Úpopr‹   Ú
isinstancer<   rŒ   Úcallabler^   r•   r   Ú	_fillModer$   r%   ÚsizeÚcoder¬   ÚpathÚ_strokeColorÚ
_fillColorÚ
_lineWidthÚ_fontÚ	_fontSizeÚ_lineCapÚ	_lineJoinr   r‡   Úcfp_strr   ÚcreateDocumentTypeÚcreateDocumentr?   ÚdocumentElementrœ   ÚdictÚ_fillRuleMapÚupdater;   r=   r:   ÚcreateTextNodeÚappendChildÚsetFontr
   ÚsetStrokeColorÚ
setLineCapÚsetLineJoinÚsetLineWidthrH   Ú	groupTreeÚ	scaleTreeÚ	currGroup)rV   rµ   rS   r°   rW   r   rŠ   r–   ÚimplementationÚdoctyper¢   Úkr‘   r£   Útextr¤   r¨   ÚclipRectÚgtkwr’   s   f&&&&,             @r   rO   ÚSVGCanvas.__init__˜   s@  ù€ ð ˆŒÜŸš hÓ/×4Ñ4ˆŒØˆŒØ—(‘(˜9 UÓ+ˆØŸ™ +¨bÓ1ˆŒØ�X‰X�k $Ó'ˆÜ�bœ×ÒÜ4ˆD�NÜ�b�\Š\ØˆD�Nä 
¤	™|Ð+mÐnÓoÐoØ ŸH™H ^°BÓ7ˆÔØ—x‘x ¨rÓ2ˆÜ&ˆŒà.2Ð2ÑˆŒ
�D”K $¤)àˆŒ	ØˆŒ
ØˆŒ	ð "ð	"ˆÔð 	"˜DœOð 	"¨d¬oð 	"ØŒJð	"Øœð	"Ø*.¬-ØŒNØ�8‰8�L ×'Ò'Ü ˆD�Kä#ˆDŒKÜHˆŒä-¨iÓ8ˆð !×3Ñ3°EØ+ØLóNˆð "×0Ñ0°°e¸GÓDˆŒØ—8‘8×+Ñ+ˆŒÜÜ  Q¥›LÜ˜tŸ{™{Ó+Ø(7Ø'¨4¯:©:°t·{±{Ð*CÕCð 7Ø!ô
ˆô !-¨T¯^©^Õ <ˆ�ÑØ"@ˆ�ÑØ�‰˜Ÿ™ ¨BÓ/Ô0Ø—>‘>Ö#‰CˆAØ�H‰H×!Ñ! !Ö&ñ $ð —‘×&Ñ& wÓ/ˆØ�x‰x×&Ñ& uÓ-ˆØ×Ñ˜$ÔØ�‰×Ñ˜UÔ#à�x‰x×%Ñ% fÓ-ˆØ�x‰x×&Ñ& uÓ-ˆØ×Ñ˜ÔØ�‰×Ñ˜TÔ"à�‰”^ JÕ/´À
Õ1KÔLØ×ÑœN¨=Õ9Ô:Ø�‰˜ÔØ×Ñ˜ÔØ×Ñ˜!Ôçä$ T§X¡X¨z¸fÔEˆHÜ$ T§X¡X¨v¸¸aØ—j‘j¨¯©ô6ˆHà× Ñ  Ô*Ø�H‰H× Ñ  Ô*ÜÐ5Ô6‰Dä˜[¨D¯J©J°t·{±{Ð+CÕCÔDˆDä& t§x¡x°ñ Øðà4°t·{±{ÕBðð ñˆŒ÷ Ü*¨4¯8©8°S¸\ÐUaÔbˆDŒNØ�N‰N×&Ñ& t§~¡~Ô6Ø�H‰H× Ñ  §¡Õ0à�H‰H× Ñ  §¡Ô0ØŸ™ˆŽr   Nc                ó¾  € \        V P                  V P                  R 7      pV P                  P	                  VRRV P                  R7       \        VR4      '       d   TpM\        VRV P                  R7      pVP                  4       pV P                  pV'       d   VP                  RRV,           4      pVP                  V4       W1Jd   VP                  4        R# R# )	)rW   Ú	Ú
)Ú	addindentÚnewlrS   rT   Úwrj   z?>N)rJ   rS   rW   r?   ÚwritexmlÚhasattrÚopenr   r•   rš   rT   Úclose)rV   r(   ÚwriterÚfrœ   Úexds   &&    r   r'   ÚSVGCanvas.save  s¥   € Ü˜tŸ}™}°·±Ô:ˆØ�‰×Ñ˜&¨4°TÀ4Ç=Á=ÐÔQä�2�g×ÒØ‰Aä�R˜ d§m¡mÔ4ˆAà�o‰oÓˆØ×ÑˆßØ—+‘+˜d 4¨¥8Ó,ˆCØ	�‰�ŒØ‹;Ø�G‰GŽIñ r   c                ór   € T;'       g    V P                   pT;'       g    V P                  p\        WV4      # )zeReturn the logical width of the string if it were drawn
in the current font (defaults to self.font).
)r»   r¼   r   )rV   r   Úfontr¦   s   &&&&r   ÚNOTUSED_stringWidthÚSVGCanvas.NOTUSED_stringWidth  s3   € ð
 ×!Ð!�t—z‘zˆØ×-Ð-˜tŸ~™~ˆä˜1 HÓ-Ð-r   rf   c                ó  € V P                   P                  4       pVP                  V4       \        VP	                  4       4      pV'       d   V Uu. uF  qfV9   g   K  VNK  	  ppV'       dH   VP                  4       pV Uu. uF*  qfV9  g   K  VR ,           \        WF,          4      ,           NK,  	  ppM-V Uu. uF!  qfR ,           \        WF,          4      ,           NK#  	  ppRP                  V4      R,           # u upi u upi u upi )z: z; Ú;)r¬   ÚcopyrÅ   rN   ÚkeysÚsplitr<   rh   )rV   ÚincludeÚexcluder   r¬   rì   rÒ   r;   s   &&&,    r   Ú_formatStyleÚSVGCanvas._formatStyle(  sÏ   € Ø—
‘
—‘Ó!ˆØ�‰�TÔÜ�E—J‘J“LÓ!ˆßÙ#Ó4™t˜!¨G¡|—A�A™tˆDÐ4ßØ—m‘m“oˆGÙ37ÓL±4¨aÀGÑ;KÔ)�Q�t•VœC ¥›M×)Ð)±4ˆEÐLˆEá37Ó8±4¨a�t•VœC ¥›M×)Ð)±4ˆEÐ8Ø�y‰y˜Ó #Õ%Ð%ùò 5ùò Mùâ8s   ÁC:ÁC:ÂC?Â#C?Â9'Dc                ó   € V# )zKI don't think this was ever needed; seems to have been copied from renderPSr�   )rV   r   s   &&r   Ú_escapeÚSVGCanvas._escape5  s   € àˆr   c                ó   € R# )zPCalculate the path for an arc inscribed in rectangle defined
by (x1,y1),(x2,y2).N)Úabs)rV   Úx1Úy1Úx2Úy2ÚstartAngÚextentÚxScaleÚyScaler.   r/   ÚcodelineÚarcÚdatas   &&&&&&&       r   Ú_genArcCodeÚSVGCanvas._genArcCode9  s   € ñ 	r   c                ó  € / pV'       d   \         V,          VR &   \        V P                  RV P                  V P	                  V4      R7      pV'       d   V P                  Ws4      pV P                  P                  V4       RV n        R# )r¡   r·   ©r   r¬   rf   N)rÄ   rH   r?   r·   rð   Ú	_add_linkrÏ   rÇ   )rV   r¶   r©   Ú	link_infoÚstylesÚfillModeÚxtrar·   s   &&&&&&  r   Ú_fillAndStrokeÚSVGCanvas._fillAndStrokeO  sk   € ØˆßÜ ,¨XÕ 6ˆD�ÑÜ˜TŸX™X vØ�i‰i˜t×0Ñ0°Ó8ôˆ÷ Ø—>‘> $Ó2ˆDØ�‰×"Ñ" 4Ô(ØˆŽ	r   c                ór   € ^ R^R^R/pV P                   V8w  d   Wn         W!,          V P                  R&   R# R# )r!   ÚbuttÚroundÚsquareústroke-linecapN)r½   r¬   ©rV   r‘   Úvalss   && r   rÊ   ÚSVGCanvas.setLineCap]  s;   € Ø�&˜!˜G Q xÐ0ˆØ�=‰=˜AÔØŒMØ+/­7ˆD�J‰JÐ'Ó(ñ r   c                ór   € ^ R^R^R/pV P                   V8w  d   Wn         W!,          V P                  R&   R# R# )r!   Úmiterr  Úbevelr  N)r¾   r¬   r  s   && r   rË   ÚSVGCanvas.setLineJoinc  s;   € Ø�'˜1˜W a¨Ð0ˆØ�>‰>˜QÔØŒNØ+/­7ˆD�J‰JÐ'Ó(ñ r   c                ó²  € \        V\        \        34      '       d0   RP                  \	        \
        W.4      4      V P                  R&   R# \        V\        \        34      '       dp   \        V4      ^ 8”  d^   V^ 8¼  g   Q R4       hRP                  \	        \
        V4      4      V P                  R&   V^ 8”  d   \        V4      V P                  R&   R# R# R# R# )z7Two notations. Pass two numbers, or an array and phase.ú, zstroke-dasharrayzphase is a length in user spacezstroke-dashoffsetN)
r²   ÚfloatÚintrh   Úmapr<   r¬   ÚtuplerN   r3   )rV   ÚarrayÚphases   &&&r   ÚsetDashÚSVGCanvas.setDashi  s¨   € ô �eœU¤3˜K×(Ò(Ø-1¯Y©Y´s¼3À%ÀÓ7QÓ-RˆD�J‰JÐ)Ó*Ü˜œu¤T˜l×+Ò+´°E³
¸Q´Ø˜A”:Ð@Ð@Ó@�:Ø-1¯Y©Y´s¼3À³Ó-GˆD�J‰JÐ)Ñ*Ø�QŒwÜ25°e³*�—
‘
Ð.Ó/ñ ñ 1?Ñ+r   c                óz  € Wn         VR 8X  d   RV P                  R&   R # VP                  VP                  VP                  rCpRV^d,          V^d,          V^d,          3,          V P                  R&   VP
                  pV^8w  d   RV,          V P                  R&   R # RV P                  9   d   V P                  R R # R # )NÚnoneÚstrokeúrgb(%d%%,%d%%,%d%%)r�   zstroke-opacity)r¸   r¬   ÚredÚgreenÚblueÚnormalizedAlpha©rV   Úcolorr0   r­   ÚbÚalphas   &&    r   rÉ   ÚSVGCanvas.setStrokeColort  s�   € Ø!ÔØ�DŒ=Ø#)ˆD�J‰J�xÓ à—i‘i §¡¨e¯j©j�!ˆAØ#8¸A¸c½EÀ1ÀSÅ5È!ÈCÍ%Ð;PÕ#PˆD�J‰J�xÑ Ø×)Ñ)ˆEØ�aŒxØ/3°e­|�—
‘
Ð+Ó,Ø! T§Z¡ZÔ/Ø—J‘JÐ/Ò0ñ 0r   c                óz  € Wn         VR 8X  d   RV P                  R&   R # VP                  VP                  VP                  rCpRV^d,          V^d,          V^d,          3,          V P                  R&   VP
                  pV^8w  d   RV,          V P                  R&   R # RV P                  9   d   V P                  R R # R # )Nr$  Úfillr&  r�   zfill-opacity)r¹   r¬   r'  r(  r)  r*  r+  s   &&    r   ÚsetFillColorÚSVGCanvas.setFillColor�  sš   € ØŒØ�DŒ=Ø!'ˆD�J‰J�vÓà—i‘i §¡¨e¯j©j�!ˆAØ!6¸!¸C½%ÀÀ3ÅÈÈ#ÍÐ9NÕ!NˆD�J‰J�vÑØ×)Ñ)ˆEØ�aŒxØ-1°E­\�—
‘
˜>Ó*Ø 4§:¡:Ô-Ø—J‘J˜~Ò.ñ .r   c                óF   € Wn         \        V,          V P                  R &   R# )r¡   N)r´   rÄ   r¬   )rV   r‘   s   &&r   ÚsetFillModeÚSVGCanvas.setFillModeŽ  s   € ØŒÜ".¨q¥/ˆ�
‰
�;Ór   c                óR   € WP                   8w  d   Wn         WP                  R &   R# R# )zstroke-widthN)rº   r¬   )rV   r$   s   &&r   rÌ   ÚSVGCanvas.setLineWidth’  s"   € Ø—O‘OÔ#Ø#ŒOØ).�J‰J�~Ó&ñ $r   c                ó:  € V P                   V8w  g   V P                  V8w  dù   Wn         W n        V P                  p\         F  pWC9   g   K  W4 K  	  WP                  9   d   V P                  V,          M/ p\        V\        4      '       d3   VP                  \        VP                  P                  4       4      4       V'       d4   VP                  4        F  w  rFR V,           pV\        9   g   K  WcV&   K!  	  RV9  d   WR&   V P                  V4      VR&   R# R# )zfont-zfont-familyz	font-sizeN)r»   r¼   r¬   ÚTEXT_STYLESr‹   r²   r   rÅ   Úiterr¢   r;   rŒ   )rV   ræ   r¦   r¬   rÒ   r¢   r‘   rƒ   s   &&&     r   rÈ   ÚSVGCanvas.setFont—  sÞ   € Ø�:‰:˜Ô §¡°8Ô!;ØŒJØ%ŒNØ—J‘JˆEß �Ø–:Øšñ !ð 04·~±~Ô/E�t—~‘~ dÖ+È2ˆHÜ˜$œx×(Ò(Ø—‘¤ T§]¡]×%8Ñ%8Ó%:Ó ;Ô<ßØ#Ÿ>™>Ö+‘C�AØ �	�AØœKÖ'Ø#$˜a›ñ ,ð  EÔ)Ø'+�mÑ$Ø!%§¡°Ó!9ˆE�+Óñ# "<r   c                ó†   € \        V\        4      '       g   Q h\        V P                  R 3/ VB pVP	                  V4       V# )rƒ   )r²   rÃ   rH   r?   rÇ   )rV   Ú
dom_objectr  Úlinks   &&& r   r  ÚSVGCanvas._add_link«  s=   € Ü˜)¤T×*Ò*Ð*Ð*Ü˜TŸX™X sÑ8¨iÑ8ˆØ×Ñ˜Ô$Øˆr   c                ó€  € V P                   '       d   \        R4       \        W4      p	\        W$4      p
/ p\        V P                  R3RV	RV
R\        W4      V	,
          R\        W$4      V
,
          RV P                  \        4      /VB pV'       d   V P                  WÇ4      pV P                  P                  V4       R# )	z)Draw a rectangle between x1,y1 and x2,y2.z+++ SVGCanvas.rectr«   r.   r/   r$   r%   r¬   N)r°   ÚprintÚminrH   r?   Úmaxrð   ÚAREA_STYLESr  rÏ   rÇ   )rV   r÷   rø   rù   rú   ÚrxÚryr  Ú	_svgAttrsr.   r/   r   r«   s   &&&&&&&&,    r   r«   ÚSVGCanvas.rect²  s®   € ð �<�<ˆ<œÐ3Ô4ä�‹JˆÜ�‹JˆØˆÜ˜TŸX™X vñ >Øð>Øð>Ü ›J q�Lð>Ü14°R³¸Aµð>à×#Ñ#¤KÓ0ð>à3<ñ>ˆ÷ Ø—>‘> $Ó2ˆDà�‰×"Ñ" 4Ö(r   c                óö   € \        V P                  R3RVRVRW1,
          RWB,
          RVRVRV P                  \        4      /VB p	V'       d   V P	                  W—4      p	V P
                  P                  V	4       R	# )
zŸDraw a rounded rectangle between x1,y1 and x2,y2.

Corners inset as ellipses with x-radius rx and y-radius ry.
These should have x1<x2, y1<y2, rx>0, and ry>0.
r«   r.   r/   r$   r%   rF  rG  r¬   N©rH   r?   rð   rE  r  rÏ   rÇ   )
rV   r÷   rø   rù   rú   rF  rG  r  rH  r«   s
   &&&&&&&&, r   Ú	roundRectÚSVGCanvas.roundRectÃ  sŠ   € ô ˜TŸX™X vñ ?Øð?Øð?Ø �eð?Ø,.­Eð?Ø68ð?Ø=?ð?à×#Ñ#¤KÓ0ð?à4=ñ?ˆ÷ Ø—>‘> $Ó2ˆDà�‰×"Ñ" 4Ö(r   c                ó"  € V^8X  d   R# \        V4      pV P                  '       d   \        R4       V^ 8H  ;'       g     V^8H  ;'       g    V^8H  ;'       g    V^8H  p	V^8H  ;'       g     V^8H  ;'       g    V^8H  ;'       g    V^8H  p
V P                  R8w  d	   V	'       g   V P                  R8w  EdÛ   V
'       EdÐ   VR9   g“   \        WP                  V P                  4      pVR8X  d
   W+,          pMbVR8X  d   W+R,          ,          pMKVR8X  d*   V\        WaW°P                  V P                  4      ,          pM\        R\        V4      ,           4      hV P                  V4      pV P                  \        4      pV^ 8w  d!   VRV P                  WBV4      ,          ,           pV	'       d   WÀP                  \        4      ,          pM	VR	,          pV
'       d   WÀP                  \         4      ,          pM	VR
,          p\#        V P$                  R3RVRVRVRR^V,          ,          /VB pV P$                  P'                  V4      pVP)                  V4       V'       d   V P+                  WÕ4      pV P,                  P)                  V4       R# R# R# )é   Nz+++ SVGCanvas.drawStringÚendÚmiddleç       @Únumericzbad value for text_anchor z rotate(%s);z fill:none;z stroke:none;rÓ   r.   r/   r¬   r¯   ztranslate(0,%d) scale(1,-1))ÚstartÚ	inheritedÚleft)r   r°   rB  r¹   r¸   r   r»   r¼   ÚnumericXShiftr^   r<   ró   rð   r:  r   ÚEXTRA_FILL_STYLESÚEXTRA_STROKE_STYLESrH   r?   rÆ   rÇ   r  rÏ   )rV   r   r.   r/   Úangler  Útext_anchorÚtextRenderModerH  ÚneedFillÚ
needStrokeÚtextLenÚstrÓ   Úcontents   &&&&&&&&,      r   Ú
drawStringÚSVGCanvas.drawStringÓ  s>  € Ø˜1Ô™fÜ�Q‹KˆØ�<�<ˆ<œÐ9Ô:Ø! 1Ñ$×cÐc¨¸Ñ(9×cÐc¸^ÈQÑ=N×cÐcÐR`ÐbcÑRcˆØ# QÑ&×eÐe¨.¸!Ñ*;×eÐe¸~ÈqÑ?P×eÐeÐTbÐdeÑTeˆ
à�O‰O˜TÔ!§h°D×4EÑ4EÀtÕ4K×PZÐPZØÐ"@Ô@Ü% a¯
©
°4·>±>ÓB�Ø Ô%Ø•L‘AØ  (Ô*Ø �•O‘AØ  )Ô+Øœ {°W¿Z¹ZÈÏÉÓWÕW‘Aä$Ð%AÄCÈÓDTÕ%TÓUÐUØ—‘˜Q“ˆAØ×"Ñ"¤;Ó/ˆBØ˜ŒzØ˜¨$¯+©+°eÀÓ*BÕBÕBˆrßØ×'Ñ'Ô(9Ó:Õ:‘à�mÕ#�ßØ×'Ñ'Ô(;Ó<Õ<‘à�oÕ%�ô ! §¡¨6ñ ØðØðØ "ðà7¸1¸Q½3Õ?ðð ñˆDð
 —h‘h×-Ñ-¨aÓ0ˆGØ×Ñ˜WÔ%çØ—~‘~ dÓ6�à�N‰N×&Ñ& tÖ,ñI Q[Ñ4Kr   c                óx   € V P                   '       d   \        R 4       V P                  ! WV3RVRVRVRV/VB  R# )z+++ SVGCanvas.drawCentredStringrZ  r  r[  r\  N©r°   rB  rb  )	rV   r   r.   r/   rZ  r[  r  r\  rH  s	   &&&&&&&&,r   ÚdrawCentredStringÚSVGCanvas.drawCentredString   sH   € à�<�<ˆ<œÐ@ÔAØ�Š˜˜Añ 	< Eð 	<°Yð 	<ÈKð 	<Ø-ð	<Ø1:ô	<r   c                óx   € V P                   '       d   \        R 4       V P                  ! WV3RVRVRVRV/VB  R# )z+++ SVGCanvas.drawRightStringrZ  r  r[  r\  Nre  )	rV   rÓ   r.   r/   rZ  r[  r  r\  rH  s	   &&&&&&&&,r   ÚdrawRightStringÚSVGCanvas.drawRightString  sH   € à�<�<ˆ<œÐ>Ô?Ø�Š˜˜qñ 	< uð 	<¸	ð 	<È{ð 	<Ø-ð	<Ø1:ô	<r   c                ó<   € V P                   P                  V4      pR# )zAdd a comment.N)r?   ÚcreateComment)rV   r  Úcomments   && r   rm  ÚSVGCanvas.comment  s   € ð —(‘(×(Ñ(¨Ó.Šr   c                ó`  € \        4       pVP                  VR 4       \        \        P                  ! VP                  4       4      4      pV P                  P                  \        V P                  RW#WERV,           RV P                  ^^ ^ R^ V^V,          ,           4      ,          R7      4       R# )ÚpngÚimagezdata:image/png;base64,ú
matrix(%s))r.   r/   r$   r%   Úhrefr¯   Néÿÿÿÿ)r   r'   r   Úbase64Ú	b64encoder   rÏ   rÇ   rH   r?   r¿   )rV   rq  r.   r/   r$   r%   ÚembedÚbufs   &&&&&&& r   Ú	drawImageÚSVGCanvas.drawImage  s„   € Ü‹iˆØ�
‰
�3�uÔÜ”v×'Ò'¨¯©«Ó7Ó8ˆØ�‰×"Ñ"Ü˜dŸh™h wØ %Ø1°#Õ5Ø*¨T¯\©\¸!¸A¸aÀÀ1ÀVÈAÈaÍCÅZÓ-PÕPôö	r   c                ó
  € V P                   R 8w  dr    \        T P                  RRT P                  Y4      : RT P                  Y44      : R2T P                  \        4      R7      pT P
                  P                  T4       R # R # )Nr·   úM ú L z Zr  )r¸   rH   r?   rð   ÚLINE_STYLESrÏ   rÇ   r¿   )rV   r÷   rø   rù   rú   Úliner·   s   &&&&&  r   r  ÚSVGCanvas.line  sh   € Ø×Ñ Ô$Øô
 ! §¡©6Ø#'§<¡<°Ö#6°t·|±|ÀBÖ7JÐKØ×'Ñ'¬Ó4ô6ˆDð �N‰N×&Ñ& tÖ,ñ %r   c                ó4  € \        V P                  RW,           R,          W$,           R,          W1,
          R,          WB,
          R,          V P                  \        4      R7      pV'       d   V P	                  We4      pV P
                  P                  V4       R# )zkDraw an orthogonal ellipse inscribed within the rectangle x1,y1,x2,y2.

These should have x1<x2 and y1<y2.
ÚellipserR  )ÚcxÚcyrF  rG  r¬   NrK  )rV   r÷   rø   rù   rú   r  r‚  s   &&&&&& r   r‚  ÚSVGCanvas.ellipse*  sj   € ô
   §¡¨)Ø•�s�{ ¥ s�{°µ°s­{ÀÅÀs½{Ø×#Ñ#¤KÓ0ô2ˆ÷ Ø—n‘n WÓ8ˆGà�‰×"Ñ" 7Ö+r   c           
     óÈ   € \        V P                  R WVV P                  \        4      R7      pV'       d   V P	                  WT4      pV P
                  P                  V4       R# )Úcircle)rƒ  r„  r0   r¬   NrK  )rV   ÚxcÚycr0   r  r‡  s   &&&&& r   r‡  ÚSVGCanvas.circle8  sL   € Ü˜tŸx™x¨Ø˜AØ×#Ñ#¤KÓ0ô2ˆ÷ Ø—^‘^ FÓ6ˆFà�‰×"Ñ" 6Ö*r   c
                ó   €  R # ©N)r   r¹   r¶   r4   r¸   )rV   r÷   rø   rù   rú   Úx3Úy3Úx4Úy4Úclosedrÿ   r  s   &&&&&&&&&&  r   Ú	drawCurveÚSVGCanvas.drawCurveB  s   € ØÙr   c                óþ  € W,           R,          W$,           R,          r˜W1,
          R,          WB,
          R,          rºV
\        V\        ,          ^´,          4      ,          V,           pV\        V\        ,          ^´,          4      ,          V	,           pV
\        WV,           \        ,          ^´,          4      ,          V,           pV\        WV,           \        ,          ^´,          4      ,          V	,           pV P                  p. P                  pV'       d   V! RV! W‰4      : RV! Wï4      : 24       V'       d%   V! RV! W«4      ^ V^´8¬  ^ V! WÍ4      3,          4       M*V! RV! WÍ4      V! W«4      ^ V^´8¬  ^ V! WÍ4      3,          4       V'       d   V! RV! W‰4      ,          4       \        V P                  RRP                  VP                  4      V P                  4       R	7      pV P                  P                  V4       R
# )zçDraw a partial ellipse inscribed within the rectangle x1,y1,x2,y2.

Starting at startAng degrees and covering extent degrees. Angles
start with 0 to the right (+x) and increase counter-clockwise.
These should have x1<x2 and y1<y2.
rR  r|  r}  zA %s %d %d %d %szM %s A %s %d %d %d %s ZzL %s Zr·   r}   r  N)ÚcosÚpiÚsinr¿   r4   rH   r?   rh   Ú__self__rð   rÏ   rÇ   )rV   r÷   rø   rù   rú   rû   rü   Ú
fromcenterrƒ  r„  rF  rG  ÚmxÚmyÚaxÚayr¿   r   r·   s   &&&&&&&&           r   ÚdrawArcÚSVGCanvas.drawArcO  s„  € ð •%˜•˜r�u c�kˆBØ•%˜•˜r�u c�kˆBØ”#�hœr•k #•oÓ&Õ&¨Õ+ˆØ”#�hœr•k #•oÓ&Õ&¨Õ+ˆØ”#�x•¬Õ*¨3Õ.Ó/Õ/°"Õ4ˆØ”#�x•¬Õ*¨3Õ.Ó/Õ/°"Õ4ˆà—,‘,ˆØ�I‰IˆßÚ™W Rž_©g°b­oÐ>Ô?çÙÐ Ù�r‹  6¨3¡;°±7¸2³?ÐCõDõ Eñ Ð'Ù�r‹¡¨£°°F¸C±KÀÁGÈBÃOÐTõUô V÷ Ùˆh™ ›Õ(Ô)ä˜TŸX™X vØ�h‰h�q—z‘zÓ"¨$×*;Ñ*;Ó*=ô?ˆà�‰×"Ñ" 4Ö(r   c           	     ó”  € \        V4      ^8¼  g   Q R4       hV P                  R8w  g   V P                  R8w  dŠ   RP                  V Uu. uF  p\	        V!  NK  	  up4      p\        V P                  RWPP                  \        4      R7      pV'       d   V P                  Wc4      pV P                  P                  V4       R# R# u upi )é   z"Polygon must have 2 or more pointsNr  Úpolygon©Úpointsr¬   )r3   r¸   r¹   rh   r   rH   r?   rð   rE  r  rÏ   rÇ   )rV   r¤  r‘  r  ÚpÚptsÚpolylines   &&&&   r   r¢  ÚSVGCanvas.polygonq  s¢   € Ü�6‹{˜aÔÐEÐ!EÓEÐà×Ñ˜dÔ" d§o¡o°tÔ&;Ø—)‘)±Ó8±¨AœV QœZ±Ñ8Ó9ˆCÜ$ T§X¡X¨yØ×"3Ñ"3´KÓ"@ôBˆH÷ ØŸ>™>¨(Ó>�à�N‰N×&Ñ& xÖ0ñ '<ùÚ8s   Á	Cc                ó   € R # rŒ  )r¸   r¶   r4   r   )rV   ÚlineListr,  r$   rÿ   r  s   &&&&  r   ÚlinesÚSVGCanvas.lines€  s   € ár   c           
     óD  € \        V4      ^8¼  g   Q R4       hV P                  R8w  ds   RP                  V Uu. uF  p\        V!  NK  	  up4      p\	        V P
                  RW0P                  \        RR7      R7      pV P                  P                  V4       R# R# u upi )é   z#Polyline must have 1 or more pointsNr  r§  )r1  r£  )
r3   r¸   rh   r   rH   r?   rð   rE  rÏ   rÇ   )rV   r¤  r¥  r¦  r§  s   &&   r   ÚpolyLineÚSVGCanvas.polyLine‰  s‰   € Ü�6‹{˜aÔÐFÐ!FÓFÐà×Ñ Ô$Ø—)‘)±Ó8±¨AœV QœZ±Ñ8Ó9ˆCÜ$ T§X¡X¨zØ×"3Ñ"3´KÀTÐ"3Ó"JôLˆHà�N‰N×&Ñ& xÖ0ñ	 %ùÚ8s   ¸B)r¯   c                óî   € V P                   '       d   \        R 4       V P                  p\        V P                  R3/ VB pVP                  V4       W0n        V P                   '       d   \        R4       V# )z+++ begin SVGCanvas.startGroupr­   z+++ end SVGCanvas.startGroup)r°   rB  rÏ   rH   r?   rÇ   )rV   rB   rÏ   r®   s   &&  r   Ú
startGroupÚSVGCanvas.startGroup“  s[   € Ø�<�<ˆ<œÐ?Ô@Ø—N‘Nˆ	Ü˜dŸh™h¨Ñ8¨xÑ8ˆØ×Ñ˜eÔ$ØŒØ�<�<ˆ<œÐ=Ô>ØÐr   c                óŠ   € V P                   '       d   \        R 4       Wn        V P                   '       d   \        R4       R# R# )z+++ begin SVGCanvas.endGroupz+++ end SVGCanvas.endGroupN)r°   rB  rÏ   )rV   rÏ   s   &&r   ÚendGroupÚSVGCanvas.endGroupœ  s+   € Ø�<�<ˆ<œÐ=Ô>Ø"ŒØ�<�<ˆ<œÐ;Ö<‰<r   c           	     ó  € V P                   '       d   \        R WW4WV4       V P                  P                  R4      pWW4WV3R8w  d@   RV P	                  WW4WV4      ,          pV P                  P                  RV: RV: 24       R# R# )z!!! begin SVGCanvas.transformr¯   rr  r}   N)r®  r!   r!   r®  r!   r!   )r°   rB  rÏ   r>   r¿   r=   )	rV   rƒ   r-  r)   r   Úerâ   ÚtrÚts	   &&&&&&&  r   r¯   ÚSVGCanvas.transform¡  sr   € Ø�<�<ˆ<œÐ>ÀÀaÈAÔQØ�^‰^×(Ñ(¨Ó5ˆØ�!˜ÐÐ!3Ô3Ø˜tŸ|™|¨A°°AÓ8Õ8ˆAØ�N‰N×'Ñ'¨ÃÂAÐ5FÖGñ 4r   c           
     ó¾   € W3R8w  dU   V P                   P                  RV P                   P                  R4      : RRV P                  W4      ,          : 24       R# R# )r!   r¯   r}   ztranslate(%s)N)r!   r!   )rÏ   r=   r>   r¿   ©rV   r.   r/   s   &&&r   Ú	translateÚSVGCanvas.translate¨  sL   € Øˆ5�EŒ>Ø�N‰N×'Ñ'¨Ø—>‘>×.Ñ.¨{Ö;Ø# d§l¡l°1Ó&7×7ð69ö :ñ r   c           
     óÌ   € W3R8w  d\   V P                   P                  RV P                  R,          P                  R4      : RRV P	                  W4      ,          : 24       R# R# )r®  r¯   r}   z	scale(%s)N)r®  r®  rt  )rÏ   r=   Úgroupsr>   r¿   )rV   ÚsxÚsys   &&&r   ÚscaleÚSVGCanvas.scale®  sQ   € Øˆ7�eÔØ�N‰N×'Ñ'¨Ø—{‘{ 2•×3Ñ3°KÖ@Ø# d§l¡l°2Ó&:×:ð6<ö =ñ r   c                ób   € V P                   R V P                  W4      ,          ,           V n         R# )zM %s N©r·   r   r½  s   &&&r   ÚmoveToÚSVGCanvas.moveToµ  ó    € Ø—I‘I ¨$¯+©+°aÓ*;Õ ;Õ;ˆŽ	r   c                ób   € V P                   R V P                  W4      ,          ,           V n         R# )zL %s NrÇ  r½  s   &&&r   ÚlineToÚSVGCanvas.lineTo¸  rÊ  r   c           
     óf   € V P                   R V P                  WW4WV4      ,          ,           V n         R# )zC %s NrÇ  )rV   r÷   rø   rù   rú   r�  rŽ  s   &&&&&&&r   ÚcurveToÚSVGCanvas.curveTo»  s$   € Ø—I‘I ¨$¯+©+°b¸bÀbÓ*MÕ MÕMˆŽ	r   c                ó6   € V P                   R ,           V n         R# )zZ N)r·   ©rV   s   &r   Ú	closePathÚSVGCanvas.closePath¾  s   € Ø—I‘I Õ$ˆŽ	r   c                ó   € R # rŒ  r�   rÒ  s   &r   Ú	saveStateÚSVGCanvas.saveStateÁ  ó   € Ùr   c                ó   € R # rŒ  r�   rÒ  s   &r   ÚrestoreStateÚSVGCanvas.restoreStateÄ  rØ  r   )r¹   r´   r»   r¼   r½   r¾   rº   r¸   rW   r¿   r¶   rÏ   r?   rS   r•   r‹   rŒ   r   rÍ   r%   r·   rÎ   rµ   r¬   rœ   r°   r$   ))é,  rÜ  rZ   r!   FrŒ  )NN)é   rÝ  N)r!   NrV  r!   )r!   rQ  Nr!   )r!   rP  Nr!   )T)r!   )r!   ih  r!   ©r!   N)2rk   rl   rm   rn   rO   r'   rç   rð   ró   r  rE  r  rÊ   rË   r!  rÉ   r2  r5  rÌ   rÈ   r  r«   rL  rb  rf  ri  rm  ry  r  r‚  r‡  r’  rž  r¢  r«  r¯  rÃ   r²  rµ  r¯   r¾  rÄ  rÈ  rÌ  rÏ  rÓ  rÖ  rÚ  rv   rw   rx   s   @r   r#   r#   —   s  ø‡ € ôr(ôhô$.ð $&¨rô &òòð, )*°TÀÐVZô 
ò3ò3ð  aô 	=ò1ò/ò2ò/ò
:ò(ô)ô")ô +-ôZ<ô<ò/ô
ò
-ô,ô+ô)ô )ôD1ôPò1ñ "&°Ô!3ô ò=ò
Hò:ò=ò<ò<òNò%ò÷ð r   r#   c                   ó¤   a € ] tR tRt o RtR tR tRRRRR	R
RRRRRRRR/tR tR t	R t
R tR tR tR tR tR tR t]3R ltR tR tR tV tR!# )"r+   iÇ  z%This draws onto an SVG document.
    c                ó   € ^ V n         R# rÞ  ©r°   rÒ  s   &r   rO   Ú_SVGRenderer.__init__Ë  s	   € ØˆŽr   c                óš  € V P                   '       d   \        RV,          4       V P                  P                  RV,          4       V P                  P                  P                  4       p\        V\        4      '       d   VP                  '       g    \        V4      pV P                  P                  V4       V P                  V/ 4       V P                  V4       V P                  P                  4       p\        V\        4      '       d   VP                  '       g    V P                  P                  RV,          4       VP                  4        F?  w  rVWPP                   9   g   K  \#        V P                  V P                   V,          V4       KA  	  W P                  n        V P                   '       d   \        RV,          4       R# R# )zGThis is the recursive method called for each node in the tree.
        z#### begin _SVGRenderer.drawNode(%r)zbegin node %rzend node %rz!### end _SVGRenderer.drawNode(%r)N)r°   rB  Ú_canvasrm  r¬   rë   r²   r   Ú
isClipPathr   Ú_trackerÚpushÚapplyStateChangesÚdrawNodeDispatcherr±   r;   Ú	_restoresÚsetattr)rV   rA   r¬   ÚdeltasÚrDeltasrÒ   r‘   s   &&     r   ÚdrawNodeÚ_SVGRenderer.drawNodeÎ  s;  € ð �<�<ˆ<œÐDÀtÕKÔLà�‰×Ñ˜_¨TÕ1Ô2Ø—‘×"Ñ"×'Ñ'Ó)ˆÜ˜4¤×&Ò&¨4¯?¯?¨?Øô ˜tÓ$ˆØ�‰×Ñ˜6Ô"Ø×Ñ˜v rÔ*ð 	×Ñ Ô%à—-‘-×#Ñ#Ó%ˆÜ˜4¤×&Ò&¨4¯?¯?¨?ØØ�‰×Ñ˜]¨4Õ/Ô0ð —M‘M–O‰DˆAØ—N‘NÖ"Ü˜Ÿ™ T§^¡^°AÕ%6°qÖ9ñ $ð #�‰Ôà�<�<ˆ<œÐBÀTÕIÖJ‰<r   r§   r¸   ÚstrokeWidthrº   ÚstrokeLineCapr½   ÚstrokeLineJoinr¾   Ú	fillColorr¹   r¥   r»   r¦   r¼   c                ó‚   € \        VR R4      ;'       g    Rp\        VRR4      ;'       g    RpV'       d	   RVRVRR/# R# )ÚhrefURLrf   Ú	hrefTitlez
xlink:hrefzxlink:titleÚtargetÚ_topN)Úgetattr)rV   ÚobjÚurlr£   s   &&  r   Ú_get_link_info_dictÚ _SVGRenderer._get_link_info_dictò  sM   € ô �c˜9 bÓ)×/Ð/¨RˆÜ˜˜[¨"Ó-×3Ð3°ˆßð !  m°E¸8ÀFÐKÐKñ$ r   c                ó  € V P                   '       d   \        R 4       V P                  P                  4       pV P                  P                  4       R,          w  r4rVrxVP                  4        F=  p	\        V	\        4      '       d   V	P                  4       p
MT	p
V P                  V
4       K?  	  V P                  P                  W4WVWx4       V P                  P                  V4       V P                   '       d   \        R4       R# R# )z ### begin _SVGRenderer.drawGroupr¯   z### end _SVGRenderer.drawGroupN)r°   rB  rä  r²  ræ  ÚgetStateÚgetContentsr²   r   ÚprovideNoderî  r¯   rµ  )rV   r®   rÏ   rƒ   r-  r)   r   r¸  râ   Ú	childNodeÚnode2s   &&         r   Ú	drawGroupÚ_SVGRenderer.drawGroup  s¿   € Ø�<�<ˆ<œÐAÔBà—L‘L×+Ñ+Ó-ˆ	ØŸ=™=×1Ñ1Ó3°KÕ@Ñˆˆa�AØ×*Ñ*Ö,ˆIÜ˜)¤X×.Ò.Ø!×-Ñ-Ó/‘à!�Ø�M‰M˜%Ö ñ -ð 	�‰×Ñ˜q Q¨1Ô0Ø�‰×Ñ˜iÔ(à�<�<ˆ<œÐ?Ö@‰<r   c                ón  € V P                  V4      p\        VR / 4      pVP                  VP                  u;8X  d   ^ 8X  dr   M MnV P                  P
                  ! VP                  VP                  VP                  VP                  ,           VP                  VP                  ,           3RV/VB  R# V P                  P                  ! VP                  VP                  VP                  VP                  ,           VP                  VP                  ,           VP                  VP                  3RV/VB  R# )rH  r  N)rü  rù  rF  rG  rä  r«   r.   r/   r$   r%   rL  )rV   r«   r  r¢   s   &&  r   ÚdrawRectÚ_SVGRenderer.drawRect!  sç   € Ø×,Ñ,¨TÓ2ˆ	Ü˜4 ¨BÓ/ˆØ�7‰7�d—g‘gÖ" ×"à�L‰L×ÒØ—F‘F˜DŸF™FØ—F‘F˜4Ÿ:™:Õ% t§v¡v¨d¯k©kÕ'9ñ\àENð\àRZô\ð �L‰L×"Ò"Ø—F‘F˜DŸF™FØ—F‘F˜4Ÿ:™:Õ% t§v¡v¨d¯k©kÕ'9Ø—G‘G˜TŸW™Wñ5ð (ð	5ð ,4ô	5r   c                ó(  € V P                   P                  4       pVR ,          VP                  VP                  VP                  3w  r4rVV P
                  P                  ! WdV3RV P                  V4      RVR\        VR^ 4      /\        VR/ 4      B  R# )Ú
textAnchorr  r[  r\  rH  N)	ræ  rÿ  r.   r/   rÓ   rä  rb  rü  rù  )rV   Ú	stringObjÚSr[  r.   r/   rÓ   s   &&     r   rb  Ú_SVGRenderer.drawString2  s‹   € Ø�M‰M×"Ñ"Ó$ˆØ"# L¥/°9·;±;À	ÇÁÈYÏ^É^Ð"[Ñˆ˜Ø�‰×Ò  qñ 	9°4×3KÑ3KÈIÓ3Vð 	9Ø'ð	9Ü8?À	ÐJZÐ[\Ó8]ð	9ä˜i¨°BÓ7ô	9r   c                óÎ   € V P                   P                  '       dI   V P                   P                  VP                  VP                  VP
                  VP                  4       R # R # rŒ  )rä  r¸   r  r÷   rø   rù   rú   )rV   r  s   &&r   ÚdrawLineÚ_SVGRenderer.drawLine9  s?   € Ø�<‰<×$×$Ð$Ø�L‰L×Ñ˜dŸg™g t§w¡w°·±¸¿¹ÖAñ %r   c                óž   € V P                   P                  VP                  VP                  VP                  V P                  V4      R 7       R# ©)r  N)rä  r‡  rƒ  r„  r0   rü  )rV   r‡  s   &&r   Ú
drawCircleÚ_SVGRenderer.drawCircle=  s5   € Ø�‰×Ñ˜VŸY™Y¨¯	©	°6·8±8Àt×G_ÑG_Ð`fÓGgÐÖhr   c           
     óX  € VP                  4       w  r#pV^ 8X  g   VfÂ   V^ 8X  g   Vf·   VP                  '       g¥   VP                  VP                  VP                  VP
                  VP                  3w  rVrxp	VP                  ;'       g    VP                  pWW,
          Wb,
          rºWW,           Wb,           rÜW˜,
          pV P                  P                  W«WÍWŽ^R7       R# VP                  4       p\        V\        4      '       d   V P                  V4       R# V P                  V4       R# )r!   N)r™  )Ú
_xtraRadiiÚannularÚcenterxÚcenteryÚradiusÚstartangledegreesÚendangledegreesÚyradiusrä  rž  Ú	asPolygonr²   r   ÚdrawPathÚdrawPolygon)rV   Úwedger  Úradius1Úyradius1r  r  r  r  r  r÷   rø   rù   rú   rü   r6   s   &&              r   Ú	drawWedgeÚ_SVGRenderer.drawWedge@  sí   € Ø%*×%5Ñ%5Ó%7Ñ"ˆ˜(Ø�QŒJ˜'š/°¸!´¸xÒ?OÐY^×Yf×YfÐYfà�]‰]˜EŸM™M¨5¯<©<¸×9PÑ9PÐRW×RgÑRgÐgñ IˆG˜f¸à—m‘m×3Ð3 u§|¡|ˆGØ�¨­�Ø�¨­�Ø$Õ8ˆFØ�L‰L× Ñ  ¨Ð1BÐWXÐ ÖYà—‘Ó!ˆAÜ˜!œD×!Ò!Ø—‘˜aÖ à× Ñ  Ö#r   c                óž   € V P                   P                  '       d1   V P                   P                  \        VP                  4      4       R # R # rŒ  )rä  r¸   r¯  r8   r¤  ©rV   r¥  s   &&r   ÚdrawPolyLineÚ_SVGRenderer.drawPolyLineQ  s2   € Ø�<‰<×$×$Ð$Ø�L‰L×!Ñ!¤/°!·(±(Ó";Ö<ñ %r   c           	     óH  € VP                   VP                  ,
          pVP                   VP                  ,           pVP                  VP                  ,
          pVP                  VP                  ,           pV P                  P                  W$W5V P                  V4      R 7       R# r  )rƒ  rF  r„  rG  rä  r‚  rü  )rV   r‚  r÷   rù   rø   rú   s   &&    r   ÚdrawEllipseÚ_SVGRenderer.drawEllipseU  sn   € à�Z‰Z˜'Ÿ*™*Õ$ˆØ�Z‰Z˜'Ÿ*™*Õ$ˆØ�Z‰Z˜'Ÿ*™*Õ$ˆØ�Z‰Z˜'Ÿ*™*Õ$ˆØ�‰×Ñ˜R 2°D×4LÑ4LÈWÓ4UÐÖVr   c                ó†   € V P                   P                  \        VP                  4      ^V P	                  V4      R7       R# )r®  )r‘  r  N)rä  r¢  r8   r¤  rü  r'  s   &&r   r   Ú_SVGRenderer.drawPolygon]  s0   € Ø�‰×Ñœ_¨Q¯X©XÓ6¸qÈD×LdÑLdÐefÓLgÐÖhr   c                óæ  aa	a
€ ^ RI Ho	 V P                  pVP                  VP                  VP
                  VP                  3o
Vf   \        SR\        4      pV P                  S4      p\        SRR4      pV	V
V3R lpVR8X  d(   V! 4        VP                  . SP                  WBR7       R# VR	8X  d*   V! R
R7       VP                  . SP                  WBR7       R# V! 4       pV'       gR   VP                  pVP                  R4        RpVP                  . SP                  WBR7       VP                  V4       R# VP                  . SP                  WBR7       R#   TP                  T4       i ; i)r!   )Ú_renderPathNr	  Ú	autocloserf   c                  ó   <€ S! SS3/ V B # rŒ  r�   )r   r0  Ú	drawFuncsr·   s   ,€€€r   ÚrPÚ!_SVGRenderer.drawPath.<locals>.rPi  s   ø€ Ù˜t YÑ7°$Ñ7Ð7r   rœ   )r©   r  r	  ÚpdfT)Ú
forceClose)Úreportlab.graphics.shapesr0  rä  rÈ  rÌ  rÏ  rÓ  rù  r   rü  r  rå  r¹   r2  )rV   r·   r	  r)   r  r1  r4  ÚisClosedÚofcr0  r3  s   &f&      @@r   r  Ú_SVGRenderer.drawPath`  s*  ú€ å9Ø�L‰LˆØ—X‘X˜qŸx™x¨¯©°A·K±KÐ@ˆ	ØÒÜ˜t J¬}Ó=ˆHØ×,Ñ,¨TÓ2ˆ	Ü˜D ¨RÓ0ˆ	÷	8à�eÔÙŒDØ×Ñ˜R d§o¡oÀÐÖ^Ø˜ÔÙ˜$ÕØ×Ñ˜R d§o¡oÀÐÖ^á“tˆHßØ—l‘l�Ø—‘˜tÔ$ð(Ø $�IØ×$Ñ$ R¨d¯o©oÈÐ$Ôfà—N‘N 3Ö'à× Ñ  ¨$¯/©/ÀYÐ Öbøð —N‘N 3Õ'ús   Ä
 E ÅE0c           	     óÒ  € VP                   p\        V\        4      '       dJ   V'       d&   \        P                   P	                  V4      '       g   R # \        4       P                  V4      pM\        VR4      '       d   TpMR # VP                  w  rEVP                  VP                  rvVf   TpVf   TpV P                  P                  W1P                  VP                  WgRR7       R # )NÚconvertT)rw  )r·   r²   r<   ÚosÚisfiler   rß   rÞ   rµ   r$   r%   rä  ry  r.   r/   )rV   rq  r·   ÚimÚsrcWÚsrcHÚdstWÚdstHs   &&      r   ry  Ú_SVGRenderer.drawImage~  s¥   € Ø�z‰zˆÜ�dœ3×ÒßœRŸW™WŸ^™^¨D×1Ò1±FÜ“×!Ñ! $Ó'‰BÜ�T˜)×$Ò$Ø‰BáØ—W‘W‰
ˆØ—[‘[ %§,¡,ˆdØŠ< ˜ØŠ< ˜Ø�‰×Ñ˜r§7¡7¨E¯G©G°TÀtÐÖLr   c                ó@  € VP                  4        EF  w  r4VR8X  d   K  VR8X  d   V P                  P                  V4       K3  VR8X  d   V P                  P                  V4       KW  VR8X  d   V P                  P	                  V4       K{  VR8X  d   V P                  P                  V4       KŸ  VR8X  d¨   V'       dƒ   \        V\        \        34      '       dG   \        V4      ^8X  d7   \        V^,          \        \        34      '       d   V^ ,          pV^,          pM^ pV P                  P                  WE4       EK0  V P                  P                  4        EKM  VR8X  d   V P                  P                  V4       EKr  VR9   dk   VP                  R	V P                  P                  4      pVP                  RV P                  P                  4      pV P                  P                  Wg4       EKã  VR
8X  g   EKí  V P                  P!                  V4       EK  	  R# )zTThis takes a set of states, and outputs the operators
needed to set those propertiesr¯   r§   rð  rñ  rò  ÚstrokeDashArrayró  r¦   r¥   r	  N)r¦   r¥   )r;   rä  rÉ   rÌ   rÊ   rË   r²   rN   r  r3   r!  r2  Úgetr»   r¼   rÈ   r5  )rV   ÚdeltaÚnewStateÚkeyÚvaluer   ÚfontnameÚfontsizes   &&&     r   rè  Ú_SVGRenderer.applyStateChanges�  s‡  € ð  Ÿ+™+Ÿ-‰JˆCØ�kÔ!Ùà˜Ô%Ø—‘×+Ñ+¨EÖ2Ø˜Ô%Ø—‘×)Ñ)¨%Ö0Ø˜Ô'Ø—‘×'Ñ'¨Ö.ØÐ(Ô(Ø—‘×(Ñ(¨Ö/ØÐ)Ô)ßÜ! %¬¬e¨×5Ò5¼#¸e»*Àa¼-ÌJÐW\Ð]^ÕW_ÔafÔgkÐ`l×LmÒLmØ % a¥˜Ø % a¥™à !˜Ø—L‘L×(Ñ(¨×5à—L‘L×(Ñ(×*Ø˜Ô#Ø—‘×)Ñ)¨%×0ØÐ0Ô0Ø Ÿ9™9 Z°·±×1CÑ1CÓD�Ø Ÿ9™9 Z°·±×1GÑ1GÓH�Ø—‘×$Ñ$ X×8Ø˜
×"Ø—‘×(Ñ(¨×/ó; (r   rá  N)rk   rl   rm   rn   ro   rO   rî  rê  rü  r  r  rb  r  r  r$  r(  r+  r   r   r  ry  rè  rv   rw   rx   s   @r   r+   r+   Ç  s’   ø‡ € ñòòKð@ ˜~¨m¸\È/ÐZdØ  ¨[¸ÀjÐQXØ˜;ð(€Iòò>Aò 5ò"9òBòiò$ò"=òWòið '4ô cò<M÷!0ð !0r   r+   c                 ó  € \         P                  P                  V 4      '       g   \         P                  ! V 4       ^ RIHp . p\        V4       FD  pVR,          R8X  g   K  \        W4      pV! 4       p\        VRR4      pVP                  WV34       KF  	  ^ pV F@  w  r†\         P                  P                  V RV,          4      p	\        W‰4       V^,          pKB  	  ^ RIHp
 V
! 4       p\        V\         P                  P                  V R4      4       ^ R	IHp ^ R
IHp V! 4       pV! VP"                  VP$                  4      pVP'                  V4       \        V\         P                  P                  V R4      4       R# )r!   )Ú
testshapes:r!   é
   NÚ
getDrawingro   rf   zrenderSVG_%d.svg)ÚgetDrawing01ztest.svg)ÚRL_CorpLogo)ÚDrawingzcorplogo.svgN)r>  r·   ÚisdirÚmkdirÚreportlab.graphicsrQ  Údirrù  r4   rh   r   Úreportlab.graphics.testshapesrT  Úreportlab.lib.corprU  r8  rV  r$   r%   Úadd)ÚoutDirrQ  ÚdrawingsÚfuncnameÚfuncr,   Ú	docstringr7   r   ÚfilenamerT  rU  rV  Úrls   &             r   Útestre  °  s  € ô �7‰7�=‰=˜× Ò Ü
�Š�Ôå-Ø€Hä˜
–OˆØ�D�>˜\Ö)Ü˜:Ó/ˆDÙ“fˆGÜ  Y¨rÓ2ˆIØ�O‰O˜WÐ0Ö1ñ $ð 	
€AÛ"‰ˆÜ—7‘7—<‘< Ð'9¸AÕ'=Ó>ˆÜ�1ÔØ	ˆQ�Šñ #õ
 ;Ù‹€AÜˆq”"—'‘'—,‘,˜v jÓ1Ô2å.Ý1á	‹€BÙ�—‘˜Ÿ™Ó#€AØ‡E�Eˆ"„IÜˆq”"—'‘'—,‘,˜v nÓ5Ö6r   Ú__main__rŒ  )zout-svg):ro   Úmathr\   r>  rP   ru  Úior   r   Úreportlab.pdfbase.pdfmetricsr   Úreportlab.lib.rl_accelr   Úreportlab.lib.utilsr   Úreportlab.graphics.renderbaser   r   r	   r8  r
   r   r   Ú	reportlabr   r   r   r   Úreportlab.pdfgen.canvasr   r   ÚrenderPMr   Úxml.domr   r—  r•  r–  rí   rE  r~  r:  rY  rX  r   r   r   r&   r8   rH   rN   rJ   rÄ   r‡   r#   r+   re  rk   r�   r   r   Ú<module>rq     sd  ðð	€÷ %× $Ó $ß  å 4Ý )Ý (ß VÑ Vß DÑ DÜ 'Ý ß <Ñ <ß @Ý å (ð ‡h�h€Ø
‡h�h€Ø	‡W�W€ð D÷  Jñ  Jó  L€Øg×mÑmÓo€ØL×RÑRÓT€Øl×rÑrÓtÐ Ø'×-Ñ-Ó/Ð ð "+×!7Ñ!7ô ð $-×#9Ñ#9ô ð  °×1GÑ1Gô Rò
ôô>$�Dô $ðN 	�yØ�IØ�9Ø�yØ�IØ�9ð
€òH÷nñ nô`g0�8ô g0ôR 7ðD ˆZÔÙ†Fñ r   