
    kf                     x   d Z dZddlZddlZddlmZmZmZmZm	Z	m
Z
 ddlmZ ddlmZmZmZmZmZ ddlmZ ddlmZ dd	lT dd
lmZmZ  e edd                    Zdd	lT ddlm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z&m'Z'  e$edd          Z( e$edd          Z) e$edd          Z*dZ+dZ,i dddej-        ddddddddddddddddddd dd!ej-        d"e&d#dd$ed%d&Z.dd	l/T d' Z0d( Z1 G d) d*          Z2 G d+ d,          Z3d- Z4d. Z5d/ Z6d0 Z7 G d1 d2e3e2          Z8 G d3 d4e8          Z9dmd5Z:dmd6Z;dnd8Z<d9 Z= G d: d;e9e          Z> G d< d=          Z? G d> d?e@          ZA eA            ZA G d@ dAe8          ZB G dB dCeB          ZC G dD dEeB          ZD eE eFdF                    \  ZGZHZIZJdGZKg dHZLdodIZMdde'e'dJe'dKe'e&e&dLe&dMe&iZN G dN dOeD          ZO eO            ZPdpdPZQ G dQ dReO          ZRg dddfdSZS G dT dUeD          ZT G dV dWeD          ZU G dX dYeD          ZV G dZ d[eD          ZW G d\ d]eD          ZX G d^ d_eD          ZY G d` daeB          ZZ G db dceO          Z[defddZ\ G de dfe8          Z] G dg dhe2          Z^ G di dje8          Z_dk Z`eadlk    r e`             dS dS )qz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           	         d}| D ]!}t          |t          |||                    }"t          |           |z  }|}	|d         dk    r	| }
|	|z
  }	n|d         dk    rd}
n| dz  }
|	|
z   }	|d         dk    r| }|dk    rd}nR|dk    r| }nH| dz  }nA|d         d	k    rd}|dk    r|}n*|dk    rd}n!|dz  }n| dz  }|dk    r| }n|dk    r|}nd}||
||||	fS )
Nr   sng       @eendr-   w)maxr   len)textfontr*   leadingr,   	boxAnchorr4   thytybxbxts                Y/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/reportlab/graphics/shapes.py_textBoxLimitsrB   C   sb   	A 1 1+ah//00D		'A	B|SR!V	1s		RV"W}cRu1bb  r""2c6bb	2		u1bb  q""S5bbRVuB3bb  r""br1aR    c           	         t          t          |          | |f| |z   |f| |z   ||z   f| ||z   ff          }d |D             }d |D             }t          |          t          |          t          |          t          |          |fS )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
    c                     g | ]
}|d          S r    .0xs     rA   
<listcomp>z%_rotatedBoxLimits.<locals>.<listcomp>k       !1rC   c                     g | ]
}|d          S r   rG   rH   s     rA   rK   z%_rotatedBoxLimits.<locals>.<listcomp>l   rL   rC   )zTransformPointsrotateminr5   )rJ   yr4   r<   angleCXYs           rA   _rotatedBoxLimitsrW   e   s    
 	1qs1gqs1Q3i1Q3'HIIAqAqAq663q663q663q661,,rC   c                       e Zd ZdZd ZdS )_DrawTimeResizeablez:Addin class to provide the horribleness of _drawTimeResizec                     t          | d          rE| j        }|j        }||c|_        |_        t          |d          r|                    ||           d S d S d S )N_canvas_drawTimeResize)hasattrr[   _drawingwidthheightr\   )selfr4   r<   canvasdrawings        rA   r\   z#_DrawTimeResizeable._drawTimeResizeq   su    4	"" 	,\FoG,-q)GM7>v/00 ,&&q+++++	, 	,, ,rC   N)__name__
__module____qualname____doc__r\   rG   rC   rA   rY   rY   o   s)        DD, , , , ,rC   rY   c                       e Zd Zi fdZdS )_SetKeyWordArgsc                 \    |                                 D ]\  }}t          | ||           dS )z9In general properties may be supplied to the constructor.N)itemssetattr)ra   keywordskeyvalues       rA   __init__z_SetKeyWordArgs.__init__z   s>    "..** 	& 	&JCD#u%%%%	& 	&rC   N)rd   re   rf   rp   rG   rC   rA   ri   ri   y   s+         " & & & & & &rC   ri   c                     d | D             }|sd S |d         \  }}}}|dd          D ]'\  }}}}	||k     r|}||k    r|}||k     r|}|	|k    r|	}(||||fS )Nc                     g | ]}||S NrG   rH   s     rA   rK   z"getRectsBounds.<locals>.<listcomp>   s    ...qrC   r   r   rG   )
rectListLxMinyMinxMaxyMaxx1y1x2y2s
             rA   getRectsBoundsr~      s    ..H...ATTqTD$dabbE  RR99D99D99D99D$d##rC   c                    |d||z
  z  z
  | z
  }d|d|z  z
  | z   z  }|| z
  }| g}||z  d|z  |z  z
  }|dk    rt          |          }|dk     r| }d||z   z  }	g }
	 |
                    |	|z             n#  Y nxY w	 |
                    ||	z             n#  Y nxY w|dz  }|dz  }|
D ]9}d|cxk    rdk    r*n |                    ||||z  |z   z  |z   z  | z              :|                    |           |S )ag  
    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)y0r{   r}   y3abcrV   dqRr;   s               rA   _getBezierExtremar      sT   0 	BrEl2oAAbDnAeA	A 	
!ac!eA!ttGGQ33QB!A#J	HHQqSMMMM	D	HHQqSMMMM	D	S	Q 	- 	-A!wwwwQwwwwwAqs1uIaK+,,,HHRLLLHs   A5 5A9=B Bc           
      N   t          |           }| fd}t          t          |t          d|d                              }t          t          |t          d|d                              }t	          |          t	          |          t          |          t          |          fS )Nc                     ||          S rs   rG   )ips     rA   <lambda>zgetPathBounds.<locals>.<lambda>   s
    QqT rC   r   r   r   )r6   listmaprangerQ   r5   )pointsr0   fxsyss        rA   getPathBoundsr      s    FA!!!A	c!E!AaLL!!	"	"B	c!E!AaLL!!	"	"BGGSWWc"ggs2ww//rC   c                     | d         }t          |          rRd | D             }d | D             }t          |          t          |          t          |          t          |          fS t          |           S )z"Helper function for list of pointsr   c                     g | ]
}|d          S rF   rG   rI   xys     rA   rK   z#getPointsBounds.<locals>.<listcomp>       (((be(((rC   c                     g | ]
}|d          S rN   rG   r   s     rA   rK   z#getPointsBounds.<locals>.<listcomp>   r   rC   )r   rQ   r5   r   )	pointListfirstr   r   s       rA   getPointsBoundsr      st    aLEU|| (((i(((((i(((BR#b''3r7733Y'''rC   c                   Z    e Zd ZdZ e            Zd ZddZd ZddZ	d Z
er	 d	 Zd
 ZdS )Shapea1  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                 :    t          d| j        j        z            )zReturn a clone of this shape.z!No copy method implemented for %s)NotImplementedError	__class__rd   ra   s    rA   copyz
Shape.copy   s     ""EH_"_```rC   r   c                 n    i }| j                                         D ]\  }}|dd         dk    r|||<   |S )zDInterface to make it easy to extract automatic
        documentationr   r   _)__dict__rk   )ra   recurpropsrn   ro   s        rA   getPropertieszShape.getProperties   sJ     ---// 	# 	#JC1Q3x3"c
