§
    £”jŸ{  ã                   ó¾  — d Z dZddlT ddlmZmZ ddl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 dd	lmZ dd
lmZmZ ddlmZ ddlmZmZ ddlZddlZddlm Z m!Z! ddl"m#Z#m$Z$m%Z%m&Z& d2d„Z'	  e'ej(        ¦  «        Z)n# e$ r dZ)Y nw xY wd„ Z*d„ Z+d„ Z,ej-        fd„Z.ddlm/Z/  G d„ de/¦  «        Z0d„ Z1d„ Z2d„ Z3d2d„Z4 e5ddd¬¦  «        Z6d Z7 G d!„ d"¦  «        Z8d#d$dej-        ej(        d%fd&„Z9d#d$dej-        ej(        d%fd'„Z:d#d$dej-        ej(        d%fd(„Z;d)d#d$dej-        ej(        d%fd*„Z<d)d#d$dej-        ej(        d%fd+„Z=e<Z>d3d.„Z?e@d/k    r e?d0¬1¦  «         dS dS )4z3.3.0a$  Render drawing objects in common bitmap formats

Usage::

    from reportlab.graphics import renderPM
    renderPM.drawToFile(drawing,filename,fmt='GIF',configPIL={....})

Other functions let you create a PM drawing as string or into a PM buffer.
Execute the script to see some test drawings.é    )Ú*)ÚgetStateDeltaÚrenderScaledDrawing)ÚgetFontÚ
unicode2T1ÚstringWidth)Ú	ShapedStrÚshapeFragWord)ÚbidiShapedText)Ú	isUnicodeÚ	asUnicode)ÚABag)ÚtoColorÚwhite)Ú	rl_configé   )ÚsetFontÚRenderPMErrorN)ÚBytesIOÚStringIO)ÚsinÚcosÚpiÚceilc                 ó†  — | st           j        } | dk    r@	 dd l}n¦# t          $ r-}	 dd l}n# t          $ r t          d¦  «        ‚w xY wY d }~ntd }~ww xY wd|                      ¦   «         v rD	 dd l}nP# t          $ r1}	 dd l}n!# t          $ r t          d| › d�¦  «        ‚w xY wY d }~nd }~ww xY wt          d| › �¦  «        ‚|S )NÚ	_renderPMr   züCannot import desired renderPM backend, {backend}.
No module named _rl_renderPM
it may be badly or not installed!
You may need to install development tools
or seek advice at the users list see
https://pairlist2.pair.net/mailman/listinfo/reportlab-usersÚcairoz'cannot import desired renderPM backend z^
Seek advice at the users list see
https://pairlist2.pair.net/mailman/listinfo/reportlab-userszInvalid renderPM backend, )r   ÚrenderPMBackendÚ_rl_renderPMÚImportErrorÚ	rlPyCairor   Úlower)ÚbackendÚMÚerrMsgs      új/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/reportlab/graphics/renderPM.pyÚ_getPMBackendr'      s�  € ØÐ7�iÔ7�GØ�ÒÐð	@Ø$Ð$Ð$Ð$Ð$øÝð 		@ð 		@ð 		@ð@Ø%Ð%Ð%Ð%Ð%øÝð @ð @ð @Ý#ð %?ñ @ô @ð @ð@øøøð &Ð%Ð%Ð%Ð%øøøøð		@øøøð 
�G—M’M‘O”OÐ	#Ð	#ð	@Ø!Ð!Ð!Ð!Ð!øÝð 	@ð 	@ð 	@ð@Ø(Ð(Ð(Ð(Ð(øÝð @ð @ð @Ý#ð %?ÐPWð %?ð %?ð %?ñ @ô @ð @ð@øøøð )Ð(Ð(Ð(Ð(øøøøð	@øøøõ ÐB¸ÐBÐBÑCÔCÐCØ€HsM   – ›
A¦+ªA«AÁAÁAÁ,A1 Á1
B,Á<BÂ B'ÂBÂB'Â'B,c                  ó>   — 	 ddl m}  n# t          $ r dd l} Y nw xY w| S )Nr   ©ÚImage)ÚPILr*   r    r)   s    r&   Ú	_getImager,   @   sI   € ðØÐÐÐÐÐÐøÝð ð ð Øˆˆˆˆˆðøøøà€Ls   ‚	 ‰™c                 ó¶   — | rVdt          d| j        z  ¦  «        z  dz  dt          d| j        z  ¦  «        z  dz  z  dt          d| j        z  ¦  «        z  z  S | S )Néÿ   é   é   )ÚintÚredÚgreenÚblue©Úcs    r&   Ú	Color2Hexr7   G   sc   € àÐh�4�˜C ¤™I™œÑ&¨2Ñ-°4½¸CÀÄ¹KÑ8HÔ8HÑ3HÈQÑ2NÑOÐSWÕX[Ð\_Ð`aÔ`fÑ\fÑXgÔXgÑSgÑhÐ
hØ€Hó    c                 ó(   — | �t          | ¦  «        n| S )z…
    c should be None or something convertible to Color
    rlPyCairo.GState can handle Color directly in either RGB24 or ARGB32
    )r   r5   s    r&   Ú
CairoColorr:   L   s   € ð
 ˜�7�1‰:Œ:ˆ:¨AÐ-r8   c                 ó¤   — t          ¦   «         }|j                             |¦  «         |                     t	          | ¦  «        ||||¬¦  «         dS )z
As it says)ÚshowBoundaryN)Ú_PMRendererÚ__dict__ÚupdateÚdrawr   )ÚdrawingÚcanvasÚxÚyr<   ÚkwdsÚRs          r&   r@   r@   T   sL   € å‰Œ€AØ„J×Ò�dÑÔÐØ‡F‚FÕ˜wÑ'Ô'¨°°AÀL€FÑQÔQÐQÐQÐQr8   )ÚRendererc                   óh   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zdd„Zd„ Zd„ Zd„ Zd„ ZdS )r=   z³This draws onto a pix map image. It needs to be a class
    rather than a function, as some image-specific state tracking is
    needed outside of the state info in the SVG model.c                 ó`   — | j                              ¦   «          |                      ¦   «          d S ©N)Ú_trackerÚpopÚ
applyState©Úselfs    r&   rL   z_PMRenderer.pop`   s,   € ØŒ×ÒÑÔÐØ�ŠÑÔÐÐÐr8   c                 ó€   — t          |¦  «        }| j                             |¦  «         |                      ¦   «          d S rJ   )r   rK   ÚpushrM   )rO   ÚnodeÚdeltass      r&   rQ   z_PMRenderer.pushd   s;   € Ý˜tÑ$Ô$ˆØŒ×Ò˜6Ñ"Ô"Ð"Ø�ŠÑÔÐÐÐr8   c                 óô  — | j                              ¦   «         }|d         | j        _        |d         | j        _        |d         }|�|| j        _        | j                             |d         ¦  «         |d         | j        _        |d         | j        _        |d         | j        _	        |d         }|sd }nXt          |t          t          f¦  «        s|f}t          |¦  «        d	k    s"t          |d
         t          t          f¦  «        sd|f}|| j        _        |d         }|�|| j        _        | j                             |d         ¦  «         | j                             |d         |d         ¦  «         d S )NÚctmÚstrokeWidthÚstrokeOpacityÚstrokeColorÚstrokeLineCapÚstrokeLineJoinÚfillModeÚstrokeDashArrayé   r   r   ÚfillOpacityÚ	fillColorÚfontNameÚfontSize)rK   ÚgetStateÚ_canvasrU   rV   rW   ÚsetStrokeColorÚlineCapÚlineJoinr[   Ú
isinstanceÚlistÚtupleÚlenÚ	dashArrayr^   ÚsetFillColorr   )rO   ÚsÚalphaÚdas       r&   rM   z_PMRenderer.applyStatei   s]  € ØŒM×"Ò"Ñ$Ô$ˆØ˜Uœ8ˆŒÔØ#$ ]Ô#3ˆŒÔ Ø�/Ô"ˆØÐØ).ˆDŒLÔ&ØŒ×#Ò# A mÔ$4Ñ5Ô5Ð5Ø  Ô1ˆŒÔØ !Ð"2Ô 3ˆŒÔØ ! *¤ˆŒÔØÐ Ô!ˆØð 	ØˆBˆBå˜b¥$¥u Ñ.Ô.ð Ø�S�Ý�2‰wŒw˜Šzˆz¥¨B¨q¬Eµ4½°,Ñ!?Ô!?ˆzØ˜�U�Ø!#ˆŒÔØ�-Ô ˆØÐØ',ˆDŒLÔ$ØŒ×!Ò! ! K¤.Ñ1Ô1Ð1ØŒ×Ò˜Q˜zœ]¨A¨j¬MÑ:Ô:Ð:Ð:Ð:r8   c                 óÈ   — | j         j        d         }| j        j        dd…         ||fz   x|d<   |d<   | j                              |¦  «         |                      ¦   «          d S )Néÿÿÿÿr   é   Ú	transformrU   )rK   Ú	_combinedrc   Ú_baseCTMrQ   rM   )rO   rC   rD   rS   s       r&   Ú	initStatez_PMRenderer.initStateƒ   sg   € Ø”Ô(¨Ô,ˆØ.2¬lÔ.CÀAÀaÀCÔ.HÈ!ÈAÈÑ.NÐNˆˆ{Ñ˜f U™mØŒ×Ò˜6Ñ"Ô"Ð"Ø�ŠÑÔÐÐÐr8   c                 ó‚   — |                       |¦  «         |                      |¦  «         |                      ¦   «          dS )zEThis is the recursive method called for each node
        in the treeN)rQ   ÚdrawNodeDispatcherrL   )rO   rR   s     r&   ÚdrawNodez_PMRenderer.drawNode‰   s<   € ð
 	�	Š	�$‰Œˆð 	×Ò Ñ%Ô%Ð%ð 	�Š‰
