o
    kƒU[žK  ã                   @   s  d Z ddlZddlmZ ddlmZmZ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 ddlT ddlmZmZ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#m$Z$ dd
l%m&Z&m'Z' ddlm(Z( dZ)ddddddddddœ	ddddddddddœ	dœZ*dd„ Z+d7dd„Z,dde(ddddfdd„Z-dde(ddddfdd „Z.dddd!d!d!d"d"d"d#œ	Z/G d$d%„ d%e&ƒZ0G d&d'„ d'ƒZ1ed(d)d*d+ƒZ2G d,d-„ d-e'ƒZ3eee3ƒƒZ4G d.d/„ d/e0ƒZ5G d0d1„ d1e5ƒZ6G d2d3„ d3e6ƒZ7eee7ƒƒZ8dd4l9m:Z: G d5d6„ d6e:ƒZ;dS )8z3.3.0é    N)Úcolors)ÚsimpleSplitÚ_simpleSplitÚisBytes)ÚisNumberÚisNumberOrNoneÚOneOfÚisColorOrNoneÚisStringÚisTextAnchorÚisBoxAnchorÚ	isBooleanÚNoneOrÚisInstanceOfÚisNoneOrStringÚisNoneOrCallable)Ú*)ÚstringWidthÚgetAscentDescentÚgetFontÚ
unicode2T1)ÚDrawingÚGroupÚCircleÚRectÚStringÚSTATE_DEFAULTS)Ú_PATH_OP_ARG_COUNTÚ_PATH_OP_NAMESÚ
definePath)ÚWidgetÚ
PropHolder)Ú_baseGFontNameÚnÚneÚeÚseÚsÚswÚwÚnw)	r   é-   éZ   é‡   é´   éá   i  i;  éÓÿÿÿ©ÚxÚyc                 C   s   t | ƒ| kr
t | ƒS t| dƒS )Né   )ÚintÚround)r#   © r7   úV/var/www/html/env/lib/python3.10/site-packages/reportlab/graphics/charts/textlabels.pyÚ_pathNumTrunc   s   
r9   é   c              	   C   sn  g }g }g }| r#t | ƒdkr#| d d dkr#d| d dd …  f|  } | d D ]�}|d }|r¦|dv r¦|d dkro|dd … }|rdtdt |ƒdƒD ]}|||d … \||d < ||< qI| ¡  | ¡  | dd	¡ | d
¡ d}|rzttt|ƒƒ}|D ]%}	|tt	 
|	¡  }
|	d
kr‘| |	¡ n| |	ft|||
… ƒ ¡ |
}q|g }g }| |¡ | |dd … ¡ q'|S )Nr:   r   ÚlineTo)ÚmoveToClosed))Úend)ÚmoveTor<   r=   r<   é   r>   Ú	closePath)ÚlenÚrangeÚreverseÚinsertÚappendÚlistÚmapr9   r   r   ÚindexÚtupleÚextend)ÚGÚtruncateÚpathReverseÚOÚPÚRÚgÚopÚiÚoÚjr7   r7   r8   Ú_processGlyph   s<    "

rV   iè  Ústartc                 C   sì  ddl m}m}	 t|ƒ}
|
jr|
jstd| ƒ‚g }|dks7t| ||ƒ}|dkr-|| }n
|dkr7||d  }|	 dd¡}| 	|||¡ |
jr]| 
| ||¡D ]}| t|||d	�¡ qN|S t| ƒr¦z|  d
¡} W n= ty¥ } z1|jdd… \}}t|jd d… d|jd | t|d dƒ|… | ||… | ||d … f f Ž ‚d }~ww |
}t| |
g|
j ƒ}t|ƒd }t|ƒD ]8\}\}}||krÏ| 	||j|¡ |}| 
|||¡D ]}| t|||d	�¡ qÖ||kró|| | |j¡|¡7 }q»|S )Nr   )ÚrenderPMÚ	_renderPMz>_text2PathDescription doesn't support multi byte fonts like %rrW   r=   Úmiddleg       @r:   )rL   rM   Úutf8r?   é   z%s
%s-->%s<--%sé
   )Úreportlab.graphicsrX   rY   r   Ú
