
    Q?h7                        S r SrSSKrSSKrSSKJrJrJrJrJ	r	J
r
  SSKJr  SSKJrJrJrJrJr  SSKJr  SSKJr  SS	K7  SS
KJrJr  \" \" SS5      5      rSS	K7  SSKJ r   SSK!J"r"  SSK#J$r$  SSK%J&r&J'r'  \$" \SS5      r(\$" \SS5      r)\$" \SS5      r*Sr+Sr,0 SS_S\RZ                  _SS_SS_SS_SS_SS_SS_SS_SS_SS_S S_S!\RZ                  _S"\&_S#S_S$\_S%S&_r.SS	K/7  S' r0S( r1 " S) S*5      r2 " S+ S,5      r3S- r4S. r5S/ r6S0 r7 " S1 S2\3\25      r8 " S3 S4\85      r9SlS5 jr:SlS6 jr;SmS7 jr<S8 r= " S9 S:\9\5      r> " S; S<5      r? " S= S>\@5      rA\A" 5       rA " S? S@\85      rB " SA SB\B5      rC " SC SD\B5      rD\E" \F" SE5      5      u  rGrHrIrJSFrK/ SGQrLSnSH jrMSS\'\'SI\'SJ\'\&\&SK\&SL\&0rN " SM SN\D5      rO\O" 5       rPSoSO jrQ " SP SQ\O5      rR/ SSS4SR jrS " SS ST\D5      rT " SU SV\D5      rU " SW SX\D5      rV " SY SZ\D5      rW " S[ S\\D5      rX " S] S^\D5      rY " S_ S`\B5      rZ " Sa Sb\O5      r[S\4Sc jr\ " Sd Se\85      r] " Sf Sg\25      r^ " Sh Si\85      r_Sj r`\aSk:X  a  \`" 5         gg)pz3.5.60z9Core of the graphics library - defines Drawing and Shapes    N)picossinsqrtradiansfloor)Flowable)shapeCheckingverbosedefaultGraphicsFontName_unset_decimalSymbol)logger)colors)*)isSeqasBytes   )fp_str)stringWidth)tt2ps)FILL_EVEN_ODDFILL_NON_ZEROzNon-Zero WindingzEven-Odd	transformr   r   r   r   r   r   strokeColorstrokeWidthstrokeLineCapstrokeLineJoinstrokeMiterLimit
   strokeDashArraystrokeOpacityfillOpacityfillOverprintFstrokeOverprintoverprintMask	fillColorfillModefontSizefontName
textAnchorstartc           	         SnU  H  n[        U[        XqU5      5      nM     [        U 5      U-  nUn	US   S:X  a  U* n
X-
  n	OUS   S:X  a  Sn
O
U* S-  n
X-   n	US   S:X  a  U* nUS:X  a  SnOOUS:X  a  U* nOEU* S-  nO>US   S	:X  a  SnUS:X  a  UnO*US:X  a  SnO!US-  nOU* S-  nUS:X  a  U* nOUS:X  a  UnOSnXXhX4$ )
Nr   sng       @eendr-   w)maxr   len)textfontr*   leadingr,   	boxAnchorr4   thytybxbxts                K/var/www/html/env/lib/python3.13/site-packages/reportlab/graphics/shapes.py_textBoxLimitsrB   C   s   	A+ah/0  	D	'A	B|SRV	1s	RVW}cRu1b r"2c6b	2	u1b q"S5bRVuB3b r"b1    c           	         [        [        U5      X4X-   U4X-   X-   4XU-   445      nU V s/ s H  o S   PM	     nn U V s/ s H  o S   PM	     nn [        U5      [        U5      [        U5      [        U5      U4$ s  sn f s  sn f )z
Find the corner points of the rotated w x h sized box at x,y
return the corner points and the min max points in the original space
r   r   )zTransformPointsrotateminr5   )xyr4   r<   angleCXYs           rA   _rotatedBoxLimitsrN   e   s    
 	qs1gqs13iQ3'HIAq!1qAq!1qAq63q63q63q61,, 	s   A<Bc                       \ rS rSrSrS rSrg)_DrawTimeResizeableo   z:Addin class to provide the horribleness of _drawTimeResizec                     [        U S5      (       aJ  U R                  nUR                  nXsUl        Ul        [        US5      (       a  UR                  X5        g g g )N_canvas_drawTimeResize)hasattrrS   _drawingwidthheightrT   )selfr4   r<   canvasdrawings        rA   rT   #_DrawTimeResizeable._drawTimeResizeq   sU    4	""\\FooG,-)GM7>v/00&&q+ 1	 #rC    N)__name__
__module____qualname____firstlineno____doc__rT   __static_attributes__r]   rC   rA   rP   rP   o   s
    D,rC   rP   c                        \ rS rSr0 4S jrSrg)_SetKeyWordArgsy   c                 N    UR                  5        H  u  p#[        XU5        M     g)z9In general properties may be supplied to the constructor.N)itemssetattr)rY   keywordskeyvalues       rA   __init___SetKeyWordArgs.__init__z   s    "..*JCDu% +rC   r]   N)r^   r_   r`   ra   rm   rc   r]   rC   rA   re   re   y   s
     " &rC   re   c                     U  Vs/ s H	  oc  M  UPM     nnU(       d  g US   u  p4pVUSS   H$  u  pxpXs:  a  UnX:  a  U	nX:  a  UnX:  d  M"  U
nM&     X4XV4$ s  snf Nr   r   r]   )rectListrH   LxMinyMinxMaxyMaxx1y1x2y2s              rA   getRectsBoundsr{      sx    .HqHA.TqTDabE9D9D9D9D " ## 	/s
   AAc                    USX!-
  -  -
  U -
  nSUSU-  -
  U -   -  nX-
  nU /nXU-  SU-  U-  -
  nUS:  a  [        U5      nUS:  a  U* nSXX-   -  n	/ n
 U
R                  X-  5         U
R                  Xi-  5        US-  nUS-  nU
 H7  nSUs=::  a  S::  d  M  O  M  UR                  XX-  U-   -  U-   -  U -   5        M9     UR                  U5        U$ !    Nr= f!    Ne= f)a#  
this is used to find if a curveTo path operator has extrema in its range
The curveTo operator is defined by the points y0, y1, y2, y3

    B(t):=(1-t)^3*y0+3*(1-t)^2*t*y1+3*(1-t)*t^2*y2+t^3*y3
        :=t^3*(y3-3*y2+3*y1-y0)+t^2*(3*y2-6*y1+3*y0)+t*(3*y1-3*y0)+y0
and is a cubic bezier curve.

The differential is a quadratic
    t^2*(3*y3-9*y2+9*y1-3*y0)+t*(6*y2-12*y1+6*y0)+3*y1-3*y0

The extrema must be at real roots, r, of the above which lie in 0<=r<=1

The quadratic coefficients are
    a=3*y3-9*y2+9*y1-3*y0 b=6*y2-12*y1+6*y0 c=3*y1-3*y0
or
    a=y3-3*y2+3*y1-y0 b=2*y2-4*y1+2*y0 c=y1-y0  (remove common factor of 3)
or
    a=y3-3*(y2-y1)-y0 b=2*(y2-2*y1+y0) c=y1-y0

The returned value is [y0,x1,x2,y3] where if found x1, x2 are any extremals that were found;
there can be 0, 1 or 2 extremals
         r   g      g      ?r   )r   append)y0rx   rz   y3abcrM   dqRr;   s               rA   _getBezierExtremar      s   0 	BEl2oAAbDnAeA	A 	
