o
    à’OjEç  ã                   @   sà  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'd(„ Z0d)d*„ Z1G d+d,„ d,ƒZ2G d-d.„ d.ƒZ3d/d0„ Z4d1d2„ Z5d3d4„ Z6d5d6„ Z7G d7d8„ d8e3e2ƒZ8G d9d:„ d:e8ƒZ9d|d;d<„Z:d|d=d>„Z;d}d@dA„Z<dBdC„ Z=G dDdE„ dEe9eƒZ>G dFdG„ dGƒZ?G dHdI„ dIe@ƒZAeAƒ ZAG dJdK„ dKe8ƒZBG dLdM„ dMeBƒZCG dNdO„ dOeBƒZDeEeFdPƒƒ\ZGZHZIZJdQZKg dR¢ZLd~dSdT„ZMdde'e'dUe'dVe'e&e&dWe&dXe&iZNG dYdZ„ dZeDƒZOeOƒ ZPdd[d\„ZQG d]d^„ d^eOƒZRg dddfd_d`„ZSG dadb„ dbeDƒZTG dcdd„ ddeDƒZUG dedf„ dfeDƒZVG dgdh„ dheDƒZWG didj„ djeDƒZXG dkdl„ dleDƒZYG dmdn„ dneBƒZZG dodp„ dpeOƒZ[defdqdr„Z\G dsdt„ dte8ƒZ]G dudv„ dve2ƒZ^G dwdx„ dxe8ƒZ_dydz„ Z`ead{k�rîe`ƒ  dS dS )€z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                 C   s  d}| D ]}t |t|||ƒƒ}qt| ƒ| }|}	|d dkr&| }
|	| }	n|d dkr/d}
n	| d }
|	|
 }	|d dkrV| }|dkrHd}n?|dkrP| }n7| d }n1|d d	krqd}|dkre|}n"|dkrld}n|d }n| d }|dkr~| }n	|dkr…|}nd}||
||||	fS )
Nr   ÚsÚng       @éÿÿÿÿÚeÚendr,   Úw)Úmaxr   Úlen)ÚtextÚfontr)   Úleadingr+   Ú	boxAnchorr2   ÚtÚhÚytÚybÚxbÚxt© r?   ú_/var/www/html/pharmsmart-cdr-gen/venv/lib/python3.10/site-packages/reportlab/graphics/shapes.pyÚ_textBoxLimitsC   s6   



rA   c                 C   sp   t t|ƒ| |f| | |f| | || f| || ffƒ}dd„ |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                 S   ó   g | ]}|d  ‘qS ©r   r?   ©Ú.0Úxr?   r?   r@   Ú
<listcomp>k   ó    z%_rotatedBoxLimits.<locals>.<listcomp>c                 S   rB   ©r   r?   rD   r?   r?   r@   rG   l   rH   )ÚzTransformPointsÚrotateÚminr3   )rF   Úyr2   r:   ÚangleÚCÚXÚYr?   r?   r@   Ú_rotatedBoxLimitse   s   6rR   c                   @   ó   e Zd ZdZdd„ ZdS )Ú_DrawTimeResizeablez:Addin class to provide the horribleness of _drawTimeResizec                 C   sF   t | dƒr| j}|j}|||_|_t |dƒr!| ||¡ d S d S d S )NÚ_canvasÚ_drawTimeResize)ÚhasattrrU   Ú_drawingÚwidthÚheightrV   )Úselfr2   r:   ÚcanvasÚdrawingr?   r?   r@   rV   q   s   

ûz#_DrawTimeResizeable._drawTimeResizeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rV   r?   r?   r?   r@   rT   o   ó    rT   c                   @   s   e Zd Zi fdd„ZdS )Ú_SetKeyWordArgsc                 C   s"   |  ¡ D ]
\}}t| ||ƒ qdS )z9In general properties may be supplied to the constructor.N)ÚitemsÚsetattr)r[   ÚkeywordsÚkeyÚvaluer?   r?   r@   Ú__init__z   s   ÿz_SetKeyWordArgs.__init__N)r^   r_   r`   ri   r?   r?   r?   r@   rc   y   s    rc   c           
      C   s|   dd„ | D ƒ}|sd S |d \}}}}|dd … D ]\}}}}	||k r%|}||kr+|}||k r1|}|	|kr7|	}q||||fS )Nc                 S   s   g | ]}|d ur|‘qS ©Nr?   rD   r?   r?   r@   rG   ‡   s    z"getRectsBounds.<locals>.<listcomp>r   r   r?   )
ÚrectListÚLÚxMinÚyMinÚxMaxÚyMaxÚx1Úy1Úx2Úy2r?   r?   r@   ÚgetRectsBounds…   s   €ru   c                 C   s  |d||   |  }d|d|  |   }||  }| g}|| d| |  }|dkr‚t |ƒ}|dk r4| }d||  }	g }
z	|
 |	| ¡ W n   Y z	|
 ||	 ¡ W n   Y |d9 }|d9 }|
D ]}d|  krndkr�n qb| |||| |  |  |  ¡ qb| |¡ |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)Úy0rr   rt   Úy3ÚaÚbÚcrQ   ÚdÚqÚRr9   r?   r?   r@   Ú_getBezierExtrema–   s4   "€
r‚   c                 C   s\   t | ƒ}| fdd„}tt|td|dƒƒƒ}tt|td|dƒƒƒ}t|ƒt|ƒt|ƒt|ƒfS )Nc                 S   s   ||  S rj   r?   )ÚiÚpr?   r?   r@   Ú<lambda>Í   s    zgetPathBounds.<locals>.<lambda>r   rw   r   )r4   ÚlistÚmapÚrangerL   r3   )Úpointsr.   ÚfÚxsÚysr?   r?   r@   ÚgetPathBoundsË   s
   r�   c                 C   sP   | d }t |ƒr$dd„ | D ƒ}dd„ | D ƒ}t|ƒt|ƒt|ƒt|ƒfS t| ƒS )z"Helper function for list of pointsr   c                 S   rB   rC   r?   ©rE   Úxyr?   r?   r@   rG   Ö   rH   z#getPointsBounds.<locals>.<listcomp>c                 S   rB   rI   r?   rŽ   r?   r?   r@   rG   ×   rH   )r   rL   r3   r�   )Ú	pointListÚfirstr‹   rŒ   r?   r?   r@   ÚgetPointsBoundsÒ   s   r’   c                   @   sX   e Zd ZdZeƒ Zdd„ Zddd„Zdd„ Zdd
d„Z	dd„ Z
er&	 dd„ Zd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                 C   s   t d| jj ƒ‚)zReturn a clone of this shape.z!No copy method implemented for %s)ÚNotImplementedErrorÚ	__class__r^   ©r[   r?   r?   r@   Úcopyê   ó   z
Shape.copyr   c                 C   s4   i }| j  ¡ D ]\}}|dd… dkr|||< q|S )zDInterface to make it easy to extract automatic
        documentationr   r   Ú_)Ú__dict__rd   )r[   ÚrecurÚpropsrg   rh   r?   r?   r@   ÚgetPropertiesð   s   €zShape.getPropertiesc                 C   s   | j  |¡ dS )zfSupports the bulk setting if properties from,
        for example, a GUI application or a config file.N)rš   Úupdate)r[   rœ   r?   r?   r@   ÚsetPropertiesý   r˜   zShape.setPropertiesÚ c                 C   sH   t |  ¡  ¡ ƒ}| ¡  |r|d }|D ]\}}td|||f ƒ qdS )z�Convenience. Lists them on standard output.  You
        may provide a prefix - mostly helps to generate code
        samples for documentation.Ú.z	%s%s = %sN)r†   r�   rd   ÚsortÚprint)r[   ÚprefixÚpropListÚnamerh   r?   r?   r@   ÚdumpProperties  s   ÿzShape.dumpPropertiesc                 C   s    | j durL| j ¡ D ]}|d dkr|| j v sJ d|| f ƒ‚q
| j  ¡ D ](\}}t| |ƒs6J d|| f ƒ‚t| |ƒ}| |¡sKJ d||| jjf ƒ‚q%d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 %s found in %szMissing attribute %s from %sz-Invalid value %s for attribute %s in class %s)	Ú_attrMaprš   Úkeysrd   rW   ÚgetattrÚvalidater•   r^   )r[   rg   ÚattrÚ	metavaluerh   r?   r?   r@   Úverify  s   
€
"ùzShape.verifyc                 C   s   t | ||ƒ dS )zSBy default we verify.  This could be off
            in some parallel base classes.N)ÚvalidateSetattr)r[   r¬   rh   r?   r?   r@   Ú__setattr__%  s   zShape.__setattr__c                 C   ó   t dƒ‚)ú5Returns bounding rectangle of object as (x1,y1,x2,y2)z+Shapes and widgets must implement getBounds©r”   r–   r?   r?   r@   Ú	getBounds*  s   zShape.getBoundsNrI   )r    )r^   r_   r`   ra   ÚAttrMapr¨   r—   r�   rŸ   r§   r®   r	   r°   r´   r?   r?   r?   r@   r“   á   s    