Œ
ˆ
ˆ
ˆ
r8   c                 ó  — | j         }|j        |j        cxk    rdk    r1n n.|                     |j        |j        |j        |j        ¦  «         d S |                     |j        |j        |j        |j        |j        |j        ¦  «         d S )Nr   )	rc   ÚrxÚryÚrectrC   rD   ÚwidthÚheightÚ	roundRect)rO   r}   r6   s      r&   ÚdrawRectz_PMRenderer.drawRect–   sƒ   € ØŒLˆØŒ7�d”gÐ"Ð"Ò"Ð" Ò"Ð"Ð"Ð"Ð"à�FŠF�4”6˜$œ& $¤*¨d¬kÑ:Ô:Ð:Ð:Ð:à�KŠK˜œ˜tœv t¤z°4´;ÀÄÈÌÑQÔQÐQÐQÐQr8   c                 óh   — | j                              |j        |j        |j        |j        ¦  «         d S rJ   )rc   ÚlineÚx1Úy1Úx2Úy2)rO   rƒ   s     r&   ÚdrawLinez_PMRenderer.drawLinež   s,   € ØŒ×Ò˜$œ' $¤'¨$¬'°$´'Ñ:Ô:Ð:Ð:Ð:r8   c                 ó@  — |j         }t          |t          ¦  «        rX|rt          j                              |¦  «        sd S t          ¦   «                              |¦  «                             d¦  «        }n(t          |d¦  «        r|                     d¦  «        }nd S |j	        \  }}|j
        |j        }}|€|}|€|}| j                             |j        |j        ||| j        j        dk    r|n% t          |d¦  «        r|j        n|j        ¦   «         ||d¦  «         d S )NÚRGBÚconvertr!   Útobytesé   )Úpathrg   ÚstrÚosÚisfiler,   Úopenr‹   ÚhasattrÚsizer~   r   rc   Ú	_aapixbufrC   rD   Ú_backendrŒ   Útostring)rO   ÚimagerŽ   ÚimÚsrcWÚsrcHÚdstWÚdstHs           r&   Ú	drawImagez_PMRenderer.drawImage¡   s!  € ØŒzˆÝ�d�3ÑÔð 	ØÐ:�RœWŸ^š^¨DÑ1Ô1Ð:°F°FÝ‘”×!Ò! $Ñ'Ô'×/Ò/°Ñ6Ô6ˆBˆBÝ�T˜)Ñ$Ô$ð 	Ø—’˜eÑ$Ô$ˆBˆBàˆFØ”W‰
ˆˆdØ”[ %¤,ˆdˆØˆ< ˜Øˆ< ˜ØŒ×ÒØ”˜œ $¨Ø”|Ô,¨kÒ9Ð9��ØN­°°9Ñ(=Ô(=ÐN˜"œ*˜*À2Ä;ÑQÔQØ�d˜Añ		ô 	ð 	ð 	ð 	r8   c                 óˆ   — | j         }|                     |j        |j        |j        ¦  «         |                     ¦   «          d S rJ   )rc   ÚcircleÚcxÚcyÚrÚfillstrokepath)rO   r    r6   s      r&   Ú
drawCirclez_PMRenderer.drawCircleµ   s=   € ØŒLˆØ	�Š�”˜6œ9 f¤hÑ/Ô/Ð/Ø	×ÒÑÔÐÐÐr8   r   c                 óÐ  — |j         }t          |¦  «        dk    s
J d¦   «         ‚| j        }|                     ¦   «          |                     |d         |d         ¦  «         t          dt          |¦  «        d¦  «        D ]'}|                     ||         ||dz            ¦  «         Œ(|r(|                     ¦   «          |                     ¦   «          | 	                    ¦   «          d S )Nr]   z#Polyline must have 1 or more pointsr   r   )
Úpointsrj   rc   Ú	pathBeginÚmoveToÚrangeÚlineToÚ	pathCloseÚpathFillÚ
pathStroke)rO   ÚpolylineÚ_doCloseÚPr6   Úis         r&   ÚdrawPolyLinez_PMRenderer.drawPolyLineº   sÊ   € ØŒOˆÝ�1‰vŒv˜Š{ˆ{ˆ{ÐA‰{Œ{ˆ{ØŒLˆØ	�Š‰ŒˆØ	�Š��1”�q˜”tÑÔÐÝ�q�#˜a™&œ& !Ñ$Ô$ð 	#ð 	#ˆAØ�HŠH�Q�q”T˜1˜Q˜q™Sœ6Ñ"Ô"Ð"Ð"Øð 	Ø�KŠK‰MŒMˆMØ�JŠJ‰LŒLˆLØ	�Š‰Œˆˆˆr8   c                 ó”   — | j         }|                     |j        |j        |j        |j        ¦  «         |                     ¦   «          d S rJ   )rc   Úellipser¡   r¢   r{   r|   r¤   )rO   rµ   r6   s      r&   ÚdrawEllipsez_PMRenderer.drawEllipseÇ   sA   € Ø
Œ,ˆØ	�	Š	�'”*˜gœj¨'¬*°W´ZÑ@Ô@Ð@Ø	×ÒÑÔÐÐÐr8   c                 ó4   — |                       |d¬¦  «         d S )Nr   )r°   )r³   )rO   Úpolygons     r&   ÚdrawPolygonz_PMRenderer.drawPolygonÌ   s!   € Ø×Ò˜'¨1ÐÑ-Ô-Ð-Ð-Ð-r8   c           	      ó:  — | j         }|j        }t          |dd¦  «        }|€|r÷| j                             ¦   «         }|d         }|d         }|d         }|j        }	|j        }
|j        }|dvrnt          |	||¦  «        }|dk    r|
|z  }
nQ|dk    r	|
|d	z  z  }
nB|d
k    r|
t          ||	||||j
        ¦  «        z  }
nt          dt          |¦  «        z   ¦  «        ‚|j        }||_        	 |                     |
||	||f¬¦  «         ||_        d S # ||_        w xY wd S )NÚtextRenderModer   Ú
textAnchorr`   ra   )ÚstartÚ	inheritedÚendÚmiddler]   Únumericzbad value for textAnchor )Ú	_fontInfo)rc   r_   ÚgetattrrK   rb   ÚtextrC   rD   r   ÚnumericXShiftÚencodingÚ
ValueErrorr�   r»   Ú
drawString)rO   Ú	stringObjÚcanvÚfillr»   ÚSÚtext_anchorr`   ra   rÄ   rC   rD   ÚtextLenÚoldTextRenderModes                 r&   rÈ   z_PMRenderer.drawStringÏ   sf  € ØŒ|ˆØŒ~ˆÝ  Ð+;¸AÑ>Ô>ˆØÐ˜~ÐØ”×&Ò&Ñ(Ô(ˆAØ˜Lœ/ˆKØ˜”}ˆHØ˜”}ˆHØ”>ˆDØ”ˆAØ”ˆAØÐ"7Ð7Ð7Ý% d¨H°XÑ>Ô>�Ø Ò%Ð%Ø˜‘L�A�AØ  (Ò*Ð*Ø˜ ™‘N�A�AØ  )Ò+Ð+Ø� {°4¸ÀÈÐR[ÔRdÑeÔeÑe�A�Aå$Ð%@ÅÀ[ÑAQÔAQÑ%QÑRÔRÐRØ $Ô 3ÐØ"0ˆDÔð8Ø—’  ! D°H¸XÐ3F�ÑGÔGÐGà&7�Ô#Ð#Ð#øÐ&7�Ô#Ð7Ð7Ð7Ð7ð/ Ðs   Ã+D Ä	Dc                 ó4  ‡‡	‡
‡— | j         Š
‰t          u r]‰
j        d= ‰
j        r8‰
j        d         }|j        }d|_        |                      |¦  «         ||_        n‰
                     ¦   «          d S ddlmŠ	 ‰
j        ‰
j	        ‰
j
        ‰
j        fŠt          ‰dd¦  «        }dˆ	ˆ
ˆˆfd„	}‰j        r8 |¦   «          ‰
                     ¦   «          ‰
