
    g|                        S r SrSSK7  SSKJrJr  SSKJrJrJ	r	  SSK
JrJr  SSKJrJr  SSKJr  SS	KJrJr  SS
KJr  SSKJrJr  SSKrSSKrSSKJrJr  SSK J!r!J"r"J#r#J$r$  S/S jr% \%" \RL                  5      r'S r(S r)S r*\RV                  4S jr,SSKJ-r-   " S S\-5      r.S r/S r0S r1S/S jr2\3" SSSS9r4Sr5 " S  S!5      r6S"S#S\RV                  \RL                  S$4S% jr7S"S#S\RV                  \RL                  S$4S& jr8S"S#S\RV                  \RL                  S$4S' jr9S(S"S#S\RV                  \RL                  S$4S) jr:S(S"S#S\RV                  \RL                  S$4S* jr;\:r<S0S+ jr=\>S,:X  a  \=" S-S.9  gg! \ a    Sr' GN	f = f)1z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)	isUnicode	asUnicode)ABag)toColorwhite)	rl_config   )setFontRenderPMErrorN)BytesIOStringIO)sincospiceilc                 |   U (       d  [         R                  n U S:X  a   SS KnU$ SU R                  5       ;   a   SS KnU$ [        SU  35      e! [         a)  n SS Kn S nAU$ ! [         a    [        S5      ef = fS nAff = f! [         a-  n SS Kn S nAU$ ! [         a    [        SU  S35      ef = fS nAff = f)N	_renderPMr   zCannot 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      c/Users/Alptekin/Desktop/izin_takip/venv/lib/python3.13/site-packages/reportlab/graphics/renderPM.py_getPMBackendr&      s    i77G	@$. H 
GMMO	#	@! H 8	BCC+  		@@%( H'  @# %? @ @@		@  	@@( H  @#(OPWy Y< %? @ @@	@sF   A B 
BA##A99A<<B
B;BB33B66B;c                  >     SSK Jn   U $ ! [         a    SS Kn  U $ f = f)Nr   Image)PILr)   r   r(   s    r%   	_getImager+   ?   s*     L  Ls   
 c                     U (       aY  S[        SU R                  -  5      -  S-  S[        SU R                  -  5      -  S-  -  S[        SU R                  -  5      -  -  $ U $ )N         )intredgreenbluecs    r%   	Color2Hexr6   F   s_    4CI&2-4CK8H3HQ2NOSWX[\_`a`f`f\fXgSgh
hH    c                 "    U b  [        U 5      $ U $ )zy
c should be None or something convertible to Color
rlPyCairo.GState can handle Color directly in either RGB24 or ARGB32
)r   r4   s    r%   
CairoColorr9   K   s    
 71:-A-r7   c                     [        5       nUR                  R                  U5        UR                  [	        U 5      XX4S9  g)z
As it says)showBoundaryN)_PMRenderer__dict__updatedrawr   )drawingcanvasxyr;   kwdsRs          r%   r?   r?   S   s3    AJJdFFw'AFQr7   )Rendererc                   p    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rSS jrS rS rS rS rSrg)r<   Z   zThis 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    U R                   R                  5         U R                  5         g N)_trackerpop
applyStateselfs    r%   rL   _PMRenderer.pop_   s    r7   c                 p    [        U5      nU R                  R                  U5        U R                  5         g rJ   )r   rK   pushrM   )rO   nodedeltass      r%   rR   _PMRenderer.pushc   s(    t$6"r7   c                    U R                   R                  5       nUS   U R                  l        US   U R                  l        US   nUb  X R                  l        U R                  R                  US   5        US   U R                  l        US   U R                  l        US   U R                  l	        US   nU(       d  S nOO[        U[        [        45      (       d  U4n[        U5      S	:w  d  [        US
   [        [        45      (       d  SU4nX0R                  l        US   nUb  X R                  l        U R                  R!                  US   5        U R                  R#                  US   US   5        g )NctmstrokeWidthstrokeOpacitystrokeColorstrokeLineCapstrokeLineJoinfillModestrokeDashArray   r   r   fillOpacity	fillColorfontNamefontSize)rK   getState_canvasrW   rX   rY   setStrokeColorlineCaplineJoinr]   
isinstancelisttuplelen	dashArrayr`   setFillColorr   )rO   salphadas       r%   rM   _PMRenderer.applyStateh   sB   MM""$U8#$]#3 /").LL&##Am$45 1 !"2 3 !* !Bb$u..S2wzBqE4,!?!?U!#- ',LL$!!!K.1Qz]AjM:r7   c                     U R                   R                  S   nU R                  R                  SS X4-   =US'   US'   U R                   R	                  U5        U R                  5         g )Nr      	transformrW   )rK   	_combinedre   _baseCTMrR   rM   )rO   rB   rC   rT   s       r%   	initState_PMRenderer.initState   s]    ((,.2ll.C.CAa.H!.NN{fUm6"r7   c                 h    U R                  U5        U R                  U5        U R                  5         g)z=This is the recursive method called for each node
in the treeN)rR   drawNodeDispatcherrL   )rO   rS   s     r%   drawNode_PMRenderer.drawNode   s*    
 			$ 	% 	
r7   c                    U R                   nUR                  UR                  s=:X  a  S:X  a@  O  O=UR                  UR                  UR
                  UR                  UR                  5        g UR                  UR                  UR
                  UR                  UR                  UR                  UR                  5        g )Nr   )	re   rxryrectrB   rC   widthheight	roundRect)rO   r   r5   s      r%   drawRect_PMRenderer.drawRect   sp    LL77dgg""FF466$&&$**dkk:KKtvvtzz4;;Qr7   c                     U R                   R                  UR                  UR                  UR                  UR
                  5        g rJ   )re   linex1y1x2y2)rO   r   s     r%   drawLine_PMRenderer.drawLine   s*    $''$''$''$'':r7   c           
         UR                   n[        U[        5      (       aU  U(       a$  [        R                   R	                  U5      (       d  g [        5       R                  U5      R                  S5      nO$[        US5      (       a  UR                  S5      nOg UR                  u  pEUR                  UR                  pvUc  UnUc  UnU R                  R                  UR                  UR                  XgU R                  R                   S:X  a  UO-[        US5      (       a  UR"                  OUR$                  " 5       XES5        g )NRGBconvertr    tobytes   )pathri   strosisfiler+   openr   hasattrsizer   r   re   	_aapixbufrB   rC   _backendr   tostring)rO   imager   imsrcWsrcHdstWdstHs           r%   	drawImage_PMRenderer.drawImage   s    zzd3RWW^^D11F!!$'//6BT)$$e$BWW
[[%,,d<<$||,,k9(/9(=(="**2;;NQA		r7   c                     U R                   nUR                  UR                  UR                  UR                  5        UR                  5         g rJ   )re   circlecxcyrfillstrokepath)rO   r   r5   s      r%   
drawCircle_PMRenderer.drawCircle   s3    LL	699fhh/	r7   c                    UR                   n[        U5      S:  d   S5       eU R                  nUR                  5         UR	                  US   US   5        [        S[        U5      S5       H  nUR                  X5   X5S-      5        M     U(       a   UR                  5         UR                  5         UR                  5         g )Nr_   z#Polyline must have 1 or more pointsr   r   )
pointsrl   re   	pathBeginmoveTorangelineTo	pathClosepathFill
pathStroke)rO   polyline_doClosePr5   is         r%   drawPolyLine_PMRenderer.drawPolyLine   s    OO1v{AAA{LL		1qtq#a&!$AHHQT1qS6" %KKMJJL	r7   c                     U R                   nUR                  UR                  UR                  UR                  UR
                  5        UR                  5         g rJ   )re   ellipser   r   r   r   r   )rO   r   r5   s      r%   drawEllipse_PMRenderer.drawEllipse   s9    
,,			'**gjj'**WZZ@	r7   c                 $    U R                  USS9  g )Nr   )r   )r   )rO   polygons     r%   drawPolygon_PMRenderer.drawPolygon   s    '1-r7   c           	      0   U R                   nUR                  n[        USS5      nUc  U(       a  U R                  R	                  5       nUS   nUS   nUS   nUR
                  n	UR                  n
UR                  nUS;  a]  [        XU5      nUS:X  a  X-  n
OFUS:X  a  XS	-  -  n
O8US
:X  a  U
[        XiXXR                  5      -  n
O[        S[        U5      -   5      eUR                  nXBl         UR                  XXU4S9  Xl        g g ! Xl        f = f)NtextRenderModer   
textAnchorrb   rc   )start	inheritedendmiddler_   numericzbad value for textAnchor )	_fontInfo)re   ra   getattrrK   rd   textrB   rC   r   numericXShiftencoding
ValueErrorr   r   
drawString)rO   	stringObjcanvfillr   Stext_anchorrb   rc   r   rB   rC   textLenoldTextRenderModes                 r%   r   _PMRenderer.drawString   s"   ||~~ +;A>~&&(AL/K}H}H>>DAA"77%dX>%LA (*NA )+{RdRdeeA$%@[AQ%QRR $ 3 3"08DX3FG&7#/  .. '8#s   3D Dc                 P  ^^	^
^ U R                   m
T[        L ai  T
R                  S	 T
R                  (       a:  T
R                  S   nUR                  nSUl        U R	                  U5        X2l        g T
R                  5         g SSKJm	  T
R                  T
R                  T
R                  T
R                  4m[        TSS5      nSU	U
UU4S jjnTR                  (       a2  U" 5         T
R                  5         T
R                  R                  T5        T
R                  S LnT
R                   S Ln[        TSS5      nUS	:X  a|  U(       a6  U(       a/  U" S
S9  T
R#                  U5        U" 5         T
R%                  5         g U(       a  U" S
S9  T
R#                  U5        g U(       a  U" 5         T
R%                  5         g g US:X  a7  U" S
S9  U(       a  T
R#                  U5        U(       a  T
R%                  5         g g U" 5       (       a  T
R#                  U5        T
R%                  5         g )Nrt   r   r   )_renderPath	autoclose c                 4   > TR                  5         T" TTU S9$ )N
forceClose)r   )r   r   r5   	drawFuncsr   s    r%   rP _PMRenderer.drawPath.<locals>.rP   s    KKMtY:FFr7   r]   svgTr   pdf)F)re   EmptyClipPath
_clipPaths
isClipPathdrawPathclipPathClearreportlab.graphics.shapesr   r   r   curveTor   r   clipPathSetappendra   rZ   r   r   )rO   r   r   icpr   r   r   stroker]   r   r5   r   s    `       @@@r%   r   _PMRenderer.drawPath   s   LL= R ||LL$ll a "  !9XXqxxAKK@	DR0		G 	G ??DMMOLL%{{$&d*4
2.ed#

8$d#

8$  $

8$  tt

8$LLNr7    N)r   )__name__
__module____qualname____firstlineno____doc__rL   rR   rM   ry   r}   r   r   r   r   r   r   r   r   r   __static_attributes__r   r7   r%   r<   r<   Z   sN    :
;4R;(

.8:/r7   r<   c                 `    [        5       nU R                  SUR                  UR                  S9$ )Nr   ditherpalette)r+   r   NONEADAPTIVE)r   r)   s     r%   _convert2pilpr    s&    KE::c%**enn:EEr7   c                 $    U R                  S5      $ )NLr   r   s    r%   _convert2pilLr         ::c?r7   c                 $    U R                  S5      $ )N1r  r  s    r%   _convert2pil1r  #  r  r7   c                 L   [        U 5      n U R                  u  pE[        R                  XE[	        U S5      (       a  U R
                  OU R                  " 5       U R                  R                  5       5      n[	        US5      (       d}  [        [        R                  R                  U5      S   S-   UR                  5       -   S5       nUR                  U5        S S S 5        [        R                  S:X  a  SSKJn  U" USS	9  g g UR                  U5        g ! , (       d  f       NC= f)
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rowsro   fr  s	            r%   _saveAsPICTr"  &  s    	r	BJDDWR	5J5JrzzPRP[P['[&^_a_d_d_o_o_qrA2g"''""2&q)#-ciik9$?1GGAJ @77E>8'  	 @?s   D
D#ARGB32RGB24)ARGBRGBAr   gOQ?c                      \ rS rSr  S"S jr\S#S j5       rS$S jrS rS$S jr	S%S jr
S	 rS$S
 jrS rS rS&S jrS rS rS rS'S jrS rS(S jrS rS&S jrS rS rS rS rS rS r\rS rS r S r!S)S jr"S  r#S!r$g)*PMCanvasi5  Nc                 8   US-  n[        X-  S-   5      n[        X(-  S-   5      nU R                  XXFUS9U R                  S'   X@R                  S'   USSUSS4U R                  S'   / U R                  S'   XPR                  S	'   X0R                  S
'   [        U R                  R
                  5      [        [        5      :X  a  SOSU R                  S'   XpR                  S'   U R                  S:X  a  [        O[        U R                  S'   U R                  U l        g)z-configPIL dict is passed to image save methodg      R@g      ?r  _gs_bgr   rx   r   	configPIL_dpir   r    r   _backendfmt_colorConverterN)r0   
_getGStater=   typer+  r   powr   r9   r6   rx   rW   )	rO   whdpibgr-  r"   
backendFmtscales	            r%   __init__PMCanvas.__init__6  s     D#q2*Me!e%*1QuQq$9j!&(l#%.k" #f378J8J3KTRUY3VK\gj!'1m$9=9S:Yb'(==r7   c                    [        U5      nUc  [        R                  nUS:X  a   UR                  XUS9$ SUR                  5       ;   a6  UR                  5       n[        R                  XD5      n UR                  XX$S9$ [        SU< 35      e! [         a     UR                  XX$S9s $ !     N1= ff = f! [         a    UR                  XUS9s $ f = f)Nr   r7  r*  r   z.Cannot obtain PM graphics state using backend )r&   r   r   gstate	TypeErrorGStater!   upper_pycairoFmtsMapgetAttributeErrorRuntimeError)r4  r5  r7  r"   r  mods         r%   r1  PMCanvas._getGStateH  s    G$?//GKzz!z,, '))+C!%%c.C-zz!bz11 KG;WXX  ::a":55	 " -zz!z,,-s;   B 0B8 
B5B,)B5,B1.B51B58CCc                    Uc  U R                   nXsU R                  l        U R                  l        S S S S S S S S.nU R                  nUR
                  UR                  pvUR                  5        H  n[        XX5      XH'   M     AU ?[        R                  XUS9=oPR                  S'   UR                  5        H  n[        XXH   5        M     UR                  Xg5        g )N)rW   rX   rZ   rg   rh   rm   ra   r=  r+  )r,  _drawingr   r   r+  rb   rc   keysr   r  r>  r=   setattrr   )	rO   r4  r5  r7  AgsfNfSks	            r%   _drawTimeResizePMCanvas._drawTimeResize^  s    :DHHr451T]]1t44\`nr  AE  FXXR[[2A2=AD $.$5$5aR$5$@@]]5!AD14  


2r7   c                    [        5       R                  U R                  S:X  a  [        U S5      S:X  a  SOSU R                  R
                  U R                  R                  4S9nUR                  U R                  R                  5        U$ )Nr    _fmtr#  r&  r   )r   )	r+   newr   r   r+  r   r   	frombytespixBuf)rO   r   s     r%   toPILPMCanvas.toPILl  s    [__t}}k'AgdSYFZ\dFdVjow{ww  xF  xF  HL  HP  HP  HW  HW  wX_  Y
TXX__%	r7   c           
      j   U R                  5       nUci  [        U[        5      (       d  [        S[	        U5      -  5      e[
        R                  R                  U5      S   nUR                  S5      (       a  USS  nU R                  =(       d    0 nUR                  SS 5        UR                  S5      nU(       a  U" U5      nUR                  5       nUS;   a  [        U5      nOUS;   ah  UR                  S5      (       a  [        U5      nOCUR                  S5      (       a  [        U5      nO!UR                  S	5      (       a  [!        U5      nS
nO>US;   a  [#        X1X$R%                  SS 5      S9$ US;   a  OUS;   a  SnO['        SU-  5      eUS
:X  a  UR%                  SS 5      nU(       a  SSKJnJn  SS/-  n	[/        SUR1                  5       5       H  u  pSXU-   '   M     UR3                  SUR5                  5       UR7                  UR9                  U	5      R;                  S5      R9                  SS/-  S/-   5      5      4-   5      nSU R<                  4S4 H  u  pUR%                  X5      XL'   M     UR                  SS5        UR                  S5      (       a  SSKJn  UR7                  U5      nUR                  SS 5        UR                  S5      nU(       a  U" U5      nUR>                  " X40 UD6  [A        US5      (       d"  [
        RB                  S:X  a  SSK"J#n  U" XS 9  g g g )!Nz*Invalid value '%s' for fn when fmt is Noner   r  preConvertCBGIF)TIFFTIFFPTIFFLTIFTIFF1r   r  r
  r^  )PCTr  r  )r  )PNGBMPPPM)JPGJPEGrh  zUnknown image kind %sr   )
ImageChopsr)   i   )r      i   r-   r&  
resolution)zresolution unitinchchops_invert)ri  	preSaveCBr  r  r  r  )$rX  ri   r   r   asciir   r   r  
startswithr-  
setdefaultrL   rA  r  endswithr  r  r"  rC  r   r*   ri  r)   zip
bitmap_rgbmergesplitinvertpointr   r.  saver   r  r  r  )rO   r  r  r   r-  r[  tcri  r)   Tor5   adrn  r  s                   r%   
saveToFilePMCanvas.saveToFileq  s   ZZ\;b%% !MPUVXPY!YZZ''""2&q)C~~c""#ab'CNN(b	^D1]]>2b!Biik(?r"B::||C  "2&c"""2&c"""2&CN"rS]]=QU5VWW((N"C 7# =>>;}T2B1GR]]_=DA AcF > [[Z5F5FrxxPQ{GZGZ[^G_GeGefikljmfmornsfsGt5u4w)wx$TYY/0JJ(}}Q1	 K^A.==((&""2&B[.--,	2B
##r'""rww~8$ (6"r7   c                 T    [        5       nU R                  X!S9  UR                  5       $ )Nr*  )r   r  getvalue)rO   r  ro   s      r%   saveToStringPMCanvas.saveToString  s#    I"zz|r7   c                    SSK nU R                  nU R                  S:X  a+  UR                  S:X  a  SUl        UR                  nSUl        OUR                  nUR
                  UR                  peUR                  UR                  SS[        U5      S-   SSS	XVS
S5
      5        US-  n[        [        U5      SU* 5       H  nUR                  XHU-
  U 5        M     UR                  S5        g)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BM6   (   r      r   z              )structr+  r   rT  rW  r   r   r  packrl   r   )	rO   r!  r  rM  pixr   r   rowbr|  s	            r%   
_saveToBMPPMCanvas._saveToBMP  s    
 	XX==+%"''8*;BG))CBG))C"))v	,T#c(2+a2eSTUWXYqys3x4%(AGGC$qM" )	r7   c                 0    [        U R                  X5        g rJ   )_setFontr+  )rO   rb   rc   leadings       r%   r   PMCanvas.setFont  s    (,r7   c                 0    [        U R                  X5        g rJ   )rK  r+  )rO   r  values      r%   __setattr__PMCanvas.__setattr__  s    $r7   c                 .    [        U R                  U5      $ rJ   )r   r+  )rO   r  s     r%   __getattr__PMCanvas.__getattr__  s    txx%%r7   c                 b    U(       a  U R                  5         U(       a  U R                  5         g g rJ   )r   r   )rO   r   r   s      r%   r   PMCanvas.fillstrokepath  s    4??$6r7   c                    [        Xe-
  5      S::  d   e[        [        U-  S-  5      n[        [        U-  S-  5      nXU-  -   n	X$U-  -   n
[        [        U-  S-  5      n[        [        U-  S-  5      nXU-  -   nX$U-  -   nU* U-  nXG-  n[        Xe-
  -  S-  n[        SS[        U5      -
  -  [        U5      -  5      nXU-  -   nU
UU-  -   nU* U-  nXK-  nUUU-  -
  nUUU-  -
  nX4UU4UU4X444$ )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 opertatorrH   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halfAngrP  r   r   dx2dy2r   r   s                            r%   _bezierArcSegmentCCWPMCanvas._bezierArcSegmentCCW  s5    6?#r)))2f9U?#2f9U?#T'\T'\2f9U?#2f9U?#T'\T'\cDji fm$k2	S3w</1CLAC'\#'\cDji#'\#'\2b'Br7RG466r7   c           	         Xe-
  n[        U5      S::  a  XV4/nO_[        [        [        U5      S-  5      5      n	[        U5      U	-  n
/ n[	        U	5       H   nX[U
-  -   nX-   nUR                  X45        M"     / nU Hb  u  pU(       d,  U R                  XX4X5      u  u  nnnUR                  U5        M8  U R                  XX4X5      u  u  nnnUR                  U5        Md     WW4U4$ )zreturn 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  r0   r   floatr   r   r  )rO   r   r   r   r   r  r  angularExtent	angleListNfrag	fragAngleiir}  bctrlptsr  r  ptstmpxtmpys                       r%   bezierArcCCWPMCanvas.bezierArcCCW  s     }% )Is=1#568Em,e3IIEl)^+M  !' #
 EQ!%!:!:2"!M"R#s#%)%>%>rbQ%Q"$tcs#  B!!r7   c           	          U R                  XX4XV5      u  u  pxn	U R                  Xx5        U	 H   u  u  pu  pu  pU R                  XXX5        M"     g)zadds 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%   addEllipsoidalArcPMCanvas.addEllipsoidalArc  sR    
 "..rbDF"'B*1&WbgrgrLLrR+ +2r7   c                 $    U R                  XX4S9  g )Nr   r   )rO   rB   rC   r   r   s        r%   drawCentredStringPMCanvas.drawCentredString  s    D:r7   c                 &    U R                  XUSS9  g )Nr   r  r  )rO   r   rB   rC   s       r%   drawRightStringPMCanvas.drawRightString  s    qU3r7   c                    U R                   nUR                  nUR                  nU(       a  XGU4:w  a  Uu  p[        XiU
5        OUn	Un
U R	                  U5      u  p; US;   a;  [        X9U
5      nUS:X  a  X-  nO$US:X  a  XS-  -  nOUS:X  a  U[        XSXU
5      -  nU R                  S:X  a  UR                  XU5        O[        U	5      nUR                  (       a  UR                  XU5        OUn[        U5      (       d   UR                  S5      n[        X</UR                   -   5      n[#        U5      nUS-
  n[%        U5       Hr  nUU   u  nnUU:w  a  [        UUR                  U
5        UnUR                  XU5        UU:w  d  MD  UUR                  UR                  UR&                  5      U
5      -  nMt     UR)                  X5        g ! [         aY  nUR                  SS	 u  nn[        UR                  S S	 UR                  S	   < S
X?S-
  U < SX?U < SUUUS-    < 34-   6 eS nAff = f! UR)                  X5        f = f)N)r   r   r   r   r   g       @r   r    utf8r_   ru   

   z-->z<--r   )r+  rc   rb   r  
shapedTextr   r   r   r   r   _dynamicFontr   decodeUnicodeDecodeErrorargsr   substitutionFontsrl   r   encNamer   )rO   rB   rC   r   r   r   rM  gs_fontSizegs_fontNamerb   rc   r   fontfcer   jFTnnm1r!  ts                         r%   r   PMCanvas.drawString!  sc   XXkkkk$==!*HR*"H"H-%	055%dX>%LA (*OA )+{RRA}}k)a$'x($$MM!d+B$T??L#';;v#6D
 $D0F0F)FGBBAA#C"1X!!u1b5$R

8<!"Ba!,c6qxx		/B8!LLA & JJ{/!  2 L"#&&1+CAa"4qvvbqzYZY_Y_`aYbcgjlhlmncoptwxpyz~  @A  BC  DF  BF  {G  DH  CJ  8J  #L  LL  JJ{/s9   B%H5 G A4H5 2H5 
H2AH--H22H5 5Ic                     U R                   bC  U R                  5         U R                  X5        U R                  X45        U R	                  5         g g rJ   )rZ   r   r   r   r   )rO   r   r   r   r   s        r%   r   PMCanvas.lineU  s?    'NNKKKKOO	 (r7   c                     U R                  5         U R                  X5        U R                  X-   U5        U R                  X-   X$-   5        U R                  XU-   5        U R                  5         U R	                  XVS9  g )N)r   r   )r   r   r   r   r   )rO   rB   rC   r   r   r   r   s          r%   r   PMCanvas.rect\  se    AAGQAGQZ(A6z"64r7   c                    US:X  a  UnUS:X  a  UnX-   nX$-   nU R                  5         U R                  X-   U5        U R                  Xu-
  X&-   XVSS5        U R                  Xu-
  X-
  XVSS5        U R                  X-   X-
  XVSS5        U R                  X-   X&-   XVSS5        U R                  5         U R	                  5         g)zrect(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  rH      N)r   r   r  r   r   )	rO   rB   rC   r   r   r   r   r   r   s	            r%   r   PMCanvas.roundRecte  s    
 q5r"q5r"YZADruadBC>rubeRQ;qtRUBB<qtQT23=r7   c                 (    U R                  XX35        g)zRadd closed path circle with center cx,cy and axes r: counter-clockwise orientationN)r   )rO   r   r   r   s       r%   r   PMCanvas.circlew  s    R1r7   c                 :   U R                  5         X-   nUnUnX$-
  nX-   n	X$[        -  -
  n
Xs[        -  -   nUnU R                  XV5        U R                  XXXx5        UnUnX-
  nUnX[        -  -
  n	X$-
  n
UnX$[        -  -
  nU R                  XXXx5        UnUnUnX$-   nX-
  n	X$[        -  -   n
X[        -  -
  nX$-   nU R                  XXXx5        UnUnX-   nUnX[        -  -   n	X$-   n
X-   nX$[        -  -   nU R                  XXXx5        U R	                  5         g)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   PMCanvas.ellipse{  sb    	WUU###%%%BR2'U###U$$$R2'UU###$$$UR2'U###UU###R2'r7   c                     g)zdo nothing for compatibilityNr   rN   s    r%   	saveStatePMCanvas.saveState  s    r7   c                 ^    U R                  U5      U l        [        USS 5      nUb  X l        g g Nrp   )r0  ra   r   r`   rO   aColorrp   s      r%   rn   PMCanvas.setFillColor  s3    --f5wt,$ r7   c                 ^    U R                  U5      U l        [        USS 5      nUb  X l        g g r  )r0  rZ   r   rY   r  s      r%   rf   PMCanvas.setStrokeColor  s4    //7wt,!& r7   c                     Xl         g rJ   )rg   )rO   caps     r%   
setLineCapPMCanvas.setLineCap  s    r7   c                     Xl         g rJ   )rh   )rO   joins     r%   setLineJoinPMCanvas.setLineJoin  s    r7   c                     Xl         g rJ   )rX   )rO   r   s     r%   setLineWidthPMCanvas.setLineWidth  s     r7   c                     [        X=(       d    U R                  R                  Ub  U5      $ U R                  R                  5      $ rJ   )r   r+  rb   rc   )rO   r   rb   rc   s       r%   r   PMCanvas.stringWidth  sC    4!>TXX->->-5-A[ 	[GKxxGXGX[ 	[r7   c                 Z   [        U[        5      (       d  [        U5      n[        U R                  R
                  5      nUR                  (       aZ  [        U[        5      (       dE  [        S[        U R                  R
                  U R                  R                  S9U4/5      S   S   n[        U[        5      (       a6  [        S UR                   5       5      U R                  R                  -  S-  O3[        XR                  R
                  U R                  R                  5      nX4$ )Nr   )rb   rc   r   c              3   8   #    U  H  oR                   v   M     g 7frJ   )	x_advance).0_s     r%   	<genexpr>&PMCanvas.shapedText.<locals>.<genexpr>  s     >+=akk+=s   i  )ri   r	   r   r   r+  rb   isShapedr
   r   rc   sum__shapeData__r   )rO   r   r  r   s       r%   r  PMCanvas.shapedText  s    $y))T?D488,,-D}}ZY%?%?$atxx7H7HRVRZRZRcRc)dei(j%klmnopqrZdeijsZtZt>4+=+=>?@Q@QQRVV$T88+<+<dhh>O>OP 	{r7   )rW   ra   r`   rg   rh   rZ   rY   rX   )H    NNr   )Nr$  rJ   r\  )r   r   )r   )Nleft)NN)%r   r   r   r   r:  staticmethodr1  rQ  rX  r  r  r  r   r  r  r   r  r  r  r  r  r   r   r   r   r   r   r  rn   rf   restoreStater  r  r   r   r  r   r   r7   r%   r(  r(  5  s    DH$!$ Y Y*
6%p
(-%&%!7F"<	,;420h5$ 9v%' L![r7   r(  r  r  r   c           
      ~    [        U 5      n [        U R                  U R                  XX5US9n[	        XSS4SU0UD6  U$ )N)r6  r7  r-  r"   r8  r   r;   )r   r(  r   r   r?   )	r~  r6  r7  r-  r;   r"   r8  rD   r5   s	            r%   drawToPMCanvasr    sB    AA!((idnoAq!6,66Hr7   c           
      >    [        U 4XX4XVS.UD6R                  5       $ )Nr6  r7  r-  r;   r"   r8  )r  rX  )r~  r6  r7  r-  r;   r"   r8  rD   s           r%   	drawToPILr    s?    !  Lyel  L  GK  L  R  R  T  Tr7   c           
          [        5       n[        U 4XX4XVS.UD6n	U	R                  SUR                  UR                  S9$ )Nr  r   r   )r+   r  r   r   r  )
r~  r6  r7  r-  r;   r"   r8  rD   r)   r   s
             r%   
drawToPILPr    sM    KE	1  
D#	]d  
D  C  
DB::c%**enn:EEr7   r]  c	           
      F    [        U 4X4XVXxS.U	D6n
U
R                  X5        g)zkcreate a pixmap and draw drawing, d to it then save as a file
configPIL dict is passed to image save methodr  N)r  r  )r~  r  r  r6  r7  r-  r;   r"   r8  rD   r5   s              r%   
drawToFiler    s7     	q  	HcIah  	H  CG  	HALLr7   c           
      V    [        5       n	[        X	4XX4XgS.UD6  U	R                  5       $ )N)r  r6  r7  r-  r"   r8  )r   r  r  )
r~  r  r6  r7  r-  r;   r"   r8  rD   ro   s
             r%   drawToStringr    s,    	Aqnsnimn::<r7   c           	        ^^^^^ S nSS K nSSKJn  SSKJm  UR
                  n/ nUR                  R                  U 5      (       d  UR                  " U 5        SnSnU/n	0 n
[        R                  SS  nU Vs/ s H  oR                  S5      (       d  M  UPM     nnU(       d  / S	QnOMU H  nUR                  U5        M     S
R                  U Vs/ s H  oSS  PM	     sn5      R                  S
5      n/ mSS KmSSKJm  UUUUU4S jnU" [%        [&        S5      S9 GH  u  nnnU
R)                  US5      S-   =nU
U'   US:  a  USUS-
  -  -  nU(       a  UU;  a  MB  Un[+        UR,                  5      n[+        UR.                  5      nU	R1                  SU< SU< S35        U GH?  nUS;   a"  U	R1                  SUR3                  5       -  5         U< SU" U5      < 3nUR                  R                  U U5      nUR                  R5                  U5      (       a  UR                  " U5        US:X  a  [7        UUUS[8        0S9  O%US;   a  UR;                  SS/U US9  O[7        UUUS9  US;   a  U	R1                  S U-  5        O5US:X  a  U	R1                  S!U-  5        OUS:X  a  U	R1                  S"U-  5        T(       d  TS#:  a  [=        S$[?        U5      -  5        GM?  GMB     URB                  RE                  S%S&5      S':X  a  SURF                  S('   S) H  n UR;                  U/U US9  M     GM     T(       a:  U	S   RI                  S*S+5      U	S'   U	R1                  S,5        U	RK                  T5        U	R1                  U5        UR                  R                  U S-5      n[M        US.5       nURO                  U	5        S S S 5        [        RP                  S/:X  a  SS0K)J*n  U" US1S29  T(       d  TS#:  a  [=        S$U-  5        g g s  snf s  snf ! [@         a    U" UU5         GM  f = f!   U" UU5         GM%  = f! , (       d  f       N= f)3Nc                     U S:X  a  Sn U $ )Ntifftifr   )rB   s    r%   r  test.<locals>.ext  s    f9ar7   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                    > SU < SU< S3nT(       d  TS:  a  [        U5        TR                  SU-  5        [        5       nTR                  US9  TR                  ST" UR	                  5       5      -  5        g )NzProblem drawing z fmt=z filer_   z"<br/><h2 style="color:red">%s</h2>)filez<pre>%s</pre>)printr   r   	print_excr  )	r  r  msgbuferrsr-  shout	tracebackr%  s	       r%   handleErrortest.<locals>.handleError  sb    04S9GAIuSz83>?j%OfS\\^&<<=r7   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.htmlr4  r  r  HTMLr  )+r   reportlab.graphicsr$  reportlab.rl_configr%  getAllTestDrawingsr   isdirmkdirsysargvrp  remover  rv  r6  xml.sax.saxutilsr-  r   r  rq  r0   r   r   r   rA  r   r  r   ry  r0  ro  rD  environrC  r=   replaceextendr   
writelinesplatformr  r  ) r<  r5  r  r   r$  rE  drawingshtmlTop
htmlBottomhtmlnamesrI  r}  Er7  r@   	docstringr  r   r=  r4  r5  rP  filenamefullpathhtmlFileNamer!  r  r4  r-  r6  r%  s     `                          @@@@r%   testr[    s   
 -+#66H77==  
GJ 9DE88AB<D3DqLL2DA3<AKKN XXa(aua()005D'> > '9wzR_?`&a")T**42144E$KQ31Q3'D$hiPQA--01779<=$&,c!f577<<977>>(++IIh'e8wxAu@UV,&LL$uV6LRwxA6++KK AH LMWKK F QRXKK <x GHGAIuZh-G'HI) . ::>>+C0#5UVw7G7G	7RA$aSfE  C 'bN q'//'*cdQ()DKK
77<<8L	lC	 A	T 
!
||U4\f-	5l!:;	M 	4 )X " $D##$$D## 
!	 s=   9PPPDP$P69QP32P36Q
Q__main__T)r5  rJ   )pmoutF)?__version__r   r   reportlab.graphics.renderbaser   r   reportlab.pdfbase.pdfmetricsr   r   r   reportlab.pdfbase.ttfontsr	   r
   r  r   r   reportlab.lib.abagr   reportlab.lib.colorsr   r   	reportlabr   utilsr   r  r   r   rH  ior   r   mathr   r   r   r   r&   r   r  r+   r6   r9   _unset_r?   rF   r<   r  r  r  r"  dictrB  r  r(  r  r  r  r  r  ry  r[  r   r   r7   r%   <module>rj     s   	1 ( L I I > 4 # /  5    # #:y889J
. .7->-> R 3@( @DF H(w? h hT T	HYHYbkb{b{  HM  H9CTCT]f]v]v  CH T XIDUDU^g^w^w  DI F
 2(dQZQbQbkt  lE  lE  QV  "TPYPaPajs  kD  kD  PU 
 ]<~ Zt {  Js   *E: :FF