Ë
    ¡ëiŸ{  ã                   ó  — d Z dZddl­ 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& d0d„Z'	  e'ejP                  «      Z)d„ Z*d„ Z+d„ Z,ejZ                  fd„Z.ddlm/Z/  G d„ de/«      Z0d„ Z1d„ Z2d„ Z3d0d„Z4 e5ddd¬«      Z6d Z7 G d!„ d"«      Z8d#d$dejZ                  ejP                  d%fd&„Z9d#d$dejZ                  ejP                  d%fd'„Z:d#d$dejZ                  ejP                  d%fd(„Z;d)d#d$dejZ                  ejP                  d%fd*„Z<d)d#d$dejZ                  ejP                  d%fd+„Z=e<Z>d1d,„Z?e@d-k(  r
 e?d.¬/«       yy# e$ r dZ)Y �Œw xY w)2z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                 óh  — | st         j                  } | dk(  r	 dd l}|S d| j                  «       v r	 dd l}|S t        d| › �«      ‚# t        $ r)}	 dd l}n# t        $ r t        d«      ‚w xY wY d }~|S d }~ww xY w# t        $ r-}	 dd l}n# t        $ r t        d| › d�«      ‚w xY wY d }~|S d }~ww xY w)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      ú[/var/www/html/chat/reports/venv/lib/python3.12/site-packages/reportlab/graphics/renderPM.pyÚ_getPMBackendr'      s  € Ùœi×7Ñ7�GØ�Òð	@Û$ð. €Hð 