rC   c                 :    | j                             |           dS )zfSupports the bulk setting if properties from,
        for example, a GUI application or a config file.N)r   update)ra   r   s     rA   setPropertieszShape.setProperties   s      	U#####rC    c                     t          |                                                                           }|                                 |r|dz   }|D ]\  }}t	          ||d|           dS )zConvenience. Lists them on standard output.  You
        may provide a prefix - mostly helps to generate code
        samples for documentation..z = N)r   r   rk   sortprint)ra   prefixpropListnamero   s        rA   dumpPropertieszShape.dumpProperties  s    
 **,,224455 	"c\F% 	7 	7MT5uu56666	7 	7rC   c                    | j         | j                                        D ]'}|d         dk    r|| j         v sJ d|d|             (| j                                         D ]i\  }}t	          | |          sJ d|d|             t          | |          }|                    |          sJ d|d	|d
| j        j                    hdS dS )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   keysrk   r]   getattrvalidater   rd   )ra   rn   attr	metavaluero   s        rA   verifyzShape.verify  sF    =$}))++ e eq6S==$-////Z]Z]Z]_c_c1d///#'=#6#6#8#8 K KitT**YYYdddTXTX,YYYYd++ ))%00  K  K  Kejejejlplplprv  sA  sJ  sJ  3K  K  K  K  K %$K KrC   c                 (    t          | ||           dS )zSBy default we verify.  This could be off
            in some parallel base classes.N)validateSetattr)ra   r   ro   s      rA   __setattr__zShape.__setattr__%  s     De,,,,,rC   c                      t          d          )5Returns bounding rectangle of object as (x1,y1,x2,y2)z+Shapes and widgets must implement getBoundsr   r   s    rA   	getBoundszShape.getBounds*  s    !"OPPPrC   NrN   )r   )rd   re   rf   rg   AttrMapr   r   r   r   r   r   r
   r   r   rG   rC   rA   r   r      s          wyyHa a a   $ $ $
7 
7 
7 
7K K K"  -	6	- 	- 	-
Q Q Q Q QrC   r   c                      e Zd ZdZ e eedd           eed           eed           eedd           eed	d          
          Z	d Z
d Zd dZd Zd dZd Zd Zd Zd!dZd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )"Groupa  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                     | j                                         | _         g | _        d| _        |D ]}|                     |           t
                              | |           dS )zInitial 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   addri   rp   )ra   elementsrm   elts       rA   rp   zGroup.__init__=  se     ++--& 	 	CHHSMMMM 	  x00000rC   c                     |rW|t          | j                                                  vrt          t                    | j        |<   t          | ||           dS dS )zLif name is not None add an attribute pointing to node and add to the attrMapN)r   r   r   AttrMapValueisValidChildrl   )ra   r   nodes      rA   _addNamedNodezGroup._addNamedNodeM  sa     	&4 2 2 4 45555&2<&@&@d#D$%%%%%	& 	&rC   Nc                     |Kt          |          s
J d            | j                            |           |                     ||           dS dS )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   )ra   r   r   s      rA   r   z	Group.addT  sa    
 %%ZZ'ZZZZM  &&&tD))))) rC   c                 F    |                      |           | j        d         S )Nr1   )r   r   )ra   r   s     rA   _nnz	Group._nn^  s    }R  rC   c                     |`t          |          s
J d            |dk     r|g| j        ||<   n| j                            ||           |                     ||           dS dS )z4Inserts sub-node n in contents at specified locationNz4Can only insert Shape or UserNode objects in a Groupr   )r   r   insertr   )ra   r   r0   r   s       rA   r   zGroup.insertb  s{    =??ZZ$ZZZZss%&Cac""$$Qq)))tA&&&&& =rC   c                 D   t          | t                    rt          | j        | j                  pt	                      }| j                                        |_        t          |d          r| j        dd         |_        | j	        }|j	        j
        }|D ]u}t          |t                    r|                                }n>t          |t                    r|                                }n|                                } ||           v|                     |           |S )z9Return a new object which only contains primitive shapes.r   N)
isinstanceDrawingr_   r`   r   r   r   r]   r   r   r   UserNodeprovideNodeexpandUserNodesr   _copyNamedContents)ra   objself_contentsr   childnewChilds         rA   r   zGroup.expandUserNodesl  s    g&&J74:dk+J+JUegg}**,,3{##FT^AAA5FS]L" 	 	E%** ( ,,..E5)) ( 0022 ::<<AhKKKK$$$
rC   c                    t                      }t          | d          r| j        |_        t          |d          r| j        dd         |_        |                                 dd         }|r|                    d          }t          |t                    r(|                    |	                                           nt          |t                     rU|
                                }|j        dk    r |j                            |j                   n+|                    |           n|                    |           ||S )z return a fully expanded object	__label__r   Nr   r   )r   r]   r   r   getContentspopr   r   r   r   _exploder   extendr   )ra   r   Pr0   s       rA   r   zGroup._explode  s   gg4$$ 	).CM3{##FT^AAA5FS]qqq! 	aA!X&& 	))))Au%% JJLL;--L''
3333GGAJJJJ


  	 
rC   c                 N    | j         D ]}|j                             |           d S rs   )r   r   )ra   r   r   s      rA   _copyContentszGroup._copyContents  s6    ] 	' 	'EL&&&&	' 	'rC   r   c                 ^   ddl m } | j        }|s&t          | j                                                  }| j                                        D ]]\  }}||v r2|                    |          }t          |||j        |                    ;||v r||vrt          || ||                     ^d S )Nr   )r   )	r   r   r   r   r   r   rk   indexrl   )	ra   r   aKeysnoCopyr   r   kvposs	            rA   r   zGroup._copyNamedContents  s    8d4=#5#5#7#788eM'')) 	) 	)DAqM!!#))!,,QS 12222eQQ(((	) 	)rC   c                     | j                                         |_         |                     |           |                     |           |S )zcopies to obj)r   r   r   r   ra   r   s     rA   _copyzGroup._copy  sD    }**,,3$$$
rC   c                 P    |                      |                                           S )zreturns a copy)r  r   r   s    rA   r   z
Group.copy  s    zz$..**+++rC   c                 T    t          | j        t          |                    | _        dS z&Convenience to help you set transformsN)mmultr   rP   )ra   thetas     rA   rP   zGroup.rotate  s    t~ve}}==rC   c                 V    t          | j        t          ||                    | _        dS r  )r  r   	translate)ra   dxdys      rA   r
  zGroup.translate  s#    t~yR/@/@AArC   c                 V    t          | j        t          ||                    | _        dS r  )r  r   scale)ra   sxsys      rA   r  zGroup.scale  s!    t~uR}}==rC   c                     t          t          | j        t          |                    t          |                    | _        dS r  )r  r   skewXskewY)ra   kxkys      rA   skewz
Group.skew  s/    uT^U2YY??b		JJrC   c                 8    | j         dd         ||fz   | _         dS )z2Convenience function to set the origin arbitrarilyN)r   ra   rJ   rR   s      rA   shiftzGroup.shift  s!    ,aU2rC   c                 x    t           | _        | j                            | j                   || _        || _        dS )z| Convenience function to make a drawing from a group
            After calling this the instance will be a drawing!
        N)r   r   r   r   _xtraAttrMapr_   r`   )ra   r_   r`   s      rA   	asDrawingzGroup.asDrawing  s6     !T.///
rC   c                 N    t          | dd          }| j        }|r
||vr|g|z   }|S )z[Return the list of things to be rendered
        override to get more complicated behaviour
backgroundN)r   r   )ra   r   rT   s      rA   r   zGroup.getContents  s9     Dd++M&!!QQrC   c                 J   | j         rg }| j         D ])}|                    |                                           *t          |          }|d S |\  }}}}| j        }||g||g||g||gg}g }	|D ]%}
|	                    t          ||
                     &t          |	          S d S rs   )r   r   r   r~   r   transformPointr   )ra   r   elemrz   r{   r|   r}   transcorners
newCornerscorners              rA   r   zGroup.getBounds  s    = 	A + +))****""Bz$$NBBNE2wR2r(RG<GJ! A A!!."?"?@@@@":... 4rC   rs   )Nr   )rd   re   rf   rg   r   r   isTransformisListOfShapes	isBooleanr   rp   r   r   r   r   r   r   r   r   r  r   rP   r
  r  r  r  r  r   r   rG   rC   rA   r   r   .  s       < < w L2Vefggg<4QRRR&,y6STTT$Y4O^_```$Y4Tcdeee
 
 