r“   c                
   @   sú   e Zd ZdZeeeddd�eedd�eedd�eeddd�eed	dd�d
�Z	dd„ Z
dd„ Zd4dd„Zd4dd„Zd4dd„Zdd„ Zdd„ Zdd„ Zd5dd„Zdd „ Zd!d"„ Zd6d$d%„Zd7d&d'„Zd8d(d)„Zd7d*d+„Zd7d,d-„Zd.d/„ Zd0d1„ Zd2d3„ ZdS )9Ú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                 O   s<   | j  ¡ | _ g | _d| _|D ]}|  |¡ qt | |¡ dS )z‰Initial 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   Úaddrc   ri   )r[   Úelementsrf   Úeltr?   r?   r@   ri   =  s   zGroup.__init__c                 C   s0   |r|| 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¨   ÚAttrMapValueÚisValidChildre   )r[   r¦   Únoder?   r?   r@   Ú_addNamedNodeM  s
   
ýzGroup._addNamedNodeNc                 C   s8   |durt |ƒsJ dƒ‚| j |¡ |  ||¡ dS dS )z“Appends 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¾   ry   rÆ   ©r[   rÅ   r¦   r?   r?   r@   rÀ   T  s
   ýz	Group.addc                 C   s   | j ||d� | jd S )N)r¦   r/   )rÀ   r¾   rÇ   r?   r?   r@   Ú_nn^  s   
z	Group._nnc                 C   sT   |dur(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Æ   )r[   rƒ   r.   r¦   r?   r?   r@   rÉ   b  s   úzGroup.insertc                 C   s¢   t | tƒrt| j| jƒptƒ }| j ¡ |_t|dƒr"| jdd… |_| j	}|j	j
}|D ]}t |tƒr7| ¡ }nt |tƒrA| ¡ }n| ¡ }||ƒ q+|  |¡ |S )z9Return a new object which only contains primitive shapes.r   N)Ú
isinstanceÚDrawingrY   rZ   r¶   r¨   r¿   rW   r   r¾   ry   ÚUserNodeÚprovideNodeÚexpandUserNodesr—   Ú_copyNamedContents)r[   ÚobjÚself_contentsr|   ÚchildÚnewChildr?   r?   r@   rÎ   l  s   





zGroup.expandUserNodesc                 C   s¶   t ƒ }t| dƒr| j|_t|dƒr| jdd… |_|  ¡ dd… }|rY| d¡}t|tƒr6| d| 	¡ ¡ n!t|t ƒrR| 
¡ }|jdkrL|j |j¡ n| |¡ n| |¡ |s#|S )z return a fully expanded objectÚ	__label__r   Nr   r   )r¶   rW   rÔ   r   ÚgetContentsÚpoprÊ   rÌ   rÉ   rÍ   Ú_exploder¾   ÚextendrÀ   )r[   rÐ   ÚPr.   r?   r?   r@   r×   ‚  s"   