�G—M‘M“OÑ	#ð	@Û!ð €Hô Ð8¸¸	ÐBÓCÐCøô+ ò 		@ð@Ü%øÜò @Ü#ð %?ó @ð @ð@úó &ð( €Hûð-		@ûô ò 	@ð@Ü(øÜò @Ü#Ð(OÐPWÈyð Y<ð %?ó @ð @ð@úó )ð €Hûð	@úsR   ™A ²A; Á	A8ÁAÁA3ÁA*Á*A3Á3A8Á;	B1ÂB
Â	B,Â
B#Â#B,Â,B1c                  ó<   — 	 ddl m}  | S # t        $ r dd l} Y | S w xY w)Nr   ©ÚImage)ÚPILr*   r    r)   s    r&   Ú	_getImager,   @   s*   € ðÝð €Løô ò ÜØ€Lðús   ‚
 Ššc                 ó¼   — | rYd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   s_   € á�4œ˜C §¡™I›Ñ&¨2Ñ-°4¼¸CÀÇÁ¹KÓ8HÑ3HÈQÑ2NÑOÐSWÔX[Ð\_Ð`a×`fÑ`fÑ\fÓXgÑSgÑhÐ
hØ€Hó    c                 ó    — | �t        | «      S | 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                  j                  |«       |j                  t	        | «      ||||¬«       y)z
As it says)ÚshowBoundaryN)Ú_PMRendererÚ__dict__ÚupdateÚdrawr   )ÚdrawingÚcanvasÚxÚyr<   ÚkwdsÚRs          r&   r@   r@   T   s7   € ä‹€AØ‡J�J×Ñ�dÔØ‡F�FÔ˜wÓ'¨°°AÀL€FÕQr8   )ÚRendererc                   óf   — 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y)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                 óX   — | j                   j                  «        | j                  «        y ©N)Ú_trackerÚpopÚ
applyState©Úselfs    r&   rL   z_PMRenderer.pop`   s   € Ø�‰×ÑÔØ�‰Õr8   c                 óp   — t        |«      }| j                  j                  |«       | j                  «        y rJ   )r   rK   ÚpushrM   )rO   ÚnodeÚdeltass      r&   rQ   z_PMRenderer.pushd   s(   € Ü˜tÓ$ˆØ�‰×Ñ˜6Ô"Ø�‰Õr8   c                 óÚ  — | j                   j                  «       }|d   | j                  _        |d   | j                  _        |d   }|�|| j                  _        | j                  j                  |d   «       |d   | j                  _        |d   | j                  _        |d   | j                  _	        |d   }|sd }nDt        |t        t        f«      s|f}t        |«      d	k7  st        |d
   t        t        f«      sd|f}|| j                  _        |d   }|�|| j                  _        | j                  j!                  |d   «       | j                  j#                  |d   |d   «       y )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   sB  € Ø�M‰M×"Ñ"Ó$ˆØ˜U™8ˆ�‰ÔØ#$ ]Ñ#3ˆ�‰Ô Ø�/Ñ"ˆØÐØ).ˆD�L‰LÔ&Ø�‰×#Ñ# A mÑ$4Ô5Ø  Ñ1ˆ�‰ÔØ !Ð"2Ñ 3ˆ�‰ÔØ ! *¡ˆ�‰ÔØÐ Ñ!ˆÙØ‰Bä˜b¤$¤u Ô.Ø�S�Ü�2‹w˜Šz¤¨B¨q©E´4¼°,Ô!?Ø˜�U�Ø!#ˆ�‰ÔØ�-Ñ ˆØÐØ',ˆD�L‰LÔ$Ø�‰×!Ñ! ! K¡.Ô1Ø�‰×Ñ˜Q˜z™]¨A¨j©MÕ:r8   c                 óØ   — | j                   j                  d   }| j                  j                  dd ||fz   x|d<   |d<   | j                   j	                  |«       | j                  «        y )Néÿÿÿÿr   é   Ú	transformrU   )rK   Ú	_combinedrc   Ú_baseCTMrQ   rM   )rO   rC   rD   rS   s       r&   Ú	initStatez_PMRenderer.initStateƒ   s_   € Ø—‘×(Ñ(¨Ñ,ˆØ.2¯l©l×.CÑ.CÀAÀaÐ.HÈ!ÈAÈÑ.NÐNˆˆ{Ñ˜f U™mØ�‰×Ñ˜6Ô"Ø�‰Õr8   c                 óh   — | j                  |«       | j                  |«       | j                  «        y)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(  r@n n=|j                  |j                  |j
                  |j                  |j                  «       y |j                  |j                  |j
                  |j                  |j                  |j                  |j                  «       y )Nr   )	rc   ÚrxÚryÚrectrC   rD   ÚwidthÚheightÚ	roundRect)rO   r}   r6   s      r&   ÚdrawRectz_PMRenderer.drawRect–   sp   € Ø�L‰LˆØ�7‰7�d—g‘gÔ" Õ"à�F‰F�4—6‘6˜$Ÿ&™& $§*¡*¨d¯k©kÕ:à�K‰K˜Ÿ™˜tŸv™v t§z¡z°4·;±;ÀÇÁÈÏÉÕQr8   c                 ó�   — | j                   j                  |j                  |j                  |j                  |j
                  «       y rJ   )rc   ÚlineÚx1Úy1Úx2Úy2)rO   rƒ   s     r&   ÚdrawLinez_PMRenderer.drawLinež   s*   € Ø�‰×Ñ˜$Ÿ'™' $§'¡'¨$¯'©'°$·'±'Õ:r8   c                 ó^  — |j                   }t        |t        «      rK|rt        j                   j	                  |«      sy t        «       j                  |«      j                  d«      }nt        |d«      r|j                  d«      }ny |j                  \  }}|j                  |j                  }}|€|}|€|}| j                  j                  |j                  |j                  ||| j                  j                   dk(  r|n( t        |d«      r|j"                  n|j$                  «       ||d«       y )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‰zˆÜ�dœ3ÔÙœRŸW™WŸ^™^¨DÔ1°FÜ“×!Ñ! $Ó'×/Ñ/°Ó6‰BÜ�T˜)Ô$Ø—‘˜eÓ$‰BàØ—W‘W‰
ˆˆdØ—[‘[ %§,¡,ˆdˆØˆ< ˜Øˆ< ˜Ø�‰×ÑØ—‘˜Ÿ™ $¨Ø—|‘|×,Ñ,¨kÒ9‘ØN¬°°9Ô(=˜"Ÿ*š*À2Ç;Á;ÓQØ�d˜Aõ		r8   c                 óž   — | j                   }|j                  |j                  |j                  |j                  «       |j                  «        y rJ   )rc   ÚcircleÚcxÚcyÚrÚfillstrokepath)rO   r    r6   s      r&   Ú
drawCirclez_PMRenderer.drawCircleµ   s3   € Ø�L‰LˆØ	�‰�—‘˜6Ÿ9™9 f§h¡hÔ/Ø	×ÑÕr8   c                 ó~  — |j                   }t        |«      dk\  sJ d«       ‚| j                  }|j                  «        |j	                  |d   |d   «       t        dt        |«      d«      D ]  }|j                  ||   ||dz      «       Œ |r |j                  «        |j                  «        |j                  «        y )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‰OˆÜ�1‹v˜Š{ÐAÐAÓAˆ{Ø�L‰LˆØ	�‰ŒØ	�‰��1‘�q˜‘tÔÜ�qœ#˜a›& !Ó$ò 	#ˆAØ�H‰H�Q�q‘T˜1˜Q˜q™S™6Õ"ð	#áØ�K‰KŒMØ�J‰JŒLØ	�‰�r8   c                 ó´   — | j                   }|j                  |j                  |j                  |j                  |j
                  «       |j                  «        y rJ   )rc   Úellipser¡   r¢   r{   r|   r¤   )rO   rµ   r6   s      r&   ÚdrawEllipsez_PMRenderer.drawEllipseÇ   s9   € Ø
�,‰,ˆØ	�	‰	�'—*‘*˜gŸj™j¨'¯*©*°W·Z±ZÔ@Ø	×ÑÕr8   c                 ó*   — | j                  |d¬«       y )Nr   )r°   )r³   )rO   Úpolygons     r&   ÚdrawPolygonz_PMRenderer.drawPolygonÌ   s   € Ø×Ñ˜'¨1ÐÕ-r8   c           	      ó6  — | j                   }|j                  }t        |dd«      }|€|rä| j                  j	                  «       }|d   }|d   }|d   }|j
                  }	|j                  }