j                             ‰¦  «         ‰
j        d u}‰
j        d u}t          ‰d	d¦  «        }|d
k    rŽ|rC|rA |d¬¦  «         ‰
                     |¦  «          |¦   «          ‰
                     ¦   «          d S |r# |d¬¦  «         ‰
                     |¦  «         d S |r  |¦   «          ‰
                     ¦   «          d S d S |dk    r= |d¬¦  «         |r‰
                     |¦  «         |r‰
                     ¦   «          d S d S  |¦   «         r‰
                     |¦  «         ‰
                     ¦   «          d S )Nrq   r   r   )Ú_renderPathÚ	autocloseÚ Fc                 óH   •— ‰                      ¦   «           ‰‰‰| ¬¦  «        S )N©Ú
forceClose)r¨   )rÖ   rÑ   r6   Ú	drawFuncsrŽ   s    €€€€r&   ÚrPz _PMRenderer.drawPath.<locals>.rPü   s'   ø€ Ø�KŠK‰MŒMˆMØ�;˜t Y¸:ÐFÑFÔFÐFr8   r[   ÚsvgTrÕ   Úpdf)F)rc   ÚEmptyClipPathÚ
_clipPathsÚ
isClipPathÚdrawPathÚclipPathClearÚreportlab.graphics.shapesrÑ   r©   r«   ÚcurveTor¬   rÃ   ÚclipPathSetÚappendr_   rX   r­   r®   )rO   rŽ   r±   ÚicprÒ   rØ   rË   Ústroker[   rÑ   r6   r×   s    `       @@@r&   rÞ   z_PMRenderer.drawPathì   s”  øøøø€ ØŒLˆØ•=Ð Ð Ø”˜RÐ ØŒ|ð "Ø”L Ô$�Ø”l�Ø �”Ø—’˜aÑ Ô Ð Ø"�”�à—’Ñ!Ô!Ð!ØˆFØ9Ð9Ð9Ð9Ð9Ð9Ø”X˜qœx¨¬°A´KÐ@ˆ	Ý˜D ¨RÑ0Ô0ˆ	ð	Gð 	Gð 	Gð 	Gð 	Gð 	Gð 	Gð 	Gð 	Gð Œ?ð 	&ØˆB‰DŒDˆDØ�MŠM‰OŒOˆOØŒL×Ò Ñ%Ô%Ð%ØŒ{ $Ð&ˆØ” dÐ*ˆÝ˜4 
¨2Ñ.Ô.ˆØ�eÒÐØð 
˜ð 
Ø�˜dÐ#Ñ#Ô#Ð#Ø—
’
˜8Ñ$Ô$Ð$Ø�‘”�Ø—’‘”���Øð Ø�˜dÐ#Ñ#Ô#Ð#Ø—
’
˜8Ñ$Ô$Ð$Ð$Ð$Øð Ø�‘”�Ø—’‘”���ðð ð ˜ÒÐØˆB˜$ÐÑÔÐØð %Ø—
’
˜8Ñ$Ô$Ð$Øð Ø—’‘”���ðð ð ˆr‰tŒtð %Ø—
’
˜8Ñ$Ô$Ð$Ø�LŠL‰NŒNˆNˆNˆNr8   N)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rL   rQ   rM   rv   ry   r�   rˆ   rž   r¥   r³   r¶   r¹   rÈ   rÞ   © r8   r&   r=   r=   [   sø   € € € € € ð:ð :ðð ð ðð ð ð
;ð ;ð ;ð4ð ð ðð ð ðRð Rð Rð;ð ;ð ;ðð ð ð(ð ð ð
ð ð ð ðð ð ð
.ð .ð .ð8ð 8ð 8ð:/ð /ð /ð /ð /r8   r=   c                 ób   — t          ¦   «         }|                      d|j        |j        ¬¦  «        S )Nr±   ©ÚditherÚpalette)r,   r‹   ÚNONEÚADAPTIVE)r™   r*   s     r&   Ú_convert2pilprñ     s'   € Ý‰KŒK€EØ�:Š:�c %¤*°e´nˆ:ÑEÔEÐEr8   c                 ó,   — |                       d¦  «        S )NÚL©r‹   ©r™   s    r&   Ú_convert2pilLrö   !  ó   € Ø�:Š:�c‰?Œ?Ðr8   c                 ó,   — |                       d¦  «        S )NÚ1rô   rõ   s    r&   Ú_convert2pil1rú   $  r÷   r8   c           	      óp  — t          | ¦  «        } | j        \  }}t                               || t	          | d¦  «        r| j        n| j        ¦   «         | j                             ¦   «         ¦  «        }t	          |d¦  «        sŸt          t          j                             |¦  «        d         dz   |                     ¦   «         z   d¦  «        5 }|                     |¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        dk    rddlm}  ||d¬	¦  «         d S d S |                     |¦  «         d S )
NrŒ   Úwriter   ú.ÚwbÚmac©ÚmarkfilenameÚPICT©Úext)rñ   r”   Ú
_pmBackendÚpil2pictr“   rŒ   r—   r™   Ú
getpaletter’   r�   rŽ   Úsplitextr"   rü   ÚnameÚreportlab.lib.utilsr  )	r™   ÚfnÚfmtÚtransparentÚcolsÚrowsrm   Úfr  s	            r&   Ú_saveAsPICTr  '  sc  € Ý	�rÑ	Ô	€BØ”�J€Dˆ$Ý×Ò˜D Ð'[µW¸RÀ	Ñ5JÔ5JÐ'[ r¤z zÐPRÔP[Ñ&^Ô&^Ð_aÔ_d×_oÒ_oÑ_qÔ_qÑrÔr€AÝ�2�gÑÔð Ý•"”'×"Ò" 2Ñ&Ô& qÔ)¨#Ñ-¨c¯iªi©k¬kÑ9¸$Ñ?Ô?ð 	À1Ø�GŠG�A‰JŒJˆJð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	åŒ7�EŠ>ˆ>Ø8Ð8Ð8Ð8Ð8Ð8ØˆL˜ Ð'Ñ'Ô'Ð'Ð'Ð'ð ˆ>ð 	�Š�‰Œˆˆˆs   ÃC/Ã/C3Ã6C3ÚARGB32ÚRGB24)ÚARGBÚRGBArŠ   g¯OQ¬á?c                   óì   — e Zd Z	 	 d(d„Zed)d„¦   «         Zd*d„Zd	„ Zd*d
„Zd+d„Z	d„ Z
d*d„Zd„ Zd„ Zd,d„Zd„ Zd„ Zd„ Zd-d„Zd*d„Zd.d„Zd„ Zd,d„Zd„ Zd„ Zd „ Zd!„ Zd"„ Zd#„ ZeZd$„ Zd%„ Zd&„ Z d/d'„Z!dS )0ÚPMCanvaséH   éÿÿÿ NrŠ   c                 óü  — |dz  }t          ||z  dz   ¦  «        }t          ||z  dz   ¦  «        }|                      |||||¬¦  «        | j        d<   || j        d<   |dd|ddf| j        d<   g | j        d<   || j        d	<   || j        d
<   t          | j        j        ¦  «        t          t          ¦  «        k    rdnd| j        d<   || j        d<   | j        dk    rt          nt          | j        d<   | j
        | _        dS )z-configPIL dict is passed to image save methodg      R@g      à?©r  Ú_gsÚ_bgr   ru   rÜ   Ú	configPILÚ_dpir   r!   r–   Ú_backendfmtÚ_colorConverterN)r1   Ú
_getGStater>   Útyper  r•   Úpowr–   r:   r7   ru   rU   )	rO   ÚwÚhÚdpiÚbgr  r#   Ú
backendFmtÚscales	            r&   Ú__init__zPMCanvas.__init__7  s  € ð �D‘ˆÝ��%‘˜‘ÑÔˆÝ��%‘˜‘ÑÔˆØ#Ÿš¨q°°2°gÀ*˜ÑMÔMˆŒ�eÑØ!ˆŒ�eÑØ%*¨1¨Q¨u°Q°qÐ$9ˆŒ�jÑ!Ø&(ˆŒ�lÑ#Ø%.ˆŒ�kÑ"Ø #ˆŒ�fÑå37¸¼Ô8JÑ3KÔ3KÍTÕRUÉYÌYÒ3VÐ3V K KÐ\gˆŒ�jÑ!Ø'1ˆŒ�mÑ$Ø9=¼ÈÒ9SÐ9S­:¨:ÕYbˆŒÐ'Ñ(Ø”=ˆŒˆˆr8   r  c                 ó  — t          |¦  «        }|€t          j        }|dk    rL	 |                     | ||¬¦  «        S # t          $ r& 	 |                     | |||¬¦  «        cY S #  Y nxY wY n‹w xY wd|                     ¦   «         v rq|                     ¦   «         }t           	                    ||¦  «        }	 |                     | |||¬¦  «        S # t          $ r |                     | ||¬¦  «        cY S w xY wt          d|›�¦  «        ‚)Nr   ©r(  r  r   z.Cannot obtain PM graphics state using backend )r'   r   r   ÚgstateÚ	TypeErrorÚGStater"   ÚupperÚ_pycairoFmtsMapÚgetÚAttributeErrorÚRuntimeError)r%  r&  r(  r#   r  Úmods         r&   r"  zPMCanvas._getGStateI  s<  € å˜GÑ$Ô$ˆØˆ?ÝÔ/ˆGØ�KÒÐðØ—z’z ! A¨�zÑ,Ô,Ð,øÝð ð ð ðØŸ:š: a¨¨"°˜:Ñ5Ô5Ð5Ð5Ð5øðØ�Døøø�D�Dð	øøøð
 ˜Ÿš™œÐ'Ð'Ø—)’)‘+”+ˆCÝ!×%Ò% c¨#Ñ.Ô.ˆCð-Ø—z’z ! A b¨S�zÑ1Ô1Ð1øÝ!ð -ð -ð -Ø—z’z ! A¨�zÑ,Ô,Ð,Ð,Ð,ð-øøøåÐWÈGÐWÐWÑXÔXÐXs9   ¥= ½
A-ÁA#Á A-Á#A'Á%A-Á,A-Â6C Ã"C4Ã3C4c                 ó¸  — |€| j         }||c| j        _        | j        _        d d d d d d d dœ}| j        }|j        |j        }}|                     ¦   «         D ]}t          ||¦  «        ||<   Œ~| `t           
                    |||¬¦  «        x}| j        d<   |                     ¦   «         D ]}t          | |||         ¦  «         Œ|                     ||¦  «         d S )N)rU   rV   rX   re   rf   rk   r_   r-  r  )r  Ú_drawingr~   r   r  r`   ra   ÚkeysrÃ   r  r.  r>   Úsetattrr   )	rO   r%  r&  r(  ÚAÚgsÚfNÚfSÚks	            r&   Ú_drawTimeResizezPMCanvas._drawTimeResize_  sü   € Øˆ:˜DœH�rØ45°qÐ1ˆŒÔ˜Tœ]Ô1Ø t¸4È4Ð\`Ðnrð  AEð  Fð  FˆØŒXˆØ”˜Rœ[ˆ2ˆØ—’‘”ð 	!ð 	!ˆAÝ˜2˜a‘=”=ˆAˆa‰DˆDØ��Ý$.×$5Ò$5°a¸¸RÐ$5Ñ$@Ô$@Ð@ˆˆTŒ]˜5Ñ!Ø—’‘”ð 	!ð 	!ˆAÝ�D˜˜1˜Qœ4Ñ Ô Ð Ð Ø
�
Š
�2�bÑÔÐÐÐr8   c                 óø   — t          ¦   «                              | j        dk    rt          | d¦  «        dk    rdnd| j        j        | j        j        f¬¦  «        }|                     | j        j        ¦  «         |S )Nr!   Ú_fmtr  r  rŠ   )r”   )	r,   Únewr–   rÃ   r  r~   r   Ú	frombytesÚpixBuf)rO   r™   s     r&   ÚtoPILzPMCanvas.toPILm  sŠ   € Ý‰[Œ[�_Š_ t¤}°kÒ'AÐ'AÅgÈdÐSYÑFZÔFZÐ\dÒFdÐFd˜V˜VÐjoÐw{Ôwô  xFð  HLô  HPô  HWð  wXˆ_ñ  Yô  YˆØ
�Š�T”X”_Ñ%Ô%Ð%Øˆ	r8   c           
      ó  — |                       ¦   «         }|€xt          |t          ¦  «        st          dt	          |¦  «        z  ¦  «        ‚t
          j                             |¦  «        d         }|                     d¦  «        r
|dd …         }| j	        pi }| 
                    dd ¦  «         |                     d¦  «        }|r ||¦  «        }|                     ¦   «         }|dv rt          |¦  «        }n¾|dv rq|                     d¦  «        rt          |¦  «        }nI|                     d¦  «        rt          |¦  «        }n$|                     d	¦  «        rt!          |¦  «        }d
}nI|dv r't#          ||||                     dd ¦  «        ¬¦  «        S |dv rn|dv rd}nt'          d|z  ¦  «        ‚|d
k    �r |                     dd ¦  «        }|r¾ddlm}m} ddgz  }	t/          d|                     ¦   «         ¦  «        D ]\  }
}d|	|
|z   <   Œ|                     d|                     ¦   «         |                     |                     |	¦  «                             d¦  «                             ddgz  dgz   ¦  «        ¦  «        fz   ¦  «        }d| j        fdfD ]\  }}|                     ||¦  «        ||<   Œ| 
                    dd¦  «         |                     d¦  «        rddlm} |                     |¦  «        }| 
                    dd ¦  «         |                     d¦  «        }|r ||¦  «        } |j        ||fi |¤Ž tA          |d¦  «        s%t
          j!        dk    rddl"m#}  |||¬ ¦  «         d S d S d S )!Nz*Invalid value '%s' for fn when fmt is Noner   rý   ÚpreConvertCB©ÚGIF)ÚTIFFÚTIFFPÚTIFFLÚTIFÚTIFF1r±   ró   rù   rK  )ÚPCTr  r  )r  )ÚPNGÚBMPÚPPM)ÚJPGÚJPEGrU  zUnknown image kind %sr   )Ú
ImageChopsr*   i   )r   é   i   r.   r  Ú
resolution)zresolution unitÚinchÚchops_invert)rV  Ú	preSaveCBrü   rÿ   r   r  )$rF  rg   r�   rÇ   Úasciir�   rŽ   r  Ú
startswithr  Ú
setdefaultrL   r1  rñ   Úendswithrö   rú   r  r3  r   r+   rV  r*   ÚzipÚ
bitmap_rgbÚmergeÚsplitÚinvertÚpointr‹   r  Úsaver“   r	  r
  r  )rO   r  r  r™   r  rH  ÚtcrV  r*   ÚTÚor6   ÚaÚdr[  r  s                   r&   Ú
saveToFilezPMCanvas.saveToFiler  së  € Ø�ZŠZ‰\Œ\ˆØˆ;Ý˜b¥Ñ%Ô%ð [Ý Ð!MÕPUÐVXÑPYÔPYÑ!YÑZÔZÐZÝ”'×"Ò" 2Ñ&Ô& qÔ)ˆCØ�~Š~˜cÑ"Ô"Ð1¨#¨a¨b¨b¬' CØ”NÐ( bˆ	Ø×Ò˜^¨DÑ1Ô1Ð1Ø—]’] >Ñ2Ô2ˆØð 	"Ø�˜bÑ!Ô!ˆBØ�iŠi‰kŒkˆØ�(ˆ?ˆ?Ý˜rÑ"Ô"ˆBˆBØÐ:Ð:Ð:Ø�|Š|˜CÑ Ô ð 'Ý" 2Ñ&Ô&��Ø—’˜cÑ"Ô"ð 'Ý" 2Ñ&Ô&��Ø—’˜cÑ"Ô"ð 'Ý" 2Ñ&Ô&�ØˆCˆCØ�NÐ"Ð"Ý˜r " S°Y·]²]À=ÐQUÑ5VÔ5VÐWÑWÔWÐWØÐ(Ð(Ð(ØØ�NÐ"Ð"ØˆCˆCåÐ 7¸#Ñ =Ñ>Ô>Ð>Ø�Š;‰;Ø—’˜}¨TÑ2Ô2ˆBØð yØ1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ø˜˜‘G�Ý ¨R¯]ª]©_¬_Ñ=Ô=ð !ð !‘D�A�qØ �A�a˜‘c‘F�Fà—[’[ ¨¯ª©¬°Z×5FÒ5FÀrÇxÂxÐPQÁ{Ä{×GZÒGZÐ[^ÑG_ÔG_×GeÒGeÐfiÐklÐjmÑfmÐorÐnsÑfsÑGtÔGtÑ5uÔ5uÐ4wÑ)wÑxÔx�à$ T¤YÐ/Ð0JÐJð 2ð 2‘��!Ø(Ÿ}š}¨Q¨qÑ1Ô1�	˜!‘�Ø×Ò˜^¨AÑ.Ô.Ð.Ø�=Š=˜Ñ(Ô(ð 	'Ø&Ð&Ð&Ð&Ð&Ð&Ø×"Ò" 2Ñ&Ô&ˆBØ×Ò˜[¨Ñ.Ô.Ð.Ø—-’- Ñ,Ô,ˆ	Øð 	Ø�˜2‘”ˆBØˆŒ��3Ð#Ð#˜Ð#Ð#Ð#Ý�r˜'Ñ"Ô"ð 	%¥r¤w°¢~ ~Ø8Ð8Ð8Ð8Ð8Ð8ØˆL˜ Ð$Ñ$Ô$Ð$Ð$Ð$ð	%ð 	% ~ ~r8   rJ  c                 ót   — t          ¦   «         }|                      ||¬¦  «         |                     ¦   «         S )Nr  )r   rl  Úgetvalue)rO   r  rm   s      r&   ÚsaveToStringzPMCanvas.saveToStringª  s/   € Ý‰IŒIˆØ�Š˜˜cˆÑ"Ô"Ð"Ø�zŠz‰|Œ|Ðr8   c                 óØ  — ddl }| j        }| j        dk    r!|j        dk    rd|_        |j        }d|_        n|j        }|j        |j        }}|                     |                     ddt          |¦  «        dz   ddd	||d
d¦
  «
        ¦  «         |dz  }t          t          |¦  «        d| ¦  «        D ]"}|                     |||z
  |…         ¦  «         Œ#|                     d¦  «         dS )z¬
        Niki Spahiev, <niki@vintech.bg>, asserts that this is a respectable way to get BMP without PIL
        f is a file like object to which the BMP is written
        r   Nr!   r  r  z=2sLLLLLLhh24xÚBMé6   é(   r   é   r�   z              )Ústructr  r–   rB  rE  r~   r   rü   Úpackrj   rª   )	rO   r  ru  r<  Úpixr~   r   Úrowbri  s	            r&   Ú
_saveToBMPzPMCanvas._saveToBMP¯  sú   € ð
 	ˆˆˆØŒXˆØŒ=˜+Ò%Ð%¨"¬'°8Ò*;Ð*;ØˆBŒGØ”)ˆCØˆBŒGˆGà”)ˆCØœ "¤)ˆvˆØ	�Š�—’Ð,¨Tµ#°c±(´(¸2±+¸aÀÀ2ÀeÈFÐSTÐUWÑXÔXÑYÔYÐYØ�q‰yˆÝ•s˜3‘x”x  4 %Ñ(Ô(ð 	#ð 	#ˆAØ�GŠG�C˜˜$™˜q˜”MÑ"Ô"Ð"Ð"Ø	�Š�ÑÔÐÐÐr8   c                 ó2   — t          | j        ||¦  «         d S rJ   )Ú_setFontr  )rO   r`   ra   Úleadings       r&   r   zPMCanvas.setFontÃ  s   € Ý�”˜( 8Ñ,Ô,Ð,Ð,Ð,r8   c                 ó2   — t          | j        ||¦  «         d S rJ   )r:  r  )rO   r	  Úvalues      r&   Ú__setattr__zPMCanvas.__setattr__Æ  s   € Ý�”˜˜eÑ$Ô$Ð$Ð$Ð$r8   c                 ó,   — t          | j        |¦  «        S rJ   )rÃ   r  )rO   r	  s     r&   Ú__getattr__zPMCanvas.__getattr__É  s   € Ý�t”x Ñ%Ô%Ð%r8   r   c                 ób   — |r|                       ¦   «          |r|                      ¦   «          d S d S rJ   )r­   r®   )rO   rå   rË   s      r&   r¤   zPMCanvas.fillstrokepathÌ  s5   € ØÐ �—’‘”�ØÐ$�4—?’?Ñ$Ô$Ð$Ð$Ð$Ð$Ð$r8   c                 óP  — t          ||z
  ¦  «        dk    sJ ‚t          t          |z  dz  ¦  «        }t          t          |z  dz  ¦  «        }|||z  z   }	|||z  z   }