_multiByteÚ_dynamicFontÚ
ValueErrorr   ÚgstateÚ_setFontÚ_stringPathrJ   rV   r   ÚdecodeÚUnicodeDecodeErrorÚargsÚmaxr   ÚsubstitutionFontsrA   Ú	enumerateÚfontNameÚencName)Útextr2   r3   rk   ÚfontSizeÚanchorrL   rM   rX   rY   ÚfontrO   ÚtextLenÚ_gsrQ   r%   rS   rU   ÚfcÚFTÚnm1ÚfÚtr7   r7   r8   Ú_text2PathDescription=   sL   
ïP€þ€rx   c           	      K   s$   t t| |||||||d�fi |¤ŽS )N)r2   r3   rk   rn   ro   rL   rM   )r   rx   )	rm   r2   r3   rk   rn   ro   rL   rM   Úkwdsr7   r7   r8   Ú
_text2Pathc   s
   ÿÿrz   r=   rZ   )	r)   r*   r(   r%   r$   r&   r#   r'   Úcc                
   @   sö  e Zd ZdZedRi 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>�“ŽZd?d@„ ZdAdB„ ZdCdD„ ZdEdF„ ZdGdH„ ZdIdJ„ ZdKdL„ ZdMdN„ ZdOdP„ ZdQS )SÚLabelzïA 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.
    r2   Ú ©Údescr3   Ú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')Ú	fillColorzlabel text colorÚstrokeColorzlabel text border colorÚstrokeWidthzlabel text border widthrm   zthe actual text to displayrk   zthe name of the font usedrn   z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Ú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 timer:   )r   Ú_advancedUsagec                 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td “dtd “dtd “dd“dd “d!d"“d#d$“Ž d S )&NÚ_textzMulti-Line
Stringrƒ   r{   r‚   r   r2   r3   r€   r�   r–   r—   r˜   r™   r…   ç      à?r„   r‡   rˆ   r�   r†   r�   r�   r‘   r’   rŒ   rk   rn   rŽ   gš™™™™™¹?r“   rW   r”   r:   rš   Fr7   )Ú_setKeywordsr   )ÚselfÚkwr7   r7   r8   Ú__init__’   sp   
ÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåzLabel.__init__c                 C   s
   || _ dS )zpSet the text property.  May contain embedded newline characters.
        Called by the containing chart or axis.N)r�   )r    rm   r7   r7   r8   ÚsetText²   s   
zLabel.setTextc                 C   s   || _ || _dS )z‰Set the origin.  This would be the tick mark or bar top relative to
        which it is defined.  Called by the containing chart or axis.Nr1   )r    r2   r3   r7   r7   r8   Ú	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   r,   r4   )rŒ   r$   r+   r   iìÿÿÿzAnother
Multi-Line
String)r   Úaddr   r   Úgreenr|   r¤   rƒ   r‚   r€   r�   r„   r£   )r    ÚdÚlabr7   r7   r8   Ú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@r+   r,   r4   r   r0   éÿÿÿÿ)rƒ   r‚   r5   ÚabsÚ_A2BA)r    Úbar‚   ÚnaÚdar7   r7   r8   Ú_getBoxAnchorÔ   s   zLabel._getBoxAnchorc                    sº  g ˆ _ ˆ j}ˆ j}ˆ j}ˆ j}tˆ jˆ jˆ jˆ j	ƒˆ _
ˆ js<|| ˆ _ˆ j
r;‡ fdd„ˆ j
D ƒˆ _ ˆ  jtˆ j ƒ7  _nˆ jˆ _ˆ jrYtˆ jˆ jƒ\ˆ _ˆ _ˆ jˆ jˆ j  ˆ _ndˆ _ˆ jrdˆ jˆ _nˆ jroˆ jˆ j ˆ _nˆ jd ˆ _ˆ jpƒˆ jtˆ j
ƒ | | ˆ _ˆ j| | ˆ _ˆ j| | ˆ _ˆ  ¡ }|dv r¢| ˆ _n|dv r­ˆ j| ˆ _ndˆ j ˆ _ˆ jˆ j ˆ _|dv rÅ|ˆ j ˆ _n|d	v rÍ|ˆ _nˆ j d ˆ _ˆ jˆ j ˆ _d S )
Nc                    s   g | ]
}t |ˆ jˆ jƒ‘qS r7   )r   rk   rn   )Ú.0Úline©r    r7   r8   Ú
<listcomp>ì   s    z%Label.computeSize.<locals>.<listcomp>g«ªªªªªê?g333333ó?)r#   r$   r*   )r'   r(   r&   rž   )r$   r%   r&   )r*   r)   r(   )Ú_lineWidthsr–   r—   r˜   r™   r   r�   rk   rn   r‘   Ú_linesr�   Ú_widthrh   rš   r   Ú_ascentÚ_descentÚ_baselineRatior�   Ú_leadingr’   rA   Ú_heightÚ_ewidthÚ_eheightr´   Ú_topÚ_bottomÚ_leftÚ_right)r    r–   r—   r˜   r™   rƒ   r7   r·   r8   ÚcomputeSizeá   sL   
€
 