|j                  }|dvr`t        |	||«      }|dk(  r|
|z  }
nH|dk(  r	|
|d	z  z  }
n:|d
k(  r|
t        ||	||||j                  «      z  }
nt        dt        |«      z   «      ‚|j                  }||_        	 |j                  |
||	||f¬«       ||_        y y # ||_        w xY w)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Ï   s9  € Ø�|‰|ˆØ�~‰~ˆÜ  Ð+;¸AÓ>ˆØÐ™~Ø—‘×&Ñ&Ó(ˆAØ˜L™/ˆKØ˜‘}ˆHØ˜‘}ˆHØ—>‘>ˆDØ—‘ˆAØ—‘ˆAØÐ"7Ñ7Ü% d¨H°XÓ>�Ø Ò%Ø˜‘L‘AØ  (Ò*Ø˜ ™‘N‘AØ  )Ò+Øœ {°4¸ÀÈÐR[×RdÑRdÓeÑe‘Aä$Ð%@ÄÀ[ÓAQÑ%QÓRÐRØ $× 3Ñ 3ÐØ"0ˆDÔð8Ø—‘  ! D°H¸XÐ3F�ÔGà&7�Õ#ð/  .øð. '8�Õ#ús   Ã/D Ä	Dc                 ó   ‡‡	‡
‡— | j                   Š
‰t        u re‰
j                  d= ‰
j                  r;‰
j                  d   }|j                  }d|_        | j	                  |«       ||_        y ‰
j                  «        y ddlmŠ	 ‰
j                  ‰
j                  ‰
j                  ‰
j                  fŠt        ‰dd«      }dˆ	ˆ
ˆˆfd„	}‰j                  r2 |«        ‰
j                  «        ‰
j                  j                  ‰«       ‰
j                  d u}‰
j                   d u}t        ‰dd«      }|d	k(  rn|r4|r2 |d
¬«       ‰
j#                  |«        |«        ‰
j%                  «        y |r |d
¬«       ‰
j#                  |«       y |r |«        ‰
j%                  «        y y |dk(  r0 |d
¬«       |r‰
j#                  |«       |r‰
j%                  «        y y  |«       r‰
j#                  |«       ‰
j%                  «        y )Nrq   r   r   )Ú_renderPathÚ	autocloseÚ c                 ó:   •— ‰j                  «         ‰‰‰| ¬«      S )N©Ú
forceClose)r¨   )rÖ   rÑ   r6   Ú	drawFuncsrŽ   s    €€€€r&   ÚrPz _PMRenderer.drawPath.<locals>.rPü   s   ø€ Ø�K‰KŒMÙ˜t Y¸:Ô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‰LˆØ”=Ñ Ø—‘˜RÐ Ø�|Š|Ø—L‘L Ñ$�Ø—l‘l�Ø �”Ø—‘˜aÔ Ø"�”ð ð —‘Ô!ØÝ9Ø—X‘X˜qŸx™x¨¯©°A·K±KÐ@ˆ	Ü˜D ¨RÓ0ˆ	÷	Gð 	Gð �?Š?ÙŒDØ�M‰MŒOØ�L‰L×Ñ Ô%Ø�{‰{ $Ð&ˆØ—‘ dÐ*ˆÜ˜4 
¨2Ó.ˆØ�eÒÙ™Ù˜dÕ#Ø—
‘
˜8Ô$Ù”Ø—‘•ÙÙ˜dÕ#Ø—
‘
˜8Õ$ÙÙ”Ø—‘•ð ð ˜ÒÙ˜$ÕÙØ—
‘
˜8Ô$ÙØ—‘•ð ñ ŒtØ—
‘
˜8Ô$Ø�L‰L�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=   [   sN   „ ñ:òòò
;ò4òòRò;òò(ó
òò
.ò8ó:/r8   r=   c                 óf   — t        «       }| j                  d|j                  |j                  ¬«      S )Nr±   ©ÚditherÚpalette)r,   r‹   ÚNONEÚADAPTIVE)r™   r*   s     r&   Ú_convert2pilprñ     s&   € Ü‹K€EØ�:‰:�c %§*¡*°e·n±nˆ:ÓEÐEr8   c                 ó$   — | j                  d«      S )NÚL©r‹   ©r™   s    r&   Ú_convert2pilLrö   !  ó   € Ø�:‰:�c‹?Ðr8   c                 ó$   — | j                  d«      S )NÚ1rô   rõ   s    r&   Ú_convert2pil1rú   $  r÷   r8   c           	      ó6  — t        | «      } | j                  \  }}t        j                  || t	        | d«      r| j
                  n| j                  «       | j                  j                  «       «      }t	        |d«      st        t        j                  j                  |«      d   dz   |j                  «       z   d«      5 }|j                  |«       d d d «       t        j                  dk(  rddlm}  ||d¬	«       y y |j                  |«       y # 1 sw Y   Œ@xY w)
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  '  sß   € Ü	�rÓ	€BØ—‘�J€Dˆ$Ü×Ñ˜D Ð'[´W¸RÀ	Ô5J r§z¢zÐPR×P[ÑP[Ó&^Ð_a×_dÑ_d×_oÑ_oÓ_qÓr€AÜ�2�gÔÜ”"—'‘'×"Ñ" 2Ó& qÑ)¨#Ñ-¨c¯i©i«kÑ9¸$Ó?ð 	À1Ø�G‰G�AŒJ÷	ä�7‰7�EŠ>Ý8Ù˜ Ö'ð ð 	�‰��÷	ð 	ús   Â>DÄDÚ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!y)'ÚPMCanvasNc                 óJ  — |dz  }t        ||z  dz   «      }t        ||z  dz   «      }| j                  |||||¬«      | 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                  | _        y)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ˆ�‰�eÑØ!ˆ�‰�eÑØ%*¨1¨Q¨u°Q°qÐ$9ˆ�‰�jÑ!Ø&(ˆ�‰�lÑ#Ø%.ˆ�‰�kÑ"Ø #ˆ�‰�fÑä37¸¿¹×8JÑ8JÓ3KÌTÔRUËYÒ3V¡KÐ\gˆ�‰�jÑ!Ø'1ˆ�‰�mÑ$Ø9=¿¹ÈÒ9S­:ÔYbˆ�‰Ð'Ñ(Ø—=‘=ˆ�r8   c                 óÊ  — t        |«      }|€t        j                  }|dk(  r	 |j                  | ||¬«      S d|j                  «       v r<|j                  «       }t        j                  ||«      }	 |j                  | |||¬«      S t        d|›�«      ‚# t        $ r" 	 |j                  | |||¬«      cY S #  Y nxY wY Œ8w xY w# t        $ r |j                  | ||¬«      cY S w xY w)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Ó,Ð,ð ˜Ÿ™›Ñ'Ø—)‘)“+ˆCÜ!×%Ñ% c¨#Ó.ˆCð-Ø—z‘z ! A b¨S�zÓ1Ð1ô ÐKÈGÈ;ÐWÓXÐXøô ò ðØŸ:™: a¨¨"°˜:Ó5Ò5øðÙú‘Dð	ûô "ò -Ø—z‘z ! A¨�zÓ,Ò,ð-ús;   ¤B Á1C Â	B?ÂB5Â2B?Â5B9Â7B?Â>B?ÃC"Ã!C"c                 óÌ  — |€| j                   }||c| j                  _        | j                  _        d d d d d d d dœ}| j                  }|j
                  |j                  }}|j                  «       D ]  }t        ||«      ||<   Œ ~| `t        j                  |||¬«      x}| j                  d<   |j                  «       D ]  }t        | |||   «       Œ |j                  ||«       y )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™H�rØ45°qÐ1ˆ�‰Ô˜TŸ]™]Ô1Ø t¸4È4Ð\`Ðnrð  AEñ  FˆØ�X‰XˆØ—‘˜RŸ[™[ˆ2ˆØ—‘“ò 	!ˆAÜ˜2˜a“=ˆAˆaŠDð	!à��Ü$.×$5Ñ$5°a¸¸RÐ$5Ó$@Ð@ˆˆT�]‰]˜5Ñ!Ø—‘“ò 	!ˆAÜ�D˜˜1˜Q™4Õ ð	!à
�
‰
�2�bÕr8   c                 ó  — t        «       j                  | j                  dk(  rt        | d«      dk(  rdnd| j                  j
                  | j                  j                  f¬«      }|j                  | 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ÄgÈdÐSYÓFZÐ\dÒFd™VÐjoÐw{×wÑw÷  xFñ  xFð  HL÷  HPñ  HP÷  HWñ  HWð  wXˆ_ó  YˆØ
�‰�T—X‘X—_‘_Ô%Øˆ	r8   c           
      óø  — | j                  «       }|€_t        |t        «      st        dt	        |«      z  «      ‚t
        j                  j                  |«      d   }|j                  d«      r|dd  }| j                  xs i }|j                  dd «       |j                  d«      }|r ||«      }|j                  «       }|dv rt        |«      }nš|dv rY|j                  d«      rt        |«      }n9|j                  d«      rt        |«      }n|j                  d	«      rt!        |«      }d
}n=|dv rt#        ||||j%                  dd «      ¬«      S |dv rn|dv rd}nt'        d|z  «      ‚|d
k(  rá|j%                  dd «      }|r ddlm}m} ddgz  }	t/        d|j1                  «       «      D ]  \  }
}d|	|
|z   <   Œ |j3                  d|j5                  «       |j7                  |j9                  |	«      j;                  d«      j9                  ddgz  dgz   «      «      fz   «      }d| j<                  fdfD ]  \  }}|j%                  ||«      ||<   Œ |j                  dd«       |j                  d«      rddlm} |j7                  |«      }|j                  dd «       |j                  d«      }|r ||«      } |j>                  ||fi |¤Ž tA        |d«      s%t
        jB                  dk(  rddl"m#}  |||¬ «       y y y )!Nz*Invalid value '%s' for fn when fmt is Noner   rý   ÚpreConvertCB©ÚGIF)ÚTIFFÚTIFFPÚTIFFLÚTIFÚTIFF1r±   ró   rù   rI  )ÚPCTr  r  )r  )ÚPNGÚBMPÚPPM)ÚJPGÚJPEGrS  zUnknown image kind %sr   )Ú
ImageChopsr*   i   )r   é   i   r.   r  Ú
resolution)zresolution unitÚinchÚchops_invert)rT  Ú	preSaveCBrü   rÿ   r   r  )$rD  rg   r�   rÇ   Úasciir�   rŽ   r  Ú
startswithr  Ú
setdefaultrL   r/  rñ   Úendswithrö   rú   r  r1  r   r+   rT  r*   ÚzipÚ
bitmap_rgbÚmergeÚsplitÚinvertÚpointr‹   r  Úsaver“   r	  r
  r  )rO   r  r  r™   r  rF  ÚtcrT  r*   ÚTÚor6   ÚaÚdrY  r  s                   r&   Ú
saveToFilezPMCanvas.saveToFiler  s×  € Ø�Z‰Z‹\ˆØˆ;Ü˜b¤Ô%Ü Ð!MÔPUÐVXÓPYÑ!YÓZÐZÜ—'‘'×"Ñ" 2Ó& qÑ)ˆCØ�~‰~˜cÔ"¨#¨a¨b¨' CØ—N‘NÒ( bˆ	Ø×Ñ˜^¨DÔ1Ø—]‘] >Ó2ˆÙÙ˜bÓ!ˆBØ�i‰i‹kˆØ�(‰?Ü˜rÓ"‰BØÐ:Ñ:Ø�|‰|˜CÔ Ü" 2Ó&‘Ø—‘˜cÔ"Ü" 2Ó&‘Ø—‘˜cÔ"Ü" 2Ó&�Ø‰CØ�NÑ"Ü˜r " S°Y·]±]À=ÐQUÓ5VÔWÐWØÐ(Ñ(ØØ�NÑ"Ø‰CäÐ 7¸#Ñ =Ó>Ð>Ø�Š;Ø—‘˜}¨TÓ2ˆBÙß1Ø˜˜‘G�Ü ¨R¯]©]«_Ó=ò !‘D�A�qØ �A�a˜‘c’Fð!ð —[‘[ ¨¯©«°Z×5FÑ5FÀrÇxÁxÐPQÃ{×GZÑGZÐ[^ÓG_×GeÑGeÐfiÐklÐjmÑfmÐorÐnsÑfsÓGtÓ5uÐ4wÑ)wÓx�à$ T§Y¡YÐ/Ð0JÐJò 2‘��!Ø(Ÿ}™}¨Q¨qÓ1�	˜!’ð2à×Ñ˜^¨AÔ.Ø�=‰=˜Ô(Ý&Ø×"Ñ" 2Ó&ˆBØ×Ñ˜[¨Ô.Ø—-‘- Ó,ˆ	ÙÙ˜2“ˆBØˆ�‰��3Ñ#˜Ò#Ü�r˜'Ô"¤r§w¡w°¢~Ý8Ù˜ Ö$ð (6Ð"r8   c                 ó\   — t        «       }| j                  ||¬«       |j                  «       S )Nr  )r   rj  Úgetvalue)rO   r  rm   s      r&   ÚsaveToStringzPMCanvas.saveToStringª  s%   € Ü‹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                  }}|j                  |j                  ddt        |«      dz   ddd	||d
d«
      «       |dz  }t        t        |«      d| «      D ]  }|j                  |||z
  | «       Œ |j                  d«       y)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–   r@  rC  r~   r   rü   Úpackrj   rª   )	rO   r  rs  r:  Úpixr~   r   Úrowbrg  s	            r&   Ú
_saveToBMPzPMCanvas._saveToBMP¯  sÓ   € ó
 	Ø�X‰XˆØ�=‰=˜+Ò%¨"¯'©'°8Ò*;ØˆBŒGØ—)‘)ˆCØˆB�Gà—)‘)ˆCØŸ™ "§)¡)ˆvˆØ	�‰�—‘Ð,¨T´#°c³(¸2±+¸aÀÀ2ÀeÈFÐSTÐUWÓXÔYØ�q‰yˆÜ”s˜3“x  4 %Ó(ò 	#ˆAØ�G‰G�C˜˜$™˜q�MÕ"ð	#à	�‰�Õr8   c                 ó2   — t        | j                  ||«       y rJ   )Ú_setFontr  )rO   r`   ra   Úleadings       r&   r   zPMCanvas.setFontÃ  s   € Ü�—‘˜( 8Õ,r8   c                 ó2   — t        | j                  ||«       y rJ   )r8  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‘x Ó%Ð%r8   c                 óN   — |r| j                  «        |r| j                  «        y y rJ   )r­   r®   )rO   rå   rË   s      r&   r¤   zPMCanvas.fillstrokepathÌ  s   € Ù�—‘”Ù�4—?‘?Õ$ˆ6r8   c                 ó  — 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Ð  sK  € ô �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ÑAÓ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}n`t        t        t        |«      dz  «      «      }	t        |«      |	z  }
g }t	        |	«      D ]"  }|||
z  z   }||
z   }|j                  ||f«       Œ$ g }|D ]b  \  }}|s.| j                  ||||||«      \  \  }}}|j                  |«       Œ6| j                  ||||||«      \  \  }}}|j                  |«       Œd 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Úiirh  ÚbÚctrlptsrˆ  r‰  ÚptsÚtmpxÚtmpys                       r&   ÚbezierArcCCWzPMCanvas.bezierArcCCWó  s  € ð  ™ˆäˆ}Ó Ò%Ø  ˜Ð)‰Iäœœs =Ó1°#Ñ5Ó6Ó8ˆEÜ˜mÓ,¨eÑ3ˆIØˆIÜ˜E“lò (�Ø˜R )™^Ñ+�Ø˜	‘M�Ø× Ñ  ! A Õ'ð(ð
 ˆØò 	$‰EˆQˆqÙØ!%×!:Ñ!:¸2¸bÀ"ÀRÈÈ1Ó!M‘‘�"�R˜#Ø—‘˜sÕ#à%)×%>Ñ%>¸rÀ"ÀbÈÈQÈqÓ%QÑ"‘�$�t˜cØ—‘˜sÕ#ð	$ð �B�˜Ð!Ð!r8   c           	      ó´   — | j                  ||||||«      \  \  }}}	| j                  ||«       |	D ]%  \  \  }
}\  }}\  }}| j                  |
|||||«       Œ' y)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  sm   € ð
 "×.Ñ.¨r°"°b¸¸DÀÓFÑ‰ˆ"ˆR�'à�‰�B�rÔØ*1ò 	,Ñ&‰Wˆb�‘g�r˜"™g˜r "Ø�L‰L˜˜B˜r " R¨Õ+ñ	,r8   c                 ó2   — | j                  ||||||¬«       y )N)rÍ   Ú	directionÚshaping©rÈ   )rO   rC   rD   rÄ   rÍ   r¦  r§  s          r&   ÚdrawCentredStringzPMCanvas.drawCentredString  s   € Ø�‰˜˜!˜D¨kÀIÐW^ˆÕ_r8   c                 ó0   — | j                  |||d|¬«       y )Nr¿   )rÍ   r¦  r¨  )rO   rÄ   rC   rD   r¦  s        r&   ÚdrawRightStringzPMCanvas.drawRightString  s   € Ø�‰˜˜Q˜q¨U¸YˆÕGr8   c                 óv  — | j                   }|j                  }	|j                  }
|r||	|
fk7  r|\  }}t        |||«       n|
}|	}t	        |||||¬«      \  }}	 |dv r=t        |||«      }|dk(  r||z  }n%|dk(  r	||dz  z  }n|dk(  r|t        |||||«      z  }| j                  dk(  r|j                  |||«       nñt        |«      }|j                  r|j                  |||«       nÆ|}t        |«      s	 |j                  d«      }t        ||g|j                   z   «      }t#        |«      }|dz
  }t%        |«      D ]o  }||   \  }}||k7  rt        ||j                  |«       |}|j                  |||«       ||k7  sŒB||j                  |j                  |j&                  «      |«      z  }Œq |j)                  |
|	«       y # t        $ rW}|j                  d	d
 \  }}t        |j                  d d
 |j                  d
   ›d||dz
  | ›d||| ›d|||dz    ›�fz   Ž ‚d }~ww xY w# |j)                  |
|	«       w xY w)N)r`   ra   r§  )r¿   rÀ   r¿   r¿   rÀ   g       @rÁ   r!   Úutf8r]   rr   ú
é
   z-->z<--r   )r  ra   r`   ry  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‰XˆØ—k‘kˆØ—k‘kˆÙ˜ [°Ð$=Ò=Ø!*ÑˆH�hÜ�R˜ Õ*à"ˆHØ"ˆHä& t¨I¸xÐQYÐbiÔj‰ˆˆgð%	0ØÐ5Ñ5Ü% d¨H°XÓ>�Ø Ò%Ø˜‘L‘AØ  (Ò*Ø˜ ™‘O‘AØ  )Ò+Øœ {°4¸ÀÈÓRÑR�Aà�}‰}˜kÒ)Ø—‘˜a  $Õ'ä˜xÓ(�Ø×$Ò$Ø—M‘M ! A dÕ+à�BÜ$ Tœ?ðLØ#'§;¡;¨vÓ#6˜Dô
 $ D¨$¨°×0FÑ0FÑ)FÓG�BÜ˜B›�AØ˜A™#�CÜ" 1›Xò M˜Ø! !™u™˜˜1Ø˜bš5Ü$ R¨¯
©
°8Ô<Ø!"˜BØŸ™ a¨¨!Ô,Ø˜c›6Ø §¡¨q¯x©x¸¿	¹	Ó/BÀ8Ó!LÑL™AðMð �J‰J�{ ;Õ/øô!  2ò LØ"#§&¡&¨¨1 +™C˜A˜aÜ"4°q·v±v¸b¸q°zÐYZ×Y_ÑY_Ð`aÓYbÐcgÐhiÐjlÑhlÐmnÒcoÐptÐuvÐwxÒpyÐz~ð  @Að  BCð  DFñ  BFñ  {Gð  DHð  CJñ  8Jð  #Lð  LûðLûð  �J‰J�{ ;Õ/ús9   ÁBH$ Ã6G ÄA6H$ Å>0H$ Ç	H!Ç
AHÈH!È!H$ È$H8c                 ó¦   — | j                   �E| j                  «        | j                  ||«       | j                  ||«       | j	                  «        y y rJ   )rX   r¨   r©   r«   r®   )rO   r„   r…   r†   r‡   s        r&   rƒ   zPMCanvas.lineV  sC   € Ø×ÑÐ'Ø�N‰NÔØ�K‰K˜˜2ÔØ�K‰K˜˜2ÔØ�O‰OÕð	 (r8   c                 ó  — | j                  «        | j                  ||«       | j                  ||z   |«       | j                  ||z   ||z   «       | j                  |||z   «       | j                  «        | j	                  ||¬«       y )N)rå   rË   )r¨   r©   r«   r¬   r¤   )rO   rC   rD   r~   r   rå   rË   s          r&   r}   zPMCanvas.rect]  sq   € Ø�‰ÔØ�‰�A�qÔØ�‰�A�e‘G˜QÔØ�‰�A�e‘G˜Q ™ZÔ(Ø�‰�A�q˜6‘zÔ"Ø�‰ÔØ×Ñ 6¨tÐÕ4r8   c                 óž  — |dk(  r|}|dk(  r|}||z   }||z   }| j                  «        | j                  ||z   |«       | j                  ||z
  ||z   ||dd«       | j                  ||z
  ||z
  ||dd«       | j                  ||z   ||z
  ||dd«       | j                  ||z   ||z   ||dd«       | j                  «        | j	                  «        y)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�r�"ØˆqŠ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                 ó,   — | j                  ||||«       y)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  — | j                  «        ||z   }|}|}||z
  }||z   }	||t        z  z
  }