õzGroup._explodec                 C   s   | j D ]}|j  |¡ qd S rj   )r¾   ry   )r[   rÐ   rÒ   r?   r?   r@   Ú_copyContents—  s   
ÿzGroup._copyContents©r¾   c           	      C   s‚   ddl m } | j}|st| j ¡ ƒ}| j ¡ D ]'\}}||v r.| |¡}t|||j| ƒ q||v r>||vr>t||||ƒƒ qd S )Nr   )r—   )	r—   r¾   r†   r¨   r©   rš   rd   Úindexre   )	r[   rÐ   ÚaKeysÚnoCopyr—   rÑ   ÚkÚvÚposr?   r?   r@   rÏ   ›  s   
€ûzGroup._copyNamedContentsc                 C   s$   | j  ¡ |_ |  |¡ |  |¡ |S )zcopies to obj)r¨   r¿   rÚ   rÏ   ©r[   rÐ   r?   r?   r@   Ú_copy¦  s   

zGroup._copyc                 C   s   |   |  ¡ ¡S )zreturns a copy)rã   r•   r–   r?   r?   r@   r—   ­  s   z
Group.copyr   c                 C   s   t | jt|||ƒƒ| _dS ©z&Convenience to help you set transformsN)Úmmultr   rK   )r[   ÚthetaÚcxÚcyr?   r?   r@   rK   ±  s   zGroup.rotatec                 C   ó   t | jt||ƒƒ| _dS rä   )rå   r   Ú	translate)r[   ÚdxÚdyr?   r?   r@   rê   µ  ó   zGroup.translatec                 C   ré   rä   )rå   r   Úscale)r[   ÚsxÚsyr?   r?   r@   rî   ¹  rí   zGroup.scalec                 C   s    t t | jt|ƒƒt|ƒƒ| _dS rä   )rå   r   ÚskewXÚskewY)r[   ÚkxÚkyr?   r?   r@   Úskew½  ó    z
Group.skewc                 C   s   | j dd… ||f | _ dS )z2Convenience function to set the origin arbitrarilyNéþÿÿÿ)r   ©r[   rF   rM   r?   r?   r@   ÚshiftÁ  s   zGroup.shiftc                 C   s*   t | _| j t| di ƒ¡ || _|| _dS )z| Convenience function to make a drawing from a group
            After calling this the instance will be a drawing!
        Ú_xtraAttrMapN)rË   r•   r¨   rž   rª   rY   rZ   )r[   rY   rZ   r?   r?   r@   Ú	asDrawingÅ  s   
zGroup.asDrawingc                 C   s,   t | ddƒ}| j}|r||vr|g| }|S )z[Return the list of things to be rendered
        override to get more complicated behaviourÚ
backgroundN)rª   r¾   )r[   r}   rO   r?   r?   r@   rÕ   Î  s   zGroup.getContentsc                 C   s�   | j rFg }| j D ]	}| | ¡ ¡ qt|ƒ}|d u rd S |\}}}}| j}||g||g||g||gg}g }	|D ]
}
|	 t||
ƒ¡ q7t|	ƒS d S rj   )r¾   ry   r´   ru   r   ÚtransformPointr’   )r[   r}   Úelemrq   rr   rs   rt   ÚtransÚcornersÚ
newCornersÚcornerr?   r?   r@   r´   Ö  s   
zGroup.getBoundsrj   )NrÛ   ©r   r   rC   rI   )r^   r_   r`   ra   rµ   rÃ   ÚisTransformÚisListOfShapesÚ	isBooleanr¨   ri   rÆ   rÀ   rÈ   rÉ   rÎ   r×   rÚ   rÏ   rã   r—   rK   rê   rî   rõ   rù   rû   rÕ   r´   r?   r?   r?   r@   r¶   .  s8    

û










	r¶   c                 C   s^   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•   r^   ry   )rÐ   ÚIr.   r  r~   Úmr?   r?   r@   Ú_addObjImportë  s   

ÿr  c                    sd  t | tƒr	t| ƒS t| ƒr7d ‡ fdd„| D ƒ¡}t | tƒr$d|› d�S d|› t| ƒdkr2d› d	�S d› d	�S | tu rEˆ rCt| ˆ d
ƒ d
S t | t	ƒr®ˆ rQt| ˆ ƒ ddl
m} || jƒ\}}}}}}	}
|rw|t|ƒ d… }|t|ƒ d…= ng }|  ¡ ‰‡ ‡fdd„|dd… D ƒ‡ ‡fdd„|D ƒ ‡ ‡fdd„ˆ ¡ D ƒ }| jj› dd |¡› d	�S t| ƒS )zEreturn a repr style string with named fixed args first, then keywordsú,c                 3   s   � | ]}t |ˆ ƒV  qd S rj   ©Ú_repr)rE   rà   )r	  r?   r@   Ú	<genexpr>û  s   € z_repr.<locals>.<genexpr>ú[ú]ú(r   r    ú)ÚEmptyClipPathr   )ÚgetfullargspecNc                    s   g | ]}t ˆ |d ¡ˆ ƒ‘qS rj   ©r  rÖ   ©rE   r.   ©r	  rÙ   r?   r@   rG     s    z_repr.<locals>.<listcomp>c              	      s(   g | ]}|› d t ˆ |d¡ˆ ƒ› �‘qS )ú=Nr  r  r  r?   r@   rG     ó   ( c                    s(   g | ]\}}|› d t ˆ| ˆ ƒ› �‘qS )r  r  )rE   r.   rà   r  r?   r@   rG     r  )rÊ   Úfloatr   r   Újoinr†   r4   r  r  r“   r  r  ri   r�   rd   r•   r^   Úrepr)r[   r	  r-   r  ÚargsÚvarargsÚvarkwÚdefaultsÚ
kwonlyargsÚkwonlydefaultsÚannotationsÚkargsr?   r  r@   r  ö  s4   

&
ÿþr  ú		c           
   	   C   sÐ   d}t | dd ƒ}|r||› |› dt|ƒ› d�7 }|  ¡ D ]I}t|tƒrVd|› �}|d7 }t |ddƒ}	|	r8d|	 }	||› |› d	|› d
|	› d�7 }|t|||||ƒ7 }|d8 }q||› |› dt||ƒ› d�7 }q|S )Nr    r   z.transform = Ú
rà   r   rÔ   ú#r  z._nn(Group())z.add(z)
)rª   r  rÕ   rÊ   r¶   Ú_renderGroupPy)
ÚGÚpfxr	  rƒ   Úindentr-   rO   r.   ÚnpfxÚlr?   r?   r@   r)    s    


 r)  c                    s,   |  | j¡ tˆƒ‰ ‡ ‡fdd„| ¡ D ƒS )Nc                    s(   i | ]\}}|  ˆ¡r|ˆ d … |“qS rj   )Ú
startswith)rE   rß   rà   ©r.   r+  r?   r@   Ú
<dictcomp>(  r  z_extraKW.<locals>.<dictcomp>)rž   rš   r4   rd   )r[   r+  Úkwr?   r0  r@   Ú_extraKW%  s   r3  c                   @   s  e Zd ZdZh d£Zeh d£ Zeeedd�eedd�edƒee	dd�ee
d	d
ddƒdd�ee
ddddƒdd�eedd�eedd�eedd�d�	Zeeeee
eŽ ddd�dd�d�Ze e¡ d2dd„Zdd„ Zefd d!„Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd3d+d,„Zd4d-d.„Zd5d0d1„ZdS )6rË   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>   r4  r5  r7  r;  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)	rY   rZ   Úcanvrü   ÚhAlignÚvAlignÚrenderScaleÚinitialFontNameÚinitialFontSizer   r   )ÚloÚemptyOKzOne or more plot modes)ÚBASEÚformatsé�  éÈ   c                 O   s@   d | _ tj| g|¢R i |¤Ž || _|| _d| _d| _d| _d S )NrE  rJ  ç      ð?)rü   r¶   ri   rY   rZ   rL  rM  rN  )r[   rY   rZ   Únodesrf   r?   r?   r@   ri   Z  s   
zDrawing.__init__c                 C   sœ   g d¢g d¢dœ}t |  ¡ d|ƒ}d| jj }d}|d dd	„ | ¡ D ƒ¡7 }|d
|› d�7 }|d| j› d| j› d�7 }|d7 }||7 }|d|› d�7 }|S )N)Ú_DrawingEditorMixinrË   r¶   )ÚColorÚ	CMYKColorÚ
PCMYKColor)zreportlab.graphics.shapeszreportlab.lib.colorsr[   ÚExplodedDrawing_z0#Autogenerated by ReportLab guiedit do not edit
r    c                 s   s,   � | ]\}}d |› dd  |¡› d�V  qdS )zfrom z import z, r'  N)r  )rE   r
  Úor?   r?   r@   r  k  s   €* z$Drawing._renderPy.<locals>.<genexpr>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)
)r)  r×   r•   r^   r  rd   rY   rZ   )r[   r	  r*  r.   r-   r?   r?   r@   Ú	_renderPyc  s   þzDrawing._renderPyc              	   C   s:   ddl m} |j| | jdd|tur|nt| dtƒd� dS )zšThis 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.graphicsra  ÚdrawrK  r   rª   )r[   rd  ra  r?   r?   r@   rf  s  s   
ÿzDrawing.drawc                 C   s2   | j }| j}| j}|dkr||9 }||9 }||fS )NrW  )rY   rZ   rN  )r[   Ú
availWidthÚavailHeightrY   rZ   rN  r?   r?   r@   Úwrap{  s   zDrawing.wrapc                 C   s   t  | ¡}| j|_| j|_|S )z:Return a new drawing which only contains primitive shapes.)r¶   rÎ   rY   rZ   râ   r?   r?   r@   rÎ   „  s   
zDrawing.expandUserNodesc                 C   s   |   |  | j| j¡¡S )zReturns a copy)rã   r•   rY   rZ   r–   r?   r?   r@   r—   ‹  s   zDrawing.copyc                 O   s   |   t|i |¤Ž¡S rj   )rã   r¶   )r[   r  r2  r?   r?   r@   ÚasGroup�  s   zDrawing.asGroupr    c                 K   s   |  dd¡}t|tƒrd| }nd}|d7 }ddlm} d}	|sft| d| jjd ƒ}t| d	dƒ}
t|
d
ƒr9|
| ƒ}
t|d
ƒrC||
ƒ}n#z||
 }W n t	ye } zt
|ƒ d¡dk r[‚ W Y d}~nd}~ww |du rpt| ddƒ}t|d
ƒry|| ƒ}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 |¡ tj tj ||¡¡}tj |¡}|d dd…  ¡ | jv rá|d }dd„ |pìt| ddgƒD ƒ}|durö|fpüt| d|ƒfd }tjjtjjf}| tj_tj_d|v �rbddl m!} |d }|�r)t"|d|f ƒ |j#| ||fdt| d|j$ƒit%| dfi |¤Ž¤Ž |	d }	tj&dk�rbddl'}ddl(}| )|¡ *dd¡ | +|¡ | j,D ]i}||v �rÍdd l m-} d!||f }|�rƒt"|||f ƒ t| d"dƒ}|�r¦t|d|gƒ}||v �r¤t|d#dƒ�s¤| .¡  nd}|j#| |f|t| d|j$ƒd$œt%| d%fi |¤Ž¤Ž |	d& | }	|�rÍ| /|¡ �qed'|v �r6zdd(l0m1} W n t2�yì   dd)l m3} Y nw |d* }|�rüt"|d+|f ƒ |j#| |f|t| d,d-gƒd t| d,dd.gƒd t| d/|j4ƒt| d|j$ƒt| d0|j5ƒd1œt%| d2fi |¤Ž¤Ž |	d3 }	d4|v �rldd5l m6} |d6 }|�rPt"|d7|f ƒ |j#| |fdt| d|j$ƒit%| d8fi |¤Ž¤Ž |	d9 }	d:|v �r¢dd)l m3} |d; }|�r†t"|d+|f ƒ |j#| |fdt| d|j$ƒit%| d2fi |¤Ž¤Ž |	d< }	d=|v �rÞ|d> }|�r¶t"|d=|f ƒ t7|d?ƒ�}| 8t9|  :¡  ;d@tj<¡ƒ¡ W d  ƒ n	1 �sÕw   Y  |	dA }	|\tj_tj_t| dBƒ�rò|  =||	¡ |	�rþ||	dd…  �pÿdS )CzÞSaves 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                 S   s   g | ]}|  ¡ ‘qS r?   )ÚlowerrD   r?   r?   r@   rG   Á  rH   z Drawing.save.<locals>.<listcomp>rT  r;  r
   r`  z.pdfÚPDFrd  Ú