H1 1 1 & & &* * * *! ! !' ' ' '  ,  *' ' '	) 	) 	) 	)  , , ,> > >B B B> > >K K K3 3 3        rC   r   c                     ddl m} | j        } ||          j        }|p|j        }||vr|g||<   dS |||         vr||                             |           dS dS )z7add an import of obj's class to a dictionary of importsr   )	getmoduleN)inspectr+  r   rd   r   )r   Ir0   r+  r   ms         rA   _addObjImportr/    sy    !!!!!!A	!A	QZAzzs!	
!A$	!A 
rC   c                 &   t          | t                    rt          |           S t          |           rdd}| D ]}|dt	          ||          z  z   }t          | t
                    rd|dd         z  S d|dd         t          |           dk    rdpdd	S | t          u r|rt          | |d
           d
S t          | t                    r8|rt          | |           ddl
m}  || j                  \  }}}}}	}
}|r,|t          |           d         }|t          |           d= ng }|                                 }| j        j        dz   }|dd         D ].}|                    |d          }|dt	          ||          z  z  }/|D ]1}|                    |d          }||dt	          ||          dz  }2|                                D ]&\  }}||         }||dt	          ||          dz  }'|dd         d	z   S t%          |           S )zEreturn a repr style string with named fixed args first, then keywordsr   z%s,z[%s]Nr1   (r   ,)EmptyClipPathr   )getfullargspec=)r   floatr   r   _reprr   r6   r4  r/  r   r,  r5  rp   r   r   rd   r   rk   repr)ra   r-  r/   r   r5  argsvarargsvarkwdefaults
kwonlyargskwonlydefaultsannotationskargsr   r0   s                  rA   r8  r8    sy   $u #d||	t ! 	' 	'AEE!AJJ&&AAd4   	BAcrcF?"	B  !"vvc$iil&:s&@b&@&@AA			3mD?333	D		 #mD###******R`R`aeanRoRoOguh
NK 	#h--)Ec(mm^__%%E  N#C'abb 	$ 	$AaAq##AA 	+ 	+AaAQQQuQqzzzz**AA7799 	, 	,CAa!AQQQa



++AA"vczDzzrC   		c           	      x   d}t          | dd           }|r|||dt          |          dz   }| j        }|D ]}t          |t                    rNd|z  }|dz  }t          |dd          }	|	rd|	z   }	|||d	|d
|	dz   }|t          |||||          z   }|dz  }e|||dt          ||          dz   }|S )Nr   r   z.transform = 
zv%dr   r   #r6  z._nn(Group())z.add(z)
)r   r8  r   r   r   _renderGroupPy)
Gpfxr-  r   indentr/   rT   r0   npfxls
             rA   rF  rF    s   
A+d##ACaffSSSqBC!	
A 
? 
?a 		?19DFA+b))AMCE!&&ccc!!!DDAN1T!Af555AFAAsss51::::>>AAHrC   c                     |                     | j                   t                    fd|                                D             S )Nc                 V    i | ]%\  }}|                               |d          |&S rs   )
startswith)rI   r   r   r0   rH  s      rA   
<dictcomp>z_extraKW.<locals>.<dictcomp>2  s8    ???!Q\\#->->?AabbE!???rC   )r   r   r6   rk   )ra   rH  kwr0   s    ` @rA   _extraKWrQ  /  sH    IIdmCA?????rxxzz????rC   c                      e Zd ZdZh dZeh dz
  Z e eed           eed           ed           ee	d           e e
d	d
dd          d           e e
dddd          d           eed           eed           eed          	  	        Z ee e e e
e dd          d                    Ze                    e           d(dZd ZefdZd Zd  Zd! Zd" Zd)d$Zd*d%Zd+d'ZdS ),r   zOutermost 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>   rS  rT  rV  rZ  r\  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)	r_   r`   canvr  hAlignvAlignrenderScaleinitialFontNameinitialFontSizer   r   )loemptyOKzOne or more plot modes)BASEformats     c                     d | _         t          j        | g|R i | || _        || _        d| _        d| _        d| _        d S )Nrd  ri        ?)r  r   rp   r_   r`   rk  rl  rm  )ra   r_   r`   nodesrm   s        rA   rp   zDrawing.__init__d  sS    t.U...X...
rC   c           	      ~   g dg dd}t          |                                 d|          }d| j        j        z   }d}|                                D ]:\  }}|d|dt          |          d	d
                             dd          dz   };|d|z  z   }|d| j        d| j        dz   }|dz   }||z   }|d|z  z   }|S )N)_DrawingEditorMixinr   r   )Color	CMYKColor
PCMYKColor)zreportlab.graphics.shapeszreportlab.lib.colorsra   ExplodedDrawing_z0#Autogenerated by ReportLab guiedit do not edit
zfrom z import r   r1   'r   rD  z(
class %s(_DrawingEditorMixin,Drawing):
z	def __init__(self,width=z,height=z,*args,**kw):
z1		Drawing.__init__(self,width,height,*args,**kw)
zZ

if __name__=="__main__": #NORUNTESTS
	%s().save(formats=['pdf'],outDir='.',fnRoot=None)
)	rF  r   r   rd   rk   strreplacer_   r`   )ra   r-  rG  r0   r/   r.  os          rA   	_renderPyzDrawing._renderPym  s   -V-V-V(J(J(J  4==??6!44!88?GGII 	M 	MDAqQQQs1vvad|/C/CC/K/K/K/KLLAA<q@@A4:::VZVaVaVabbFFEuxyyyrC   c                     ddl m} |                    | | j        dd|t          ur|nt          | dt                               dS )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  drawrj  r   r   )ra   r  r  s      rA   r  zDrawing.draw~  sj     	100000tTY1-9-H-H\\gVZ[jkrNsNs 	 	u 	u 	u 	u 	urC   c                 T    | j         }| j        }| j        }|dk    r
||z  }||z  }||fS )Nrw  )r_   r`   rm  )ra   
availWidthavailHeightr_   r`   rm  s         rA   wrapzDrawing.wrap  sA    
&[ Ek!Ff}rC   c                 j    t                               |           }| j        |_        | j        |_        |S )z:Return a new drawing which only contains primitive shapes.)r   r   r_   r`   r  s     rA   r   zDrawing.expandUserNodes  s,    ##D))J	[