t          t          |z  dz  ¦  «        }t          t          |z  dz  ¦  «        }|||z  z   }|||z  z   }| |z  }||z  }t          ||z
  z  dz  }t          ddt          |¦  «        z
  z  t          |¦  «        z  ¦  «        }|	||z  z   }|
||z  z   }| |z  }||z  }|||z  z
  }|||z  z
  }|	|
f||f||f||fffS )a-  compute the control points for a bezier arc with theta1-theta0 <= 90.
        Points are computed for an arc with angle theta increasing in the
        counter-clockwise (CCW) direction.  returns a tuple with starting point
        and 3 control points of a cubic bezier curve for the curvto opertatoréZ   g     €f@g     €v@gUUUUUUõ?g      ð?)Úabsr   r   r   )rO   r¡   r¢   r{   r|   Útheta0Útheta1Úcos0Úsin0Úx0Úy0Úcos1Úsin1Úx3Úy3Údx1Údy1ÚhalfAngr?  r„   r…   Údx2Údy2r†   r‡   s                            r&   Ú_bezierArcSegmentCCWzPMCanvas._bezierArcSegmentCCWÐ  sd  € õ �6˜F‘?Ñ#Ô# rÒ)Ð)Ð)Ð)Ý•2�f‘9˜U‘?Ñ#Ô#ˆÝ•2�f‘9˜U‘?Ñ#Ô#ˆØ�"�T‘'‰\ˆØ�"�T‘'‰\ˆå•2�f‘9˜U‘?Ñ#Ô#ˆÝ•2�f‘9˜U‘?Ñ#Ô#ˆà�"�T‘'‰\ˆØ�"�T‘'‰\ˆàˆc�D‰jˆØ�4‰iˆõ �f˜V‘mÑ$ kÑ2ˆÝ�	˜S¥3 w¡<¤<Ñ/Ñ1µC¸±L´LÑAÑCÔCˆØ�#˜‘'‰\ˆØ�#˜‘'‰\ˆàˆc�D‰jˆØ�4‰iˆà�#˜‘'‰\ˆØ�#˜‘'‰\ˆØ�B�˜2˜b˜' B r 7¨R°¨GÐ4Ð6Ð6r8   c           	      ó$  — ||z
  }t          |¦  «        dk    r||fg}nvt          t          t          |¦  «        dz  ¦  «        ¦  «        }	t          |¦  «        |	z  }