showBorderÚ_renderPDF_z/.pdfÚmacÚCAROzPDF ©ÚrenderPMz%s.%sÚ_drawTimeCollectorÚdisabled©Úfmtrd  Ú
_renderPM_z/.r7  ©ÚrenderPS_SEP©ÚrenderPSz.epsÚEPSÚEPS_infoÚTestingÚ	ReportLabÚpreviewÚ	ttf_embed)ÚtitleÚdeptÚcompanyrˆ  rd  r‰  Ú
_renderPS_z/.epsr=  ©Ú	renderSVGz.svgÚSVGÚ_renderSVG_z/.svgr4  z.psz/.psr5  z.pyÚwbr'  z/.pyÚ
saveLogger)>rÖ   rÊ   ÚintÚ	reportlabrm  rª   r•   r^   rW   Ú	TypeErrorÚstrÚfindÚosÚpathÚisabsÚsplitÚrstripÚsepr  ÚdirnameÚsysÚargvÚisdirÚmakedirsÚnormpathÚsplitextrs  Ú
_saveModesr   ÚwarnOnceÚenabledÚinfoOncere  ra  r£   Ú
drawToFilerd  r3  ÚplatformÚmacfsÚ
macostoolsÚFSSpecÚSetCreatorTypeÚtouchedÚ_bmModesrz  ÚclearÚsaveÚrlextra.graphicsr�  ÚImportErrorrƒ  Úeps_previewÚeps_ttf_embedr�  ÚopenÚwriter   r_  ÚreplaceÚlinesepr“  )r[   rT  r
   ÚfnRootrq  rŠ  r2  ÚgenFmtrm  Úextro  ÚerrÚfnrootÚplotModeÚ_savedra  Úfilenamer¬  r­  ÚbmFmtrz  ÚdtcÚdtcfmtsrƒ  r�  rŠ   r?   r?   r@   r³  ’  sä   




 €ý
0 
2



2€
ÿÿùø	
ÿþþ
0
ÿzDrawing.savec                 K   sŒ  || j v sJ d| ƒ‚ddlm} |dkr9ddlm} | dd¡}|j| |fdt| d	|jƒit	| d
fi |¤Ž¤ŽS || j
v r\ddlm} |j| f|t| d	|jƒdœt	| dfi |¤Ž¤ŽS |dkr…zddlm}	 W n tyw   ddlm}	 Y nw |	j| |t| d	|jƒd�S |dkr›ddlm}	 |	j| t| d	|jƒd�S |dkr£|  ¡ S |dkrÄd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   rl  r;  r`  rŠ  r    rd  ru  rv  ry  r}  r  r7  r€  r‚  )rˆ  rd  r4  rc  r5  r=  rŽ  r‘  N)r¦  r•  rm  re  ra  rÖ   ÚdrawToStringrª   rd  r3  r±  rz  r´  r�  rµ  rƒ  r_  r�  )r[   Úformatr
   rˆ  r2  rm  ra  rŠ  rz  rƒ  r�  r?   r?   r@   ÚasString  s@   0
ÿÿÿþ.þzDrawing.asStringÚfitc                 C   sP  |   ¡ }| j}| j}t||g|¢R Ž }	|	 ¡ \}
}}}|dks7|dkrX|
|k s7||| ks7||k s7||| krX||
 | | |	_|| | | |	_dddd||
 || f|	_|	S |dksj|dkr€|
|k sj||| kr€||
 | | |	_dddd||
 df|	_|	S |dks’|dkr¦||k s’||| kr¦|| | | |	_ddddd|| f|	_|	S )	z?return a base class drawing which ensures all the contents fitsrÊ  Úexpandr   r   ÚfitxÚexpandxÚfityÚexpandy)rÕ   rY   rZ   rË   r´   r   )r[   ÚkindÚlpadÚrpadÚbpadÚtpadrO   ÚoWÚoHr]   ÚxLÚyLÚxHÚyHr?   r?   r@   Úresized-  s$   8$ú$ýzDrawing.resized)rU  rV  )NNNNr    )Nr   )rÊ  r   r   r   r   )r^   r_   r`   ra   r¦  r±  rµ   rÃ   ÚisNumberÚisValidChildOrNoneÚOneOfÚisStringOrNoneÚisNumberOrNonerú   r¶   Ú