rC   c                 h    |                      |                     | j        | j                            S )zReturns a copy)r  r   r_   r`   r   s    rA   r   zDrawing.copy  s&    zz$..T[AABBBrC   c                 @    |                      t          |i |          S rs   )r  r   )ra   r:  rP  s      rA   asGroupzDrawing.asGroup  s!    zz%+++,,,rC   r   c                    |                     dd          }t          |t                    rd|z  }nd}|dz  }ddlm} d}	|st          | d| j        j        dz             }t          | d	d          }
t          |
d
          r |
|           }
t          |d
          r ||
          }nE	 ||
z  }n># t          $ r1}t          |                              d          dk     r Y d}~nd}~ww xY w|t          | dd          }t          |d
          r ||           }t          j                            |          r#t          j                            |          \  }}n|pt          | dd          }|                                                    t          j                  }|sd}t          j                            |          s\t          j                            t          | dt          j                            t(          j        d                             |          }t          j                            |          st          j        |           t          j                            t          j                            ||                    }t          j                            |          }|d         dd                                         | j        v r|d         }d |pt          | ddg          D             }|dur|fpt          | d|          fd         }t8          j        j        t8          j        j        f}|xt8          j        _        t8          j        _        d|v rddl m!} |dz   }|rtE          |d|fz              |j#        | ||fdt          | d|j$                  itK          | dfi | |	dz   }	t(          j&        dk    rFddl'}ddl(}|)                    |          *                    dd           |+                    |           | j,        D ]}||v rddl m-} |d|}|rtE          |||fz             t          | d d          }|r>t          |d|g          }||v r&t          |d!d          s|.                                 nd} |j#        | |f|t          | d|j$                  d"tK          | d#fi | |	d$z   |z   }	|r|/                    |           d%|v r	 dd&l0m1} n# td          $ r	 dd'l m3} Y nw xY w|d(z   }|rtE          |d)|fz              |j#        | |f|t          | d*d+g          d         t          | d*dd,g          d         t          | d-|j4                  t          | d|j$                  t          | d.|j5                  d/tK          | d0fi | |	d1z   }	d2|v rWdd3l m6} |d4z   }|rtE          |d5|fz              |j#        | |fdt          | d|j$                  itK          | d6fi | |	d7z   }	d8|v rWdd'l m3} |d9z   }|rtE          |d)|fz              |j#        | |fdt          | d|j$                  itK          | d0fi | |	d:z   }	d;|v r|d<z   }|rtE          |d;|fz             to          |d=          5 }|8                    ts          | :                                ;                    d>t          j<                                       ddd           n# 1 swxY w Y   |	d?z   }	|\  t8          j        _        t8          j        _        t          | d@          r| =                    ||	           |	r||	dd         z   pdS )AzSaves 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   c                 6    g | ]}|                                 S rG   )lowerrH   s     rA   rK   z Drawing.save.<locals>.<listcomp>  s     TTT!AGGIITTTrC   rs  rZ  r   r  z.pdfPDFr  
showBorder_renderPDF_z/.pdfmacCAROzPDF renderPM_drawTimeCollectordisabledfmtr  
_renderPM_z/.rV  renderPS_SEPrenderPSz.epsEPSEPS_infoTesting	ReportLabpreview	ttf_embed)titledeptcompanyr  r  r  
_renderPS_z/.epsr\  	renderSVGz.svgSVG_renderSVG_z/.svgrS  z.psz/.psrT  z.pywbrD  z/.py
saveLogger)>r   r   int	reportlabr  r   r   rd   r]   	TypeErrorr  findospathisabssplitrstripsepjoindirnamesysargvisdirmakedirsnormpathsplitextr  
_saveModesr   warnOnceenabledinfoOncer  r  r   
drawToFiler  rQ  platformmacfs
macostoolsFSSpecSetCreatorTypetouched_bmModesr  clearsaverlextra.graphicsr  ImportErrorr  eps_previeweps_ttf_embedr  openwriter   r  r  linesepr  )ra   rs  r   fnRootr  r  rP  genFmtr  extr  errfnrootplotMode_savedr  filenamer  r  bmFmtr  dtcdtcfmtsr  r  r   s                             rA   r  zDrawing.save  s	    B''fS!! 	v%FFF))'''''' 	OT"3T^5LV5SUUFd9Q//Gwz** (!'$--vj)) OO#g-FF  O O O 3xx}}%BCCaGGGGGGGO
 >T(400F6*%% 	"VD\\F7==   	:W]]622NFFF9wtHS99F''//#vw}}V$$~rw||GDY[Y`YhYhiliqrsitYuYu<v<vw}/~/~fw}}V$$9bk&&9&9&9!!"',,vf"="=>>7##F++A;qrr?  ""do55a[FTT(R74	5'3R3RTTT$&5G:['$yQX:Y:Y9[]^_(&/*AA<CC&/"9H444444f}H8fh'77888 I x  \  \WTR^_h_uEvEv  \  zB  CG  HU  z[  z[  XZ  z[  z[  \  \  \.C|U""((((((((X&&55ffEEE""8,,,] 	+ 	+E  777777&,ffUU3<E&E(+;";<<<d#7== #%c)UG<<G''Jq0I0I'		"##D(  `u'RVWcdmdzJ{J{  `  `  G  HL  MY  _  _  \^  _  _  `  `  `Dj5(****H8EEEEEEE 8 8 8777777778f}H8fh'77888H (D(.'.tJ	{'K'KA'N*1$z2kBR*S*STU*V*1$yAV*W*W-4T,yG]-^-^*1${9CZ*[*[D D #+4"B"Br"B"BD D D .CH444444f}H8fh'77888 I  (D D-4T,yG]-^-^Daijno|  bC  bC  @B  bC  bCD D D .C8333333e|H8fh'77888Hh  S  SWT,W`Wm=n=n  Sqyz~  @L  rR  rR  OQ  rR  rR  S  S  S-C8e|H7fX6777ht$$ L 0 0 8 8bj I IJJKKKL L L L L L L L L L L L L L L-C;A8!84%% 	(OOF3'''%vc!""g~++s=   *B0 0