g }t	          |	¦  «        D ]&}|||
z  z   }||
z   }|                     ||f¦  «         Œ'g }|D ]r\  }}|s6|                      ||||||¦  «        \  \  }}}|                     |¦  «         Œ=|                      ||||||¦  «        \  \  }}}|                     |¦  «         Œs||f|fS )zÓreturn a set of control points for Bezier approximation to an arc
        with angle increasing counter clockwise. No requirement on (theta1-theta0) <= 90
        However, it must be true that theta1-theta0 > 0.g     €V@)r…  r1   r   Úfloatrª   rã   r•  )rO   r¡   r¢   r{   r|   r†  r‡  ÚangularExtentÚ	angleListÚNfragÚ	fragAngleÚiirj  ÚbÚctrlptsrŠ  r‹  ÚptsÚtmpxÚtmpys                       r&   ÚbezierArcCCWzPMCanvas.bezierArcCCWó  sR  € ð  ™ˆåˆ}ÑÔ Ò%Ð%Ø  ˜Ð)ˆIˆIå��s =Ñ1Ô1°#Ñ5Ñ6Ô6Ñ8Ô8ˆEÝ˜mÑ,Ô,¨eÑ3ˆIØˆIÝ˜E‘l”lð (ð (�Ø˜R )™^Ñ+�Ø˜	‘M�Ø× Ò  ! A Ñ'Ô'Ð'Ð'àˆØð 	$ð 	$‰EˆQˆqØð $Ø!%×!:Ò!:¸2¸bÀ"ÀRÈÈ1Ñ!MÔ!M‘‘�"�R˜#Ø—’˜sÑ#Ô#Ð#Ð#à%)×%>Ò%>¸rÀ"ÀbÈÈQÈqÑ%QÔ%QÑ"‘�$�t˜cØ—’˜sÑ#Ô#Ð#Ð#Ø�B�˜Ð!Ð!r8   c           	      óÊ   — |                       ||||||¦  «        \  \  }}}	|                      ||¦  «         |	D ])\  \  }
}\  }}\  }}|                      |
|||||¦  «         Œ*dS )zÏadds an ellisesoidal arc segment to a path, with an ellipse centered
        on cx,cy and with radii (major & minor axes) rx and ry.  The arc is
        drawn in the CCW direction.  Requires: (ang2-ang1) > 0N)r¢  r«   rá   )rO   r¡   r¢   r{   r|   Úang1Úang2rŠ  r‹  rž  r„   r…   r†   r‡   rŽ  r�  s                   r&   ÚaddEllipsoidalArczPMCanvas.addEllipsoidalArc  s‰   € ð
 "×.Ò.¨r°"°b¸¸DÀÑFÔFÑ‰ˆ"ˆR�'à�Š�B�rÑÔÐØ*1ð 	,ð 	,Ñ&‰Wˆb�‘g�r˜"™g˜r "Ø�LŠL˜˜B˜r " R¨Ñ+Ô+Ð+Ð+ð	,ð 	,r8   rÀ   Fc                 ó<   — |                       ||||||¬¦  «         d S )N)rÍ   Ú	directionÚshaping©rÈ   )rO   rC   rD   rÄ   rÍ   r¨  r©  s          r&   ÚdrawCentredStringzPMCanvas.drawCentredString  s'   € Ø�Š˜˜!˜D¨kÀIÐW^ˆÑ_Ô_Ð_Ð_Ð_r8   c                 ó:   — |                       |||d|¬¦  «         d S )Nr¿   )rÍ   r¨  rª  )rO   rÄ   rC   rD   r¨  s        r&   ÚdrawRightStringzPMCanvas.drawRightString  s$   € Ø�Š˜˜Q˜q¨U¸YˆÑGÔGÐGÐGÐGr8   Úleftc                 óê  — | j         }|j        }	|j        }
