o
    {i]                     @   s4  d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZ ddlT ddlmZmZ ddlmZmZmZmZm Z m!Z! dd	l"m#Z#m$Z$ dd
lm%Z% ddl&m'Z'm(Z( ddl)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/ e0e-e.e/dZ1ddl2m3Z4 dddddddddd	dddddddddd	dZ5zddl6m7Z7 W n e8y   dZ7Y nw dddddddddd 	Z9G d!d" d"e#Z:G d#d$ d$Z;e
d%d&d'd(Z<G d)d* d*e$Z=eee=Z>G d+d, d,e:Z?G d-d. d.e?Z@G d/d0 d0e@ZAeeeAZBdd1lCmDZD G d2d3 d3eDZEG d4d5 d5e:ZFdS )6z3.3.0    )colors)simpleSplit)normalizeTRBL)isNumberisNumberOrNoneOneOfisColorOrNoneisStringisTextAnchorisBoxAnchor	isBooleanNoneOrisInstanceOfisNoneOrStringisNoneOrCallableisSubclassOfEitherOrisListOfNumbers)*)stringWidthgetAscentDescent)DrawingGroupCircleRectStringSTATE_DEFAULTS)Widget
PropHolder)
DirectDraw)XPreformattedFlowable)ParagraphStylePropertySet)TA_LEFTTA_RIGHT	TA_CENTER)startendmiddle   )	text2Pathnneesesswwnw)	r   -   Z            i  i;  xy)DirectDrawFlowableNr'   r(   r)   )	r2   r3   r1   r.   r-   r/   r,   r0   cc                
   @   s  e Zd ZdZedfi deedddeedddeedddeed	dd
eedddeedddeedddeedddeedddee	dddddddeedddeedddeeddd eed!dd"eed#dd$ee
d%dd&ee
d'dd(eed)dd*eeddd+eed,dd-eed.dd/eed0dd1eed2dd3eed4dd5eed6dd7eed8dd9eed:dd;eed<dd=eeeefd>d?eed@ddAeedBdCdDdEeeeedFdGdCdDdHeeeedFdIdCdDdJeeeeeefdKdCdDZdLdM ZedNdO ZejdPdO ZdQdR ZdSdT ZdUdV ZdWdX ZdYdZ Z d[d\ Z!d]d^ Z"d_d` Z#dadb Z$dcdd Z%deS )gLabelzA text label to attach to something else, such as a chart axis.

    This allows you to specify an offset, angle and many anchor
    properties relative to the label's origin.  It allows, for example,
    angled multiline axis labels.
    r;    descr<   dxzdelta x - offsetdyzdelta y - offsetanglezDangle of label: default (0), 90 is vertical, 180 is upside down, etc	boxAnchorzanchoring point of the labelboxStrokeColorzborder color of the boxboxStrokeWidthzborder widthboxFillColorzthe filling color of the box	boxTargetnormalantilohiz"one of ('normal','anti','lo','hi')boxRxzbox corner x radiusboxRyzbox corner y radius	fillColorzlabel text colorstrokeColorzlabel text border colorstrokeWidthzlabel text border widthtextzthe actual text to displayfontNamezthe name of the font usedfontSizezthe size of the fontleadingwidthzthe width of the labelmaxWidthz#maximum width the label can grow toheightzthe height of the text