||t        z  z   }|}| j                  ||«       | j                  |	|
||||«       |}|}||z
  }|}||t        z  z
  }	||z
  }
|}||t        z  z
  }| j                  |	|
||||«       |}|}|}||z   }||z
  }	||t        z  z   }
||t        z  z
  }||z   }| j                  |	|
||||«       |}|}||z   }|}||t        z  z   }	||z   }
||z   }||t        z  z   }| j                  |	|
||||«       | j	                  «        y)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                  ó   — y)zdo nothing for compatibilityNrê   rN   s    r&   Ú	saveStatezPMCanvas.saveState·  s   € àr8   c                 ó^   — | j                  |«      | _        t        |dd «      }|�|| _        y y ©Nrn   )r  r_   rÃ   r^   ©rO   ÚaColorrn   s      r&   rl   zPMCanvas.setFillColor»  s5   € Ø×-Ñ-¨fÓ5ˆŒÜ˜˜w tÓ,ˆØÐØ$ˆDÕð r8   c                 ó^   — | j                  |«      | _        t        |dd «      }|�|| _        y y rÊ  )r  rX   rÃ   rW   rË  s      r&   rd   zPMCanvas.setStrokeColorÁ  s6   € Ø×/Ñ/°Ó7ˆÔÜ˜˜w tÓ,ˆØÐØ!&ˆDÕð r8   c                 ó   — || _         y rJ   )re   )rO   Úcaps     r&   Ú
setLineCapzPMCanvas.setLineCapÊ  s	   € Øˆ�r8   c                 ó   — || _         y rJ   )rf   )rO   Újoins     r&   ÚsetLineJoinzPMCanvas.setLineJoinÍ  s	   € Øˆ�r8   c                 ó   — || _         y rJ   )rV   )rO   r~   s     r&   ÚsetLineWidthzPMCanvas.setLineWidthÐ  s
   € Ø ˆÕr8   c                 ó„   — t        ||xs | j                  j                  |�|«      S | j                  j                  «      S rJ   )r   r  r`   ra   )rO   rÄ   r`   ra   s       r&   r   zPMCanvas.stringWidthÓ  sE   € Ü˜4 Ò!>¨T¯X©X×->Ñ->Ø-5Ð-A ó[ð 	[ØGKÇxÁx×GXÑGXó[ð 	[r8   )éH   éÿÿÿ NNrŠ   )Nr  rJ   rG  )r   r   )rÀ   NF)NÚleftNF)NN)"ræ   rç   rè   r)  Ústaticmethodr   r>  rD  rj  rm  rw  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  s¸   „ ØDHØ$ó!ð$ òYó ðYó*òó