|r||	|
fk    r|\  }}t          |||¦  «         n|
}|	}t	          |||||¬¦  «        \  }}	 |dv rHt          |||¦  «        }|dk    r||z  }n+|dk    r	||dz  z  }n|dk    r|t          |||||¦  «        z  }| j        dk    r|                     |||¦  «         �nt          |¦  «        }|j
        r|                     |||¦  «         �nP|}t          |¦  «        s‰	 |                     d¦  «        }nr# t          $ re}|j        d	d
…         \  }}t          |j        d d
…         |j        d
         ›d||dz
  |…         ›d|||…         ›d|||dz   …         ›�fz   Ž ‚d }~ww xY wt          ||g|j        z   ¦  «        }t#          |¦  «        }|dz
  }t%          |¦  «        D ]y}||         \  }}||k    rt          ||j        |¦  «         |}|                     |||¦  «         ||k    r1||                     |                     |j        ¦  «        |¦  «        z  }Œz|                     |
|	¦  «         d S # |                     |
|	¦  «         w xY w)N)r`   ra   r©  )r¿   rÀ   r¿   r¿   rÀ   g       @rÁ   r!   Úutf8r]   rr   ú
é
   z-->z<--r   )r  ra   r`   r{  r   r   rÅ   r–   rÈ   r   Ú_dynamicFontr   ÚdecodeÚUnicodeDecodeErrorÚargsr   ÚsubstitutionFontsrj   rª   ÚencNamer   )rO   rC   rD   rÄ   rÂ   rÍ   r¨  r©  r<  Úgs_fontSizeÚgs_fontNamer`   ra   rÎ   ÚfontÚfcÚer²   ÚjÚFTÚnÚnm1r  Úts                           r&   rÈ   zPMCanvas.drawString"  s;  € ØŒXˆØ”kˆØ”kˆØð 	#˜ [°Ð$=Ò=Ð=Ø!*ÑˆH�hÝ�R˜ Ñ*Ô*Ð*Ð*à"ˆHØ"ˆHå& t¨I¸xÐQYÐbiÐjÑjÔj‰ˆˆgð%	0ØÐ5Ð5Ð5Ý% d¨H°XÑ>Ô>�Ø Ò%Ð%Ø˜‘L�A�AØ  (Ò*Ð*Ø˜ ™‘O�A�AØ  )Ò+Ð+Ø� {°4¸ÀÈÑRÔRÑR�AàŒ}˜kÒ)Ð)Ø—’˜a  $Ñ'Ô'Ð'Ñ'å˜xÑ(Ô(�ØÔ$ð MØ—M’M ! A dÑ+Ô+Ð+Ñ+à�BÝ$ T™?œ?ð LðLØ#'§;¢;¨vÑ#6Ô#6˜D˜DøÝ1ð Lð Lð LØ"#¤&¨¨1¨¤+™C˜A˜aÝ"4°q´v¸b¸q¸b´zÐYZÔY_Ð`aÔYbÐYbÐYbÐcgÐhiÐjlÑhlÐmnÐhnÔcoÐcoÐcoÐptÐuvÐwxÐuxÔpyÐpyÐpyÐz~ð  @Að  BCð  DFñ  BFð  @Fô  {Gð  {Gð  DHð  CJñ  8Jð  #Lð  LøøøøðLøøøõ $ D¨$¨°Ô0FÑ)FÑGÔG�BÝ˜B™œ�AØ˜A™#�CÝ" 1™XœXð Mð M˜Ø! !œu™˜˜1Ø˜bš5˜5Ý$ R¨¬
°8Ñ<Ô<Ð<Ø!"˜BØŸš a¨¨!Ñ,Ô,Ð,Ø˜cš6˜6Ø §¢¨q¯xªx¸¼	Ñ/BÔ/BÀ8Ñ!LÔ!LÑL˜Aøà�JŠJ�{ ;Ñ/Ô/Ð/Ð/Ð/øˆB�JŠJ�{ ;Ñ/Ô/Ð/Ð/øøøs3   ÁB0I ÄD ÄI Ä
F	Ä$A FÆF	Æ	B9I ÉI2c                 óÀ   — | j         �V|                      ¦   «          |                      ||¦  «         |                      ||¦  «         |                      ¦   «          d S d S rJ   )rX   r¨   r©   r«   r®   )rO   r„   r…   r†   r‡   s        r&   rƒ   zPMCanvas.lineV  sa   € ØÔÐ'Ø�NŠNÑÔÐØ�KŠK˜˜2ÑÔÐØ�KŠK˜˜2ÑÔÐØ�OŠOÑÔÐÐÐð	 (Ð'r8   c                 óL  — |                       ¦   «          |                      ||¦  «         |                      ||z   |¦  «         |                      ||z   ||z   ¦  «         |                      |||z   ¦  «         |                      ¦   «          |                      ||¬¦  «         d S )N)rå   rË   )r¨   r©   r«   r¬   r¤   )rO   rC   rD   r~   r   rå   rË   s          r&   r}   zPMCanvas.rect]  s¡   € Ø�ŠÑÔÐØ�Š�A�qÑÔÐØ�Š�A�e‘G˜QÑÔÐØ�Š�A�e‘G˜Q ™ZÑ(Ô(Ð(Ø�Š�A�q˜6‘zÑ"Ô"Ð"Ø�ŠÑÔÐØ×Ò 6¨tÐÑ4Ô4Ð4Ð4Ð4r8   c                 óä  — |dk    r|}|dk    r|}||z   }||z   }|                       ¦   «          |                      ||z   |¦  «         |                      ||z
  ||z   ||dd¦  «         |                      ||z
  ||z
  ||dd¦  «         |                      ||z   ||z
  ||dd¦  «         |                      ||z   ||z   ||dd¦  «         |                      ¦   «          |                      ¦   «          dS )zârect(self, x, y, width, height, rx,ry):
        Draw a rectangle if rx or rx and ry are specified the corners are
        rounded with ellipsoidal arcs determined by rx and ry
        (drawn in the counter-clockwise direction)r   i  ih  r„  é´   N)r¨   r©   r¦  r¬   r¤   )	rO   rC   rD   r~   r   r{   r|   r†   r‡   s	            r&   r€   zPMCanvas.roundRectf  s  € ð
 ˆqŠ5ˆ5�r�"ØˆqŠ5ˆ5�r�"Ø�‰YˆØ�‰ZˆØ�ŠÑÔÐØ�Š�A�b‘D˜ÑÔÐØ×Ò˜r "™u a¨¡d¨B°°C¸Ñ>Ô>Ð>Ø×Ò˜r "™u b¨¡e¨R°°Q¸Ñ;Ô;Ð;Ø×Ò˜q ™t R¨¡U¨B°°B¸Ñ<Ô<Ð<Ø×Ò˜q ™t Q r¡T¨2¨r°3¸Ñ=Ô=Ð=Ø�ŠÑÔÐØ×ÒÑÔÐÐÐr8   c                 ó6   — |                       ||||¦  «         dS )zRadd closed path circle with center cx,cy and axes r: counter-clockwise orientationN)rµ   )rO   r¡   r¢   r£   s       r&   r    zPMCanvas.circlex  s    € à�Š�R˜˜1˜QÑÔÐÐÐr8   c                 óÄ  — |                       ¦   «          ||z   }|}|}||z
  }||z   }	||t          z  z
  }
||t          z  z   }|}|                      ||¦  «         |                      |	|
||||¦  «         |}|}||z
  }|}||t          z  z
  }	||z
  }
|}||t          z  z
  }|                      |	|
||||¦  «         |}|}|}||z   }||z
  }	||t          z  z   }
||t          z  z
  }||z   }|                      |	|