ac!eA!tGQ3QB!#J	HHQSM	HHQSM 	
S	QA!wQwwqs1uIaK+,  HHRLH		s   C (C CC c           
          [        U 5      nU 4S jn[        [        U[        SUS5      5      5      n[        [        U[        SUS5      5      5      n[	        U5      [	        U5      [        U5      [        U5      4$ )Nc                 
    X   $ Nr]   )ips     rA   <lambda>getPathBounds.<locals>.<lambda>   s    QTrC   r   r~   r   )r6   listmaprangerG   r5   )pointsr0   fxsyss        rA   getPathBoundsr      sd    FA!A	c!E!AaL!	"B	c!E!AaL!	"BGSWc"gs2w//rC   c                     U S   n[        U5      (       aR  U  Vs/ s H  o"S   PM	     nnU  Vs/ s H  o"S   PM	     nn[        U5      [        U5      [        U5      [        U5      4$ [        U 5      $ s  snf s  snf )z"Helper function for list of pointsr   r   )r   rG   r5   r   )	pointListfirstxyr   r   s        rA   getPointsBoundsr      sr    aLEU||'(iei('(iei(BR#b'3r733Y''	 )(s
   A3A8c                   h    \ rS rSrSr\" 5       rS rSS jrS r	SS jr
S r\(       a   S rS	 rS
rg)Shape   a  Base class for all nodes in the tree. Nodes are simply
packets of data to be created, stored, and ultimately
rendered - they don't do anything active.  They provide
convenience methods for verification but do not
check attribiute assignments or use any clever setattr
tricks this time.c                 F    [        SU R                  R                  -  5      e)zReturn a clone of this shape.z!No copy method implemented for %s)NotImplementedError	__class__r^   rY   s    rA   copy
Shape.copy   s     ""EH_H_"_``rC   c                 n    0 nU R                   R                  5        H  u  p4USS S:w  d  M  XBU'   M     U$ )z<Interface to make it easy to extract automatic
documentationr   r   _)__dict__rh   )rY   recurpropsrk   rl   s        rA   getPropertiesShape.getProperties   s=     ----/JC1Qx3"c
 0 rC   c                 :    U R                   R                  U5        g)z^Supports the bulk setting if properties from,
for example, a GUI application or a config file.N)r   update)rY   r   s     rA   setPropertiesShape.setProperties   s     	U#rC   c                     [        U R                  5       R                  5       5      nUR                  5         U(       a  US-   nU H  u  p4[	        U< U< SU< 35        M     g)zConvenience. Lists them on standard output.  You
may provide a prefix - mostly helps to generate code
samples for documentation..z = N)r   r   rh   sortprint)rY   prefixpropListnamerl   s        rA   dumpPropertiesShape.dumpProperties  sP    
 **,2245c\F%MTu56 &rC   c                    U R                   b  U R                  R                  5        H,  nUS   S:w  d  M  XR                   ;   a  M   SU< SU < 35       e   U R                   R                  5        Hl  u  p#[	        X5      (       d   SU< SU < 35       e[        X5      nUR                  U5      (       a  MG   SU< S	U< S
U R                  R                  < 35       e   gg)a  If the programmer has provided the optional
_attrMap attribute, this checks all expected
attributes are present; no unwanted attributes
are present; and (if a checking function is found)
checks each attribute.  Either succeeds or raises
an informative exception.Nr   r   zUnexpected attribute z
 found in zMissing attribute z from zInvalid value z for attribute z
 in class )	_attrMapr   keysrh   rU   getattrvalidater   r^   )rY   rk   attr	metavaluerl   s        rA   verifyShape.verify  s     ==$}}))+q6S=--/dZ]_c1dd/ , $(==#6#6#8t**YdTX,YY*+ ))%00  Kejlprv  sA  sA  sJ  sJ  3K  K0 $9	 %rC   c                     [        XU5        g)zGBy default we verify.  This could be off
in some parallel base classes.N)validateSetattr)rY   r   rl   s      rA   __setattr__Shape.__setattr__%  s     De,rC   c                     [        S5      e)5Returns bounding rectangle of object as (x1,y1,x2,y2)z+Shapes and widgets must implement getBoundsr   r   s    rA   	getBoundsShape.getBounds*  s    !"OPPrC   r]   Nr   ) )r^   r_   r`   ra   rb   AttrMapr   r   r   r   r   r   r
   r   r   rc   r]   rC   rA   r   r      s@     yHa$
7K" 	6	-
QrC   r   c                       \ rS rSrSr\" \" \SSS9\" \SS9\" \	SS9\" \	S	SS9\" \	S
SS9S9r
S rS rS!S jrS!S jrS!S jrS rS rS rS"S jrS rS rS#S jrS$S jrS%S jrS$S jrS$S jrS rS rS rS rg)&Groupi.  a  Groups elements together.  May apply a transform
to its contents.  Has a publicly accessible property
'contents' which may be used to iterate over contents.
In addition, child nodes may be given a name in which
case they are subsequently accessible as properties.z"Coordinate transformation to applyr   descadvancedUsagezContained drawable elementsr   Turn on stroke overprintingTurn on fill overprintingoverprinting for ordinary CMYK)r   contentsr&   r%   r'   c                     U R                   R                  5       U l         / U l        SU l        U H  nU R	                  U5        M     [
        R                  X5        g)zyInitial lists of elements may be provided to allow