6%ópò
ó(-ò%ò&ó%ò!7òF"ò<	,ó`óHó20òhó5òò$ ò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@   )	ri  r%  r&  r  r<   r#   r'  rE   r6   s	            r&   ÚdrawToPMCanvasrÝ  Ö  sI   € Ü˜AÓ€AÜ�—‘˜!Ÿ(™(¨°¸iÐQXÐdnÔo€AÜˆˆAˆq�!Ñ6 ,Ð6°Ò6Ø€Hr8   c           
      óD   — t        | f||||||dœ|¤Žj                  «       S )N©r%  r&  r  r<   r#   r'  )rÝ  rD  )ri  r%  r&  r  r<   r#   r'  rE   s           r&   Ú	drawToPILrà  Ü  sJ   € Ü˜!ð  L ¨°yÈ|Ðelð  yCñ  Lð  GKñ  L÷  Rñ  Ró  Tð  Tr8   c           
      óŒ   — t        «       }t        | f||||||dœ|¤Ž}	|	j                  d|j                  |j                  ¬«      S )Nrß  r±   rì   )r,   rà  r‹   rï   rð   )
ri  r%  r&  r  r<   r#   r'  rE   r*   r™   s
             r&   Ú
drawToPILPrâ  ß  sT   € Ü‹K€EÜ	�1ð  
D˜# "°	ÈÐ]dÐpzñ  
Dð  Cñ  
D€BØ�:‰:�c %§*¡*°e·n±nˆ:ÓEÐEr8   rH  c	           
      óN   — t        | f||||||dœ|	¤Ž}