||||¦  «         |}|}||z   }|}||t          z  z   }	||z   }
||z   }||t          z  z   }|                      |	|
||||¦  «         |                      ¦   «          dS )z…add closed path ellipse with center cx,cy and axes rx,ry: counter-clockwise orientation
        (remember y-axis increases downward) N)r¨   ÚBEZIER_ARC_MAGICr©   rá   r¬   )rO   r¡   r¢   r{   r|   rŠ  r‹  rŽ  r�  r„   r…   r†   r‡   s                r&   rµ   zPMCanvas.ellipse|  sÒ  € ð 	�ŠÑÔÐà�"‰WˆØˆàˆØ�‰Uˆà�‰UˆØ�Õ#Ñ#Ñ#ˆà�"Õ%Ñ%Ñ%ˆØˆØ�Š�B˜ÑÔÐØ�Š�R˜˜2˜b  BÑ'Ô'Ð'àˆØˆà�‰UˆØˆà�Õ#Ñ#Ñ#ˆØ�‰UˆàˆØ�Õ$Ñ$Ñ$ˆØ�Š�R˜˜2˜b  BÑ'Ô'Ð'àˆØˆàˆØ�‰Uˆà�‰UˆØ�Õ#Ñ#Ñ#ˆà�Õ$Ñ$Ñ$ˆØ�‰UˆØ�Š�R˜˜2˜b  BÑ'Ô'Ð'àˆØˆà�‰UˆØˆà�Õ#Ñ#Ñ#ˆØ�‰Uˆà�‰UˆØ�Õ#Ñ#Ñ#ˆØ�Š�R˜˜2˜b  BÑ'Ô'Ð'Ø�ŠÑÔÐÐÐr8   c                 ó   — dS )zdo nothing for compatibilityNrê   rN   s    r&   Ú	saveStatezPMCanvas.saveState·  s   € àˆr8   c                 ór   — |                       |¦  «        | _        t          |dd ¦  «        }|�	|| _        d S d S ©Nrn   )r!  r_   rÃ   r^   ©rO   ÚaColorrn   s      r&   rl   zPMCanvas.setFillColor»  sD   € Ø×-Ò-¨fÑ5Ô5ˆŒÝ˜˜w tÑ,Ô,ˆØÐØ$ˆDÔÐÐð Ðr8   c                 ór   — |                       |¦  «        | _        t          |dd ¦  «        }|�	|| _        d S d S rÍ  )r!  rX   rÃ   rW   rÎ  s      r&   rd   zPMCanvas.setStrokeColorÁ  sE   € Ø×/Ò/°Ñ7Ô7ˆÔÝ˜˜w tÑ,Ô,ˆØÐØ!&ˆDÔÐÐð Ðr8   c                 ó   — || _         d S rJ   )re   )rO   Úcaps     r&   Ú
setLineCapzPMCanvas.setLineCapÊ  s   € ØˆŒˆˆr8   c                 ó   — || _         d S rJ   )rf   )rO   Újoins     r&   ÚsetLineJoinzPMCanvas.setLineJoinÍ  s   € ØˆŒˆˆr8   c                 ó   — || _         d S rJ   )rV   )rO   r~   s     r&   ÚsetLineWidthzPMCanvas.setLineWidthÐ  s   € Ø ˆÔÐÐr8   c                 óX   — t          ||p| j        j        |�|n| j        j        ¦  «        S rJ   )r   r  r`   ra   )rO   rÄ   r`   ra   s       r&   r   zPMCanvas.stringWidthÓ  s6   € Ý˜4 Ð!>¨T¬XÔ->Ø-5Ð-A  ÀtÄxÔGXñ[ô [ð 	[r8   )r  r  NNrŠ   )Nr  rJ   rI  )r   r   )rÀ   NF)Nr®  NF)NN)"ræ   rç   rè   r+  Ústaticmethodr"  r@  rF  rl  ro  ry  r   r  r�  r¤   r•  r¢  r¦  r«  r­  rÈ   rƒ   r}   r€   r    rµ   rË  rl   rd   ÚrestoreStaterÓ  rÖ  rØ  r   rê   r8   r&   r  r  6  s2  € € € € € ØDHØ$ð!ð !ð !ð !ð$ ðYð Yð Yñ „\ðYð*ð ð ð ðð ð ð
6%ð 6%ð 6%ð 6%ðpð ð ð ð
ð ð ð(-ð -ð -ð -ð%ð %ð %ð&ð &ð &ð%ð %ð %ð %ð!7ð !7ð !7ðF"ð "ð "ð<	,ð 	,ð 	,ð`ð `ð `ð `ðHð Hð Hð Hð20ð 20ð 20ð 20ðhð ð ð5ð 5ð 5ð 5ðð ð ð$ ð  ð  ð9ð 9ð 9ðvð ð ð%ð %ð %ð'ð 'ð 'ð €Lðð ð ðð ð ð!ð !ð !ð[ð [ð [ð [ð [ð [r8   r  r  r  rŠ   c           	      óˆ   — t          | ¦  «        } t          | j        | j        |||||¬¦  «        }t	          | |ddfd|i|¤Ž |S )N)r'  r(  r  r#   r)  r   r<   )r   r  r~   r   r@   )	rk  r'  r(  r  r<   r#   r)  rE   r6   s	            r&   ÚdrawToPMCanvasrÝ  Ö  sW   € Ý˜AÑÔ€AÝ�”˜!œ(¨°¸iÐQXÐdnÐoÑoÔo€AÝˆˆAˆq�!Ð6Ð6 ,Ð6°Ð6Ð6Ð6Ø€Hr8   c           
      óN   — t          | f||||||dœ|¤Ž                     ¦   «         S )N©r'  r(  r  r<   r#   r)  )rÝ  rF  )rk  r'  r(  r  r<   r#   r)  rE   s           r&   Ú	drawToPILrà  Ü  s\   € Ý˜!ð  L ¨°yÈ|Ðelð  yCð  Lð  Lð  GKð  Lð  L÷  Rò  Rñ  Tô  Tð  Tr8   c           
      óŠ   — t          ¦   «         }t          | f||||||dœ|¤Ž}	|	                     d|j        |j        ¬¦  «        S )Nrß  r±   rì   )r,   rà  r‹   rï   rð   )
rk  r'  r(  r  r<   r#   r)  rE   r*   r™   s
             r&   Ú
drawToPILPrâ  ß  sa   € Ý‰KŒK€EÝ	�1ð  
D˜# "°	ÈÐ]dÐpzð  
Dð  
Dð  Cð  
Dð  
D€BØ�:Š:�c %¤*°e´nˆ:ÑEÔEÐEr8   rJ  c	           
      óZ   — t          | f||||||dœ|	¤Ž}
|
                     ||¦  «         dS )zocreate a pixmap and draw drawing, d to it then save as a file
    configPIL dict is passed to image save methodrß  N)rÝ  rl  )rk  r  r  r'  r(  r  r<   r#   r)  rE   r6   s              r&   Ú
drawToFilerä  ä  sX   € õ 	�qð  	H˜c b°IÈLÐahÐt~ð  	Hð  	Hð  CGð  	Hð  	H€AØ‡L‚L��CÑÔÐÐÐr8   c           
      óp   — t          ¦   «         }	t          | |	f||||||dœ|¤Ž |	                     ¦   «         S )N)r  r'  r(  r  r#   r)  )r   rä  rn  )
rk  r  r'  r(  r  r<   r#   r)  rE   rm   s
             r&   ÚdrawToStringræ  ê  sB   € Ý‰	Œ	€AÝˆq�Ðn�s ¨°iÈÐ[eÐnÐnÐimÐnÐnÐnØ�:Š:‰<Œ<Ðr8   ÚpmoutFc           	      ó   ‡‡‡‡‡— d„ }dd l }ddlm} ddlmŠ |j        }g }|j                             | ¦  «        s |j        | ¦  «         d}d}|g}	i }
t          j
        dd …         }d„ |D ¦   «         }|sg d	¢}nL|D ]}|                     |¦  «         Œd
                     d„ |D ¦   «         ¦  «                             d
¦  «        }g Šdd lŠddlmŠ ˆˆˆˆˆfd„} |t#          t$          d¦  «        ¬¦  «        D �]Y\  }}}|
                     |d¦  «        dz   x}|
|<   |dk    r|d|dz
  z  z  }|r||vrŒ=|}t)          |j        ¦  «        }t)          |j        ¦  «        }|	                     d|›d|›d�¦  «         |D �]w}|dv r*|	                     d|                     ¦   «         z  ¦  «         	 |›d ||¦  «        ›�}|j                             | |¦  «        }|j                             |¦  «        r |j        |¦  «         |dk    rt5          |||dt6          i¬¦  «         n1|dv r|                     ddg| |¬¦  «         nt5          |||¬¦  «         |dv r|	                     d |z  ¦  «         n=|dk    r|	                     d!|z  ¦  «         n|dk    r|	                     d"|z  ¦  «         ‰s‰d#k    rt;          d$t=          |¦  «        z  ¦  «         �Œ\# t>          $ r  |||¦  «         Y �Œuw xY w|j          !                    d%d&¦  «        d'k    r
d|j"        d(<   d)D ]/}	 |                     |g| |¬¦  «         Œ#   |||¦  «         Y Œ-xY w�Œ[‰rI|	d          #                    d*d+¦  «        |	d<   |	                     d,¦  «         |	 $                    ‰¦  «         |	                     |¦  «         |j                             | d-¦  «        }tK          |d.¦  «        5 }| &                    |	¦  «         d d d ¦  «         n# 1 swxY w Y   t          j'        d/k    rdd0l(m)}  ||d1¬2¦  «         ‰s‰d#k    rt;          d$|z  ¦  «         d S d S )3Nc                 ó   — | dk    rd} | S )NÚtiffÚtifrê   )rC   s    r&   r  ztest.<locals>.extò  s   € ØˆfŠ9ˆ9˜�aØˆr8   r   )Ú
testshapes)Úverbosezq<html><head><title>renderPM output results</title></head>
    <body>
    <h1>renderPM results of output</h1>
    z</body>
    </html>
    r   c                 ó<   — g | ]}|                      d ¦  «        ¯|‘ŒS )z--ext=)r]  ©Ú.0rj  s     r&   ú