SequenceOfr¨   rž   ri   r_  r   rf  ri  rÎ   r—   rj  r³  rÉ  rÛ  r?   r?   r?   r@   rË   *  sD    





õþþÿ

		

|rË   c                   @   ó   e Zd ZdZddd„ZdS )rY  z<This is a mixin to provide functionality for edited drawingsNc                 C   sœ   t |ƒ}|r&t|dƒr&d|jvr|j ¡ |_|r|du rt }t||ƒ|j|< t|dƒr@|r@|r8| |||¡ dS | ||¡ dS |rJt|||ƒ 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Ä   rW   rš   r¨   r¿   rÃ   rÉ   rÀ   re   Ú
ValueError)r[   rÐ   rh   r¦   r«   r¸   rá   Úivcr?   r?   r@   Ú_addB  s   
z_DrawingEditorMixin._add©NNNN)r^   r_   r`   ra   rå  r?   r?   r?   r@   rY  @  ó    rY  c                   @   s   e Zd Zdd„ ZdS )ÚisStrokeDashArrayc                 C   s0   t  |¡pt|ttfƒot|d ƒot|d ƒS )Nr   r   )ÚisListOfNumbersOrNoneÚtestrÊ   r†   ÚtuplerÜ  ÚisListOfNumbers)r[   rF   r?   r?   r@   rê  W  s   0zisStrokeDashArray.testN)r^   r_   r`   rê  r?   r?   r?   r@   rè  V  s    rè  c                   @   s€   e Zd Zeeeƒeeƒeedddƒdd�eedddƒdd�eedd�eedd�ee	d	d�ee
d
d�ee
ddd�d�	Zdd„ ZdS )Ú	LineShaper   r   rw   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                 C   s<   t d | _d| _d| _d| _d| _d | _d | _|  |¡ d S )Nr   r   r   )	ÚSTATE_DEFAULTSr   r   r   r   r   r!   r"   rŸ   ©r[   r2  r?   r?   r@   ri   j  s   
zLineShape.__init__N)r^   r_   r`   rµ   rÃ   ÚisColorOrNonerÜ  rÞ  rè  Ú	isOpacityr  r¨   ri   r?   r?   r?   r@   rí  [  s    



÷rí  c                	   @   sN   e Zd Zeeeedd�eedd�eedd�eedd�d�Zdd„ Zdd„ Z	dS )	ÚLiner    rº   )rS  rq   rr   rs   rt   c                 K   ó(   t  | |¡ || _|| _|| _|| _d S rj   )rí  ri   rq   rr   rs   rt   )r[   rq   rr   rs   rt   r2  r?   r?   r@   ri   |  ó
   
zLine.__init__c                 C   s   | j | j| j| jfS )r²   )rq   rr   rs   rt   r–   r?   r?   r@   r´   ƒ  s   zLine.getBoundsN)
r^   r_   r`   rµ   rí  rÃ   rÜ  r¨   ri   r´   r?   r?   r?   r@   rò  t  s    



ürò  c                
   @   sT   e Zd Zeeeedd�eedd�eedd�eeddd�ee	e