|
j                  ||«       y)zocreate a pixmap and draw drawing, d to it then save as a file
    configPIL dict is passed to image save methodrß  N)rÝ  rj  )ri  r  r  r%  r&  r  r<   r#   r'  rE   r6   s              r&   Ú
drawToFilerä  ä  s@   € ô 	�qð  	H˜c b°IÈLÐahÐt~ñ  	Hð  CGñ  	H€AØ‡L�L��CÕr8   c           
      ó^   — t        «       }	t        | |	f||||||dœ|¤Ž |	j                  «       S )N)r  r%  r&  r  r#   r'  )r   rä  rl  )
ri  r  r%  r&  r  r<   r#   r'  rE   rm   s
             r&   ÚdrawToStringræ  ê  s5   € Ü‹	€AÜˆq�Ðn�s ¨°iÈÐ[eÑnÐimÒnØ�:‰:‹<Ðr8   c           	      ó*  ‡‡‡‡‡— d„ }dd l }ddlm} ddlmŠ |j
                  }g }|j                  j                  | «      s |j                  | «       d}d}|g}	i }
t        j                  dd  }|D �cg c]  }|j                  d«      sŒ|‘Œ }}|sg d	¢}nI|D ]  }|j                  |«       Œ d
j                  |D �cg c]  }|dd  ‘Œ	 c}«      j                  d
«      }g Šdd lŠddlmŠ ˆˆˆˆˆfd„} |t%        t&        d«      ¬«      D �]û  \  }}}|
j)                  |d«      dz   x}|
|<   |dkD  r|d|dz
  z  z  }|r||vrŒ9|}t+        |j,                  «      }t+        |j.                  «      }|	j1                  d|›d|›d�«       |D �].  }|dv r"|	j1                  d|j3                  «       z  «       	 |›d ||«      ›�}|j                  j                  | |«      }|j                  j5                  |«      r |j                  |«       |dk(  rt7        |||dt8        i¬«       n)|dv r|j;                  ddg| |¬«       nt7        |||¬«       |dv r|	j1                  d |z  «       n3|dk(  r|	j1                  d!|z  «       n|dk(  r|	j1                  d"|z  «       ‰s‰d#kD  rt=        d$t?        |«      z  «       �Œ1 |jB                  jE                  d%d&«      d'k(  rd|jF                  d(<   d)D ]  }	 |j;                  |g| |¬«       Œ �Œþ ‰r:|	d   jI                  d*d+«      |	d<   |	j1                  d,«       |	jK                  ‰«       |	j1                  |«       |j                  j                  | d-«      }tM        |d.«      5 }|jO                  |	«       d d d «       t        jP                  d/k(  rdd0l)m*}  ||d1¬2«       ‰s‰d#kD  rt=        d$|z  «       y y c c}w c c}w # t@        $ r  |||«       Y �Œhw xY w#   |||«       Y �ŒxY w# 1 sw Y   ŒwxY w)3Nc                 ó   — | dk(  rd} | S )NÚtiffÚtifrê   )rC   s    r&   r  ztest.<locals>.extò  s   € ØˆfŠ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   z--ext=)Úgifré  ÚpngÚjpgÚpctÚpyrÙ   ú,é   )Úescapec                 óì   •— d| ›d|›d�}‰s‰dkD  rt        |«       ‰j                  d|z  «       t        «       }‰j                  |¬«       ‰j                  d ‰|j	                  «       «      z  «       y )NzProblem drawing z fmt=z filer]   z"<br/><h2 style="color:red">%s</h2>)Úfilez<pre>%s</pre>)Úprintrã   r   Ú	print_excrl  )	r	  r  ÚmsgÚbufÚerrsrô  ÚshoutÚ	tracebackrì  s	       €€€€€r&   ÚhandleErrorztest.<locals>.handleError  sb   ø� Ú04²SÐ9ˆÙ�G˜A’Iœu SœzØ�‰Ð8¸3Ñ>Ô?Ü‹jˆØ×Ñ ÐÔ%Ø�‰�O¡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Úargvr[  ÚremoverÒ  ra  rý  Úxml.sax.saxutilsrô  r“   r  r\  r1   r~   r   rã   r/  r‘   rä  r   rd  r÷  rZ  r2  Úenvironr1  r>   ÚreplaceÚextendr’   Ú