textAnchorz0the anchoring point of the text inside the labelvisible True if the label is to be drawn
topPaddingzpadding at top of boxleftPaddingzpadding at left of boxrightPaddingzpadding at right of boxbottomPaddingzpadding at bottom of boxpaddingzTRBL css like paddinguseAscentDescentz^If True then the font's Ascent & Descent will be used to compute default heights and baseline.customDrawChangerzDAn instance of CustomDrawChanger to modify the behavior at draw time   )rB   _advancedUsageddfNoneOrDirectDrawzA DirectDrawFlowable instanceddfKlassz=A Flowable class for direct drawing (default is XPreformattedddfStylez-A style or style class for a ddfKlass or Nonec                 K   s   | j d*i | | j d*i ddddddddddd	dd
ddddddddddddd dddddddd dd dd dd dd dd dtd dtd dtd dd d!d"d#d$d%d&d'td(t| jd(d d)t| jd)d  d S )+N_textzMulti-Line
StringrF   r>   rE   r   r;   r<   rC   rD   r^   r_   r`   ra   rH         ?rG   rJ   rK   rO   rP   rR   rI   rW   rX   rY   rZ   rQ   rU   rV   rS   g?r[   r'   r\   re   rc   Frg   ri   rj    )_setKeywordsr   r=   getattr	__class__)selfkwrm   rm   d/var/www/html/flask_server/venv/lib/python3.10/site-packages/reportlab/graphics/charts/textlabels.py__init__Q   s   
	
 zLabel.__init__c                 C   s   | j | j| j| jf}tt|}|dkr|d S |dkr2|d |d kr2|d |d kr2|d d S |dkrD|d |d krD|d d S |S )Nre   r   r*      )r^   r`   ra   r_   lenset)rq   pr,   rm   rm   rs   rb   v   s   4$zLabel.paddingc                 C   s   t |\| _| _| _| _d S N)r   r^   r`   ra   r_   )rq   rx   rm   rm   rs   rb      s   c                 C   s
   || _ dS )zpSet the text property.  May contain embedded newline characters.
        Called by the containing chart or axis.N)rk   )rq   rT   rm   rm   rs   setText   s   
zLabel.setTextc                 C   s   || _ || _dS )zSet the origin.  This would be the tick mark or bar top relative to
        which it is defined.  Called by the containing chart or axis.Nr:   )rq   r;   r<   rm   rm   rs   	setOrigin   s   
zLabel.setOriginc                 C   sl   t dd}|tdddtjd t }|dd d|_d|_d|_	d	|_
tj|_|d
 || |S )zyThis shows a label positioned with its top right corner
        at the top centre of the drawing, and rotated 45 degrees.   d   r5      )rQ   r-   r4   r   izAnother
Multi-Line
String)r   addr   r   greenr?   r{   rF   rE   rC   rD   rG   rz   )rq   dlabrm   rm   rs   demo   s   


z
Label.democ                 C   st   | j }|dv r8| j}t|d d d d }|d s0|| d }t|dkr0||dkr-dp.d }t|d	  | }|S )
z,hook for allowing special box anchor effects)autoxautoyih  g     F@r4   r5   r~   r   r9   )rF   rE   intabs_A2BA)rq   barE   nadarm   rm   rs   _getBoxAnchor   s   zLabel._getBoxAnchorc                 C   s>   | j rt| j| j\| _| _| j| j| j  | _d S d| _d S )Ng?)rc   r   rU   rV   _ascent_descent_baselineRatiorq   rm   rm   rs   _getBaseLineRatio   s   
zLabel._getBaseLineRatioc                 C   s   | j p
|| j | j | _| j| j | j | _| j| j | j | _| 	 }|dv r.| j | _
n|dv r:| j| j | _
nd| j | _
| j
| j | _|dv rS| j| j | _n|dv r\| j| _n| j d | _| j| j | _d S )N)r,   r-   r3   )r0   r1   r/   rl   )r-   r.   r/   )r3   r2   r1   )rZ   r^   ra   _height_widthr_   r`   _ewidth_eheightr   _top_bottom_left_right)rq   objHrF   rm   rm   rs   _computeSizeEnd   s    
zLabel._computeSizeEndc                    sh  t  dd }|sdg  _t j j j j _ js: j	 j
  _ jr9 fdd jD  _  jt j7  _n j _    jrJ j _n jrU j j  _n jd  _ jt j }nɈ jd u rmtdtd j j j jd} jstdi |}n/t jtr jjdi |}nt jtrt jtr jdi |}n
t dt j | _!    jrd	|_" j j |_n jrψ jn jd |_|j _ # } jpd
}|dkrt$|_%| j|d}|&|d
\}} jp|j'}t(| |_%| j|d  _)}|&|d
\}} js) j	 j
  _  j|j'7  _n j _ *| d S )Nri   c                    s   g | ]
}t | j jqS rm   )r   rU   rV   ).0liner   rm   rs   
<listcomp>   s    z%Label.computeSize.<locals>.<listcomp>333333?[DirectDrawFlowable class is not available you need the rlextra package as well as reportlabxlabel-generated)namerU   rV   rQ   rR   zddfStyle has invalid type Tr'   stylerm   )+ro   _lineWidthsr   rk   rU   rV   rY   _linesrX   r_   r`   r   maxr   rW   _leadingrc   r   r   rv   rg   RuntimeErrordictrQ   rR   rj   r"   
isinstancer#   clonetype
issubclass
ValueError_styleautoLeading_getTextAnchorr$   	alignmentwrap
_width_max_ta2al_ddfObjr   )rq   ri   r   stytaaWobj_rm   r   rs   computeSize   sp   