zLabel.computeSizec                 C   s   | j }|dkrt|  ¡  }|S )z/This can be overridden to allow special effectsÚboxauto)r“   Ú_BA2TAr´   )r    Útar7   r7   r8   Ú_getTextAnchor  s   zLabel._getTextAnchorc                 C   sª  | j }|pd| _ |  ¡  || _ tƒ }| | j| j | j| j ¡ | | j	¡ | j
| j| j  }|  ¡ }|dkr;| j}n|dkrH| j| jd  }n| j}| jsT| jro| jro| t| j| j | j| j | j| j| j| j| jd�¡ | j| j| j}}}| j| j| j}	}
}t | di ƒ}|	r°| j!D ]}t"||||||ƒ}||_|	|_|
|_| |¡ ||8 }q�|S | j!D ]}t#||||d�}||_$||_||_||_| |¡ ||8 }q³|S )Nr}   rW   rZ   rž   )r�   rŽ   rŒ   Ú	_svgAttrs)rÌ   )%r�   rÇ   r   Ú	translater2   r€   r3   r�   Úrotater‚   rÃ   r¿   r¾   rË   rÅ   rÁ   rÆ   r†   r„   r…   r§   r   r—   rÄ   r™   r»   rÀ   rŒ   rk   rn   r�   rŽ   Úgetattrrº   rz   r   r“   )r    r�   rQ   r3   r“   r2   rŒ   rk   rn   r�   rŽ   r�   ÚsvgAttrsr¶   r'   r7   r7   r8   Ú_rawDraw  sX   

ú	



÷

zLabel._rawDrawc              	   C   sD   t | dd ƒ}|r|d| ƒ z
|  ¡ W |d| ƒ S |d| ƒ w |  ¡ S )Nr›   TF)rÏ   rÑ   )r    r›   r7   r7   r8   ÚdrawJ  s   
z
Label.drawNr7   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚAttrMapÚAttrMapValuer   r   r	   r   r
   r   r   r   r   Ú_attrMapr¢   r£   r¤   r«   r´   rÇ   rË   rÑ   rÒ   r7   r7   r7   r8   r|   i   sˆ    	ÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåä .5r|   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 )!ÚLabelDecoratorr2   r}   r~   r3   r€   r�   r‚   rƒ   r„   r…   r†   rŒ   r�   rŽ   r   rk   rn   r�   r�   r‘   r’   r“   r”   r•   c                 C   s6   d| _ d| _| j ¡ D ]}t| |ƒst| |d ƒ qd S )NrW   r)   )r“   rƒ   rÙ   ÚkeysÚhasattrÚsetattr©r    Úar7   r7   r8   r¢   m  s   €ÿzLabelDecorator.__init__c                 C   s>   |j \}}}}}}}	}
}}}}| |jj| ¡ | |¡ d S ©N)Ú_callOutInfor£   ÚcategoryAxisÚcategoryNamesr§   )r    ÚlÚLÚchartrQ   ÚrowNoÚcolNor2   r3   r�   r’   Úx00Úy00Úx0Úy0r7   r7   r8   Údecorates  s   zLabelDecorator.decoratec                 C   sV   ddl m} tƒ }| j ¡ D ]\}}|d u rt||d ƒ}t|||ƒ q|  ||¡ d S )Nr   )Údeepcopy)Úcopyrî   r|   Ú__dict__ÚitemsrÏ   rÝ   rí   )r    rä   rî   rå   rß   Úvr7   r7   r8   Ú__call__x  s   zLabelDecorator.__call__Nr7   )rÓ   rÔ   rÕ   r×   rØ   r   r   r	   r   r   r   rÙ   r¢   rí   ró   r7   r7   r7   r8   rÚ   U  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 offsetr~   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·   r7   r7   r8   r¢   ˆ  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)
r    ræ   ÚvalÚflipXYÚAÚjAÚmodeÚdeltarò   Ú_vr7   r7   r8   Ú	_getValueŒ  s0   
üþzLabelOffset._getValueN)
rÓ   rÔ   rÕ   r×   rØ   ÚisOffsetModer   rÙ   r¢   r	  r7   r7   r7   r8   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                 C   ó   t  | ¡ d| _d S ©Nr   )r|   r¢   Ú_pmvr·   r7   r7   r8   r¢   ®  ó   