C+:'C&&C+,S3 3TTA[88[<?[<c           	         || j         v sJ d|z              ddlm} |dk    rddlm} |                    |           S || j        v r7ddlm}  |j        | f|t          | d|j	                  dt          | d	fi |S |d
k    rJ	 ddlm} n# t          $ r	 ddlm} Y nw xY w|                    | |t          | d|j	                            S |dk    r1ddlm} |                    | t          | d|j	                            S |dk    r|                                 S |dk    r6ddlm}	  |	j        | fdt          | d|j	                  it          | dfi |S dS )z,Converts to an 8 bit string in given format.zUnknown file format "%s"r   r  rZ  r  r  r  r  r  rV  r  r  )r  r  rS  r  rT  r\  r  r  r  N)r  r  r  r  r  drawToStringr  r  r   r  rQ  r  r  r  r  r  r  )
ra   formatr   r  rP  r  r  r  r  r  s
             rA   asStringzDrawing.asString  sb   (((*Dv*M(((''''''U??444444))$///t}$$333333(8( X6wtT`%2H4 H4 X X6>tL6V6VSU6V6VX X Xu__8EEEEEEE 8 8 8777777778 ((*1-4T,yG]-^-^ ) ` ` ` t^^333333((GDV_Vl<m<m(nnnt^^>>###u__444444)9)$  S  SGDV_Vl<m<m  Spxy}  L  qR  qR  OQ  qR  qR  S  S  S _s   B BBfitc                 B   |                                  }| j        }| j        }t          ||g|R  }	|	                                \  }
}}}|dk    s$|dk    rR|
|k     s|||z
  k    s||k     s	|||z
  k    r4||
z
  |z   |z   |	_        ||z
  |z   |z   |	_        dddd||
z
  ||z
  f|	_        nw|dk    s|dk    r0|
|k     s	|||z
  k    r!||
z
  |z   |z   |	_        dddd||
z
  df|	_        n;|dk    s|dk    r/||k     s	|||z
  k    r ||z
  |z   |z   |	_        ddddd||z
  f|	_        |	S )	z?return a base class drawing which ensures all the contents fitsr  expandr   r   fitxexpandxfityexpandy)r   r_   r`   r   r   r   )ra   kindlpadrpadbpadtpadrT   oWoHrc   xLyLxHyHs                 rA   resizedzDrawing.resized7  s   Z["R####''))2b;;4>>r$ww"RW**4SUVXY]V]S]S]rE$JtOGMU4Z_GN!"1Qqbb 9G6\\dIoo2d77bDjjrE$JtOGM!"1Qqb 3G6\\dIoo2d77bDjjU4Z_GN!"1Qq47 3GrC   )rt  ru  )NNNNr   )Nr   )r  r   r   r   r   )rd   re   rf   rg   r  r  r   r   isNumberisValidChildOrNoneOneOfisStringOrNoneisNumberOrNoner  r   
SequenceOfr   r   rp   r  r   r  r  r   r   r  r  r  r  rG   rC   rA   r   r   4  sN          J( 9999H7X+EFFFh,GHHH|D!!!\"4:yzzzeeFGXxHHO|}}}eeE8XxHHOz{{{ #l81OPPP&,~;klll&,~;klll
 
 
L wE"l::z"Q$  $  $ &>@ @ @  H
 OOL!!!     "  ' u u u u    C C C- - -z, z, z, z,xS S S S<     rC   r   c                       e Zd ZdZddZdS )rz  z<This is a mixin to provide functionality for edited drawingsNc                    t          |          }|rZt          |d          rJd|j        vr|j                                        |_        |r	|t           }t          ||          |j        |<   t          |d          r5|r3|r|                    |||           dS |                    ||           dS |rt          |||           dS t          d          )zb
        effectively setattr(obj,name,value), but takes care of things with _attrMaps etc
        r   Nr   zCan't add, need name)
r   r]   r   r   r   r   r   r   rl   
ValueError)ra   r   ro   r   r   r   r   ivcs           rA   _addz_DrawingEditorMixin._addL  s     5!! 	=GC
++ 	=--"|1133@x'L!-ht!<!<CL3u 	5# 	5 $

3uT*****d##### 	5CU#####3444rC   NNNN)rd   re   rf   rg   r  rG   rC   rA   rz  rz  J  s.        FF5 5 5 5 5 5rC   rz  c                       e Zd Zd ZdS )isStrokeDashArrayc                     t                               |          pEt          |t          t          f          o)t          |d                   ot          |d                   S )Nr   r   )isListOfNumbersOrNonetestr   r   tupler  isListOfNumbers)ra   rJ   s     rA   r  zisStrokeDashArray.testa  sS    $))!,,yAtEl1K1K1xPXYZ[\Y]P^P^1xcrstuvswcxcxyrC   N)rd   re   rf   r  rG   rC   rA   r  r  `  s(        z z z z zrC   r  c                   (   e Zd Z e ee           ee           e eddd          d           e eddd          d           eed           eed           ee	d	           ee
d
           ee
dd          	  	        Zd ZdS )	LineShaper   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                     t           d         | _        d| _        d| _        d| _        d| _        d | _        d | _        |                     |           d S )Nr   r   r   )	STATE_DEFAULTSr   r   r   r   r    r"   r#   r   ra   rP  s     rA   rp   zLineShape.__init__t  sY    )-8 !#!2rC   N)rd   re   rf   r   r   isColorOrNoner  r
  r  	isOpacityr)  r   rp   rG   rC   rA   r  r  e  s         w"l=11"l8,,$UU1Qq\\7\]]]%eeAall8^___'<6\]]]&,'8>^___$Y4{|||&,y6STTT$Y4Tcdeee

 

 

H    rC   r  c            
           e Zd Z ee eed           eed           eed           eed                    Zd Zd Z	dS )Liner   r   )rr  rz   r{   r|   r}   c                 t    t                               | |           || _        || _        || _        || _        d S rs   )r  rp   rz   r{   r|   r}   )ra   rz   r{   r|   r}   rP  s         rA   rp   zLine.__init__  s8    4$$$rC   c                 6    | j         | j        | j        | j        fS )r   )rz   r{   r|   r}   r   s    rA   r   zLine.getBounds  s    $'4733rC   N)
rd   re   rf   r   r  r   r  r   rp   r   rG   rC   rA   r#  r#  ~  s        wI\(+++\(+++\(+++\(+++	
 
 
H  4 4 4 4 4rC   r#  c                       e Zd Z ee eed           eed           eed           eedd           e e	e
e                              Zd	 Zd
S )
SolidShapez$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   )rr  r(   r$   r%   r'   r)   c                 n    t           d         | _        d | _        t                              | |           d S )Nr(   )r  r(   r$   r  rp   r  s     rA   rp   zSolidShape.__init__  s4    '4 	4$$$$$rC   N)rd   re   rf   r   r  r   r   r!  r)  r
  r   r   r   rp   rG   rC   rA   r'  r'    s         wI L4Z[[["l92{|||$Y4OPPP$Y4Tcdeee<mM B BCC
 
 
H% % % % %rC   r'  r   )r   r      r   )moveTolineTocurveTo	closePathc                    | j         }d}d}d}| }| j        D ]v}	|	t          k    r0|r)|r'|
t          k    r|dz  }|r |t                                |dz  }t          |	         }||z   } ||	         |||           |}|	t          k    r|dz  }|	}
w|r)|r'|
t          k    r|dz  }|r |t                                ||k    S )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   _renderPathr<    s    [F	ALI]Fn  == 0 0j A%L 0-	*-///NI"2&I	"vac{##AL $i $COO 	$!Ij!###$$rC   znon-zerononzerozeven-oddevenoddc                       e Zd ZdZ ee ee           ee           ee           e e	 e
dd                               e e
ee                              ZddddefdZd Zd	 Zd
 Zd Zd Zd ZdS )Pathz2Path, made up of straight lines and bezier curves.r\  rZ  )rr  r   r/  