zLabel.computeSizec                 C   s   | j }|dkrt|   }|S )z/This can be overridden to allow special effectsboxauto)r[   _BA2TAr   )rq   r   rm   rm   rs   r     s   zLabel._getTextAnchorc                 C   s  | j }|pd| _ |   || _ t }|| j| j | j| j  || j	 t
| dd }|r2| j}n%| j| j| j  }|  }|dkrG| j}n|dkrT| j| jd  }n| j}| js`| jr| jr|t| j| j | j| j | j| j| j| j| j| j| jd	 |rt }||| j| j  || | j  || |S | j!| j"| j#}}	}
| j$| j%| j}}}t
| di }|r| j&D ]}t'||||	|
|}||_!||_$||_%|| ||8 }q|S | j&D ]}t(||||d}||_)|	|_"|
|_#||_!|| ||8 }q|S )	Nr@   ri   r'   r)   rl   )rR   rS   rQ   rxry	_svgAttrs)r   )*rk   r   r   	translater;   rC   r<   rD   rotaterE   ro   r   r   r   r   r   r   r   rI   rG   rH   r   r   r_   r   ra   r   r   rO   rP   r   rg   r   rQ   rU   rV   rR   rS   r   
_text2Pathr   r[   )rq   rk   gri   r;   r<   r[   g1rQ   rU   rV   rR   rS   rW   svgAttrsr   r0   rm   rm   rs   _rawDraw  sn   








zLabel._rawDrawc              	   C   sD   t | dd }|r|d|  z
|  W |d|  S |d|  w |  S )Nrd   TF)ro   r   )rq   rd   rm   rm   rs   drawY  s   
z
Label.drawNrm   )&__name__
__module____qualname____doc__AttrMapAttrMapValuer   r   r   r   r	   r   r
   r   r   r   r   r   r   r   r!   r#   r   _attrMaprt   propertyrb   setterrz   r{   r   r   r   r   r   r   r   r   rm   rm   rm   rs   r?   "   s    		
 !"%%

DAr?   c                   @   sH  e Zd Zed i deedddeedddeedddeedddeedddeeddd	eeddd
eedddeedddeedddeedddeedddeedddeedddeedddeedddeedddeedddee	dddee
ddZdd Zdd Zdd ZdS )!LabelDecoratorr;   r@   rA   r<   rC   rD   rE   rF   rG   rH   rI   rQ   rR   rS   rB   rU   rV   rW   rX   rY   rZ   r[   r\   r]   c                 C   s6   d| _ d| _| j D ]}t| |st| |d  qd S )Nr'   r2   )r[   rF   r   keyshasattrsetattrrq   arm   rm   rs   rt   |  s   zLabelDecorator.__init__c                 C   s>   |j \}}}}}}}	}
}}}}||jj|  || d S ry   )_callOutInforz   categoryAxiscategoryNamesr   )rq   lLchartr   rowNocolNor;   r<   rX   rZ   x00y00x0y0rm   rm   rs   decorate  s   zLabelDecorator.decoratec                 C   sJ   t  }| j D ]\}}|d u rt||d }t||| q| || d S ry   )r?   __dict__itemsro   r   r   )rq   r   r   r   vrm   rm   rs   __call__  s
   zLabelDecorator.__call__Nrm   )r   r   r   r   r   r   r   r   r   r
   r   r   rt   r   r   rm   rm   rm   rs   r   d  s^    	
r   highlowbaraxisc                   @   sL   e Zd Z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 )LabelOffsetzWhere to base +ve offsetrA   zValue for positive elementszWhere to base -ve offsetzValue for negative elements)posModeposnegModenegc                 C   s   d | _ | _d | _| _d S )Nr   r   )r   r   r   r   r   rm   rm   rs   rt     s   zLabelOffset.__init__c           
      C   s   |j }|j}|j}|dkr| j}| j}n| j}| j}|r |j}n|j}|rM|r+|j}	n|j}	|dkr;|	|j	 }|| S |dkrE|	}|| S |dkrM|	| }|| S )Nr   r   r   r   )
_flipXYr   joinAxisr   r   r   r   _x_y_length)
rq   r   valflipXYAjAmodedeltar   _vrm   rm   rs   	_getValue  s0   
zLabelOffset._getValueN)
r   r   r   r   r   isOffsetModer   r   rt   r  rm   rm   rm   rs   r     s    



r   c                   @   s.   e Zd ZeedZdd Zdd Zdd ZdS )	PMVLabelBASEc                 K   s   t j| fi | d| _d S Nr   )r?   rt   _pmvrq   kwdsrm   rm   rs   rt     s   
zPMVLabel.__init__c              
   C   s4   t | }| jdk rdddddddd	d
d	| }|S )Nr   r/   r0   r1   r.   r>   r2   r-   r,   r3   )	r3   r,   r-   r2   r>   r.   r1   r0   r/   )r?   r   r  r   rm   rm   rs   r     s   
&zPMVLabel._getBoxAnchorc                 C   s(   t | }| jdk rdddd| }|S )Nr   r(   r)   r'   )r'   r)   r(   )r?   r   r  r   rm   rm   rs   r     s   
zPMVLabel._getTextAnchorN)	r   r   r   r   r?   r   rt   r   r   rm   rm   rm   rs   r    s    r  c                   @   sj   e Zd ZdZeeeeddeeddee	ddee	ddee
ddeedd	d
dddddZdd ZdS )BarChartLabelF
    An extended Label allowing for nudging, lines visibility etc
    zNon-zero for a drawn linerA   zColor for a drawn linezNone or fixed draw ends +/-zNone or fixed draw starts +/-zNon-zero sign dependent nudgerK   rL   rM   rN   midz(one of ('normal','anti','lo','hi','mid'))r  lineStrokeWidthlineStrokeColorfixedEnd
fixedStartnudgerJ   c                 K   s4   t j| fi | d| _d | _d  | _| _d| _d S r  )r  rt   r  r  r  r  r  r	  rm   rm   rs   rt     s
   
zBarChartLabel.__init__N)r   r   r   r   r   r  r   r   r   NoneOrInstanceOfLabelOffsetr   r   r   rt   rm   rm   rm   rs   r    s    





r  c                   @   s,   e Zd ZdZeeeedddZdd Z	dS )NA_Labelr  zText to be used for N/A valuesrA   )r  rT   c                 C   s   t |  d| _d S )Nzn/a)r  rt   rT   r   rm   rm   rs   rt        

zNA_Label.__init__N)
r   r   r   r   r   r  r   r   r   rt   rm   rm   rm   rs   r    s    
r  )CustomDrawChangerc                   @   s"   e Zd ZejfddZdd ZdS )RedNegativeChangerc                 C   s   t |  || _d S ry   )r  rt   rQ   )rq   rQ   rm   rm   rs   rt     r  zRedNegativeChanger.__init__c                 C   s&   i }|j dr|j|d< | j|_|S )N-rQ   )rk   
startswithrQ   )rq   r   Rrm   rm   rs   _changer  s
   
zRedNegativeChanger._changerN)r   r   r   r   redrt   r  rm   rm   rm   rs   r    s    r  c                   @   s"   e Zd ZdZeedZdd ZdS )XLabelz=like label but uses XPreFormatted/Paragraph to draw the _textr  c                 O   s:   t j| g|R i | |dt| _|d| j| _d S )Nri   directDrawClass)r?   rt   popr    ri   rg   )rq   argsr
  rm   rm   rs   rt     s   zXLabel.__init__Fc                 O   sL   | dt| _| dt}|d u rtd|| _tj| g|R i | d S )NflowableClassr  r   )r  r    _flowableClassr=   r   _ddfr?   rt   )rq   r   r
  rg   rm   rm   rs   rt     s   c                 C   s$  g | _ td| j| j| j| jd }| _|   | jr%d|_	| j
| j |_n| jr+| jn| jd |_|j| _|  }| jp=d}|dkr[t|_| j| j|d}||d\}}| jpZ|j}t| |_| j| j|d | _}||d\}}| js| j| j | _|  j| jj7  _n| j| _| | d S )Nr   )rU   rV   rQ   rR   Tr   r   r'   r   )r   r"   rU   rV   rQ   rR   r   r   rc   r   r   r   rW   r   r   rY   r$   r   r"  rk   r   r   r   _objrX   r_   r`   r   r   )rq   r   r   r   r   r   r   rm   rm   rs   r   	  s8   