zPMVLabel.__init__c              
   C   s4   t  | ¡}| jdk rdddddddd	d
dœ	| }|S )Nr   r&   r'   r(   r%   r{   r)   r$   r#   r*   )	r*   r#   r$   r)   r{   r%   r(   r'   r&   )r|   r´   r  rÞ   r7   r7   r8   r´   ²  s   
&zPMVLabel._getBoxAnchorc                 C   s(   t  | ¡}| jdk rddddœ| }|S )Nr   r=   rZ   rW   )rW   rZ   r=   )r|   rË   r  rÞ   r7   r7   r8   rË   ·  s   
zPMVLabel._getTextAnchorN)	rÓ   rÔ   rÕ   r×   r|   rÙ   r¢   r´   rË   r7   r7   r7   r8   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 )ÚBarChartLabelúF
    An extended Label allowing for nudging, lines visibility etc
    zNon-zero for a drawn liner~   zColor for a drawn linezNone or fixed draw ends +/-zNone or fixed draw starts +/-zNon-zero sign dependent nudgerˆ   r‰   rŠ   r‹   Úmidz(one of ('normal','anti','lo','hi','mid'))r  ÚlineStrokeWidthÚlineStrokeColorÚfixedEndÚ
fixedStartÚnudger‡   c                 C   s,   t  | ¡ d| _d | _d  | _| _d| _d S r  )r  r¢   r  r  r  r  r  r·   r7   r7   r8   r¢   Ê  s
   

zBarChartLabel.__init__N)rÓ   rÔ   rÕ   rÖ   r×   r  rØ   r   r	   ÚNoneOrInstanceOfLabelOffsetr   r   rÙ   r¢   r7   r7   r7   r8   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 valuesr~   )r  rm   c                 C   r  )Nzn/a)r  r¢   rm   r·   r7   r7   r8   r¢   Ù  r  zNA_Label.__init__N)
rÓ   rÔ   rÕ   rÖ   r×   r  rØ   r   rÙ   r¢   r7   r7   r7   r8   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 rà   )r  r¢   rŒ   )r    rŒ   r7   r7   r8   r¢   à  r  zRedNegativeChanger.__init__c                 C   s&   i }|j  d¡r|j|d< | j|_|S )Nú-rŒ   )r�   Ú
startswithrŒ   )r    ÚobjrP   r7   r7   r8   Ú_changerã  s
   
zRedNegativeChanger._changerN)rÓ   rÔ   rÕ   r   Úredr¢   r   r7   r7   r7   r8   r  ß  s    r  )r:   r   )<Ú__version__ÚstringÚreportlab.libr   Úreportlab.lib.utilsr   r   r   Úreportlab.lib.validatorsr   r   r   r	   r
   r   r   r   r   r   r   r   Úreportlab.lib.attrmapÚreportlab.pdfbase.pdfmetricsr   r   r   r   Úreportlab.graphics.shapesr   r   r   r   r   r   r   r   r   Úreportlab.graphics.widgetbaser    r!   r"   rr   r°   r9   rV   rx   rz   rÉ   r|   rÚ   r
  rø   r  r  r  r  ÚNoneOrInstanceOfNA_LabelÚreportlab.graphics.charts.utilsr  r  r7   r7   r7   r8   Ú<module>   sH   8 þ
!
ÿ&
ÿ m+&