<listcomp>ztest.<locals>.<listcomp>  s)   € Ð3Ð3Ð3ˆq˜AŸLšL¨Ñ2Ô2Ð3ˆÐ3Ð3Ð3r8   )Úgifrê  ÚpngÚjpgÚpctÚpyrÙ   ú,c                 ó"   — g | ]}|d d…         ‘ŒS )é   Nrê   rï  s     r&   rñ  ztest.<locals>.<listcomp>  s    € Ð(Ð(Ð( �q˜˜˜”uÐ(Ð(Ð(r8   )Úescapec                 ó&  •— d| ›d|›d�}‰s‰dk    rt          |¦  «         ‰                     d|z  ¦  «         t          ¦   «         }‰                     |¬¦  «         ‰                     d ‰|                     ¦   «         ¦  «        z  ¦  «         d S )NzProblem drawing z fmt=z filer]   z"<br/><h2 style="color:red">%s</h2>)Úfilez<pre>%s</pre>)Úprintrã   r   Ú	print_excrn  )	r	  r  ÚmsgÚbufÚerrsrú  ÚshoutÚ	tracebackrí  s	       €€€€€r&   ÚhandleErrorztest.<locals>.handleError  s–   ø€ € Ø04°°°S°S°SÐ9ˆØÐ)�G˜A’I�I�u S™zœz˜zØ�ŠÐ8¸3Ñ>Ñ?Ô?Ð?Ý‰jŒjˆØ×Ò ÐÑ%Ô%Ð%Ø�Š�O f f¨S¯\ª\©^¬^Ñ&<Ô&<Ñ<Ñ=Ô=Ð=Ð=Ð=r8   Úft_get_face)ÚdoTTFz.%02dz<hr><h2>Drawing z</h2>
<pre>z</pre>)rò  ró  rô  rõ  z<p>%s format</p>
rý   rõ  r  )r  r  )rö  rÙ   rö  rÙ   )ÚformatsÚoutDirÚfnRootr  )rò  ró  rô  z<img src="%s" border="1"><br>
z#<a href="%s">python source</a><br>
z<a href="%s">SVG</a><br>
r]   zwrote %sÚRL_NOEPSPREVIEWÚ0rù   Úpreview)ÚepsrÚ   z</h1>z7 <a href="#errors" style="color: red">(errors)</a></h1>z<a name="errors"/>zpm-index.htmlr%  rÿ   r   ÚHTMLr  )*r�   Úreportlab.graphicsrì  Úreportlab.rl_configrí  ÚgetAllTestDrawingsrŽ   ÚisdirÚmkdirÚsysÚargvÚremoverÕ  rc  r  Úxml.sax.saxutilsrú  r“   r  r^  r1   r~   r   rã   r1  r‘   rä  r   rf  rý  r\  r4  Úenvironr3  r>   ÚreplaceÚextendr’   Ú
writelinesÚplatformr
  r  ) r  r  r  r�   rì  r  ÚdrawingsÚhtmlTopÚ
htmlBottomÚhtmlÚnamesr  ÚErj  r  rA   Ú	docstringr	  r²   r	  r%  r&  r?  ÚfilenameÚfullpathÚhtmlFileNamer  r  r  rú  r  rí  s     `                          @@@@r&   Útestr'  ñ  s¶  øøøøø€ ðð ð ð
 €I€I€IØ-Ð-Ð-Ð-Ð-Ð-Ø+Ð+Ð+Ð+Ð+Ð+Ø#Ô6ÐØ€HØŒ7�=Š=˜Ñ Ô ð ØˆŒ�ÑÔÐð€Gð€Jð ˆ9€DØ€EÝŒ8�A�B�BŒ<€DØ3Ð3�DÐ3Ñ3Ô3€AØð 6Ø<Ð<Ð<ˆˆàð 	ð 	ˆAØ�KŠK˜‰NŒNˆNˆNØ�XŠXÐ(Ð( aÐ(Ñ(Ô(Ñ)Ô)×0Ò0°Ñ5Ô5ˆà€DØÐÐÐØ'Ð'Ð'Ð'Ð'Ð'ð>ð >ð >ð >ð >ð >ð >ð >ð >ð '9Ð&8½wÅzÐR_Ñ?`Ô?`Ð&aÑ&aÔ&að %$ñ %$Ñ"ˆ�)˜TØ×*Ò*¨4°Ñ2Ô2°1Ñ4Ð4ˆˆE�$‰KØˆQŠ3ˆ3�˜ 1 Q¡3™Ñ'�ØÐ.�D Ð$Ð$ hØˆÝ�”ÑÔˆÝ�”ÑÔˆØ�ŠˆÀÀÀÀiÀiÀiÐPÑQÔQÐQàð 	$ñ 	$ˆAØÐ-Ð-Ð-Ø—’Ð0°1·7²7±9´9Ñ<Ñ=Ô=Ð=ð$Ø&, f f¨c¨c°!©f¬f¨fÐ5�Øœ7Ÿ<š<¨°Ñ9Ô9�Ø”7—>’> (Ñ+Ô+ð (Ø�B”I˜hÑ'Ô'Ð'Ø�e’8�8Ý˜w x°AÀÍuÐ@UÐVÑVÔVÐVÐVØ˜,Ð&Ð&Ø—L’L¨$¨u¨¸VÈ6�LÑRÔRÐRÐRå˜w x°AÐ6Ñ6Ô6Ð6ØÐ+Ð+Ð+Ø—K’KÐ AÀHÑ LÑMÔMÐMÐMØ˜’W�WØ—K’KÐ FÈÑ QÑRÔRÐRÐRØ˜’X�XØ—K’KÐ <¸xÑ GÑHÔHÐHØÐH˜G AšI˜I¥u¨Z½¸h¹¼Ñ-GÑ'HÔ'HÐ'HùøÝ!ð $ð $ð $Ø�˜D Ñ#Ô#Ð#Ð#Ñ#ð$øøøàŒ:�>Š>Ð+¨CÑ0Ô0°#Ò5Ð5ÐUV°wÔ7GÈ	Ñ7RØð 	$ð 	$ˆAð$Ø—’ a S°¸f�ÑEÔEÐEÐEøð$Ø�˜D Ñ#Ô#Ð#Ð#Ð#øøøñ		$ð ð Ø�q”'—/’/ 'Ð*cÑdÔdˆˆQ‰Ø�ŠÐ(Ñ)Ô)Ð)Ø�Š�DÑÔÐØ‡K‚K�
ÑÔÐØ”7—<’< ¨Ñ8Ô8€LÝ	ˆl˜CÑ	 Ô	 ð  AØ	�Š�TÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð å
„|�UÒÐØ4Ð4Ð4Ð4Ð4Ð4Øˆ�\ fÐ-Ñ-Ô-Ð-ØÐ;�˜’	�	�5 ¨lÑ!:Ñ;Ô;Ð;Ð;Ð;�	�	s1   Æ3D(KËK7Ë6K7Ì(MÍMÏ"PÐPÐPÚ__main__T)r  rJ   )rç  F)AÚ__version__ré   rà   Úreportlab.graphics.renderbaser   r   Úreportlab.pdfbase.pdfmetricsr   r   r   Úreportlab.pdfbase.ttfontsr	   r
   Úreportlab.pdfgen.textobjectr   r
  r   r   Úreportlab.lib.abagr   Úreportlab.lib.colorsr   r   Ú	reportlabr   Úutilsr   r{  r   r�   r  Úior   r   Úmathr   r   r   r   r'   r   r  r,   r7   r:   Ú_unset_r@   rG   r=   rñ   rö   rú   r  Údictr2  rÉ  r  rÝ  rà  râ  rä  ræ  rf  r'  ræ   rê   r8   r&   ú<module>r6     s	  ðð €ð	1€ð (Ð 'Ð 'Ð 'Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø #Ð #Ð #Ð #Ð #Ð #Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø Ð Ð Ð Ð Ð Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à €€€€€€€Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ð #ðð ð ð ð:Ø�˜yÔ8Ñ9Ô9€J€JøØð ð ð Ø€J€J€Jðøøøðð ð ðð ð ð
.ð .ð .ð .7Ô->ð Rð Rð Rð Rð 3Ð 2Ð 2Ð 2Ð 2Ð 2ð@ð @ð @ð @ð @�(ñ @ô @ð @ðDFð Fð Fðð ð ðð ð ðð ð ð ð �$˜H¨(°wÐ?Ñ?Ô?€ØÐ ð_[ð _[ð _[ð _[ð _[ñ _[ô _[ð _[ð@  °TÈ	ÔHYÐbkÔb{ð  HMð ð ð ð ð ˜H°À9ÔCTÐ]fÔ]vð  CHð Tð Tð Tð Tð ˜X°ÀIÔDUÐ^gÔ^wð  DIð Fð Fð Fð Fð
  2¨(¸dÐQZÔQbÐktô  lEð  QVð ð ð ð ð  "¨¸TÐPYÔPaÐjsô  kDð  PUð ð ð ð ð
 €ð]<ð ]<ð ]<ð ]<ð~ ˆZÒÐØ€DˆtÐÑÔÐÐÐð Ðs   Á.A? Á?B	ÂB	