zXLabel.computeSizec                 C   s   | j }|pd| _ |   || _ t }|| j| j | j| j  || j	 | j
}| js2| jrM| jrM|t| j
| j | j| j | j| j| j| j| jd t }||| j| j  || | j || |S )Nr@   )rR   rS   rQ   )rk   r   r   r   r;   rC   r<   rD   r   rE   r   rI   rG   rH   r   r   r_   r   ra   r   r   r   r   r#  r$  )rq   rk   r   r;   r   rm   rm   rs   r   +  s,   


zXLabel._rawDrawN)
r   r   r   r   r   r?   r   rt   r   r   rm   rm   rm   rs   r    s
    
r  )G__version__reportlab.libr   reportlab.lib.utilsr   reportlab.lib.geomutilsr   reportlab.lib.validatorsr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   reportlab.lib.attrmapreportlab.pdfbase.pdfmetricsr   r   reportlab.graphics.shapesr   r   r   r   r   r   reportlab.graphics.widgetbaser   r   r   reportlab.platypusr    r!   reportlab.lib.stylesr"   r#   reportlab.lib.enumsr$   r%   r&   r   r   utilsr+   r   r   rlextra.graphics.canvasadapterr=   ImportErrorr   r?   r   r  r   r  r  r  r  NoneOrInstanceOfNA_Labelreportlab.graphics.charts.utilsr  r  r  rm   rm   rm   rs   <module>   sL   D   D*&