isClipPath	autocloser)   Nr   c                     t                               | |           |g }|g }t          |          dz  dk    s
J d            || _        || _        || _        || _        || _        d S Nr   r   -Point list must have even number of elements!)r'  rp   r6   r   r/  rA  rB  r)   )ra   r   r/  rA  rB  r)   rP  s          rA   rp   zPath.__init__  sx    D"%%%>FI6{{Q!###%T###"$  rC   c                     |                      | j        d d          | j        d d                    }|                    |                                            |S rs   )r   r   r/  r   r   ra   news     rA   r   z	Path.copy  sO    nnT[^T^AAA->??$,,..///
rC   c                 |    | j                             ||g           | j                            t                     d S rs   )r   r   r/  r   r0  r  s      rA   r*  zPath.moveTo  8    Aq6"""g&&&&&rC   c                 |    | j                             ||g           | j                            t                     d S rs   )r   r   r/  r   _LINETOr  s      rA   r+  zPath.lineTo  rJ  rC   c                     | j                             ||||||g           | j                            t                     d S rs   )r   r   r/  r   _CURVETO)ra   rz   r{   r|   r}   x3r   s          rA   r,  zPath.curveTo  sA    BBB3444h'''''rC   c                 D    | j                             t                     d S rs   )r/  r   r1  r   s    rA   r-  zPath.closePath  s    j)))))rC   c           	      \   | j         }	 g }|j        }|j        }g }|j        }|j        }d}| j        D ]}	t          |	         }
||
z   }|
dk    r& |||                     |||dz                       ni|
dk    rc|||d         \  }}} |t          |d         |||                     ||dz   |d         \  }}} |t          |d         |||                     |}t          |          t          |          t          |          t          |          fS #  t          |          cY S xY w)Nr   r   r   r)  r1   )	r   r   r   r/  r2  r   rQ   r5   r   )ra   r   rU   aXeXrV   aYeYr   r9  r:  r;  rz   r|   rO  r{   r}   r   s                     rA   r   zPath.getBounds  sV   	)ABBABBAn  *2.I!88BvayMMMBvac{OOOOAXX%a!e}HBr"B(2r"R88999%ac!AgHBr"B(2r"R88999q66#a&&QA..	) (((((s   DD D+)rd   re   rf   rg   r   r'  r   r  r)  NoneOrr
  r   r   r   rp   r   r*  r+  r,  r-  r   rG   rC   rA   r@  r@    s       <<wJo.. L11!\),, LeE(:(:!;!;<<<mM B BCC
 
 
H #dqD[h ! ! ! !  
' ' '' ' '( ( (* * *) ) ) ) )rC   r@  c           	         ||}g }t           dz  }	||	z  }
||	z  }||
k     r|dt           z  z   }||
k     t          ||
z
            }|j        }|dk    rEt          ||pd          }||	z  }t	          t          ||z  dz             d          }||z  }|dz  }nd}d}t          |          D ]=}|
||z  z   } || |t          |          z  z   ||t          |          z  z   f           >|r|	                                 |S )N     f@r   MbP?rw        ?r   r   )
r   r7  r   rQ   r5   r  r   r   r   reverse)centerxcenteryradiusstartangledegreesendangledegreesyradiusdegreedeltar[  r   degreestoradians
startangleendanglerS   r   radiansdeltar0   s                   rA   getArcPointsrg    sM   &F%x"#33J//H
:

AbD= :

(Z'((EATzz% 1r22"#33E,&s*++A..Qw	Qq B B5--	76#e**$$WWSZZ-?%?
@AAAA    MrC   c                       e Zd ZdZddZdS )ArcPathzPath with an addArc methodNc
           
          t          ||||||||	          }
|st          | j                  s1|                     |
d         d         |
d         d                    |
d= |
D ]\  }}|                     ||           d S )N)ra  rb  r[  r   r   )rg  r6   r/  r*  r+  )ra   r\  r]  r^  r_  r`  ra  rb  r*  r[  r   rJ   rR   s                rA   addArczArcPath.addArc6  s    '63Do_ft  JQ  R  R  R 	T^,, 	KK!Q!Q(((!''DAqt{{1Q''''''rC   r  )rd   re   rf   rg   rk  rG   rC   rA   ri  ri  4  s.        $$( ( ( ( ( (rC   ri  c                 *   g }g }| D ]}t          |          s|}g }	n|d         }|dd          }	|t          vrt          d|z            t                              |          }
t	          |	          t
          |
         k    r!t          |dt          |	                    |                    |
           |                    t          |	                     |df|dffD ]4\  }}t          |t	          |          d          D ]}||         |z   ||<   5|                    dd           }|rUdD ]Q}||         ||dz            f}|d         	|d         '||d d         }t          |          t          |          }}|d         |d         t          |          t          |          }}||z
  }t          |          dk    r>||z
  |z  }t          |t	          |          d          D ]}||||         |z
  z  z   ||<   t          |t	          |          d          D ]}||z   d	z  ||<   |d         |d         |z
  n
|d         |z
  }t          |t	          |          d          D ]}||xx         |z  cc<   St          |||fi |S )
Nr   r   zbad operator name %sz bad arguments r   bbox)r   r   gư>rZ  )r   _PATH_OP_NAMESr  r   r6   r2  r  r   r   r   r   r   rQ   r5   absr@  )pathSegsrA  r  r  rP  Or   segopNamer:  r9  r   r  r   rm  r;  r   r   r   facs                       rA   
definePathru  =  s   
A
A  Szz 	FDDVFqrr7D''3f<===!!&))t99(,,,fffSYYYGHHH		d1v1v~  !qQ"" 	 	AQ46AaDD	
 66&D  	 	AQQqS	!At|!h!$Q$Aq663q66qAtAaD$41vvs1vv1ss88T>>Q3)C"1SVVA.. 0 0 3!Q</!0 #1SVVA.. + + !As{!+
 !"! 0AaD1HHadQhqQ**  AaDDDAIDDDD !J$$$$$rC   c                       e Zd ZdZ ee ee           ee           eed           eed           ee           ee                    ZddZ	d Z
d	 Zd
S )Rectz)Rectangle, possibly with rounded corners.width of the object in pointsr   height of the objects in points)rr  rJ   rR   r_   r`   rxryr   c                     t                               | |           || _        || _        || _        || _        || _        || _        d S rs   )r'  rp   rJ   rR   r_   r`   rz  r{  )ra   rJ   rR   r_   r`   rz  r{  rP  s           rA   rp   zRect.__init__{  sF    D"%%%
rC   c                     |                      | j        | j        | j        | j                  }|                    |                                            |S rs   )r   rJ   rR   r_   r`   r   r   rG  s     rA   r   z	Rect.copy  sF    nnTVTVTZEE$,,..///
rC   c                 V    | j         | j        | j         | j        z   | j        | j        z   fS rs   rJ   rR   r_   r`   r   s    rA   r   zRect.getBounds  s'     3TVdk5IJJrC   N)r   r   )rd   re   rf   rg   r   r'  r   r  r   rp   r   r   rG   rC   rA   rw  rw  o  s        33wJL""L""X+JKKKh,MNNN\(##\(##
 
 
H     
K K K K KrC   rw  c            
           e Zd ZdZ ee ee           ee           eed           eed           ed                    Z	d Z
d Zd	 ZdS )
ImagezBitmap image.rx  r   ry  N)rr  rJ   rR   r_   r`   r  c                     t                               | |           || _        || _        || _        || _        || _        d S rs   )r'  rp   rJ   rR   r_   r`   r  )ra   rJ   rR   r_   r`   r  rP  s          rA   rp   zImage.__init__  s?    D"%%%
			rC   c                     |                      | j        | j        | j        | j        | j                  }|                    |                                            |S rs   )r   rJ   rR   r_   r`   r  r   r   rG  s     rA   r   z
Image.copy  sJ    nnTVTVTZdiPP$,,..///
rC   c                 V    | j         | j        | j         | j        z   | j        | j        z   fS rs   r  r   s    rA   r   zImage.getBounds  s'     3TVdk5IJJrC   )rd   re   rf   rg   r   r'  r   r  r  r   rp   r   r   rG   rC   rA   r  r    s        wJL""L""^1PQQQn2STTT|D!!
 
 
H    
K K K K KrC   r  c            	           e Zd Z ee eed           eed           eed                    Zd Zd Z	d Z
d	S )
Circlex of the centrer   y of the centreradius in points)rr  cxcyrc                 f    t                               | |           || _        || _        || _        d S rs   )r'  rp   r  r  r  )ra   r  r  r  rP  s        rA   rp   zCircle.__init__  s1    D"%%%rC   c                     |                      | j        | j        | j                  }|                    |                                            |S rs   )r   r  r  r  r   r   rG  s     rA   r   zCircle.copy  sB    nnTWdgtv66$,,..///
rC   c                 v    | j         | j        z
  | j        | j        z
  | j         | j        z   | j        | j        z   fS rs   )r  r  r  r   s    rA   r   zCircle.getBounds  s7    $& $'DF"2DGdf4DdgPTPVFVWWrC   Nrd   re   rf   r   r'  r   r  r   rp   r   r   rG   rC   rA   r  r    s        wJ\((9:::\((9:::L'9:::
 
 
H    
X X X X XrC   r  c            
           e Zd Z ee eed           eed           eed           eed                    Zd Zd Z	d	 Z
d
S )Ellipser  r   r  zx radiuszy radius)rr  r  r  rz  r{  c                 t    t                               | |           || _        || _        || _        || _        d S rs   )r'  rp   r  r  rz  r{  )ra   r  r  rz  r{  rP  s         rA   rp   zEllipse.__init__  s8    D"%%%rC   c                     |                      | j        | j        | j        | j                  }|                    |                                            |S rs   )r   r  r  rz  r{  r   r   rG  s     rA   r   zEllipse.copy  sF    nnTWdgtw@@$,,..///
rC   c                 v    | j         | j        z
  | j        | j        z
  | j         | j        z   | j        | j        z   fS rs   )r  rz  r  r{  r   s    rA   r   zEllipse.getBounds  s7    Gdg%tw'8$'DG:KTWW[W^M^__rC   Nr  rG   rC   rA   r  r    s        wJ\((9:::\((9:::\(
333\(
333	
 
 
H    
` ` ` ` `rC   r  c                      e Zd ZdZ ee eed           eed           eed           ee           ee           ee           ee           ee           ee	d          
  
        Z
dZ	 	 ddZd Zd Zd Zd Zd	S )WedgeznA "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)
rr  r\  r]  r^  r_  r`  ra  radius1yradius1annularr   NFc                     t                               | |           ||k     r|dz   }||k     |||||f\  | _        | _        | _        | _        | _        || _        || _        d S )Nih  )	r'  rp   r\  r]  r^  r_  r`  ra  r  )	ra   r\  r]  r^  r_  r`  ra  r  rP  s	            rA   rp   zWedge.__init__  s{    D"%%%///-c1O /// Wf&7H 	^dlDK1GI]rC   c                     t          | dd           }|| j        }t          | dd           }t          | d|          }||}|||fS )Nra  r  r  )r   r^  )ra   ra  r  r  s       rA   
_xtraRadiizWedge._xtraRadii  sV    $	400?dkG$y$//4
733?hG))rC   c                    | j         }| j        }| j        }|                                 \  }}}| j        }| j        }t          dz  }	||	z  }
||	z  }||
k     r|dt          z  z   }||
k     t          ||
z
            }g }|dk    rJt          | j	        pd|          }||	z  }t          dt          ||z  dz                       }||z  }|dz  }nd}d}g }|j        }|j        }t          |          D ]1}|
||z  z   } |t          |          t          |          f           2|D ]'\  }} ||||z  z               ||||z  z              (|dk    s||dk    s| ||            ||           n>|                                 |D ]'\  }} ||||z  z               ||||z  z              (| j        rt%          t'          | dt(                    	          }|                    |d         |d                    t          dd|z  d          D ]'}|                    ||         ||dz                       (|                                 |                    |d|z           |d|z  dz                       t          d|z  dz   d
|z  d          D ]'}|                    ||         ||dz                       (|                                 |S t1          |          S )NrX  r   rY  rw  r   rZ  r   r)   )r)   r   )r\  r]  r^  r  r_  r`  r   r7  rQ   rb  r5   r  r   r   r   r   r[  r  r@  r   r   r*  r+  r-  Polygon)ra   r\  r]  r^  ra  r  r  r_  r`  rc  rd  re  rS   r   rb  rf  r0   CACAAr   r   r/   r   rJ   s                           rA   	asPolygonzWedge.asPolygon  sP   ,%)__%6%6"( 2.e8&'77
"#33z!!"}H z!!hz)**;;d.4"U;;K&'77LAc%,S01122A 7LFAAALiM1XX 	) 	)Eu\11ECUCJJ'(((( 	! 	!CAaAgfQhAggai    QJJ'/!x?OAgJJJ'



JJLLL & &!''!)#$$$'(1*$%%%%< 	#gd:}EEFFFAHHVAYvay)))1QqS^^ 0 06!A#;////KKMMMHHVAaC[!A///1Q3q51Q'' 0 06!A#;////KKMMMH6??"rC   c                     |                      | j        | j        | j        | j        | j                  }|                    |                                            |S rs   )r   r\  r]  r^  r_  r`  r   r   rG  s     rA   r   z
Wedge.copy4  sV    nnT\LK*(	* *
 	$,,..///
rC   c                 N    |                                                                  S rs   )r  r   r   s    rA   r   zWedge.getBounds=  s    ~~))+++rC   )NF)rd   re   rf   rg   r   r'  r   r  r  r)  r   rb  rp   r  r  r   r   rG   rC   rA   r  r    s#       ( ( wJ,x->???,x->???h,>???(L22&,x00,~..,~..<//,y.EFFF

 

 

H K]a	 	 	 	* * *4# 4# 4#l  , , , , ,rC   r  c                   X    e Zd ZdZ ee eed                    Zg fdZ	d Z
d ZdS )	r  zKDefines a closed shape; Is implicitly
    joined back to the start for you.5list of numbers in the form x1, y1, x2, y2 ... xn, ynr   rr  r   c                     t                               | |           t          |          dz  dk    s
J d            |pg | _        d S rD  )r'  rp   r6   r   )ra   r   rP  s      rA   rp   zPolygon.__init__H  sK    D"%%%6{{Q!###%T###lrC   c                     |                      | j                  }|                    |                                            |S rs   r   r   r   r   rG  s     rA   r   zPolygon.copyM  :    nnT[))$,,..///
rC   c                 *    t          | j                  S rs   r   r   r   s    rA   r   zPolygon.getBoundsR      t{+++rC   N)rd   re   rf   rg   r   r'  r   r  r   rp   r   r   rG   rC   rA   r  r  @  s        ) ) wJo3jkkk
 
 
H ! # # # #
  
, , , , ,rC   r  c                   X    e Zd ZdZ ee eed                    Zg fdZ	d Z
d ZdS )	PolyLinezSeries 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                 L   t                               | |           |pg }t          |          }|rlt          |d                   r7g }|D ]/\  }}|                    |           |                    |           0|}n t          |          dz  dk    s
J d            || _        d S )Nr   r   rE  )r  rp   r6   r   r   r   )ra   r   rP  	lenPointsru   rJ   rR   s          rA   rp   zPolyLine.__init__^  s    4$$$2KK	 	]VAY ]#    EQqHHQKKKHHQKKKK6{{Q!+++-\+++rC   c                     |                      | j                  }|                    |                                            |S rs   r  rG  s     rA   r   zPolyLine.copym  r  rC   c                 *    t          | j                  S rs   r  r   s    rA   r   zPolyLine.getBoundsr  r  rC   N)rd   re   rf   rg   r   r  r   r  r   rp   r   r   rG   rC   rA   r  r  U  s        4 4 wIo3jkkk
 
 
H !      
, , , , ,rC   r  c                       e Zd ZdZ ee e ee e	ed          fd          d           e ee
edf          d           e ee
ed	f          d
                    Zddg fdZdS )Hatchingz\define a hatching of a set of polygons defined by lists of the form [x0,y0,x1,y1,....,xn,yn]r   )rp  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)rr  xyListsanglesspacingsr   -   c           
      D   t          j        | fi | t          |          r|f}t          |          r|f}t          |          r|f}t	          |          t	          |          z
  }|dk    rt          |          ||d         gz  z   }|| _        || _        || _        | j	        }| j
        }t          |          D ]b\  }}||         }	t          |          }t          |          }
t          |          }d}| }|D ]]}t          dt	          |          d          D ]<}||dz            |
z  ||         |z  z
  }t!          ||          }t#          ||          }=^t%          t'          ||	z                      dz
  }t%          t'          ||	z                      dz   }t          ||          D ]l}g }|	|z  }|D ]}t	          |          dz
  }t          dt	          |          d          D ]}||         }||dz            }||
z  ||z  z   }||
z  ||z  z
  }||         }||dz            }||
z  ||z  z   }||
z  ||z  z
  }||k     r||k    s||k     r-||k    r'|                    |||z
  ||z
  z  ||z
  z  z              |}|                                 t          dt	          |          d          D ]d}||         |
z  ||z  z
  }||
z  ||         |z  z   }||dz            |
z  ||z  z
  }||
z  ||dz            |z  z   } |||            |||           endd S )Nr   r1   ir   r   )r@  rp   r  r  r6   r   r  r  r  r*  r+  	enumerater   r   r   r   rQ   r5   r  r   r   r   )ra   r  r  r  kwdsr   r*  r+  r  spacingcosThetasinThetaspanMinspanMaxr   r;  rR   	spanStartspanEndstepnodeXstripeYr   r   r   a1b1rJ   rz   r{   s                                 rA   rp   zHatching.__init__~  s   d##d###7## 	"zGF 	YFH 	# {HKKH%Q33H~~a"&66H !&)) :	  :	 HAuqkGENNE5zzH5zzH GhG  - -qQ** - -A!A#x!X5A!!GnnG!!GnnGG	- E''/2233a7I51122Q6G i00 $  $ !$, !  AAqA"1SVVA..  aDacFxZ!H*4xZ!H*4aDacFxZ(
2xZ(
2 wJJ2w;;2g::"g++!LLRUWRZ,@"R%,H)HIII" 

 qUA.. 	  	 Aa)GH,<<A(q()::Aac
8+gh.>>A(51:h+>>A F1QKKKF1QKKKK	 7$ -:	  :	 rC   N)rd   re   rf   rg   r   r@  r   EitherOrr  r  r  r   rp   rG   rC   rA   r  r  u  s        ffwD,xxOWX9Y9Y9Y(Z[ghh  oi  j  j  jhh'LMM  TY  Z  Z  Z<(?=)Q R R  YH  I  I  I
 
 
H !""b M  M  M  M  M  M rC   r  c                     t          | d|          }|                    |          }|dk    r.t          | dd          }	|	t          |d |         |||          z   }|S )N_dpr   _dpLen)r   rfindr   )
tAr7   r4   r+   r*   encodingpivotCharacterdpr   dpOffss
             rA   numericXShiftr    sa    	E.	)	)B

2A!ttHQ''[bqb(8HEEEHrC   c                   P   e Zd ZdZ e eed           eed           eed           edd           eed           eed	           e e	d
ddd          d           ee           e e	dddddddd          d          	  	        Z
dZd Zd Zd Zd ZdS )StringziNot 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      r)     z.Control whether text is filled/stroked etc etc)	rJ   rR   r7   r+   r*   r(   r,   r  textRenderModeutf8c                     || _         || _        || _        d| _        t          d         | _        t          d         | _        t          d         | _        |                     |           d S )Nr-   r+   r*   r(   )	rJ   rR   r7   r,   r  r+   r*   r(   r   )ra   rJ   rR   r7   rP  s        rA   rp   zString.__init__  s\    	!&z2&z2'42rC   c                 ^    | j         t          | j        | j        | j        | j                  z   S rs   )rJ   r   r7   r+   r*   r  r   s    rA   getEastzString.getEast  s%    vDIdmDM4=YYYYrC   c                     |                      | j        | j        | j                  }|                    |                                            |S rs   )r   rJ   rR   r7   r   r   rG  s     rA   r   zString.copy  sB    nnTVTVTY77$,,..///
rC   c           	      T   | j         }t          || j        | j        | j                  }| j        }| j        }|dk    rG|dk    r	|d|z  z  }n8|dk    r||z  }n,|dk    r&|t          |||| j        | j        | j                  z  }|| j        d| j        z  z
  ||z   | j        | j        z   fS )Nr-   r  rZ  r3   r  g?)	r7   r   r+   r*   r  r,   rJ   r  rR   )ra   r;   r4   r  rJ   s        rA   r   zString.getBounds  s    I$-dmDD_Fw;;8||SU
UQY]2a$-dmTTT46C$-//1dft}6LMMrC   )rd   re   rf   rg   r   r   r  isStringr   r
  r   r  rp   r  r   r   rG   rC   rA   r  r    sY       , , wL'=>>>L'=>>>|H*BCCC<  +L  M  M  M<k::: L4GHHH!\%%y"I"IOyzzz<))%eeAa!Aa!&<&<Brsss

 

 

H H  Z Z Z  
N N N N NrC   r  c                       e Zd ZdZd ZdS )r   ak  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                      t          d          )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   zUserNode.provideNode  s    
 ""XYYYrC   N)rd   re   rf   rg   r   rG   rC   rA   r   r     s2        % %Z Z Z Z ZrC   r   c                       e Zd ZdZd ZdS )
DirectDrawz"try to draw directly on the canvasc                      t          d          )Nr  r   )ra   rb   s     rA   drawDirectlyzDirectDraw.drawDirectly  s    !"XYYYrC   N)rd   re   rf   rg   r  rG   rC   rA   r  r    s.        ,,Z Z Z Z ZrC   r  c                  ^   t          dddd          } dd l}|j        }t          j        j        } |d            ||                                             |d           |                                   |d            |d           | ` |d	           |                                  d S )
Nr!   ru  2   r   za Rectangle: z
verifying...z OK
zdeleting rect.width zverifying...)rw  pprintr  stdoutr  r   r   r_   )r  r  ppr4   s       rA   r  r    s    R3rAMMM	B
AAoBqAHHJJJAgJJJ A	AnHHJJJJJrC   __main__rs   )r   rB  )FF)NNN)b__version__rg   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   rV  isNumberInRanger!  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blackr  r   rB   rW   rY   ri   r~   r   r   r   r   r   r/  r8  rF  rQ  r   rz  	Validatorr  r  r#  r'  r   r   r0  rL  rN  r1  r2  rn  r<  _fillModeMapr@  r4  rg  ri  ru  rw  r  r  r  r  r  r  r  r  r  r   r  r  rd   rG   rC   rA   <module>r     sw  
 G  3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ' ' ' ' ' ' y y y y y y y y y y y y y y                         & & & & . . . . . . . .F??1Q''((	 # # # # ) ) ) ) ) ) 4 4 4 4 4 4 % % % % % % @ @ @ @ @ @ @ @%q++%q++5!,,  &  6<	
 1 Q a  t T 4 U u Q  !" #& '( )* 7+6            D- - -, , , , , , , ,& & & & & & & &$ $ $"3 3 3j0 0 0( ( (KQ KQ KQ KQ KQO/ KQ KQ KQZ{ { { { {E { { {z	 	 	 	% % % %N   $@ @ @
T T T T TeX T T Tl5 5 5 5 5 5 5 5,z z z z z	 z z z &%''        24 4 4 4 49 4 4 4&% % % % % % % %& *.eeAhh &(J! 888% % % %< 	d}M=}M=
F) F) F) F) F): F) F) F)P dff   6( ( ( ( (d ( ( ( aA! 0% 0% 0% 0%dK K K K K: K K K:K K K K KJ K K K8X X X X XZ X X X,` ` ` ` `j ` ` `.i, i, i, i, i,J i, i, i,V, , , , ,j , , ,*, , , , ,y , , ,@V  V  V  V  V t V  V  V p 8<=    1N 1N 1N 1N 1NU 1N 1N 1NfZ Z Z Z Z" Z Z ZZ Z Z Z Z Z Z Z
  " ZDFFFFF rC   