eƒƒd�Zd	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·   )rS  r'   r#   r$   r&   r(   c                 C   s    t d | _d | _t | |¡ d S )Nr'   )rî  r'   r#   rí  ri   rï  r?   r?   r@   ri   ’  s   
zSolidShape.__init__N)r^   r_   r`   rµ   rí  rÃ   rð  rñ  r  rÞ  r   r   r¨   ri   r?   r?   r?   r@   rõ  ‡  s    


ûrõ  rx   )rw   rw   é   r   )ÚmoveToÚlineToÚcurveToÚ	closePathc                 C   sÄ   | j }d}d}d}| }| jD ];}	|	tkr,|r(|r(|
tkr(|d7 }|r(|t ƒ  |d7 }t|	 }|| }||	 |||… Ž  |}|	tkrH|d7 }|	}
q|r^|r^|
tkr^|d7 }|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Újr?   r?   r@   Ú_renderPathž  s2   


r  znon-zeroÚnonzerozeven-oddÚevenoddc                
   @   sŒ   e Zd ZdZeeeeƒeeƒeeƒee	e
ddƒƒƒee
eeƒƒd�Zddddefdd„Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚPathz2Path, made up of straight lines and bezier curves.r=  r;  )rS  r‰   rû  Ú
isClipPathÚ	autocloser(   Nr   c                 K   s^   t  | |¡ |d u rg }|d u rg }t|ƒd dksJ dƒ‚|| _|| _|| _|| _|| _d S ©Nrw   r   ú-Point list must have even number of elements!)rõ  ri   r4   r‰   rû  r  r  r(   )r[   r‰   rû  r  r  r(   r2  r?   r?   r@   ri   Ð  s   
zPath.__init__c                 C   s2   |   | jd d … | jd d … ¡}| |  ¡ ¡ |S rj   )r•   r‰   rû  rŸ   r�   ©r[   Únewr?   r?   r@   r—   Ý  s    z	Path.copyc                 C   ó    | j  ||g¡ | j t¡ d S rj   )r‰   rØ   rû  ry   rü  rø   r?   r?   r@   r÷  â  ó   zPath.moveToc                 C   r  rj   )r‰   rØ   rû  ry   Ú_LINETOrø   r?   r?   r@   rø  æ  r  zPath.lineToc                 C   s(   | j  ||||||g¡ | j t¡ d S rj   )r‰   rØ   rû  ry   Ú_CURVETO)r[   rq   rr   rs   rt   Úx3r{   r?   r?   r@   rù  ê  s   zPath.curveToc                 C   s   | j  t¡ d S rj   )rû  ry   rý  r–   r?   r?   r@   rú  î  s   zPath.closePathc                 C   s  | j }ztg }|j}|j}g }|j}|j}d}| jD ]O}	t|	 }
||
 }|
dkr6||| ƒ |||d  ƒ n0|
dkrf|||d… \}}}|t|d |||ƒƒ ||d |d… \}}}|t|d |||ƒƒ |}qt|ƒt|ƒt|ƒt|ƒfW S    t|ƒ Y S )Nr   rw   r   rö  r/   )	r‰   ry   rØ   rû  rþ  r‚   rL   r3   r�   )r[   r‰   rP   ÚaXÚeXrQ   ÚaYÚeYrƒ   r  r  r  rq   rs   r  rr   rt   r{   r?   r?   r@   r´   ñ  s0   
zPath.getBounds)r^   r_   r`   ra   rµ   rõ  rÃ   rì  r  ÚNoneOrrÞ  r   r   r¨   ri   r—   r÷  rø  rù  rú  r´   r?   r?   r?   r@   r  Å  s     ûr  c                 C   sò   |d u r|}g }t d }	||	 }
||	 }||
k r"|dt   }||
k st||
 ƒ}|j}|dkrNt||p4dƒ}||	 }tt|| d ƒdƒ}|| }|d7 }nd}d}t|ƒD ]}|
||  }|| |t|ƒ  ||t|ƒ  fƒ qV|rw| 	¡  |S )Nç     €f@rw   çü©ñÒMbP?rW  ç      à?r   r   )
r   r  ry   rL   r3   r”  rˆ   r   r   Úreverse)ÚcenterxÚcenteryÚradiusÚstartangledegreesÚendangledegreesÚyradiusÚdegreedeltar  r‰   ÚdegreestoradiansÚ
startangleÚendanglerN   r|   Úradiansdeltar.   r?   r?   r@   ÚgetArcPoints  s.   ÿ
&r+  c                   @   râ  )ÚArcPathzPath with an addArc methodNc
              
   C   sf   t ||||||||	d�}
|st| jƒs$|  |
d d |
d d ¡ |
d= |
D ]
\}}|  ||¡ q&d S )N)r%  r&  r  r   r   )r+  r4   rû  r÷  rø  )r[   r   r!  r"  r#  r$  r%  r&  r÷  r  rÙ   rF   rM   r?   r?   r@   ÚaddArc,  s
   zArcPath.addArcræ  )r^   r_   r`   ra   r-  r?   r?   r?   r@   r,  *  rç  r,  c                 K   s>  g }g }| D ]B}t |ƒs|}g }	n
|d }|dd … }	|tvr%td| ƒ‚t |¡}
t|	ƒt|
 kr<td|t|	ƒf ƒ‚| |
¡ | t	|	ƒ¡ q|df|dffD ]\}}t
|t|ƒdƒD ]
}|| | ||< q]qQ| dd ¡}|�rdD ] }|| ||d  f}|d d u r�|d d u r�qt||d d… }t|ƒt|ƒ}}|d d urî|d d urît|ƒt|ƒ}}|| }t|ƒdkrÚ|| | }t
|t|ƒdƒD ]}|||| |   ||< qÊqtt
|t|ƒdƒD ]
}|| d	 ||< qâqt|d d urú|d | n|d | }t
|t|ƒdƒD ]}||  |7  < �qqtt|||fi |¤ŽS )
Nr   r   zbad operator name %sz%s bad arguments %srw   Úbbox)r   r   g�íµ ÷Æ°>r  )r   Ú_PATH_OP_NAMESrã  rÜ   r4   rþ  r—  ry   rØ   r†   rˆ   rÖ   rL   r3   Úabsr  )ÚpathSegsr  rë   rì   r2  ÚOrÙ   ÚsegÚopNamer  r  r   r^  rƒ   r.  r  r|   r}   r~   Úfacr?   r?   r@   Ú
definePath3  sT   

ÿÿÿ$ÿr6  c                	   @   s`   e Zd ZdZeeeeƒeeƒeedd�eedd�eeƒeeƒd�Zddd„Z	d	d
„ Z
dd„ ZdS )ÚRectz)Rectangle, possibly with rounded corners.úwidth of the object in pointsrº   úheight of the objects in points)rS  rF   rM   rY   rZ   ÚrxÚryr   c                 K   s4   t  | |¡ || _|| _|| _|| _|| _|| _d S rj   )rõ  ri   rF   rM   rY   rZ   r:  r;  )r[   rF   rM   rY   rZ   r:  r;  r2  r?   r?   r@   ri   q  s   
zRect.__init__c                 C   ó*   |   | j| j| j| j¡}| |  ¡ ¡ |S rj   )r•   rF   rM   rY   rZ   rŸ   r�   r  r?   r?   r@   r—   z  ó   z	Rect.copyc                 C   ó    | j | j| j | j | j| j fS rj   ©rF   rM   rY   rZ   r–   r?   r?   r@   r´     s    zRect.getBoundsNr  )r^   r_   r`   ra   rµ   rõ  rÃ   rÜ  r¨   ri   r—   r´   r?   r?   r?   r@   r7  e  s    

ú
		r7  c                	   @   sX   e Zd ZdZeeeeƒeeƒeedd�eedd�edƒd�Z	dd„ Z
d	d
„ Zdd„ ZdS )ÚImagezBitmap image.r8  rº   r9  N)rS  rF   rM   rY   rZ   rš  c                 K   s.   t  | |¡ || _|| _|| _|| _|| _d S rj   )rõ  ri   rF   rM   rY   rZ   rš  )r[   rF   rM   rY   rZ   rš  r2  r?   r?   r@   ri   �  s   
zImage.__init__c                 C   ó.   |   | j| j| j| j| j¡}| |  ¡ ¡ |S rj   )r•   rF   rM   rY   rZ   rš  rŸ   r�   r  r?   r?   r@   r—   •  s   z
Image.copyc                 C   r>  rj   r?  r–   r?   r?   r@   r´   š  rö   zImage.getBounds)r^   r_   r`   ra   rµ   rõ  rÃ   rÜ  rà  r¨   ri   r—   r´   r?   r?   r?   r@   r@  ‚  s    