writelinesÚplatformr
  r  ) r  rü  r  r�   rë  r  ÚdrawingsÚhtmlTopÚ
htmlBottomÚhtmlÚnamesr  rh  ÚErþ  rA   Ú	docstringr	  r²   r  r#  r$  r=  ÚfilenameÚfullpathÚhtmlFileNamer  r  rû  rô  rý  rì  s     `                          @@@@r&   Útestr!  ñ  sæ  ü€ òó
 Ý-Ý+Ø#×6Ñ6ÐØ€HØ�7‰7�=‰=˜Ô Øˆ�‰�Ôð€Gð€Jð ˆ9€DØ€EÜ�8‰8�A�Bˆ<€DØÖ3ˆq˜AŸL™L¨Õ2ŠÐ3€AÐ3ÙÚ<‰àò 	ˆAØ�K‰K˜�Nð	à�X‰X aÖ( �q˜˜’uÒ(Ó)×0Ñ0°Ó5ˆà€DÛÝ'÷>ð >ñ '9¼wÄzÐR_Ó?`Ô&aó %$Ñ"ˆ�)˜TØ×*Ñ*¨4°Ó2°1Ñ4Ð4ˆˆE�$‰KØˆQŠ3�˜ 1 Q¡3™Ñ'�Ù�D Ñ$ hØˆÜ�—‘ÓˆÜ�—‘ÓˆØ�ŠÂÂiÐPÔQàó 	$ˆAØÐ-Ñ-Ø—‘Ð0°1·7±7³9Ñ<Ô=ð$Ú&,©c°!¬fÐ5�ØŸ7™7Ÿ<™<¨°Ó9�Ø—7‘7—>‘> (Ô+Ø�B—I‘I˜hÔ'Ø�e’8Ü˜w x°AÀÌuÐ@UÖVØ˜,Ñ&Ø—L‘L¨$¨u¨¸VÈ6�LÕRä˜w x°AÕ6ØÐ+Ñ+Ø—K‘KÐ AÀHÑ LÕMØ˜’WØ—K‘KÐ FÈÑ QÕRØ˜’XØ—K‘KÐ <¸xÑ GÔHÙ˜G AšI¤u¨Z¼¸h»Ñ-GÔ'Hùð)	$ð. �:‰:�>‰>Ð+¨CÓ0°#Ò5ÐUV°w×7GÑ7GÈ	Ñ7RØò 	$ˆAð$Ø—‘ a S°¸f�ÕEò	$ðC%$ñN Ø�q‘'—/‘/ 'Ð*cÓdˆˆQ‰Ø�‰Ð(Ô)Ø�‰�DÔØ‡K�K�
ÔØ—7‘7—<‘< ¨Ó8€LÜ	ˆl˜CÓ	 ð  AØ	�‰�TÔ÷ä
‡|�|�UÒÝ4Ù�\ fÕ-Ù�˜’	œ5 ¨lÑ!:Õ;�	ùòM 	4ùò )øôX "ò $Ù˜D ×#ð$ûð$Ù˜D ×#ú÷ð ús=   Á4OÂOÂ?OÆ7DOË2O8ÎP	ÏO5Ï4O5Ï8PÐ	PÚ__main__T)rü  rJ   )ÚpmoutF)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   ry  r   r�   r  Úior   r   Úmathr   r   r   r   r'   r   r  r,   r7   r:   Ú_unset_r@   rG   r=   rñ   rö   rú   r  Údictr0  rÆ  r  rÝ  rà  râ  rä  ræ  rd  r!  ræ   rê   r8   r&   ú<module>r1     sÜ  ðð €ð	1€ô (ß Lß IÑ Iß >Ý 6ß 4Ý #ß /Ý ß 5ç ß  ß #Ó #óð:Ù˜y×8Ñ8Ó9€Jòòò
.ð .7×->Ñ->ó Rõ 3ô@�(ô @òDFòòóñ ˜H¨(°wÔ?€ØÐ ÷_[ñ _[ð@  °TÈ	×HYÑHYÐbk×b{Ñb{ð  HMó ð ˜H°À9×CTÑCTÐ]f×]vÑ]vð  CHó Tð ˜X°ÀI×DUÑDUÐ^g×^wÑ^wð  DIó Fð
  2¨(¸dÐQZ×QbÑQbÐkt÷  lEñ  lEð  QVó ð  "¨¸TÐPY×PaÑPaÐjs÷  kDñ  kDð  PUó ð
 €ó]<ð~ ˆZÒÙˆtÖð øðg ò ØƒJðús   Á/E< Å<FÆF