compact definitions in literal Python code.  May or
may not be useful.r   N)r   cloner   r   addre   rm   )rY   elementsrj   elts       rA   rm   Group.__init__=  sK     ++-&CHHSM  	  0rC   c                     U(       a8  XR                   ;  a  [        [        5      U R                   U'   [        XU5        gg)zLif name is not None add an attribute pointing to node and add to the attrMapN)r   AttrMapValueisValidChildri   )rY   r   nodes      rA   _addNamedNodeGroup._addNamedNodeM  s1    ==(&2<&@d#D% rC   Nc                     UbD  [        U5      (       d   S5       eU R                  R                  U5        U R                  X!5        gg)zAppends non-None child node to the 'contents' attribute. In addition,
if a name is provided, it is subsequently accessible by name
Nz1Can only add Shape or UserNode objects to a Group)r   r   r   r   rY   r   r   s      rA   r   	Group.addT  sF    
 %%Z'ZZ%MM  &t) rC   c                 >    U R                  XS9  U R                  S   $ )N)r   r1   )r   r   r   s      rA   _nn	Group._nn^  s    !}}R  rC   c                     UbZ  [        U5      (       d   S5       eUS:  a  U/U R                  X& OU R                  R                  X5        U R                  X25        gg)z4Inserts sub-node n in contents at specified locationNz4Can only insert Shape or UserNode objects in a Groupr   )r   r   insertr   )rY   r   r0   r   s       rA   r   Group.insertb  sW    =??Z$ZZ?s%&Ca"$$Q)t& rC   c                 ^   [        U [        5      =(       a     [        U R                  U R                  5      =(       d
    [	        5       nU R
                  R                  5       Ul        [        US5      (       a  U R                  SS Ul        U R                  nUR                  R                  nU Hg  n[        U[        5      (       a  UR                  5       nO6[        U[        5      (       a  UR                  5       nOUR                  5       nU" U5        Mi     U R                  U5        U$ )z9Return a new object which only contains primitive shapes.r   N)
isinstanceDrawingrW   rX   r   r   r   rU   r   r   r   UserNodeprovideNodeexpandUserNodesr   _copyNamedContents)rY   objself_contentsr   childnewChilds         rA   r   Group.expandUserNodesl  s     g&J74::dkk+JUeg}}**,3{##T^^A5FS]LL"E%** ,,.E5)) 002 ::<hK # 	$
rC   c                 x   [        5       n[        U S5      (       a  U R                  Ul        [        US5      (       a  U R                  SS Ul        U R	                  5       SS nU(       a  UR                  S5      n[        U[        5      (       a!  UR                  SUR                  5       5        O~[        U[         5      (       aX  UR                  5       nUR                  S:X  a&  UR                  R                  UR                  5        O#UR                  U5        OUR                  U5        U(       a  M  U$ )zreturn a fully expanded object	__label__r   Nr   r   )r   rU   r   r   getContentspopr   r   r   r   _exploder   extendr   )rY   r   Pr0   s       rA   r   Group._explode  s    g4$$..CM3{##T^^A5FS]q!aA!X&&1==?+Au%%JJL;;-LL''

3GGAJ
 a 
rC   c                 `    U R                    H  nUR                   R                  U5        M      g r   )r   r   )rY   r   r   s      rA   _copyContentsGroup._copyContents  s"    ]]ELL& #rC   c                 d   SSK J n  U R                  nU(       d#  [        U R                  R	                  5       5      nU R
                  R                  5        HV  u  pgXu;   a,  UR                  U5      n[        XUR                  U   5        M6  Xb;   d  M=  Xc;  d  MD  [        XU" U5      5        MX     g )Nr   )r   )	r   r   r   r   r   r   rh   indexri   )	rY   r   aKeysnoCopyr   r   kvposs	            rA   r   Group._copyNamedContents  s    d4==#5#5#78eMM'')DA!#))!,S 12Q( *rC   c                     U R                   R                  5       Ul         U R                  U5        U R                  U5        U$ )zcopies to obj)r   r   r  r   rY   r   s     rA   _copyGroup._copy  s7    }}**,3$
rC   c                 @    U R                  U R                  5       5      $ )zreturns a copy)r  r   r   s    rA   r   
Group.copy  s    zz$..*++rC   c                 N    [        U R                  [        XU5      5      U l        gz&Convenience to help you set transformsN)mmultr   rF   )rY   thetacxcys       rA   rF   Group.rotate  s    t~~ver/BCrC   c                 L    [        U R                  [        X5      5      U l        gr  )r  r   	translate)rY   dxdys      rA   r  Group.translate  s    t~~y/@ArC   c                 L    [        U R                  [        X5      5      U l        gr  )r  r   scale)rY   sxsys      rA   r!  Group.scale  s    t~~uR}=rC   c                 r    [        [        U R                  [        U5      5      [        U5      5      U l        gr  )r  r   skewXskewY)rY   kxkys      rA   skew
Group.skew  s#    uT^^U2Y?b	JrC   c                 4    U R                   SS X4-   U l         g)z2Convenience function to set the origin arbitrarilyN)r   rY   rH   rI   s      rA   shiftGroup.shift  s    ,aU2rC   c                 |    [         U l        U R                  R                  U R                  5        Xl        X l        g)zgConvenience function to make a drawing from a group
After calling this the instance will be a drawing!
N)r   r   r   r   _xtraAttrMaprW   rX   )rY   rW   rX   s      rA   	asDrawingGroup.asDrawing  s-     !T../
rC   c                 \    [        U SS5      nU R                  nU(       a  X;  a  U/U-   nU$ )zSReturn the list of things to be rendered
override to get more complicated behaviour
backgroundN)r   r   )rY   r   rK   s      rA   r   Group.getContents  s1     Dd+MM!QQrC   c                 B   U R                   (       a  / nU R                    H"  nUR                  UR                  5       5        M$     [        U5      nUc  g Uu  p4pVU R                  nX4/X6/XT/XV//n/ n	U H  n
U	R                  [        Xz5      5        M     [        U	5      $ g r   )r   r   r   r{   r   transformPointr   )rY   r   elemrw   rx   ry   rz   transcorners
newCornerscorners              rA   r   Group.getBounds  s    ==A)* &"Bz$NBBNNEw2(RG<GJ!!!."?@ "":.. rC   )r   r   r   rX   r   rW   r   )N)r   r   r   )r   r   )r^   r_   r`   ra   rb   r   r   isTransformisListOfShapes	isBooleanr   rm   r   r   r   r   r   r   r  r   r  r   rF   r  r!  r*  r/  r3  r   r   rc   r]   rC   rA   r   r   .  s    <  2Vefg4QR&y6ST$Y4O^_`$Y4Tcde
H1 &*!',*'	),DB>K3rC   r   c                     SSK Jn  U R                  nU" U5      R                  nU=(       d    UR                  nXQ;  a  U/X'   gX!U   ;  a  X   R	                  U5        gg)z7add an import of obj's class to a dictionary of importsr   )	getmoduleN)inspectrE  r   r^   r   )r   Ir0   rE  r   ms         rA   _addObjImportrI    sS    !A!A	QZZAzs	
A$	A 
rC   c                   ^ [        U [        5      (       a  [        U 5      $ [        U 5      (       aR  SR	                  U4S jU  5       5      n[        U [
        5      (       a  SU S3$ SU [        U 5      S:X  a  S S3$ S S3$ U [        L a  T(       a  [        U TS	5        g	[        U [        5      (       Ga,  T(       a  [        U T5        S
SK
Jn  U" U R                  5      u  pEpgpn
U(       a  U[        U5      * S nU[        U5      * S2	 O/ nU R                  5       nUSS  Vs/ s H  n[        UR                  US5      T5      PM!     snU Vs/ s H#  o S[        UR                  US5      T5       3PM%     sn-   UR!                  5        VVs/ s H  u  pU S[        X   T5       3PM     snn-   nU R"                  R$                   SSR	                  U5       S3$ ['        U 5      $ s  snf s  snf s  snnf )zEreturn a repr style string with named fixed args first, then keywords,c              3   <   >#    U  H  n[        UT5      v   M     g 7fr   )_repr).0r  rG  s     rA   	<genexpr>_repr.<locals>.<genexpr>  s     /$QeAajj$s   [](r   r   )EmptyClipPathr   )getfullargspecN=)r   floatr   r   joinr   r6   rU  rI  r   rF  rV  rm   r   rM  r   rh   r   r^   repr)rY   rG  r/   rV  argsvarargsvarkwdefaults
kwonlyargskwonlydefaultsannotationskargsr  r0   r  s    `             rA   rM  rM    s   $ud|	tHH/$/0d4  qc8OqcTA#5Q77"5Q77		mD?3	D		mD#*R`aeananRoOu
K#h-)Ec(m^_%E .212h7heAEE!DM!$h77<=u!1U1554=+,-u=>01	:	1U14]O$	:; ..))*!CHHQK=::Dz 8=:s   '&G/*G4G9c           	      p   Sn[        U SS 5      nU(       a  XT U S[        U5       S3-  nU R                  5        Hv  n[        U[        5      (       aI  SU 3nUS-  n[        USS5      n	U	(       a  SU	-   n	XT U S	U S
U	 S3-  nU[        XxX#U5      -  nUS-  nMa  XT U S[        Xr5       S3-  nMx     U$ )Nr   r   z.transform = 
r  r   r   #rW  z._nn(Group())z.add(z)
)r   rM  r   r   r   _renderGroupPy)
GpfxrG  r   indentr/   rK   r0   npfxls
             rA   rf  rf    s    
A+d#A!#mE!H:R8
8!]]_aqc7DFA+b)ACE!8D63%}QCr::Aq622AFA8C5eAj\55A  HrC   c                     UR                  U R                  5        [        U5      nUR                  5        VVs0 s H"  u  pEUR	                  U5      (       d  M  XCS  U_M$     snn$ s  snnf r   )r   r   r6   rh   
startswith)rY   rh  kwr0   r
  r  s         rA   _extraKWro  %  sP    IIdmmCA!xxz?zQ\\#->GAbE!Gz???s   A'	A'c                   h   \ rS rSrSr1 Skr\1 Sk-
  r\" \" \	SS9\" \	SS9\" S5      \" \
S	S9\" \" S
SSS5      SS9\" \" SSSS5      SS9\" \	SS9\" \SS9\" \SS9S9	r\" \\" \" \" \6 SSS9SS9S9r\R%                  \5        S&S jrS r\4S jrS rS rS  rS! rS'S" jrS(S# jrS)S$ jrS%rg)*r   i*  zwOutermost container; the thing a renderer works on.
This has no properties except a height, width and list
of contents.>   pspybmpepsgifjpgpctpdfpngsvgtifjpegpicttifftiff1tiffltiffp>   rq  rr  rt  rx  rz  zDrawing width in points.r   zDrawing height in points.Nz=Background widget for the drawing e.g. Rect(0,0,width,height)LEFTRIGHTCENTERCENTREz+Horizontal alignment within parent documentTOPBOTTOMz)Vertical alignment within parent documentzGlobal scaling for renderingz.override the STATE_DEFAULTS value for fontNamez.override the STATE_DEFAULTS value for fontSize)	rW   rX   canvr6  hAlignvAlignrenderScaleinitialFontNameinitialFontSizer   r   )loemptyOKzOne or more plot modes)BASEformatsc                     S U l         [        R                  " U /UQ70 UD6  Xl        X l        SU l        SU l        SU l        g )Nr  r        ?)r6  r   rm   rW   rX   r  r  r  )rY   rW   rX   nodesrj   s        rA   rm   Drawing.__init__Z  s?    t.U.X.
rC   c                 L   / SQ/ SQS.n[        U R                  5       SU5      nSU R                  R                  -   nSnUSR	                  S UR                  5        5       5      -  nUS	U S
3-  nUSU R                   SU R                   S3-  nUS-  nXB-  nUSU S3-  nU$ )N)_DrawingEditorMixinr   r   )Color	CMYKColor
PCMYKColor)zreportlab.graphics.shapeszreportlab.lib.colorsrY   ExplodedDrawing_z0#Autogenerated by ReportLab guiedit do not edit
r   c              3   V   #    U  H  u  pS U SSR                  U5       S3v   M!     g7f)zfrom z import z, rd  N)rY  )rN  rH  os      rA   rO  $Drawing._renderPy.<locals>.<genexpr>k  s)     PidaaS1b9is   ')z
class z(_DrawingEditorMixin,Drawing):
z	def __init__(self,width=z,height=z,*args,**kw):
z1		Drawing.__init__(self,width,height,*args,**kw)
z(

if __name__=="__main__": #NORUNTESTS
	z0().save(formats=['pdf'],outDir='.',fnRoot=None)
)rf  r   r   r^   rY  rh   rW   rX   )rY   rG  rg  r0   r/   s        rA   	_renderPyDrawing._renderPyc  s    )R$F 4==?6!4!8!88?	RWWPaggiPQQ	xs:;;	)$**Xdkk]/ZZ	CC		;A3>sttrC   c                 |    SSK Jn  UR                  X R                  SSU[        La  UO[        U S[        5      S9  g)zThis is used by the Platypus framework to let the document
draw itself in a story.  It is specific to PDF and should not
be used directly.r   	renderPDF_showBoundaryshowBoundaryN)reportlab.graphicsr  drawr  r   r   )rY   r  r  s      rA   r  Drawing.draws  s;     	1tYY1-9-H\gVZ[jkrNs 	 	urC   c                 l    U R                   nU R                  nU R                  nUS:w  a  X5-  nXE-  nX44$ )Nr  )rW   rX   r  )rY   
availWidthavailHeightrW   rX   r  s         rA   wrapDrawing.wrap{  s?    

&& E!F}rC   c                 t    [         R                  U 5      nU R                  Ul        U R                  Ul        U$ )z:Return a new drawing which only contains primitive shapes.)r   r   rW   rX   r  s     rA   r   Drawing.expandUserNodes  s-    ##D)JJ	[[

rC   c                 l    U R                  U R                  U R                  U R                  5      5      $ )zReturns a copy)r  r   rW   rX   r   s    rA   r   Drawing.copy  s$    zz$..T[[ABBrC   c                 6    U R                  [        U0 UD65      $ r   )r  r   )rY   r[  rn  s      rA   asGroupDrawing.asGroup  s    zz%++,,rC   c                 p   UR                  SS5      n[        U[        5      (       a  SU-  nOSnUS-  nSSKJn  Sn	U(       di  [        U SU R                  R                  S-   5      n[        U S	S5      n
[        U
S
5      (       a  U
" U 5      n
[        US
5      (       a	  U" U
5      nO X:-  nUc  [        U SS5      n[        US
5      (       a  U" U 5      n[        R                  R                  U5      (       a"  [        R                  R                  U5      u  pCOU=(       d    [        U SS5      nUR!                  5       R!                  [        R"                  5      nU(       d  Sn[        R                  R                  U5      (       dY  [        R                  R%                  [        U S[        R                  R'                  [(        R*                  S   5      5      U5      n[        R                  R-                  U5      (       d  [        R.                  " U5        [        R                  R1                  [        R                  R%                  XC5      5      n[        R                  R3                  U5      nUS   SS R5                  5       U R6                  ;   a  US   nU=(       d    [        U SS/5       Vs/ s H  oR5                  5       PM     nnUSL=(       a    U4=(       d    [        U SU5      4S   n[8        R:                  R<                  [8        R>                  R<                  4nU=[8        R:                  l        [8        R>                  l        SU;   a  SSK J!n  US-   nU(       a  [E        USU4-  5        URF                  " U UU4S[        U SURH                  5      0[K        U S40 UD6D6  U	S-   n	[(        RL                  S:X  a:  SSK'nSSK(nURS                  U5      RU                  SS5        URW                  U5        U RX                   H  nUU;   d  M  SSK J-n  U< SU< 3nU(       a  [E        UUU4-  5        [        U SS5      nU(       a9  [        USU/5      nUU;   a#  [        US S5      (       d  UR]                  5         OSnURF                  " U U4U[        U SURH                  5      S!.[K        U S"40 UD6D6  U	S#-   U-   n	U(       d  M  UR_                  U5        M     S$U;   a   SS%K0J1n  US'-   nU(       a  [E        US(U4-  5        URF                  " U U4U[        U S)S*/5      S   [        U S)SS+/5      S   [        U S,URh                  5      [        U SURH                  5      [        U S-URj                  5      S..[K        U S/40 UD6D6  U	S0-   n	S1U;   a]  SS2K J6n  US3-   nU(       a  [E        US4U4-  5        URF                  " U U4S[        U SURH                  5      0[K        U S540 UD6D6  U	S6-   n	S7U;   a]  SS&K J3n  US8-   nU(       a  [E        US(U4-  5        URF                  " U U4S[        U SURH                  5      0[K        U S/40 UD6D6  U	S9-   n	S:U;   a|  US;-   nU(       a  [E        US:U4-  5        [o        US<5       nURq                  [s        U Ru                  5       Rw                  S=[        Rx                  5      5      5        SSS5        U	S>-   n	Uu  [8        R:                  l        [8        R>                  l        [        U S?5      (       a  U R{                  X5        U	=(       a    XSS -   =(       d    S$ ! [         a*  n[        U5      R                  S5      S:  a  e  SnAGNSnAff = fs  snf ! [d         a
    SS&K J3n   GNf = f! , (       d  f       N= f)@zSaves copies of self in desired location and formats.
Multiple formats can be supported in one call

the extra keywords can be of the form
_renderPM_dpi=96 (which passes dpi=96 to renderPM)
	seqNumberr   z%4d: zgenerating %s file %sr   	rl_configfileNamePatternz%03dchartId__call__znot all arguments convertedNoutDirr   _override_CWDr   r  rx  r   r  z.pdfPDFr  
showBorder_renderPDF_z/.pdfmacCAROzPDF renderPM_drawTimeCollectordisabledfmtr  
_renderPM_z/.rt  renderPS_SEPrenderPSz.epsEPSEPS_infoTesting	ReportLabpreview	ttf_embed)titledeptcompanyr  r  r  
_renderPS_z/.epsrz  	renderSVGz.svgSVG_renderSVG_z/.svgrq  z.psz/.psrr  z.pywbrd  z/.py
saveLogger)>r   r   int	reportlabr  r   r   r^   rU   	TypeErrorstrfindospathisabssplitrstripseprY  dirnamesysargvisdirmakedirsnormpathsplitextlower
_saveModesr   warnOnceenabledinfoOncer  r  r   
drawToFiler  ro  platformmacfs
macostoolsFSSpecSetCreatorTypetouched_bmModesr  clearsaverlextra.graphicsr  ImportErrorr  eps_previeweps_ttf_embedr  openwriter   r  replacelinesepr  )rY   r  r   fnRootr  r  rn  genFmtr  extr  errfnrootplotModerH   _savedr  filenamer  r  bmFmtr  dtcdtcfmtsr  r  r   s                              rA   r  Drawing.save  s)    B'fS!!v%FF))'T"3T^^5L5LV5SUFd9Q/Gwz**!$-vj))O#-F >T(40F6*%%D\F77==  WW]]62NFF9wtHS9F''/vww}}V$$rww||GDY[Y`Y`YhYhiliqiqrsitYu<vw}/~fww}}V$$bkk&&9!!"'',,v"=>77##F+A;qr?  "doo5a[F(/(R74	5'3R(RT(R!GGI(RT$&5G:['$yQX:Y9[]^_((&//*A*AA<CC&//"9H4f}Hfh'778  x  \WTR^_h_u_uEv  \  zB  CG  HU  z[  XZ  z[  \.C||U"(X&55ffE""8,]]E 7&,U3E&E(+;";<d#7=%c)UG<G'Jq0I0I		"##D(  `u'RVWcdmdzdzJ{  `  G  HL  MY  _  \^  _  `Dj5(3* #  H8E f}Hfh'778 (D(.'.tJ	{'KA'N*1$z2kBR*STU*V*1$yAVAV*W-4T,yG]G]-^*1${9CZCZ*[D #+4"Br"BD .CH4f}Hfh'778   (D-4T,yG]G]-^Daijno|  bC  @B  bCD .C83e|Hfh'778h  SWT,W`WmWm=n  Sqyz~  @L  rR  OQ  rR  S-C8e|HfX67ht$ 0 8 8bjj IJK %-C;A8!84%%OOF'%v!"g~++C ! O 3x}}%BCaGGO, UD  8778D %$s=   )] <^;^ A^'
^^^^$#^$'
^5c           	          XR                   ;   d
   SU-  5       eSSKJn  US:X  aM  SSKJn  UR                  SS5      nUR                  " X4S[        U S	UR                  5      0[        U S
40 UD6D6$ XR                  ;   a<  SSKJn  UR                  " U 4U[        U S	UR                  5      S.[        U S40 UD6D6$ US:X  a-   SSKJn	  U	R                  U U[        U S	UR                  5      S9$ US:X  a+  SSKJn	  U	R                  U [        U S	UR                  5      S9$ US:X  a  U R!                  5       $ US:X  a;  SSKJn
  U
R                  " U 4S[        U S	UR                  5      0[        U S40 UD6D6$ g! [         a	    SSKJn	   Nf = f)z,Converts to an 8 bit string in given format.zUnknown file format "%s"r   r  rx  r  r  r   r  r  r  r  r  r  rt  r  r  )r  r  rq  r  rr  rz  r  r  N)r  r  r  r  r  r   drawToStringr   r  ro  r  r  r   r  r  r  r  r  )rY   formatr   r  rn  r  r  r  r  r  r  s              rA   asStringDrawing.asString  s   (M*Dv*MM('U?4FF72&E))$  [GDQ]^g^t^tDu  [  yA  BF  GT  yZ  WY  yZ  [  [}}$3(( X6wtT`%22H4 X6>tL6VSU6VX Xu_8E ((*1-4T,yG]G]-^ ) ` ` t^3((GDV_VlVl<m(nnt^>>##u_4))$  SGDV_VlVl<m  Spxy}  L  qR  OQ  qR  S  S   878s   E: :FFc                 "   U R                  5       nU R                  nU R                  n[        Xx/UQ76 n	U	R	                  5       u  ppUS:X  d   US:X  aK  X:  d  XU-
  :  d  X:  d  XU-
  :  a1  X-
  U-   U-   U	l        X-
  U-   U-   U	l        SSSSX*-
  XK-
  4U	l        U	$ US:X  d  US:X  a-  X:  d  XU-
  :  a   X-
  U-   U-   U	l        SSSSX*-
  S4U	l        U	$ US:X  d  US:X  a+  X:  d  XU-
  :  a  X-
  U-   U-   U	l        SSSSSXK-
  4U	l        U	$ )	z?return a base class drawing which ensures all the contents fitsfitexpandr   r   fitxexpandxfityexpandy)r   rW   rX   r   r   r   )rY   kindlpadrpadbpadtpadrK   oWoHr[   xLyLxHyHs                 rA   resizedDrawing.resized-  s@   ZZ[["##'')b;4>rw"W*SUY]V]S]E$JtOGMU4Z_GN!"1Qq 9G  6\dIo27bDjE$JtOGM!"1Qq 3G  6\dIo27bDjU4Z_GN!"1Qq47 3GrC   )r6  r  rX   r  r  rW   )i     )NNNNr   )Nr   )r  r   r   r   r   )r^   r_   r`   ra   rb   r  r  r   r   isNumberisValidChildOrNoneOneOfisStringOrNoneisNumberOrNoner2  r   
SequenceOfr   r   rm   r  r   r  r  r   r   r  r  r  r+  rc   r]   rC   rA   r   r   *  s   J( 99HX+EFh,GHD!!"4:yzeFGXxHO|}eE8XxHOz{ #81OP&~;kl&~;kl
L E":z"Q$ &>@H
 OOL!   ' uC-z,xS>rC   r   c                   "    \ rS rSrSrSS jrSrg)r  i@  z<This is a mixin to provide functionality for edited drawingsNc                    [        U5      nU(       ah  [        US5      (       aW  SUR                  ;  a  UR                  R	                  5       Ul        U(       a	  Uc  [         n[        XE5      UR                  U'   [        US5      (       a3  U(       a,  U(       a  UR                  XbU5        gUR                  X#5        gU(       a  [        XU5        g[        S5      e)zR
effectively setattr(obj,name,value), but takes care of things with _attrMaps etc
r   Nr   zCan't add, need name)
r   rU   r   r   r   r   r   r   ri   
ValueError)rY   r   rl   r   r   r   r  ivcs           rA   _add_DrawingEditorMixin._addB  s     5!GC
++-"||113x'L!-h!<CLL3u#

3T*#CU#344rC   r]   NNNN)r^   r_   r`   ra   rb   r8  rc   r]   rC   rA   r  r  @  s
    F5rC   r  c                       \ rS rSrS rSrg)isStrokeDashArrayiV  c                     [         R                  U5      =(       d@    [        U[        [        45      =(       a#    [        US   5      =(       a    [        US   5      $ rp   )isListOfNumbersOrNonetestr   r   tupler.  isListOfNumbers)rY   rH   s     rA   r?  isStrokeDashArray.testW  sG    $))!,yAtEl1K1xPXYZ[\Y]P^1xcrstuvswcxyrC   r]   N)r^   r_   r`   ra   r?  rc   r]   rC   rA   r<  r<  V  s    zrC   r<  c                       \ rS rSr\" \" \5      \" \5      \" \" SSS5      SS9\" \" SSS5      SS9\" \SS9\" \	S	S9\" \
S
S9\" \SS9\" \SSS9S9	rS rSrg)	LineShapei[  r   r   r~   z#Line cap 0=butt, 1=round & 2=squarer   z$Line join 0=miter, 1=round & 2=bevelz$miter limit control miter line joinsz[numbers] or [phase,[numbers]]zEThe level of transparency of the line, any real number betwen 0 and 1r   r   r   )	r   r   r   r   r    r"   r#   r&   r'   c                     [         S   U l        SU l        SU l        SU l        SU l        S U l        S U l        U R                  U5        g )Nr   r   r   )	STATE_DEFAULTSr   r   r   r   r    r"   r#   r   rY   rn  s     rA   rm   LineShape.__init__j  sM    )-8 !#!2rC   )r   r"   r   r   r    r#   r   N)r^   r_   r`   ra   r   r   isColorOrNoner.  r0  r<  	isOpacityrC  r   rm   rc   r]   rC   rA   rD  rD  [  s     "=1"8,$U1Qq\7\]%eAal8^_'6\]&'8>^_$Y4{|&y6ST$Y4Tcde

HrC   rD  c                   \    \ rS rSr\" \\" \SS9\" \SS9\" \SS9\" \SS9S9rS r	S r
Srg)	Lineit  r   r   )r  rw   rx   ry   rz   c                 ^    [         R                  X5        Xl        X l        X0l        X@l        g r   )rD  rm   rw   rx   ry   rz   )rY   rw   rx   ry   rz   rn  s         rA   rm   Line.__init__|  s$    4$rC   c                 ^    U R                   U R                  U R                  U R                  4$ )r   )rw   rx   ry   rz   r   s    rA   r   Line.getBounds  s!    $''47733rC   )rw   ry   rx   rz   N)r^   r_   r`   ra   r   rD  r   r.  r   rm   r   rc   r]   rC   rA   rL  rL  t  s@    I(+(+(+(+	
H4rC   rL  c                   t    \ rS rSr\" \\" \SS9\" \SS9\" \	SS9\" \	SSS9\" \
" \\5      5      S	9rS
 rSrg)
SolidShapei  z$filling color of the shape, e.g. redr   zGthe level of transparency of the color, any real number between 0 and 1r   r   r   r   )r  r(   r$   r%   r'   r)   c                 X    [         S   U l        S U l        [        R	                  X5        g )Nr(   )rF  r(   r$   rD  rm   rG  s     rA   rm   SolidShape.__init__  s&    '4 	4$rC   )r(   r$   N)r^   r_   r`   ra   r   rD  r   rI  rJ  rC  r0  r   r   r   rm   rc   r]   rC   rA   rR  rR    sS     I 4Z["92{|$Y4OP$Y4TcdemM BC
H%rC   rR  r   )r~   r~      r   )moveTolineTocurveTo	closePathc                    U R                   nSnSnSnU(       + nU R                   Hm  n	U	[        :X  a7  U(       a+  U(       a$  W
[        :w  a  US-  nU(       a  U[           " 5         US-  n[        U	   nX[-   nX   " XEU 6   UnU	[        :X  a  US-  nU	n
Mo     U(       a+  U(       a$  W
[        :w  a  US-  nU(       a  U[           " 5         Xv:H  $ )zHelper function for renderers.r   r   )r   	operators_MOVETO
_CLOSEPATH_PATH_OP_ARG_COUNT)r  	drawFuncs	countOnly
forceCloser   r   hadClosePath	hadMoveToactiveopr   nArgsjs                rA   _renderPathrh    s     [[F	ALI]Fnn=j A%L!*-/NI"2&Iv{#AL  iCOj!#$$rC   znon-zerononzerozeven-oddevenoddc                       \ rS rSrSr\" \\" \5      \" \5      \" \	5      \" \
" \" SS5      5      5      \" \" \\5      5      S9rSSSS\4S jrS	 rS
 rS rS rS rS rSrg)Pathi  z2Path, made up of straight lines and bezier curves.rz  rx  )r  r   r[  
isClipPath	autocloser)   Nr   c                     [         R                  X5        Uc  / nUc  / n[        U5      S-  S:X  d   S5       eXl        X l        X0l        X@l        XPl        g Nr~   r   -Point list must have even number of elements!)rR  rm   r6   r   r[  rm  rn  r)   )rY   r   r[  rm  rn  r)   rn  s          rA   rm   Path.__init__  sZ    D%>FI6{Q!#T%TT#"$  rC   c                     U R                  U R                  S S  U R                  S S  5      nUR                  U R	                  5       5        U$ r   )r   r   r[  r   r   rY   news     rA   r   	Path.copy  s?    nnT[[^T^^A->?$,,./
rC   c                 z    U R                   R                  X/5        U R                  R                  [        5        g r   )r   r   r[  r   r\  r.  s      rA   rV  Path.moveTo  (    A6"g&rC   c                 z    U R                   R                  X/5        U R                  R                  [        5        g r   )r   r   r[  r   _LINETOr.  s      rA   rW  Path.lineTo  ry  rC   c                 ~    U R                   R                  XX4XV/5        U R                  R                  [        5        g r   )r   r   r[  r   _CURVETO)rY   rw   rx   ry   rz   x3r   s          rA   rX  Path.curveTo  s-    BBB34h'rC   c                 B    U R                   R                  [        5        g r   )r[  r   r]  r   s    rA   rY  Path.closePath  s    j)rC   c           	         U R                   n / nUR                  nUR                  n/ nUR                  nUR                  nSnU R                   H{  n	[        U	   n
X-   nU
S:X  a  U" X   5        U" XS-      5        OKU
S:X  aE  XUS2   u  pnU" [        US   XU5      5        XS-   US2   u  nnnU" [        US   UUU5      5        UnM}     [        U5      [        U5      [        U5      [        U5      4$ !   [        U5      s $ = f)Nr   r~   r   rU  r1   )	r   r   r   r[  r^  r   rG   r5   r   )rY   r   rL   aXeXrM   aYeYr   re  rf  rg  rw   ry   r  rx   rz   r   s                     rA   r   Path.getBounds  s   	)ABBABBAnn*2.I!8vyMvc{OAX%!e}HB"(2rR89%c!AgHBr"(2r"R89 % q6#a&QA..	) ((s   C*C9 9D)rn  r)   rm  r[  r   )r^   r_   r`   ra   rb   r   rR  r   rA  rC  NoneOrr0  r   r   r   rm   r   rV  rW  rX  rY  r   rc   r]   rC   rA   rl  rl    s}    <Jo. 1!), eE(:!;<mM BC
H #dqD[h !
''(*)rC   rl  c           	         Uc  Un/ n[         S-  n	X9-  n
XI-  nX:  a  US[         -  -   nX:  a  M  [        X-
  5      nUR                  nUS:  a<  [        X=(       d    S5      nXi-  n[	        [        X-  S-   5      S5      nX-  nUS-  nOSnSn[        U5       H0  nXU-  -   nU" X[        U5      -  -   X[        U5      -  -   45        M2     U(       a  UR                  5         U$ )N     f@r~   MbP?r        ?r   r   )
r   rX  r   rG   r5   r  r   r   r   reverse)centerxcenteryradiusstartangledegreesendangledegreesyradiusdegreedeltar  r   degreestoradians
startangleendanglerJ   r   radiansdeltar0   s                   rA   getArcPointsr    s    &F%x"3J/H

AbD= 
('(EATz% 1r2"3E&s*+A.w	Qq--	7#e*$$WSZ-?%?
@A   MrC   c                   "    \ rS rSrSrSS jrSrg)ArcPathi*  zPath with an addArc methodNc
                     [        XX4XVXyS9n
U(       d  [        U R                  5      (       d!  U R                  U
S   S   U
S   S   5        U
S	 U
 H  u  pU R	                  X5        M     g )N)r  r  r  r   r   )r  r6   r[  rV  rW  )rY   r  r  r  r  r  r  r  rV  r  r  rH   rI   s                rA   addArcArcPath.addArc,  s`    6ot  RT^^,,KK!Q!Q(!DAt{{1'ArC   r]   r:  )r^   r_   r`   ra   rb   r  rc   r]   rC   rA   r  r  *  s
    $(rC   r  c                 R   / n/ nU  H  n[        U5      (       d  Un/ n	O
US   nUSS  n	U[        ;  a  [        SU-  5      e[        R                  U5      n
[	        U	5      [
        U
   :w  a  [        U< S[        U	5      < 35      eUR                  U
5        UR                  [        U	5      5        M     US4US44 H+  u  p[        U[	        U5      S5       H  nXm   U-   Xm'   M     M-     UR                  SS 5      nU(       Ga  S GH  nX   XS-      4nUS   c  US   c  M  XoS S2   n[        U5      [        U5      nnUS   b  US   b  [        U5      [        U5      nnUU-
  n[        U5      S:  a6  UU-
  U-  n[        U[	        U5      S5       H  nUUXm   U-
  -  -   Xm'   M     M  [        U[	        U5      S5       H  nUU-   S	-  Xm'   M     M  US   b  US   U-
  OUS   U-
  n[        U[	        U5      S5       H  nXm==   U-  ss'   M     GM     [        XeU40 UD6$ )
Nr   r   zbad operator name %sz bad arguments r~   bbox)r   r   gư>r  )r   _PATH_OP_NAMESr6  r  r6   r^  r  r   r   r   r   r   rG   r5   absrl  )pathSegsrm  r  r  rn  Or  segopNamer[  re  r   r  r   r  rg  r   r   r   facs                       rA   
definePathr  3  s9   
A
ASzzFDVFqr7D'3f<==!!&)t9(,,fSYGHH		d  1v1v~qQ"A46AD #  66&DAqS	!At|!h$Q$Aq63q6qAtAaD$41vs1v1ss8T>Q3)C"1SVA. 3Q</ / #1SVA. !As{ /
 !"! 0AaD1HadQhqQ*ADAID +) . J$$$rC   c                       \ rS rSrSr\" \\" \5      \" \5      \" \SS9\" \SS9\" \5      \" \5      S9r	SS jr
S rS	 rS
rg)Rectie  z)Rectangle, possibly with rounded corners.width of the object in pointsr   height of the objects in points)r  rH   rI   rW   rX   rxryc                 v    [         R                  X5        Xl        X l        X0l        X@l        XPl        X`l        g r   )rR  rm   rH   rI   rW   rX   r  r  )rY   rH   rI   rW   rX   r  r  rn  s           rA   rm   Rect.__init__q  s.    D%
rC   c                     U R                  U R                  U R                  U R                  U R                  5      nUR                  U R                  5       5        U$ r   )r   rH   rI   rW   rX   r   r   rt  s     rA   r   	Rect.copyz  sB    nnTVVTVVTZZE$,,./
rC   c                     U R                   U R                  U R                   U R                  -   U R                  U R                  -   4$ r   rH   rI   rW   rX   r   s    rA   r   Rect.getBounds  s3     3TVVdkk5IJJrC   )rX   r  r  rW   rH   rI   Nr@  )r^   r_   r`   ra   rb   r   rR  r   r.  r   rm   r   r   rc   r]   rC   rA   r  r  e  sW    3J""X+JKh,MN(#(#
H
KrC   r  c                   x    \ rS rSrSr\" \\" \5      \" \5      \" \	SS9\" \	SS9\" S5      S9r
S rS	 rS
 rSrg)Imagei  zBitmap image.r  r   r  N)r  rH   rI   rW   rX   r  c                 j    [         R                  X5        Xl        X l        X0l        X@l        XPl        g r   )rR  rm   rH   rI   rW   rX   r  )rY   rH   rI   rW   rX   r  rn  s          rA   rm   Image.__init__  s)    D%
	rC   c                     U R                  U R                  U R                  U R                  U R                  U R
                  5      nUR                  U R                  5       5        U$ r   )r   rH   rI   rW   rX   r  r   r   rt  s     rA   r   
Image.copy  sH    nnTVVTVVTZZdiiP$,,./
rC   c                     U R                   U R                  U R                   U R                  -   U R                  U R                  -   4$ r   r  r   s    rA   r   Image.getBounds  s3     3TVVdkk5IJJrC   )rX   r  rW   rH   rI   )r^   r_   r`   ra   rb   r   rR  r   r.  r2  r   rm   r   r   rc   r]   rC   rA   r  r    sO    J""^1PQn2STD!
H
KrC   r  c            
       V    \ rS rSr\" \\" \SS9\" \SS9\" \SS9S9rS r	S r
S	 rS
rg)Circlei  x of the centrer   y of the centreradius in points)r  r  r  rc                 R    [         R                  X5        Xl        X l        X0l        g r   )rR  rm   r  r  r  )rY   r  r  r  rn  s        rA   rm   Circle.__init__  s    D%rC   c                     U R                  U R                  U R                  U R                  5      nUR	                  U R                  5       5        U$ r   )r   r  r  r  r   r   rt  s     rA   r   Circle.copy  s<    nnTWWdggtvv6$,,./
rC   c                     U R                   U R                  -
  U R                  U R                  -
  U R                   U R                  -   U R                  U R                  -   4$ r   )r  r  r  r   s    rA   r   Circle.getBounds  sH    $&& $''DFF"2DGGdff4DdggPTPVPVFVWWrC   )r  r  r  Nr^   r_   r`   ra   r   rR  r   r.  r   rm   r   r   rc   r]   rC   rA   r  r    s?    J((9:((9:'9:
H
XrC   r  c                   b    \ rS rSr\" \\" \SS9\" \SS9\" \SS9\" \SS9S9rS r	S	 r
S
 rSrg)Ellipsei  r  r   r  zx radiuszy radius)r  r  r  r  r  c                 ^    [         R                  X5        Xl        X l        X0l        X@l        g r   )rR  rm   r  r  r  r  )rY   r  r  r  r  rn  s         rA   rm   Ellipse.__init__  s$    D%rC   c                     U R                  U R                  U R                  U R                  U R                  5      nUR                  U R                  5       5        U$ r   )r   r  r  r  r  r   r   rt  s     rA   r   Ellipse.copy  sB    nnTWWdggtww@$,,./
rC   c                     U R                   U R                  -
  U R                  U R                  -
  U R                   U R                  -   U R                  U R                  -   4$ r   )r  r  r  r  r   s    rA   r   Ellipse.getBounds  sH    GGdgg%tww'8$''DGG:KTWWW[W^W^M^__rC   )r  r  r  r  Nr  r]   rC   rA   r  r    sH    J((9:((9:(
3(
3	
H
`rC   r  c                       \ rS rSrSr\" \\" \SS9\" \SS9\" \SS9\" \5      \" \5      \" \	5      \" \	5      \" \	5      \" \
SS9S9
rS	r  SS jrS rS rS rS rSrg
)Wedgei  zgA "slice of a pie" by default translates to a polygon moves anticlockwise
from start angle to end angler  r   r  r  ztreat as annular ring)
r  r  r  r  r  r  r  radius1yradius1annularr   Nc                     [         R                  X5        XT:  a  US-   nXT:  a  M  XX4U4u  U l        U l        U l        U l        U l        X`l        Xpl        g )Nih  )	rR  rm   r  r  r  r  r  r  r  )	rY   r  r  r  r  r  r  r  rn  s	            rA   rm   Wedge.__init__  sZ    D%/-c1O / fH 	^dlDK1GI]rC   c                     [        U SS 5      nUc  U R                  n[        U SS 5      n[        U SU5      nUc  UnXU4$ )Nr  r  r  )r   r  )rY   r  r  r  s       rA   
_xtraRadiiWedge._xtraRadii  sM    $	40?dkkG$y$/4
73?hG))rC   c                 B   U R                   nU R                  nU R                  nU R                  5       u  pEnU R                  nU R
                  n[        S-  n	Xy-  n
X-  nX:  a  US[        -  -   nX:  a  M  [        X-
  5      n/ nUS:  aH  [        U R                  =(       d    SU5      nX-  n[        S[        X-  S-   5      5      nUU-  nUS-  nOSnSn/ nUR                  nUR                  n[        U5       H&  nXU-  -   nU" [        U5      [        U5      45        M(     U H   u  nnU" XU-  -   5        U" X$U-  -   5        M"     US:X  d  Uc  US:X  d  Uc  U" U5        U" U5        O6UR!                  5         U H   u  nnU" XU-  -   5        U" X&U-  -   5        M"     U R"                  (       a  [%        ['        U S[(        5      S	9nUR+                  US   US   5        [        SSU-  S5       H  nUR-                  UU   UUS-      5        M      UR/                  5         UR+                  USU-     USU-  S-      5        [        SU-  S-   S
U-  S5       H  nUR-                  UU   UUS-      5        M      UR/                  5         U$ [1        U5      $ )Nr  r~   r  r  r   r  r   r)   )r)   r   )r  r  r  r  r  r  r   rX  rG   r  r5   r  r   r   r   r   r  r  rl  r   r   rV  rW  rY  Polygon)rY   r  r  r  r  r  r  r  r  r  r  r  rJ   r   r  r  r0   CACAAr   r   r/   r  rH   s                           rA   	asPolygonWedge.asPolygon  s   ,,%)__%6"( 22..e8&7
"3!"}H !h)*;d..4"U;K&7LAc%,S012A 7LFAALiiMM1XE\11EUCJ'(  CAagQhgai   QJ'/!x?OgJ'
JJL!'!)#$'1*$%  <<gd:}EFAHHVAYvay)1QqS^6!A#;/ $KKMHHVAaC[!A/1Q3q51Q'6!A#;/ (KKMH6?"rC   c                     U R                  U R                  U R                  U R                  U R                  U R
                  5      nUR                  U R                  5       5        U$ r   )r   r  r  r  r  r  r   r   rt  s     rA   r   
Wedge.copy*  sT    nnT\\LLKK**((	*
 	$,,./
rC   c                 >    U R                  5       R                  5       $ r   )r  r   r   s    rA   r   Wedge.getBounds3  s    ~~))++rC   )r  r  r  r  r  r  r  )NF)r^   r_   r`   ra   rb   r   rR  r   r.  r2  rC  r   r  rm   r  r  r   r   rc   r]   rC   rA   r  r    s    ( Jx->?x->?h,>?(2&x0~.~./y.EF

H K]a	*4#l,rC   r  c                   H    \ rS rSrSr\" \\" \SS9S9r	/ 4S jr
S rS rS	rg
)r  i6  zGDefines a closed shape; Is implicitly
joined back to the start for you.5list of numbers in the form x1, y1, x2, y2 ... xn, ynr   r  r   c                     [         R                  X5        [        U5      S-  S:X  d   S5       eU=(       d    / U l        g rp  )rR  rm   r6   r   )rY   r   rn  s      rA   rm   Polygon.__init__>  s7    D%6{Q!#T%TT#lrC   c                 z    U R                  U R                  5      nUR                  U R                  5       5        U$ r   r   r   r   r   rt  s     rA   r   Polygon.copyC  0    nnT[[)$,,./
rC   c                 ,    [        U R                  5      $ r   r   r   r   s    rA   r   Polygon.getBoundsH      t{{++rC   r   N)r^   r_   r`   ra   rb   r   rR  r   rA  r   rm   r   r   rc   r]   rC   rA   r  r  6  s4    ) Jo3jk
H ! #

,rC   r  c                   H    \ rS rSrSr\" \\" \SS9S9r	/ 4S jr
S rS rS	rg
)PolyLineiK  zSeries of line segments.  Does not define a
closed shape; never filled even if apparently joined.
Put the numbers in the list, not two-tuples.r  r   r  c                 0   [         R                  X5        U=(       d    / n[        U5      nU(       a^  [        US   5      (       a2  / nU H'  u  pVUR	                  U5        UR	                  U5        M)     UnO[        U5      S-  S:X  d   S5       eXl        g )Nr   r~   rq  )rD  rm   r6   r   r   r   )rY   r   rn  	lenPointsrr   rH   rI   s          rA   rm   PolyLine.__init__T  s    4$2K	VAY#EQHHQKHHQK $ 6{Q!+\-\\+rC   c                 z    U R                  U R                  5      nUR                  U R                  5       5        U$ r   r  rt  s     rA   r   PolyLine.copyc  r  rC   c                 ,    [        U R                  5      $ r   r  r   s    rA   r   PolyLine.getBoundsh  r  rC   r  N)r^   r_   r`   ra   rb   r   rD  r   rA  r   rm   r   r   rc   r]   rC   rA   r  r  K  s4    4 Io3jk
H ! 
,rC   r  c                       \ rS rSrSr\" \\" \" \	\
" \	SS94S5      SS9\" \" \\	S45      S	S9\" \" \\	S
45      SS9S9rSS/ 4S jrSrg)Hatchingik  z\define a hatching of a set of polygons defined by lists of the form [x0,y0,x1,y1,....,xn,yn]r   )r  z
xy list(s)z8list(s) of numbers in the form x1, y1, x2, y2 ... xn, ynr   zangle(s)zCthe angle or list of angles at which hatching lines should be drawnzspacings(s)z-orthogonal distance(s) between hatching lines)r  xyListsanglesspacingsr~   -   c           
      z   [         R                  " U 40 UD6  [        U5      (       a  U4n[        U5      (       a  U4n[        U5      (       a  U4n[	        U5      [	        U5      -
  nUS:  a  [        U5      XQS   /-  -   nX0l        X l        Xl        U R                  nU R                  n[        U5       GH   u  pXX   n	[        U5      n[        U5      n
[        U5      nSnU* nU HJ  n[        S[	        U5      S5       H-  nXS-      U
-  X   U-  -
  n[!        UU5      n[#        UU5      nM/     ML     [%        ['        X-  5      5      S-
  n[%        ['        X-  5      5      S-   n[        UU5       GH=  n/ nU	U-  nU H  n[	        U5      S-
  n[        S[	        U5      S5       H  nUU   nUUS-      nUU
-  UU-  -   nUU
-  UU-  -
  nX   nXS-      nUU
-  UU-  -   nUU
-  UU-  -
  nUU:  a  UU:  d  UU:  a)  UU:  a#  UR)                  UUU-
  UU-
  -  UU-
  -  -   5        UnM     M     UR+                  5         [        S[	        U5      S5       HS  nUU   U
-  UU-  -
  nUU
-  UU   U-  -   nUUS-      U
-  UU-  -
  nUU
-  UUS-      U-  -   nU" UU5        U" UU5        MU     GM@     GM     g )Nr   r1   ir~   r   )rl  rm   rA  r.  r6   r   r  r  r  rV  rW  	enumerater   r   r   r   rG   r5   r  r   r   r   )rY   r  r  r  kwdsr   rV  rW  r  spacingcosThetasinThetaspanMinspanMaxr  rg  rI   	spanStartspanEndstepnodeXstripeYr
  r   r   a1b1rH   rw   rx   s                                 rA   rm   Hatching.__init__t  s   d#d#7##zGFYFH {HKH%Q3H~a"&66H !&)HAkGENE5zH5zH GhG qQ*AA#xX5A!!GnG!!GnG	 +  E'/23a7I512Q6G i0!$, !AAqA"1SVA.aDacFxZ!H*4xZ!H*4DcFxZ(
2xZ(
2 wJ2w;2g:"g+!LLRUWRZ,@"R%,H)HI / !& 

 qUA.Aa)GH,<<A(q()::Aac
8+gh.>>A(51:h+>>A 1QK1QK /7 1- *rC   )r  r  r  N)r^   r_   r`   ra   rb   r   rl  r   EitherOrrA  r3  r.  r   rm   rc   r]   rC   rA   r   r   k  s    fDxOWX9Y(Z[gh  oi  jh'LM  TY  Z(?=)Q R  YH  I
H !""b M rC   r   c                     [        U SU5      nUR                  U5      nUS:  a   [        U SS5      n	U	[        US U X4U5      -   nU$ )N_dpr   _dpLen)r   rfindr   )
tAr7   r4   r+   r*   encodingpivotCharacterdpr   dpOffss
             rA   numericXShiftr    sP    	E.	)B

2A!tHQ'[bq(HEEHrC   c                       \ rS rSrSr\" \" \SS9\" \SS9\" \SS9\" SSS9\" \S	S9\" \	S
S9\" \
" SSSS5      SS9\" \5      \" \
" SSSSSSSS5      SS9S9	rSrS rS rS rS rSrg) Stringi  zeNot checked against the spec, just a way to make something work.
Can be anchored left, middle or end.zx point of anchoringr   zy point of anchoringzthe text of the stringNz_font name of the text - font is either acrobat standard or registered when using external font.z	font sizezcolor of the fontr-   middler3   numericz(treat (x,y) as one of the options below.r   r   r~   r}   r      rU     z.Control whether text is filled/stroked etc etc)	rH   rI   r7   r+   r*   r(   r,   r  textRenderModeutf8c                     Xl         X l        X0l        SU l        [        S   U l        [        S   U l        [        S   U l        U R                  U5        g )Nr-   r+   r*   r(   )	rH   rI   r7   r,   rF  r+   r*   r(   r   )rY   rH   rI   r7   rn  s        rA   rm   String.__init__  sJ    	!&z2&z2'42rC   c                     U R                   [        U R                  U R                  U R                  U R
                  5      -   $ r   )rH   r   r7   r+   r*   r  r   s    rA   getEastString.getEast  s,    vvDIIdmmDMM4==YYYrC   c                     U R                  U R                  U R                  U R                  5      nUR	                  U R                  5       5        U$ r   )r   rH   rI   r7   r   r   rt  s     rA   r   String.copy  s<    nnTVVTVVTYY7$,,./
rC   c           	         U R                   n[        XR                  U R                  U R                  5      nU R
                  nU R                  nUS:w  aO  US:X  a	  USU-  -  nO@US:X  a  XB-  nO5US:X  a/  U[        X1X R                  U R                  U R                  5      -  nX@R                  SU R                  -  -
  XB-   U R                  U R                  -   4$ )Nr-   r"  r  r3   r#  g?)	r7   r   r+   r*   r  r,   rH   r  rI   )rY   r;   r4   r  rH   s        rA   r   String.getBounds  s    II--dmmD__FFw;8|SU
UY]2--dmmTT66C$--//dfft}}6LMMrC   )r(   r+   r*   r7   r,   rH   rI   )r^   r_   r`   ra   rb   r   r   r.  isStringrI  r0  r   r  rm   r+  r   r   rc   r]   rC   rA   r!  r!    s    , '=>'=>H*BC  +L  Mk: 4GH!%y"IOyz)%eAa!Aa!&<Brs

H HZ
NrC   r!  c                       \ rS rSrSrS rSrg)r   i  aW  A simple template for creating a new node.  The user (Python
programmer) may subclasses this.  provideNode() must be defined to
provide a Shape primitive when called by a renderer.  It does
NOT inherit from Shape, as the renderer always replaces it, and
your own classes can safely inherit from it without getting
lots of unintended behaviour.c                     [        S5      e)zOverride this to create your own node. This lets widgets be
added to drawings; they must create a shape (typically a group)
so that the renderer can draw the custom node.4this method must be redefined by the user/programmerr   r   s    rA   r   UserNode.provideNode  s    
 ""XYYrC   r]   N)r^   r_   r`   ra   rb   r   rc   r]   rC   rA   r   r     s    %ZrC   r   c                       \ rS rSrSrS rSrg)
DirectDrawi  z"try to draw directly on the canvasc                     [        S5      e)Nr4  r   )rY   rZ   s     rA   drawDirectlyDirectDraw.drawDirectly  s    !"XYYrC   r]   N)r^   r_   r`   ra   rb   r9  rc   r]   rC   rA   r7  r7    s    ,ZrC   r7  c                  4   [        SSSS5      n SS KnUR                  n[        R                  R                  nU" S5        U" U R                  5       5        U" S5        U R                  5         U" S5        U" S5        U ?U" S	5        U R                  5         g )
Nr!   r-  2   r   za Rectangle: z
verifying...z OK
zdeleting rect.width zverifying...)r  pprintr  stdoutr  r   r   rW   )r  r=  ppr4   s       rA   r?  r?    s~    R3rA	B

AoqHHJgJ 	nHHJrC   __main__r   )r   z		)FF)NNN)b__version__rb   r  r  mathr   r   r   r   r   r   reportlab.platypusr	   reportlab.rl_configr
   r   r   _baseGFontNamer   r   reportlab.libr   r   reportlab.lib.validatorsreportlab.lib.utilsr   r   r  isNumberInRangerJ  reportlab.lib.attrmapreportlab.lib.rl_accelr   reportlab.pdfbase.pdfmetricsr   reportlab.lib.fontsr   reportlab.pdfgen.canvasr   r   _baseGFontNameB_baseGFontNameI_baseGFontNameBINON_ZERO_WINDINGEVEN_ODDblackrF  r   rB   rN   rP   re   r{   r   r   r   r   r   rI  rM  rf  ro  r   r  	Validatorr<  rD  rL  rR  r   r   r\  r{  r~  r]  r^  r  rh  _fillModeMaprl  rU  r  r  r  r  r  r  r  r  r  r  r   r  r!  r   r7  r?  r^   r]   rC   rA   <module>rW     sw  
 G  3 3 ' y y     & .?1Q'(	 # ) 4 % @q+q+!,  &  6<<	
 1 Q a  t T 4 U u Q  !" #& '( )* 7+6   D-, ,& &$"3j0(KQO/ KQZ{E {z	<"@
TeX Tl5 5,z	 z &'  249 4&% %& *.eAh &(J! 8%< 	d}M=}M=
F): F)P f6(d ( aA! 0%dK: K:KJ K8XZ X,`j `.i,J i,V,j ,*,y ,@V t V p 8<= 1NU 1NfZ" ZZ Z
" ZF rC   