ûr@  c                   @   sL   e Zd Zeeeedd�eedd�eedd�d�Zdd„ Zdd	„ Z	d
d„ Z
dS )ÚCircleúx of the centrerº   úy of the centreúradius in points)rS  rç   rè   Úrc                 K   s"   t  | |¡ || _|| _|| _d S rj   )rõ  ri   rç   rè   rF  )r[   rç   rè   rF  r2  r?   r?   r@   ri   ¦  s   
zCircle.__init__c                 C   ó&   |   | j| j| j¡}| |  ¡ ¡ |S rj   )r•   rç   rè   rF  rŸ   r�   r  r?   r?   r@   r—   ¬  ó   zCircle.copyc                 C   s,   | j | j | j| j | j | j | j| j fS rj   )rç   rF  rè   r–   r?   r?   r@   r´   ±  ó   ,zCircle.getBoundsN©r^   r_   r`   rµ   rõ  rÃ   rÜ  r¨   ri   r—   r´   r?   r?   r?   r@   rB  ž  s    


ýrB  c                	   @   sV   e Zd Zeeeedd�eedd�eedd�eedd�d�Zdd„ Zd	d
„ Z	dd„ Z
dS )ÚEllipserC  rº   rD  zx radiuszy radius)rS  rç   rè   r:  r;  c                 K   ró  rj   )rõ  ri   rç   rè   r:  r;  )r[   rç   rè   r:  r;  r2  r?   r?   r@   ri   ¼  rô  zEllipse.__init__c                 C   r<  rj   )r•   rç   rè   r:  r;  rŸ   r�   r  r?   r?   r@   r—   Ã  r=  zEllipse.copyc                 C   s,   | j | j | j| j | j | j | j| j fS rj   )rç   r:  rè   r;  r–   r?   r?   r@   r´   È  rI  zEllipse.getBoundsNrJ  r?   r?   r?   r@   rK  ´  s    



ürK  c                   @   s’   e Zd ZdZeeeedd�eedd�eedd�eeƒeeƒeeƒeeƒeeƒee	dd�d�
Z
dZ			
ddd„Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )ÚWedgeznA "slice of a pie" by default translates to a polygon moves anticlockwise
       from start angle to end anglerC  rº   rD  rE  ztreat as annular ring)
rS  r   r!  r"  r#  r$  r%  Úradius1Úyradius1Úannularr   NFc           	      K   sV   t  | |¡ ||k r|d }||k s
|||||f\| _| _| _| _| _|| _|| _d S )Nih  )	rõ  ri   r   r!  r"  r#  r$  r%  rO  )	r[   r   r!  r"  r#  r$  r%  rO  r2  r?   r?   r@   ri   Ý  s   ÿÿ
zWedge.__init__c                 C   sH   t | dd ƒ}|d u r| j}t | dd ƒ}t | d|ƒ}|d u r|}|||fS )Nr%  rM  rN  )rª   r"  )r[   r%  rM  rN  r?   r?   r@   Ú
_xtraRadiiè  s   
zWedge._xtraRadiic                 C   sd  | j }| j}| j}|  ¡ \}}}| j}| j}td }	||	 }
||	 }||
k r0|dt  }||
k s&t||
 ƒ}g }|dkr\t| j	pAd|ƒ}||	 }t
dt|| d ƒƒ}|| }|d7 }nd}d}g }|j}|j}t|ƒD ]}|
||  }|t|ƒt|ƒfƒ ql|D ]\}}||||  ƒ ||||  ƒ q�|dksž|d u r¯|dks¦|d u r¯||ƒ ||ƒ n| ¡  |D ]\}}||||  ƒ ||||  ƒ qµ| j�r.tt| dtƒd	�}| |d |d ¡ tdd| dƒD ]}| || ||d  ¡ qé| ¡  | |d|  |d| d  ¡ td| d d
| dƒD ]}| || ||d  ¡ �q| ¡  |S t|ƒS )Nr  rw   r  rW  r   r  r   r(   )r(   rx   )r   r!  r"  rP  r#  r$  r   r  rL   r&  r3   r”  ry   rˆ   r   r   r  rO  r  rª   r   r÷  rø  rú  ÚPolygon)r[   r   r!  r"  r%  rM  rN  r#  r$  r'  r(  r)  rN   r‰   r&  r*  r.   ÚCAÚCAAr|   r~   r-   rÙ   rF   r?   r?   r@   Ú	asPolygonô  sb   ÿ
  zWedge.asPolygonc                 C   rA  rj   )r•   r   r!  r"  r#  r$  rŸ   r�   r  r?   r?   r@   r—   *  s   üz
Wedge.copyc                 C   s   |   ¡  ¡ S rj   )rT  r´   r–   r?   r?   r@   r´   3  s   zWedge.getBounds)NF)r^   r_   r`   ra   rµ   rõ  rÃ   rÜ  rà  r  r¨   r&  ri   rP  rT  r—   r´   r?   r?   r?   r@   rL  Ë  s*    



÷
ÿ6	rL  c                   @   ó@   e Zd ZdZeeeedd�d�Zg fdd„Z	dd„ Z
d	d
„ ZdS )rQ  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º   ©rS  r‰   c                 K   s2   t  | |¡ t|ƒd dksJ dƒ‚|pg | _d S r  )rõ  ri   r4   r‰   )r[   r‰   r2  r?   r?   r@   ri   >  s   zPolygon.__init__c                 C   ó   |   | j¡}| |  ¡ ¡ |S rj   ©r•   r‰   rŸ   r�   r  r?   r?   r@   r—   C  ó   zPolygon.copyc                 C   ó
   t | jƒS rj   ©r’   r‰   r–   r?   r?   r@   r´   H  ó   
zPolygon.getBoundsN)r^   r_   r`   ra   rµ   rõ  rÃ   rì  r¨   ri   r—   r´   r?   r?   r?   r@   rQ  6  s    
ÿrQ  c                   @   rU  )ÚPolyLinez–Series of line segments.  Does not define a
    closed shape; never filled even if apparently joined.
    Put the numbers in the list, not two-tuples.rV  rº   rW  c                 K   sz   t  | |¡ |p	g }t|ƒ}|r8t|d ƒr,g }|D ]\}}| |¡ | |¡ q|}nt|ƒd dks8J dƒ‚|| _d S )Nr   rw   r  )rí  ri   r4   r   ry   r‰   )r[   r‰   r2  Ú	lenPointsrl   rF   rM   r?   r?   r@   ri   T  s   

zPolyLine.__init__c                 C   rX  rj   rY  r  r?   r?   r@   r—   c  rZ  zPolyLine.copyc                 C   r[  rj   r\  r–   r?   r?   r@   r´   h  r]  zPolyLine.getBoundsN)r^   r_   r`   ra   rµ   rí  rÃ   rì  r¨   ri   r—   r´   r?   r?   r?   r@   r^  K  s    
ÿr^  c                	   @   sn   e Zd ZdZeeeeee	edd�fdƒdd�eee
edfƒdd�eee
ed	fƒd
d�d�Zddg fd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   )rQ  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)rS  ÚxyListsÚanglesÚspacingsrw   é-   c              
   K   sÊ  t j| fi |¤Ž t|ƒr|f}t|ƒr|f}t|ƒr|f}t|ƒt|ƒ }|dkr5t|ƒ||d g  }|| _|| _|| _| j	}| j
}t|ƒD �]\}}|| }	t|ƒ}t|ƒ}
t|ƒ}d}| }|D ]%}tdt|ƒdƒD ]}||d  |
 || |  }t||ƒ}t||ƒ}qnqdtt||	 ƒƒd }tt||	 ƒƒd }t||ƒD ]¾}g }|	| }|D ]m}t|ƒd }tdt|ƒdƒD ]\}|| }||d  }||
 ||  }||
 ||  }|| }||d  }||
 ||  }||
 ||  }||k rü||k�s||k �r||k�r| ||| ||  ||   ¡ |}q½q­| ¡  tdt|ƒdƒD ]9}|| |
 ||  }||
 || |  }||d  |
 ||  }||
 ||d  |  }|||ƒ |||ƒ �q'q£qHd S )Nr   r/   iÿÿÿrw   r   )r  ri   rì  rÜ  r4   r†   ra  rb  rc  r÷  rø  Ú	enumerater   r   r   rˆ   rL   r3   r”  r   ry   r¢   )r[   rc  rb  ra  Úkwdsrƒ   r÷  rø  ræ   ÚspacingÚcosThetaÚsinThetaÚspanMinÚspanMaxrÙ   r  rM   Ú	spanStartÚspanEndÚstepÚnodeXÚstripeYrß   r|   r}   Úa1Úb1rF   rq   rr   r?   r?   r@   ri   t  sv   
ü&"ñ
÷åêzHatching.__init__N)r^   r_   r`   ra   rµ   r  rÃ   ÚEitherOrrì  rá  rÜ  r¨   ri   r?   r?   r?   r@   r`  k  s    ýr`  c           
      C   sH   t | d|ƒ}| |¡}|dkr"t | ddƒ}	|	t|d |… |||ƒ }|S )NÚ_dpr   Ú_dpLen)rª   Úrfindr   )
ÚtAr5   r2   r*   r)   ÚencodingÚpivotCharacterÚdprƒ   ÚdpOffsr?   r?   r@   ÚnumericXShiftÃ  s   
r|  c                   @   s®   e Zd ZdZeeedd�eedd�eedd�eddd�eedd�eed	d�ee	d
dddƒdd�eeƒee	ddddddddƒdd�d�	Z
dZdd„ Zdd„ Zdd„ Zd 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,   Úmiddler1   Únumericz(treat (x,y) as one of the options below.r   r   rw   rv   rx   é   rö  é   z.Control whether text is filled/stroked etc etc)	rF   rM   r5   r*   r)   r'   r+   rx  ÚtextRenderModeÚutf8c                 K   sD   || _ || _|| _d| _td | _td | _td | _|  |¡ d S )Nr,   r*   r)   r'   )	rF   rM   r5   r+   rî  r*   r)   r'   rŸ   )r[   rF   rM   r5   r2  r?   r?   r@   ri   Ý  s   


zString.__init__c                 C   s   | j t| j| j| j| jƒ S rj   )rF   r   r5   r*   r)   rx  r–   r?   r?   r@   ÚgetEastç  s   zString.getEastc                 C   rG  rj   )r•   rF   rM   r5   rŸ   r�   r  r?   r?   r@   r—   ê  rH  zString.copyc                 C   sž   | j }t|| j| j| jƒ}| j}| j}|dkr=|dkr"|d| 8 }n|dkr+||8 }n|dkr=|t|||| j| j| jƒ8 }|| jd| j  || | j| j fS )Nr,   r~  r  r1   r  gš™™™™™É?)	r5   r   r*   r)   rx  r+   rF   r|  rM   )r[   r9   r2   rw  rF   r?   r?   r@   r´   ï  s   
$zString.getBounds)r^   r_   r`   ra   rµ   rÃ   rÜ  ÚisStringrð  rÞ  r¨   rx  ri   r„  r—   r´   r?   r?   r?   r@   r}  Ë  s$    





÷
r}  c                   @   rS   )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                 C   r±   )zºOverride 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–   r?   r?   r@   rÍ     s   zUserNode.provideNodeN)r^   r_   r`   ra   rÍ   r?   r?   r?   r@   rÌ   þ  s    rÌ   c                   @   rS   )Ú
DirectDrawz"try to draw directly on the canvasc                 C   r±   )Nr†  r³   )r[   r\   r?   r?   r@   ÚdrawDirectly  s   zDirectDraw.drawDirectlyN)r^   r_   r`   ra   rˆ  r?   r?   r?   r@   r‡    rb   r‡  c                  C   sp   t ddddƒ} dd l}|j}tjj}|dƒ ||  ¡ ƒ |dƒ |  ¡  |dƒ |dƒ | `|d	ƒ |  ¡  d S )
Nr    rV  é2   r   za Rectangle: z
verifying...z OK
zdeleting rect.width zverifying...)r7  Úpprintr   Ústdoutr¹  r�   r®   rY   )rF  rŠ  Úppr2   r?   r?   r@   rê    s   rê  Ú__main__rj   )r   r&  )FF)NNN)bÚ__version__ra   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  Ú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   rA   rR   rT   rc   ru   r‚   r�   r’   r“   r¶   r  r  r)  r3  rË   rY  Ú	Validatorrè  rí  rò  rõ  r†   rˆ   rü  r  r  rý  rþ  r/  r  Ú_fillModeMapr  r  r+  r,  r6  r7  r@  rB  rK  rL  rQ  r^  r`  r|  r}  rÌ   r‡  rê  r^   r?   r?   r?   r@   Ú<module>   sä    	ÿüûúùø	÷
öõôóòðïíìë"

5M 
>

  
ù
H
	2k X3

ÿ